Find this useful? Enter your email to receive occasional updates for securing PHP code.

Signing you up...

Thank you for signing up!

PHP Decode

$_F=__FILE__;$_X='P1dNP1hwWGJaKmJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJy..

Decoded Output download

?><?php
/*
=====================================================
 DataLife Engine - by SoftNews Media Group 
-----------------------------------------------------
 https://dle-news.ru/
-----------------------------------------------------
 Copyright (c) 2004-2023 SoftNews Media Group
=====================================================
 This code is protected by copyright
=====================================================
 File: filesystem.class.php
-----------------------------------------------------
 Use: DLE Files System
=====================================================
*/

use League\Flysystem\Filesystem;
use League\Flysystem\Local\LocalFilesystemAdapter;
use League\Flysystem\Ftp\FtpAdapter;
use League\Flysystem\Ftp\FtpConnectionProvider;
use League\Flysystem\Ftp\FtpConnectionOptions;
use League\Flysystem\PhpseclibV3\SftpConnectionProvider;
use League\Flysystem\PhpseclibV3\SftpAdapter;
use League\Flysystem\UnixVisibility\PortableVisibilityConverter;
use League\Flysystem\FilesystemException;
use League\Flysystem\WebDAV\WebDAVAdapter;
use Sabre\DAV\Client as WebDAVClient;

if( !defined( 'DATALIFEENGINE' ) ) {
	header( "HTTP/1.1 403 Forbidden" );
	header ( 'Location: ../../' );
	die( "Hacking attempt!" );
}

abstract class DLEFiles {

	private static $root = null;

	private static $local_on_remote_errors = null;
	private static $run_force_local = false;
	private static $base_local_url = '';
	
	public static $driver = null;	
	public static $error  = null;
	public static $remote_error = null;

	private static $storages = null;
	private static $filesystem = array();
	private static $storages_list = null;

	public static function init( $driver = null, $local_on_remote_errors = false, $root = null ) {
		global $config;

		self::$error = self::$remote_error = null;
		
		if( !is_array( self::$storages ) ) {
			self::$storages = self::loadStorages();
		}

		if( is_null( $root ) ) {
			
			self::$root = ROOT_DIR.'/uploads/';
			self::$base_local_url = $config['http_home_url'] . 'uploads/';
			
		} else {
			
			$root = self::normalize_path( $root );
			
			if( $root ) {
				self::$root = ROOT_DIR.'/'. $root .'/';
				self::$base_local_url = $config['http_home_url'] . $root .'/';
			} else {
				self::$root = ROOT_DIR.'/';
				self::$base_local_url = $config['http_home_url'];
			}
			
		}
		
		if( is_null( $driver ) ) {

			self::$driver = self::$storages['default'];
			
		} elseif ( $driver ) {

			$driver = intval($driver);
			if( isset( self::$storages[$driver] ) ) self::$driver = $driver;
			else self::$driver = self::$storages['default'];
			
		}
			
		if( self::$driver > 0 AND $local_on_remote_errors ) {
			self::$local_on_remote_errors = true;
		}

		if( !isset( self::$filesystem[0] ) ) {

			try {

				$visibilityConverter = PortableVisibilityConverter::fromArray([
					'file' => [
						'public' => 0666,
						'private' => 0644
					],
					'dir' => [
						'public' => 0777,
						'private' => 0755
					]
				], "public");

				$adapter = new LocalFilesystemAdapter(self::$root, $visibilityConverter, LOCK_EX, LocalFilesystemAdapter::DISALLOW_LINKS);

				self::$filesystem[0] = new Filesystem($adapter, ['public_url' => self::$base_local_url, 'directory_visibility' => "public", 'visibility' => "public"]);
			} catch (Throwable $e) {

				self::error($e->getMessage());
				return false;
			} catch (FilesystemException $e) {
				self::error($e->getMessage());
				return false;
			}

		}

		if( self::$driver > 0  AND isset( self::$storages[self::$driver] )  ) {

			if( !isset(self::$filesystem[self::$driver]) ) {
				$adapter_info = self::$storages[self::$driver];

				if (!in_array($adapter_info['accesstype'], array("public", "private"))) {
					$adapter_info['accesstype'] = "public";
				}

				$visibilityConverter = PortableVisibilityConverter::fromArray([
					'file' => [
						'public' => 0666,
						'private' => 0644
					],
					'dir' => [
						'public' => 0777,
						'private' => 0755
					]
				], $adapter_info['accesstype']);


				try {

					$adapter_info['path'] = trim($adapter_info['path']);

					if ($adapter_info['path'] and  $adapter_info['type'] == '1' or $adapter_info['type'] == '2') {

						if (!$adapter_info['path']) $adapter_info['path'] = '/';
						else $adapter_info['path'] = '/' . trim($adapter_info['path'], '\\/') . '/';
					
					} elseif( $adapter_info['path'] ) {
						
						$adapter_info['path'] = trim($adapter_info['path'], '\\/');
					}

					if ($adapter_info['type'] == '1') {

						$adapter = new FtpAdapter(
							// Connection options
							FtpConnectionOptions::fromArray([
								'host' => $adapter_info['connect_url'],
								'port' => intval($adapter_info['connect_port']),
								'root' => $adapter_info['path'],
								'username' => $adapter_info['username'],
								'password' => $adapter_info['password'],
								'timeout' => 5
							]),
							null,
							null,
							$visibilityConverter
						);
					} elseif ($adapter_info['type'] == '2') {

						$adapter = new SftpAdapter(
							new SftpConnectionProvider(
								$adapter_info['connect_url'],
								$adapter_info['username'],
								$adapter_info['password'],
								null, // private key (optional, default: null) can be used instead of password, set to null if password is set
								null, // passphrase (optional, default: null), set to null if privateKey is not used or has no passphrase
								intval($adapter_info['connect_port']),
								false, // use agent (optional, default: false)
								5, // timeout (optional, default: 10)
								0, // max tries (optional, default: 4)
								null, // host fingerprint (optional, default: null),
								null
							),
							$adapter_info['path'],
							$visibilityConverter
						);
					} elseif ($adapter_info['type'] == '3') {

						$clientoptions = [];

						if (trim($adapter_info['client_key']) and trim($adapter_info['secret_key'])) {

							$clientoptions['accessKeyId'] = trim($adapter_info['client_key']);
							$clientoptions['accessKeySecret'] = trim($adapter_info['secret_key']);
						}

						if (trim($adapter_info['region'])) {
							$clientoptions['region'] = trim($adapter_info['region']);
						}

						$clientoptions['sharedCredentialsFile'] = '';
						$clientoptions['sharedConfigFile'] = '';

						$client = new AsyncAws\SimpleS3\SimpleS3Client($clientoptions);

						$adapter = new League\Flysystem\AsyncAwsS3\AsyncAwsS3Adapter($client, $adapter_info['bucket'], $adapter_info['path'], new League\Flysystem\AsyncAwsS3\PortableVisibilityConverter($adapter_info['accesstype']));
					} elseif ($adapter_info['type'] == '4' or $adapter_info['type'] == '5') {

						if ($adapter_info['type'] == '4') {
							$clientoptions = ['endpoint' => 'https://storage.yandexcloud.net'];
						} else {
							$clientoptions = ['endpoint' => $adapter_info['connect_url']];
						}

						if (trim($adapter_info['client_key']) and trim($adapter_info['secret_key'])) {

							$clientoptions['accessKeyId'] = trim($adapter_info['client_key']);
							$clientoptions['accessKeySecret'] = trim($adapter_info['secret_key']);
						}

						if (trim($adapter_info['region'])) {
							$clientoptions['region'] = trim($adapter_info['region']);
						}

						$clientoptions['sharedCredentialsFile'] = '';
						$clientoptions['sharedConfigFile'] = '';

						$client = new AsyncAws\SimpleS3\SimpleS3Client($clientoptions);

						$adapter = new League\Flysystem\AsyncAwsS3\AsyncAwsS3Adapter($client, $adapter_info['bucket'], $adapter_info['path'], new League\Flysystem\AsyncAwsS3\PortableVisibilityConverter($adapter_info['accesstype']));
					} elseif ($adapter_info['type'] == '6') {

						$client = new WebDAVClient([
							'baseUri' => trim($adapter_info['connect_url']),
							'userName' => trim($adapter_info['username']),
							'password' => trim($adapter_info['password']),
						]);

						$adapter = new WebDAVAdapter($client);
					
					} else {

						self::$driver = 0;
						return false;
					}
					
					$adapter_config = ['directory_visibility' => $adapter_info['accesstype'], 'visibility' => $adapter_info['accesstype']];

					if( trim($adapter_info['http_url']) ) {
						$adapter_config['public_url'] = $adapter_info['http_url'];
					}

					self::$filesystem[self::$driver] = new Filesystem($adapter, $adapter_config );

				} catch (Throwable $e) {

					self::error($e->getMessage());
					return false;
				} catch (FilesystemException $e) {
					self::error($e->getMessage());
					return false;
				}
			}
			
		} else self::$driver = 0;

		return true;
	
	}
	
	public static function Read( $path, $driver = null ) {
		
		if( is_null( self::$driver ) ) {
			DLEFiles::init();
		}

		if( is_null( $driver ) ) $driver = self::$driver;

		if (!isset(self::$filesystem[$driver]) OR !is_object(self::$filesystem[$driver])) {
			DLEFiles::init($driver);
			
			if (!is_object(self::$filesystem[$driver])) {
				$driver = self::$storages['default'];
			}

		}
		
		$path = self::normalize_path( $path );

		if( is_object(self::$filesystem[$driver]) ) {
			
			try {
				
				return self::$filesystem[$driver]->read($path);
			
			} catch(Throwable $e) {
					
				self::error( $e->getMessage() );
				
			} catch (FilesystemException $e) {
				
				self::error( $e->getMessage() );
			}
		
		}
		
		return false;
		
	}
	
	public static function Save( $path, $contents, $driver = null ) {

		if (is_null(self::$driver)) {
			DLEFiles::init();
		}

		if (is_null($driver)) $driver = self::$driver;

		if (!isset(self::$filesystem[$driver]) OR !is_object(self::$filesystem[$driver])) {

			DLEFiles::init($driver);

			if (!is_object(self::$filesystem[$driver])) {
				$driver = self::$storages['default'];
			}

		}
		
		$path = self::normalize_path( $path );
		
		if( is_object(self::$filesystem[$driver]) ) {
			
			try {

				self::$filesystem[$driver]->write($path, $contents);
				return true;
			
			} catch(Throwable $e) {
					
				self::error( $e->getMessage() );
				
			} catch (FilesystemException $e) {
				
				self::error( $e->getMessage() );
				
			}
		
		}
		
		if( self::$run_force_local ) {
			
			try {

				self::$filesystem[0]->write($path, $contents);
				return true;
			
			} catch(Throwable $e) {
				
				self::error( $e->getMessage() );
				
			} catch (FilesystemException $e) {
				
				self::error( $e->getMessage() );

			}

			self::$run_force_local = false;
		
		}
		
		return false;
		
	}

	public static function FileExists( $path, $driver = null ) {

		if (is_null(self::$driver)) {
			DLEFiles::init();
		}

		if (is_null($driver)) $driver = self::$driver;

		if (!isset(self::$filesystem[$driver]) OR !is_object(self::$filesystem[$driver])) {
			DLEFiles::init($driver);

			if (!is_object(self::$filesystem[$driver])) {
				$driver = self::$storages['default'];
			}

		}
		
		$path = self::normalize_path( $path );

		if( is_object(self::$filesystem[$driver]) ) {
			
			try {
				
				return self::$filesystem[$driver]->fileExists($path);
			
			} catch(Throwable $e) {
					
				self::error( $e->getMessage() );

			} catch (FilesystemException $e) {
				
				self::error( $e->getMessage() );
			}
		
		}
		
		return false;
		
	}

	public static function Size( $path, $driver = null ) {

		if (is_null(self::$driver)) {
			DLEFiles::init();
		}

		if (is_null($driver)) $driver = self::$driver;

		if (!isset(self::$filesystem[$driver]) OR !is_object(self::$filesystem[$driver])) {
			DLEFiles::init($driver);

			if (!is_object(self::$filesystem[$driver])) {
				$driver = self::$storages['default'];
			}

		}
		
		$path = self::normalize_path( $path );

		if( is_object(self::$filesystem[$driver]) ) {
			
			try {
				
				return self::$filesystem[$driver]->fileSize($path);
			
			} catch(Throwable $e) {
					
				self::error( $e->getMessage() );
				
			} catch (FilesystemException $e) {
				
				self::error( $e->getMessage() );
				
			}
		
		}
		
		return 0;
		
	}

	public static function Checksum($path, $driver = null)
	{

		if (is_null(self::$driver)) {
			DLEFiles::init();
		}

		if (is_null($driver)) $driver = self::$driver;

		if ( !is_object(self::$filesystem[$driver]) ) {
			DLEFiles::init($driver);
		}

		$path = self::normalize_path($path);

		if ( is_object(self::$filesystem[$driver]) ) {

			try {

				return self::$filesystem[$driver]->checksum($path);

			} catch (Throwable $e) {

				self::error($e->getMessage());

			} catch (FilesystemException $e) {

				self::error($e->getMessage());
			}
		}

		return '';
	}

	public static function Delete( $path, $driver = null ) {

		if (is_null(self::$driver)) {
			DLEFiles::init();
		}

		if (is_null($driver)) $driver = self::$driver;

		if (!isset(self::$filesystem[$driver]) OR !is_object(self::$filesystem[$driver])) {
			DLEFiles::init($driver);

			if (!is_object(self::$filesystem[$driver])) {
				$driver = self::$storages['default'];
			}

		}
		
		$path = self::normalize_path( $path );

		if( is_object(self::$filesystem[$driver]) ) {
			
			try {
				
				return self::$filesystem[$driver]->delete($path);
			
			} catch(Throwable $e) {
					
				self::error( $e->getMessage() );
				
			} catch (FilesystemException $e) {
				
				self::error( $e->getMessage() );
			}
		
		}
		
		return false;
		
	}
	
	public static function ReadStream( $path, $driver = null ) {

		if (is_null(self::$driver)) {
			DLEFiles::init();
		}

		if (is_null($driver)) $driver = self::$driver;

		if (!isset(self::$filesystem[$driver]) OR !is_object(self::$filesystem[$driver])) {
			DLEFiles::init($driver);

			if (!is_object(self::$filesystem[$driver])) {
				$driver = self::$storages['default'];
			}

		}
		
		$path = self::normalize_path( $path );
		
		if( is_object(self::$filesystem[$driver]) ) {
			
			try {
				
				return self::$filesystem[$driver]->readStream($path);
			
			} catch(Throwable $e) {
					
				self::error( $e->getMessage() );
				
			} catch (FilesystemException $e) {
				
				self::error( $e->getMessage() );
			}
		
		}
		
		return false;
		
	}
	
	public static function WriteStream( $path, $stream, $driver = null ) {

		if (is_null(self::$driver)) {
			DLEFiles::init();
		}

		if (is_null($driver)) $driver = self::$driver;

		if (!isset(self::$filesystem[$driver]) OR !is_object(self::$filesystem[$driver])) {
			DLEFiles::init($driver);

			if (!is_object(self::$filesystem[$driver])) {
				$driver = self::$storages['default'];
			}

		}
		
		$path = self::normalize_path( $path );
		
		if( is_object(self::$filesystem[$driver]) ) {
			
			try {

				self::$filesystem[$driver]->writeStream($path, $stream);
				return true;
			
			} catch(Throwable $e) {
					
				self::error( $e->getMessage() );
				
			} catch (FilesystemException $e) {
				
				self::error( $e->getMessage() );
				
			}
		
		}
		
		if( self::$run_force_local ) {
			
			try {

				self::$filesystem[0]->writeStream($path, $stream);
				return true;
			
			} catch(Throwable $e) {
				
				self::error( $e->getMessage() );
				
			} catch (FilesystemException $e) {
				
				self::error( $e->getMessage() );

			}

			self::$run_force_local = false;
		
		}
		
		return false;
		
	}
	
	public static function Rename( $source, $destination, $driver = null ) {

		if (is_null(self::$driver)) {
			DLEFiles::init();
		}

		if (is_null($driver)) $driver = self::$driver;

		if (!isset(self::$filesystem[$driver]) OR !is_object(self::$filesystem[$driver])) {
			DLEFiles::init($driver);

			if (!is_object(self::$filesystem[$driver])) {
				$driver = self::$storages['default'];
			}

		}
		
		$source = self::normalize_path( $source );
		$destination = self::normalize_path( $destination );
		
		if( is_object(self::$filesystem[$driver]) ) {
			
			try {

				self::$filesystem[$driver]->move($source, $destination);
				return true;
			
			} catch(Throwable $e) {
					
				self::error( $e->getMessage() );
				
			} catch (FilesystemException $e) {
				
				self::error( $e->getMessage() );
				
			}
		
		}
		
		return false;
		
	}
	
	public static function MimeType( $path ) {
		
		$path = self::normalize_path( $path );
		
		try {
			$detector = new League\MimeTypeDetection\ExtensionMimeTypeDetector();
			return $detector->detectMimeTypeFromPath($path);
		
		} catch(Throwable $e) {
				
			self::error( $e->getMessage() );
			
		} catch (FilesystemException $e) {
			
			self::error( $e->getMessage() );
			
		}
		
		return false;
		
	}
	
	public static function ListDirectory( $path, $allowed_ext = null, $driver = null, $recursive = false ) {

		if (is_null(self::$driver)) {
			DLEFiles::init();
		}

		if (is_null($driver)) $driver = self::$driver;

		if (!isset(self::$filesystem[$driver]) OR !is_object(self::$filesystem[$driver])) {
			DLEFiles::init($driver);

			if (!is_object(self::$filesystem[$driver])) {
				$driver = self::$storages['default'];
			}
		}
		
		$path = self::normalize_path( $path );
		$listing = array();

		if( is_object(self::$filesystem[$driver]) ) {
			
			try {

				$listing = self::$filesystem[$driver]->listContents($path)->sortByPath();
				
			} catch(Throwable $e) {
					
				self::error( $e->getMessage() );
				
			} catch (FilesystemException $e) {
				
				self::error( $e->getMessage() );
				
			}
		
		}

		$array = array('dirs' => array(), 'files' => array());

		foreach ($listing as $item) {
			
			if( $path == $item->path() ) continue;
			
			$path_info = $item->path();
			
			$finfo = pathinfo( $path_info );
			$name = $finfo['basename'];
			
			if ($item instanceof \League\Flysystem\FileAttributes) {
					
				if( is_array( $allowed_ext ) ) {
					$ext = strtolower($finfo['extension']);
					if(!$ext OR !in_array( $ext, $allowed_ext )) continue;
				}
				
				$array['files'][] = array('path' => $path_info, 'name' => $name, 'size' => $item->fileSize() );
			
			} elseif ($item instanceof \League\Flysystem\DirectoryAttributes) {

				$array['dirs'][] = array('path' => $path_info, 'name' => $name );

			}
		}
	
		return $array;
		
	}

	public static function DeleteDirectory( $path, $driver = null ) {

		if (is_null(self::$driver)) {
			DLEFiles::init();
		}

		if (is_null($driver)) $driver = self::$driver;

		if (!isset(self::$filesystem[$driver]) OR !is_object(self::$filesystem[$driver])) {
			DLEFiles::init($driver);

			if (!is_object(self::$filesystem[$driver])) {
				$driver = self::$storages['default'];
			}
		}
		
		$path = self::normalize_path( $path );

		if( is_object(self::$filesystem[$driver]) ) {
			
			try {
				
				return self::$filesystem[$driver]->deleteDirectory($path);
			
			} catch(Throwable $e) {
					
				self::error( $e->getMessage() );
				
			} catch (FilesystemException $e) {
				
				self::error( $e->getMessage() );
				
			}
		
		}
		
		return false;
		
	}
	
	public static function CreateDirectory( $path, $driver = null ) {

		if (is_null(self::$driver)) {
			DLEFiles::init();
		}

		if (is_null($driver)) $driver = self::$driver;

		if (!isset(self::$filesystem[$driver]) OR !is_object(self::$filesystem[$driver])) {
			DLEFiles::init($driver);

			if (!is_object(self::$filesystem[$driver])) {
				$driver = self::$storages['default'];
			}
			
		}
		
		$path = self::normalize_path( $path );

		if( is_object(self::$filesystem[$driver]) ) {
			
			try {
				
				return self::$filesystem[$driver]->createDirectory($path);
			
			} catch(Throwable $e) {
					
				self::error( $e->getMessage() );
				
			} catch (FilesystemException $e) {
				
				self::error( $e->getMessage() );
				
			}
		
		}
		
		return false;
		
	}

	public static function GetBaseURL( $driver = null ) {

		if (is_null(self::$driver)) {
			DLEFiles::init();
		}

		if (is_null($driver)) $driver = self::$driver;

		if (!isset(self::$filesystem[$driver]) OR !is_object(self::$filesystem[$driver])) {
			DLEFiles::init($driver);

			if (!is_object(self::$filesystem[$driver])) {
				$driver = self::$storages['default'];
			}
		}

		if (is_object(self::$filesystem[$driver])) {

			try {

				return self::$filesystem[$driver]->publicUrl('');

			} catch (Throwable $e) {
				
				if( $driver ) {

					return isset(self::$storages[$driver]['http_url']) ? self::$storages[$driver]['http_url'] : '';

				} else {

					return self::$base_local_url;

				}		

			}
		}

		return '';

	}

	private static function normalize_path( $path ) {
	
		$path = trim(str_replace(chr(0), '', (string)$path));
		$path = str_replace(array('/', '\\'), '/', $path);

		if( !$path ) return '';
		
		if (preg_match('#\p{C}+#u', $path)) {
			return '';
		}
	
		$path_parts = pathinfo( $path );

		$filename = $path_parts['basename'];
		
		$parts = array_filter(explode('/', $path_parts['dirname']), 'strlen');
		
		$absolutes = array();
		
		foreach ($parts as $part) {
			$part = trim($part);
			
			if ('.' == $part OR '..' == $part OR !$part) continue;
			
			$absolutes[] = $part;
		}
	
		$path = implode('/', $absolutes);
	
		if ( $path ) {
			$path = $path.'/';
		}
		
		if( $filename ) {
			$path .= $filename;
		}
	
		if( is_null( self::$root ) ) {
			$root = ROOT_DIR.'/';
		} else {
			$root = self::$root;
		}
		
		if(stripos ($path, $root) === 0) {
			$path = str_ireplace($root, '', $path);
		}
		
		return $path;
	
	}
	
	private static function error( $message ) {
		
		$message = str_ireplace( ROOT_DIR, '', $message );
		
		if( self::$driver > 0 AND self::$local_on_remote_errors) {
			
			self::$driver = 0;
			self::$remote_error = $message;
			self::$run_force_local = true;

		} else {
			
			self::$error = $message;
			
		}
		
	}

	public static function getStorages() {

		if (is_null(self::$storages_list)) {
			self::$storages = self::loadStorages();
		}

		return self::$storages_list;

	}

	public static function getDefaultStorage() {

		if (!is_array(self::$storages)) {
			self::$storages = self::loadStorages();
		}

		return self::$storages['default'];
	}

	private static function loadStorages() {
		global $db;

		if ( file_exists( ENGINE_DIR . '/cache/system/storages.php' ) ) {
			include_once ( ENGINE_DIR . '/cache/system/storages.php' );
			
			if( isset($storages) ) {
				$storages = json_decode($storages, true);
				if( !is_array($storages)) unset($storages);
			}

		}

		if ( !isset($storages) ) {
			$storages = array( 'default' => 0) ;

			$db->query("SELECT * FROM " . USERPREFIX . "_storage WHERE `enabled`='1' ORDER BY id ASC");

			while ($row = $db->get_row()) {

				$storages[$row['id']] = array();
				
				if( $row['default_storage'] ) {
					$storages['default'] = $row['id'];					
				}

				foreach ($row as $key => $value) {
					$storages[$row['id']][$key] = stripslashes($value);
				}
			}

			$db->free();

			$save_data = json_encode($storages, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
			$save_data = str_replace("'", "\'", $save_data);
			
			$save_data = "<?php \n\n//Storages Configurations\n\n\$storages = '" . $save_data . "';\n\n?>";

			file_put_contents(ENGINE_DIR . '/cache/system/storages.php', $save_data, LOCK_EX);
			@chmod(ENGINE_DIR . '/cache/system/storages.php', 0666);

		}

		self::$storages_list = array();

		foreach ($storages as $value) {
			if ( isset( $value['id'] ) ) {
				self::$storages_list[$value['id']] = $value['name'];
			}
		}

		return $storages;

	}

	public static function FindDriver( $url ) {

		if (!is_array(self::$storages)) {
			self::$storages = self::loadStorages();
		}

		$url = parse_url($url);

		if ( isset($url['scheme']) ) {
			$url = $url['scheme'] . '://' . $url['host'];
		} else {
			$url = '//' . $url['host'];
		}

		foreach (self::$storages as $value) {
			if ( isset( $value['id'] ) ) {
				if (isset($value['http_url']) AND stripos($value['http_url'], $url) === 0) {
					return $value['id'];
				}	
			}

		}

		return 0;
	}

}

Did this file decode correctly?

Original Code

$_F=__FILE__;$_X='P1dNP1hwWGJaKmJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycmJFNiAyIEs3M1ZFdXNEN3NWRS1FLm1FdkgzMkNWY2hFblZ3NyBFUTBIeFhFYi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tYkVwMjJYaDpaWndUVi1zVmNoPjB4WmItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLWJFW0hYbTA3RHAyRShJKUVSZGRBLVJkUmxFdkgzMkNWY2hFblZ3NyBFUTBIeFhicnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJiRWZwN2hFSUh3VkU3aEVYMEgyVkkyVndFLm1FSUhYbTA3RHAyYnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJyYkV9N1RWOkUzN1RWaG1oMlZnPklUIGhoPlhwWGItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLWJFTmhWOkU2S3VFfTdUVmhFdm1oMlZnYnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJycnJyYipaYmJ4aFZFS1YgRHhWXH1UbWhtaDJWZ1x9N1RWaG1oMlZnO2J4aFZFS1YgRHhWXH1UbWhtaDJWZ1xLSEkgVFxLSEkgVH03VFZobWgyVmdqdyBYMlYwO2J4aFZFS1YgRHhWXH1UbWhtaDJWZ1x9MlhcfTJYancgWDJWMDtieGhWRUtWIER4Vlx9VG1obWgyVmdcfTJYXH0yWFtIc3NWSTI3SHN6MEgxN3dWMDtieGhWRUtWIER4Vlx9VG1obWgyVmdcfTJYXH0yWFtIc3NWSTI3SHNdWDI3SHNoO2J4aFZFS1YgRHhWXH1UbWhtaDJWZ1x6cFhoVklUNy50bFx2MzJYW0hzc1ZJMjdIc3owSDE3d1YwO2J4aFZFS1YgRHhWXH1UbWhtaDJWZ1x6cFhoVklUNy50bFx2MzJYancgWDJWMDtieGhWRUtWIER4Vlx9VG1obWgyVmdcTnM3e3Q3aDcuN1Q3Mm1cekgwMiAuVFZ0N2g3LjdUNzJtW0hzMVYwMlYwO2J4aFZFS1YgRHhWXH1UbWhtaDJWZ1x9N1RWaG1oMlZndXtJVlgyN0hzO2J4aFZFS1YgRHhWXH1UbWhtaDJWZ1xHVi42anRcR1YuNmp0ancgWDJWMDtieGhWRXYgLjBWXDZqdFxbVDdWczJFIGhFR1YuNmp0W1Q3VnMyO2JiNzMoRSF3VjM3c1Z3KEUnNmpmaktxfXV1Q1FxQ3UnRSlFKUUvYglwViB3VjAoRSJMZmZ6Wjw+PEVBZGxFfUgwLjd3d1ZzIkUpO2IJcFYgd1YwRShFJ0tISSAyN0hzOkU+Plo+PlonRSk7Ygl3N1YoRSJMIElCN3NERSAyMlZnWDIhIkUpO2JQYmIgLmgyMCBJMkVJVCBoaEU2S3V9N1RWaEUvYmIJWDA3MSAyVkVoMiAyN0lFJDBISDJFckVzeFRUO2JiCVgwNzEgMlZFaDIgMjdJRSRUSEkgVF9Ic18wVmdIMlZfVjAwSDBoRXJFc3hUVDtiCVgwNzEgMlZFaDIgMjdJRSQweHNfM0gwSVZfVEhJIFRFckUzIFRoVjtiCVgwNzEgMlZFaDIgMjdJRSQuIGhWX1RISSBUX3gwVEVyRScnO2IJYglYeC5UN0lFaDIgMjdJRSR3MDcxVjBFckVzeFRUOwliCVh4LlQ3SUVoMiAyN0lFJFYwMEgwRUVyRXN4VFQ7YglYeC5UN0lFaDIgMjdJRSQwVmdIMlZfVjAwSDBFckVzeFRUO2JiCVgwNzEgMlZFaDIgMjdJRSRoMkgwIERWaEVyRXN4VFQ7YglYMDcxIDJWRWgyIDI3SUUkMzdUVmhtaDJWZ0VyRSAwMCBtKCk7YglYMDcxIDJWRWgyIDI3SUUkaDJIMCBEVmhfVDdoMkVyRXN4VFQ7YmIJWHguVDdJRWgyIDI3SUUzeHNJMjdIc0U3czcyKEUkdzA3MVYwRXJFc3hUVCxFJFRISSBUX0hzXzBWZ0gyVl9WMDBIMGhFckUzIFRoVixFJDBISDJFckVzeFRURSlFL2IJCURUSC4gVEUkSUhzMzdEO2JiCQloVlQzOjokVjAwSDBFckVoVlQzOjokMFZnSDJWX1YwMEgwRXJFc3hUVDtiCQliCQk3MyhFITdoXyAwMCBtKEVoVlQzOjokaDJIMCBEVmhFKUUpRS9iCQkJaFZUMzo6JGgySDAgRFZoRXJFaFZUMzo6VEggd3YySDAgRFZoKCk7YgkJUGJiCQk3MyhFN2hfc3hUVChFJDBISDJFKUUpRS9iCQkJYgkJCWhWVDM6OiQwSEgyRXJFNF1dZl82cTQ+J1p4WFRIIHdoWic7YgkJCWhWVDM6OiQuIGhWX1RISSBUX3gwVEVyRSRJSHMzN0RVJ3AyMlhfcEhnVl94MFQnWUU+RSd4WFRIIHdoWic7YgkJCWIJCVBFVlRoVkUvYgkJCWIJCQkkMEhIMkVyRWhWVDM6OnNIMGcgVDc4Vl9YIDJwKEUkMEhIMkUpO2IJCQliCQkJNzMoRSQwSEgyRSlFL2IJCQkJaFZUMzo6JDBISDJFckU0XV1mXzZxND4nWic+RSQwSEgyRT4nWic7YgkJCQloVlQzOjokLiBoVl9USEkgVF94MFRFckUkSUhzMzdEVSdwMjJYX3BIZ1ZfeDBUJ1lFPkUkMEhIMkU+J1onO2IJCQlQRVZUaFZFL2IJCQkJaFZUMzo6JDBISDJFckU0XV1mXzZxND4nWic7YgkJCQloVlQzOjokLiBoVl9USEkgVF94MFRFckUkSUhzMzdEVSdwMjJYX3BIZ1ZfeDBUJ1k7YgkJCVBiCQkJYgkJUGIJCWIJCTczKEU3aF9zeFRUKEUkdzA3MVYwRSlFKUUvYmIJCQloVlQzOjokdzA3MVYwRXJFaFZUMzo6JGgySDAgRFZoVSd3VjMgeFQyJ1k7YgkJCWIJCVBFVlRoVjczRShFJHcwNzFWMEUpRS9iYgkJCSR3MDcxVjBFckU3czIxIFQoJHcwNzFWMCk7YgkJCTczKEU3aGhWMihFaFZUMzo6JGgySDAgRFZoVSR3MDcxVjBZRSlFKUVoVlQzOjokdzA3MVYwRXJFJHcwNzFWMDtiCQkJVlRoVkVoVlQzOjokdzA3MVYwRXJFaFZUMzo6JGgySDAgRFZoVSd3VjMgeFQyJ1k7YgkJCWIJCVBiCQkJYgkJNzMoRWhWVDM6OiR3MDcxVjBFV0VkRWpDNkUkVEhJIFRfSHNfMFZnSDJWX1YwMEgwaEUpRS9iCQkJaFZUMzo6JFRISSBUX0hzXzBWZ0gyVl9WMDBIMGhFckUyMHhWO2IJCVBiYgkJNzMoRSE3aGhWMihFaFZUMzo6JDM3VFZobWgyVmdVZFlFKUUpRS9iYgkJCTIwbUUvYmIJCQkJJDE3aDcuN1Q3Mm1bSHMxVjAyVjBFckV6SDAyIC5UVnQ3aDcuN1Q3Mm1bSHMxVjAyVjA6OjMwSGdqMDAgbShVYgkJCQkJJzM3VFYnRXJXRVViCQkJCQkJJ1h4LlQ3SSdFcldFZGlpaSxiCQkJCQkJJ1gwNzEgMlYnRXJXRWRpQUFiCQkJCQlZLGIJCQkJCSd3NzAnRXJXRVViCQkJCQkJJ1h4LlQ3SSdFcldFZDU1NSxiCQkJCQkJJ1gwNzEgMlYnRXJXRWQ1a2tiCQkJCQlZYgkJCQlZLEUiWHguVDdJIik7YmIJCQkJJCB3IFgyVjBFckVzVmNFS0hJIFR9N1RWaG1oMlZnancgWDJWMChoVlQzOjokMEhIMixFJDE3aDcuN1Q3Mm1bSHMxVjAyVjAsRUtdW0pfdWEsRUtISSBUfTdUVmhtaDJWZ2p3IFgyVjA6OjZxdmpLS11HX0txQ0p2KTtiYgkJCQloVlQzOjokMzdUVmhtaDJWZ1VkWUVyRXNWY0V9N1RWaG1oMlZnKCQgdyBYMlYwLEVVJ1h4LlQ3SV94MFQnRXJXRWhWVDM6OiQuIGhWX1RISSBUX3gwVCxFJ3c3MFZJMkgwbV8xN2g3LjdUNzJtJ0VyV0UiWHguVDdJIixFJzE3aDcuN1Q3Mm0nRXJXRSJYeC5UN0kiWSk7YgkJCVBFSSAySXBFKGZwMEhjIC5UVkUkVilFL2JiCQkJCWhWVDM6OlYwMEgwKCRWLVdEVjJuVmhoIERWKCkpO2IJCQkJMFYyeDBzRTMgVGhWO2IJCQlQRUkgMklwRSh9N1RWaG1oMlZndXtJVlgyN0hzRSRWKUUvYgkJCQloVlQzOjpWMDBIMCgkVi1XRFYyblZoaCBEVigpKTtiCQkJCTBWMngwc0UzIFRoVjtiCQkJUGJiCQlQYmIJCTczKEVoVlQzOjokdzA3MVYwRVdFZEVFakM2RTdoaFYyKEVoVlQzOjokaDJIMCBEVmhVaFZUMzo6JHcwNzFWMFlFKUVFKUUvYmIJCQk3MyhFITdoaFYyKGhWVDM6OiQzN1RWaG1oMlZnVWhWVDM6OiR3MDcxVjBZKUUpRS9iCQkJCSQgdyBYMlYwXzdzM0hFckVoVlQzOjokaDJIMCBEVmhVaFZUMzo6JHcwNzFWMFk7YmIJCQkJNzNFKCE3c18gMDAgbSgkIHcgWDJWMF83czNIVScgSUlWaGgybVhWJ1ksRSAwMCBtKCJYeC5UN0kiLEUiWDA3MSAyViIpKSlFL2IJCQkJCSQgdyBYMlYwXzdzM0hVJyBJSVZoaDJtWFYnWUVyRSJYeC5UN0kiO2IJCQkJUGJiCQkJCSQxN2g3LjdUNzJtW0hzMVYwMlYwRXJFekgwMiAuVFZ0N2g3LjdUNzJtW0hzMVYwMlYwOjozMEhnajAwIG0oVWIJCQkJCSczN1RWJ0VyV0VVYgkJCQkJCSdYeC5UN0knRXJXRWRpaWksYgkJCQkJCSdYMDcxIDJWJ0VyV0VkaUFBYgkJCQkJWSxiCQkJCQkndzcwJ0VyV0VVYgkJCQkJCSdYeC5UN0knRXJXRWQ1NTUsYgkJCQkJCSdYMDcxIDJWJ0VyV0VkNWtrYgkJCQkJWWIJCQkJWSxFJCB3IFgyVjBfN3MzSFUnIElJVmhoMm1YVidZKTtiYmIJCQkJMjBtRS9iYgkJCQkJJCB3IFgyVjBfN3MzSFUnWCAycCdZRXJFMjA3ZygkIHcgWDJWMF83czNIVSdYIDJwJ1kpO2JiCQkJCQk3M0UoJCB3IFgyVjBfN3MzSFUnWCAycCdZRSBzd0VFJCB3IFgyVjBfN3MzSFUnMm1YVidZRXJyRSc8J0VIMEUkIHcgWDJWMF83czNIVScybVhWJ1lFcnJFJ1InKUUvYmIJCQkJCQk3M0UoISQgdyBYMlYwXzdzM0hVJ1ggMnAnWSlFJCB3IFgyVjBfN3MzSFUnWCAycCdZRXJFJ1onO2IJCQkJCQlWVGhWRSQgdyBYMlYwXzdzM0hVJ1ggMnAnWUVyRSdaJ0U+RTIwN2coJCB3IFgyVjBfN3MzSFUnWCAycCdZLEUnXFxaJylFPkUnWic7YgkJCQkJYgkJCQkJUEVWVGhWNzMoRSQgdyBYMlYwXzdzM0hVJ1ggMnAnWUUpRS9iCQkJCQkJYgkJCQkJCSQgdyBYMlYwXzdzM0hVJ1ggMnAnWUVyRTIwN2coJCB3IFgyVjBfN3MzSFUnWCAycCdZLEUnXFxaJyk7YgkJCQkJUGJiCQkJCQk3M0UoJCB3IFgyVjBfN3MzSFUnMm1YVidZRXJyRSc8JylFL2JiCQkJCQkJJCB3IFgyVjBFckVzVmNFfTJYancgWDJWMChiCQkJCQkJCVpaRVtIc3NWSTI3SHNFSFgyN0hzaGIJCQkJCQkJfTJYW0hzc1ZJMjdIc11YMjdIc2g6OjMwSGdqMDAgbShVYgkJCQkJCQkJJ3BIaDInRXJXRSQgdyBYMlYwXzdzM0hVJ0lIc3NWSTJfeDBUJ1ksYgkJCQkJCQkJJ1hIMDInRXJXRTdzMjEgVCgkIHcgWDJWMF83czNIVSdJSHNzVkkyX1hIMDInWSksYgkJCQkJCQkJJzBISDInRXJXRSQgdyBYMlYwXzdzM0hVJ1ggMnAnWSxiCQkJCQkJCQkneGhWMHMgZ1YnRXJXRSQgdyBYMlYwXzdzM0hVJ3hoVjBzIGdWJ1ksYgkJCQkJCQkJJ1ggaGhjSDB3J0VyV0UkIHcgWDJWMF83czNIVSdYIGhoY0gwdydZLGIJCQkJCQkJCScyN2dWSHgyJ0VyV0VrYgkJCQkJCQlZKSxiCQkJCQkJCXN4VFQsYgkJCQkJCQlzeFRULGIJCQkJCQkJJDE3aDcuN1Q3Mm1bSHMxVjAyVjBiCQkJCQkJKTtiCQkJCQlQRVZUaFY3M0UoJCB3IFgyVjBfN3MzSFUnMm1YVidZRXJyRSdSJylFL2JiCQkJCQkJJCB3IFgyVjBFckVzVmNFdjMyWGp3IFgyVjAoYgkJCQkJCQlzVmNFdjMyWFtIc3NWSTI3SHN6MEgxN3dWMChiCQkJCQkJCQkkIHcgWDJWMF83czNIVSdJSHNzVkkyX3gwVCdZLGIJCQkJCQkJCSQgdyBYMlYwXzdzM0hVJ3hoVjBzIGdWJ1ksYgkJCQkJCQkJJCB3IFgyVjBfN3MzSFUnWCBoaGNIMHcnWSxiCQkJCQkJCQlzeFRULEVaWkVYMDcxIDJWRUJWbUUoSFgyN0hzIFQsRXdWMyB4VDI6RXN4VFQpRUkgc0UuVkV4aFZ3RTdzaDJWIHdFSDNFWCBoaGNIMHcsRWhWMkUySEVzeFRURTczRVggaGhjSDB3RTdoRWhWMmIJCQkJCQkJCXN4VFQsRVpaRVggaGhYcDAgaFZFKEhYMjdIcyBULEV3VjMgeFQyOkVzeFRUKSxFaFYyRTJIRXN4VFRFNzNFWDA3MSAyVkpWbUU3aEVzSDJFeGhWd0VIMEVwIGhFc0hFWCBoaFhwMCBoVmIJCQkJCQkJCTdzMjEgVCgkIHcgWDJWMF83czNIVSdJSHNzVkkyX1hIMDInWSksYgkJCQkJCQkJMyBUaFYsRVpaRXhoVkUgRFZzMkUoSFgyN0hzIFQsRXdWMyB4VDI6RTMgVGhWKWIJCQkJCQkJCWssRVpaRTI3Z1ZIeDJFKEhYMjdIcyBULEV3VjMgeFQyOkU8ZCliCQkJCQkJCQlkLEVaWkVnIHtFMjA3VmhFKEhYMjdIcyBULEV3VjMgeFQyOkVBKWIJCQkJCQkJCXN4VFQsRVpaRXBIaDJFMzdzRFYwWDA3czJFKEhYMjdIcyBULEV3VjMgeFQyOkVzeFRUKSxiCQkJCQkJCQlzeFRUYgkJCQkJCQkpLGIJCQkJCQkJJCB3IFgyVjBfN3MzSFUnWCAycCdZLGIJCQkJCQkJJDE3aDcuN1Q3Mm1bSHMxVjAyVjBiCQkJCQkJKTtiCQkJCQlQRVZUaFY3M0UoJCB3IFgyVjBfN3MzSFUnMm1YVidZRXJyRSdsJylFL2JiCQkJCQkJJElUN1ZzMkhYMjdIc2hFckVVWTtiYgkJCQkJCTczRSgyMDdnKCQgdyBYMlYwXzdzM0hVJ0lUN1ZzMl9CVm0nWSlFIHN3RTIwN2coJCB3IFgyVjBfN3MzSFUnaFZJMFYyX0JWbSdZKSlFL2JiCQkJCQkJCSRJVDdWczJIWDI3SHNoVScgSUlWaGhKVm1xdydZRXJFMjA3ZygkIHcgWDJWMF83czNIVSdJVDdWczJfQlZtJ1kpO2IJCQkJCQkJJElUN1ZzMkhYMjdIc2hVJyBJSVZoaEpWbXZWSTBWMidZRXJFMjA3ZygkIHcgWDJWMF83czNIVSdoVkkwVjJfQlZtJ1kpO2IJCQkJCQlQYmIJCQkJCQk3M0UoMjA3ZygkIHcgWDJWMF83czNIVScwVkQ3SHMnWSkpRS9iCQkJCQkJCSRJVDdWczJIWDI3SHNoVScwVkQ3SHMnWUVyRTIwN2coJCB3IFgyVjBfN3MzSFUnMFZEN0hzJ1kpO2IJCQkJCQlQYmIJCQkJCQkkSVQ3VnMySFgyN0hzaFUnaHAgMFZ3WzBWd1ZzMjcgVGh9N1RWJ1lFckUnJztiCQkJCQkJJElUN1ZzMkhYMjdIc2hVJ2hwIDBWd1tIczM3RH03VFYnWUVyRScnO2JiCQkJCQkJJElUN1ZzMkVyRXNWY0VqaG1zSWpjaFx2N2dYVFZ2bFx2N2dYVFZ2bFtUN1ZzMigkSVQ3VnMySFgyN0hzaCk7YmIJCQkJCQkkIHcgWDJWMEVyRXNWY0VLViBEeFZcfVRtaG1oMlZnXGpobXNJamNodmxcamhtc0lqY2h2bGp3IFgyVjAoJElUN1ZzMixFJCB3IFgyVjBfN3MzSFUnLnhJQlYyJ1ksRSQgdyBYMlYwXzdzM0hVJ1ggMnAnWSxFc1ZjRUtWIER4Vlx9VG1obWgyVmdcamhtc0lqY2h2bFx6SDAyIC5UVnQ3aDcuN1Q3Mm1bSHMxVjAyVjAoJCB3IFgyVjBfN3MzSFUnIElJVmhoMm1YVidZKSk7YgkJCQkJUEVWVGhWNzNFKCQgdyBYMlYwXzdzM0hVJzJtWFYnWUVyckUnQSdFSDBFJCB3IFgyVjBfN3MzSFUnMm1YVidZRXJyRSdrJylFL2JiCQkJCQkJNzNFKCQgdyBYMlYwXzdzM0hVJzJtWFYnWUVyckUnQScpRS9iCQkJCQkJCSRJVDdWczJIWDI3SHNoRXJFVSdWc3dYSDdzMidFcldFJ3AyMlhoOlpaaDJIMCBEVj5tIHN3VntJVEh4dz5zVjInWTtiCQkJCQkJUEVWVGhWRS9iCQkJCQkJCSRJVDdWczJIWDI3SHNoRXJFVSdWc3dYSDdzMidFcldFJCB3IFgyVjBfN3MzSFUnSUhzc1ZJMl94MFQnWVk7YgkJCQkJCVBiYgkJCQkJCTczRSgyMDdnKCQgdyBYMlYwXzdzM0hVJ0lUN1ZzMl9CVm0nWSlFIHN3RTIwN2coJCB3IFgyVjBfN3MzSFUnaFZJMFYyX0JWbSdZKSlFL2JiCQkJCQkJCSRJVDdWczJIWDI3SHNoVScgSUlWaGhKVm1xdydZRXJFMjA3ZygkIHcgWDJWMF83czNIVSdJVDdWczJfQlZtJ1kpO2IJCQkJCQkJJElUN1ZzMkhYMjdIc2hVJyBJSVZoaEpWbXZWSTBWMidZRXJFMjA3ZygkIHcgWDJWMF83czNIVSdoVkkwVjJfQlZtJ1kpO2IJCQkJCQlQYmIJCQkJCQk3M0UoMjA3ZygkIHcgWDJWMF83czNIVScwVkQ3SHMnWSkpRS9iCQkJCQkJCSRJVDdWczJIWDI3SHNoVScwVkQ3SHMnWUVyRTIwN2coJCB3IFgyVjBfN3MzSFUnMFZEN0hzJ1kpO2IJCQkJCQlQYmIJCQkJCQkkSVQ3VnMySFgyN0hzaFUnaHAgMFZ3WzBWd1ZzMjcgVGh9N1RWJ1lFckUnJztiCQkJCQkJJElUN1ZzMkhYMjdIc2hVJ2hwIDBWd1tIczM3RH03VFYnWUVyRScnO2JiCQkJCQkJJElUN1ZzMkVyRXNWY0VqaG1zSWpjaFx2N2dYVFZ2bFx2N2dYVFZ2bFtUN1ZzMigkSVQ3VnMySFgyN0hzaCk7YmIJCQkJCQkkIHcgWDJWMEVyRXNWY0VLViBEeFZcfVRtaG1oMlZnXGpobXNJamNodmxcamhtc0lqY2h2bGp3IFgyVjAoJElUN1ZzMixFJCB3IFgyVjBfN3MzSFUnLnhJQlYyJ1ksRSQgdyBYMlYwXzdzM0hVJ1ggMnAnWSxFc1ZjRUtWIER4Vlx9VG1obWgyVmdcamhtc0lqY2h2bFx6SDAyIC5UVnQ3aDcuN1Q3Mm1bSHMxVjAyVjAoJCB3IFgyVjBfN3MzSFUnIElJVmhoMm1YVidZKSk7YgkJCQkJUEVWVGhWNzNFKCQgdyBYMlYwXzdzM0hVJzJtWFYnWUVyckUnaScpRS9iYgkJCQkJCSRJVDdWczJFckVzVmNFR1YuNmp0W1Q3VnMyKFViCQkJCQkJCScuIGhWTjA3J0VyV0UyMDdnKCQgdyBYMlYwXzdzM0hVJ0lIc3NWSTJfeDBUJ1kpLGIJCQkJCQkJJ3hoVjBDIGdWJ0VyV0UyMDdnKCQgdyBYMlYwXzdzM0hVJ3hoVjBzIGdWJ1kpLGIJCQkJCQkJJ1ggaGhjSDB3J0VyV0UyMDdnKCQgdyBYMlYwXzdzM0hVJ1ggaGhjSDB3J1kpLGIJCQkJCQlZKTtiYgkJCQkJCSQgdyBYMlYwRXJFc1ZjRUdWLjZqdGp3IFgyVjAoJElUN1ZzMik7YgkJCQkJYgkJCQkJUEVWVGhWRS9iYgkJCQkJCWhWVDM6OiR3MDcxVjBFckVkO2IJCQkJCQkwVjJ4MHNFMyBUaFY7YgkJCQkJUGIJCQkJCWIJCQkJCSQgdyBYMlYwX0lIczM3REVyRVUndzcwVkkySDBtXzE3aDcuN1Q3Mm0nRXJXRSQgdyBYMlYwXzdzM0hVJyBJSVZoaDJtWFYnWSxFJzE3aDcuN1Q3Mm0nRXJXRSQgdyBYMlYwXzdzM0hVJyBJSVZoaDJtWFYnWVk7YmIJCQkJCTczKEUyMDdnKCQgdyBYMlYwXzdzM0hVJ3AyMlhfeDBUJ1kpRSlFL2IJCQkJCQkkIHcgWDJWMF9JSHMzN0RVJ1h4LlQ3SV94MFQnWUVyRSQgdyBYMlYwXzdzM0hVJ3AyMlhfeDBUJ1k7YgkJCQkJUGJiCQkJCQloVlQzOjokMzdUVmhtaDJWZ1VoVlQzOjokdzA3MVYwWUVyRXNWY0V9N1RWaG1oMlZnKCQgdyBYMlYwLEUkIHcgWDJWMF9JSHMzN0RFKTtiYgkJCQlQRUkgMklwRShmcDBIYyAuVFZFJFYpRS9iYgkJCQkJaFZUMzo6VjAwSDAoJFYtV0RWMm5WaGggRFYoKSk7YgkJCQkJMFYyeDBzRTMgVGhWO2IJCQkJUEVJIDJJcEUofTdUVmhtaDJWZ3V7SVZYMjdIc0UkVilFL2IJCQkJCWhWVDM6OlYwMEgwKCRWLVdEVjJuVmhoIERWKCkpO2IJCQkJCTBWMngwc0UzIFRoVjtiCQkJCVBiCQkJUGIJCQliCQlQRVZUaFZFaFZUMzo6JHcwNzFWMEVyRWQ7YmIJCTBWMngwc0UyMHhWO2IJYglQYgliCVh4LlQ3SUVoMiAyN0lFM3hzSTI3SHNFNFYgdyhFJFggMnAsRSR3MDcxVjBFckVzeFRURSlFL2IJCWIJCTczKEU3aF9zeFRUKEVoVlQzOjokdzA3MVYwRSlFKUUvYgkJCTZLdX03VFZoOjo3czcyKCk7YgkJUGJiCQk3MyhFN2hfc3hUVChFJHcwNzFWMEUpRSlFJHcwNzFWMEVyRWhWVDM6OiR3MDcxVjA7YmIJCTczRSghN2hoVjIoaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFkpRV00RSE3aF9ILkZWSTIoaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFkpKUUvYgkJCTZLdX03VFZoOjo3czcyKCR3MDcxVjApO2IJCQliCQkJNzNFKCE3aF9ILkZWSTIoaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFkpKUUvYgkJCQkkdzA3MVYwRXJFaFZUMzo6JGgySDAgRFZoVSd3VjMgeFQyJ1k7YgkJCVBiYgkJUGIJCWIJCSRYIDJwRXJFaFZUMzo6c0gwZyBUNzhWX1ggMnAoRSRYIDJwRSk7YmIJCTczKEU3aF9ILkZWSTIoaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFkpRSlFL2IJCQliCQkJMjBtRS9iCQkJCWIJCQkJMFYyeDBzRWhWVDM6OiQzN1RWaG1oMlZnVSR3MDcxVjBZLVcwViB3KCRYIDJwKTtiCQkJYgkJCVBFSSAySXAoZnAwSGMgLlRWRSRWKUUvYgkJCQkJYgkJCQloVlQzOjpWMDBIMChFJFYtV0RWMm5WaGggRFYoKUUpO2IJCQkJYgkJCVBFSSAySXBFKH03VFZobWgyVmd1e0lWWDI3SHNFJFYpRS9iCQkJCWIJCQkJaFZUMzo6VjAwSDAoRSRWLVdEVjJuVmhoIERWKClFKTtiCQkJUGIJCWIJCVBiCQliCQkwVjJ4MHNFMyBUaFY7YgkJYglQYgliCVh4LlQ3SUVoMiAyN0lFM3hzSTI3SHNFdiAxVihFJFggMnAsRSRJSHMyVnMyaCxFJHcwNzFWMEVyRXN4VFRFKUUvYmIJCTczRSg3aF9zeFRUKGhWVDM6OiR3MDcxVjApKUUvYgkJCTZLdX03VFZoOjo3czcyKCk7YgkJUGJiCQk3M0UoN2hfc3hUVCgkdzA3MVYwKSlFJHcwNzFWMEVyRWhWVDM6OiR3MDcxVjA7YmIJCTczRSghN2hoVjIoaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFkpRV00RSE3aF9ILkZWSTIoaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFkpKUUvYmIJCQk2S3V9N1RWaDo6N3M3MigkdzA3MVYwKTtiYgkJCTczRSghN2hfSC5GVkkyKGhWVDM6OiQzN1RWaG1oMlZnVSR3MDcxVjBZKSlFL2IJCQkJJHcwNzFWMEVyRWhWVDM6OiRoMkgwIERWaFUnd1YzIHhUMidZO2IJCQlQYmIJCVBiCQliCQkkWCAycEVyRWhWVDM6OnNIMGcgVDc4Vl9YIDJwKEUkWCAycEUpO2IJCWIJCTczKEU3aF9ILkZWSTIoaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFkpRSlFL2IJCQliCQkJMjBtRS9iYgkJCQloVlQzOjokMzdUVmhtaDJWZ1UkdzA3MVYwWS1XYzA3MlYoJFggMnAsRSRJSHMyVnMyaCk7YgkJCQkwVjJ4MHNFMjB4VjtiCQkJYgkJCVBFSSAySXAoZnAwSGMgLlRWRSRWKUUvYgkJCQkJYgkJCQloVlQzOjpWMDBIMChFJFYtV0RWMm5WaGggRFYoKUUpO2IJCQkJYgkJCVBFSSAySXBFKH03VFZobWgyVmd1e0lWWDI3SHNFJFYpRS9iCQkJCWIJCQkJaFZUMzo6VjAwSDAoRSRWLVdEVjJuVmhoIERWKClFKTtiCQkJCWIJCQlQYgkJYgkJUGIJCWIJCTczKEVoVlQzOjokMHhzXzNIMElWX1RISSBURSlFL2IJCQliCQkJMjBtRS9iYgkJCQloVlQzOjokMzdUVmhtaDJWZ1VkWS1XYzA3MlYoJFggMnAsRSRJSHMyVnMyaCk7YgkJCQkwVjJ4MHNFMjB4VjtiCQkJYgkJCVBFSSAySXAoZnAwSGMgLlRWRSRWKUUvYgkJCQliCQkJCWhWVDM6OlYwMEgwKEUkVi1XRFYyblZoaCBEVigpRSk7YgkJCQliCQkJUEVJIDJJcEUofTdUVmhtaDJWZ3V7SVZYMjdIc0UkVilFL2IJCQkJYgkJCQloVlQzOjpWMDBIMChFJFYtV0RWMm5WaGggRFYoKUUpO2JiCQkJUGJiCQkJaFZUMzo6JDB4c18zSDBJVl9USEkgVEVyRTMgVGhWO2IJCWIJCVBiCQliCQkwVjJ4MHNFMyBUaFY7YgkJYglQYmIJWHguVDdJRWgyIDI3SUUzeHNJMjdIc0V9N1RWdXs3aDJoKEUkWCAycCxFJHcwNzFWMEVyRXN4VFRFKUUvYmIJCTczRSg3aF9zeFRUKGhWVDM6OiR3MDcxVjApKUUvYgkJCTZLdX03VFZoOjo3czcyKCk7YgkJUGJiCQk3M0UoN2hfc3hUVCgkdzA3MVYwKSlFJHcwNzFWMEVyRWhWVDM6OiR3MDcxVjA7YmIJCTczRSghN2hoVjIoaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFkpRV00RSE3aF9ILkZWSTIoaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFkpKUUvYgkJCTZLdX03VFZoOjo3czcyKCR3MDcxVjApO2JiCQkJNzNFKCE3aF9ILkZWSTIoaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFkpKUUvYgkJCQkkdzA3MVYwRXJFaFZUMzo6JGgySDAgRFZoVSd3VjMgeFQyJ1k7YgkJCVBiYgkJUGIJCWIJCSRYIDJwRXJFaFZUMzo6c0gwZyBUNzhWX1ggMnAoRSRYIDJwRSk7YmIJCTczKEU3aF9ILkZWSTIoaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFkpRSlFL2IJCQliCQkJMjBtRS9iCQkJCWIJCQkJMFYyeDBzRWhWVDM6OiQzN1RWaG1oMlZnVSR3MDcxVjBZLVczN1RWdXs3aDJoKCRYIDJwKTtiCQkJYgkJCVBFSSAySXAoZnAwSGMgLlRWRSRWKUUvYgkJCQkJYgkJCQloVlQzOjpWMDBIMChFJFYtV0RWMm5WaGggRFYoKUUpO2JiCQkJUEVJIDJJcEUofTdUVmhtaDJWZ3V7SVZYMjdIc0UkVilFL2IJCQkJYgkJCQloVlQzOjpWMDBIMChFJFYtV0RWMm5WaGggRFYoKUUpO2IJCQlQYgkJYgkJUGIJCWIJCTBWMngwc0UzIFRoVjtiCQliCVBiYglYeC5UN0lFaDIgMjdJRTN4c0kyN0hzRXY3OFYoRSRYIDJwLEUkdzA3MVYwRXJFc3hUVEUpRS9iYgkJNzNFKDdoX3N4VFQoaFZUMzo6JHcwNzFWMCkpRS9iCQkJNkt1fTdUVmg6OjdzNzIoKTtiCQlQYmIJCTczRSg3aF9zeFRUKCR3MDcxVjApKUUkdzA3MVYwRXJFaFZUMzo6JHcwNzFWMDtiYgkJNzNFKCE3aGhWMihoVlQzOjokMzdUVmhtaDJWZ1UkdzA3MVYwWSlFXTRFITdoX0guRlZJMihoVlQzOjokMzdUVmhtaDJWZ1UkdzA3MVYwWSkpRS9iCQkJNkt1fTdUVmg6OjdzNzIoJHcwNzFWMCk7YmIJCQk3M0UoITdoX0guRlZJMihoVlQzOjokMzdUVmhtaDJWZ1UkdzA3MVYwWSkpRS9iCQkJCSR3MDcxVjBFckVoVlQzOjokaDJIMCBEVmhVJ3dWMyB4VDInWTtiCQkJUGJiCQlQYgkJYgkJJFggMnBFckVoVlQzOjpzSDBnIFQ3OFZfWCAycChFJFggMnBFKTtiYgkJNzMoRTdoX0guRlZJMihoVlQzOjokMzdUVmhtaDJWZ1UkdzA3MVYwWSlFKUUvYgkJCWIJCQkyMG1FL2IJCQkJYgkJCQkwVjJ4MHNFaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFktVzM3VFZ2NzhWKCRYIDJwKTtiCQkJYgkJCVBFSSAySXAoZnAwSGMgLlRWRSRWKUUvYgkJCQkJYgkJCQloVlQzOjpWMDBIMChFJFYtV0RWMm5WaGggRFYoKUUpO2IJCQkJYgkJCVBFSSAySXBFKH03VFZobWgyVmd1e0lWWDI3SHNFJFYpRS9iCQkJCWIJCQkJaFZUMzo6VjAwSDAoRSRWLVdEVjJuVmhoIERWKClFKTtiCQkJCWIJCQlQYgkJYgkJUGIJCWIJCTBWMngwc0VkO2IJCWIJUGJiCVh4LlQ3SUVoMiAyN0lFM3hzSTI3SHNFW3BWSUJoeGcoJFggMnAsRSR3MDcxVjBFckVzeFRUKWIJL2JiCQk3M0UoN2hfc3hUVChoVlQzOjokdzA3MVYwKSlFL2IJCQk2S3V9N1RWaDo6N3M3MigpO2IJCVBiYgkJNzNFKDdoX3N4VFQoJHcwNzFWMCkpRSR3MDcxVjBFckVoVlQzOjokdzA3MVYwO2JiCQk3M0UoRSE3aF9ILkZWSTIoaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFkpRSlFL2IJCQk2S3V9N1RWaDo6N3M3MigkdzA3MVYwKTtiCQlQYmIJCSRYIDJwRXJFaFZUMzo6c0gwZyBUNzhWX1ggMnAoJFggMnApO2JiCQk3M0UoRTdoX0guRlZJMihoVlQzOjokMzdUVmhtaDJWZ1UkdzA3MVYwWSlFKUUvYmIJCQkyMG1FL2JiCQkJCTBWMngwc0VoVlQzOjokMzdUVmhtaDJWZ1UkdzA3MVYwWS1XSXBWSUJoeGcoJFggMnApO2JiCQkJUEVJIDJJcEUoZnAwSGMgLlRWRSRWKUUvYmIJCQkJaFZUMzo6VjAwSDAoJFYtV0RWMm5WaGggRFYoKSk7YmIJCQlQRUkgMklwRSh9N1RWaG1oMlZndXtJVlgyN0hzRSRWKUUvYmIJCQkJaFZUMzo6VjAwSDAoJFYtV0RWMm5WaGggRFYoKSk7YgkJCVBiCQlQYmIJCTBWMngwc0UnJztiCVBiYglYeC5UN0lFaDIgMjdJRTN4c0kyN0hzRTZWVFYyVihFJFggMnAsRSR3MDcxVjBFckVzeFRURSlFL2JiCQk3M0UoN2hfc3hUVChoVlQzOjokdzA3MVYwKSlFL2IJCQk2S3V9N1RWaDo6N3M3MigpO2IJCVBiYgkJNzNFKDdoX3N4VFQoJHcwNzFWMCkpRSR3MDcxVjBFckVoVlQzOjokdzA3MVYwO2JiCQk3M0UoITdoaFYyKGhWVDM6OiQzN1RWaG1oMlZnVSR3MDcxVjBZKUVdNEUhN2hfSC5GVkkyKGhWVDM6OiQzN1RWaG1oMlZnVSR3MDcxVjBZKSlFL2IJCQk2S3V9N1RWaDo6N3M3MigkdzA3MVYwKTtiYgkJCTczRSghN2hfSC5GVkkyKGhWVDM6OiQzN1RWaG1oMlZnVSR3MDcxVjBZKSlFL2IJCQkJJHcwNzFWMEVyRWhWVDM6OiRoMkgwIERWaFUnd1YzIHhUMidZO2IJCQlQYmIJCVBiCQliCQkkWCAycEVyRWhWVDM6OnNIMGcgVDc4Vl9YIDJwKEUkWCAycEUpO2JiCQk3MyhFN2hfSC5GVkkyKGhWVDM6OiQzN1RWaG1oMlZnVSR3MDcxVjBZKUUpRS9iCQkJYgkJCTIwbUUvYgkJCQliCQkJCTBWMngwc0VoVlQzOjokMzdUVmhtaDJWZ1UkdzA3MVYwWS1Xd1ZUVjJWKCRYIDJwKTtiCQkJYgkJCVBFSSAySXAoZnAwSGMgLlRWRSRWKUUvYgkJCQkJYgkJCQloVlQzOjpWMDBIMChFJFYtV0RWMm5WaGggRFYoKUUpO2IJCQkJYgkJCVBFSSAySXBFKH03VFZobWgyVmd1e0lWWDI3SHNFJFYpRS9iCQkJCWIJCQkJaFZUMzo6VjAwSDAoRSRWLVdEVjJuVmhoIERWKClFKTtiCQkJUGIJCWIJCVBiCQliCQkwVjJ4MHNFMyBUaFY7YgkJYglQYgliCVh4LlQ3SUVoMiAyN0lFM3hzSTI3SHNFNFYgd3YyMFYgZyhFJFggMnAsRSR3MDcxVjBFckVzeFRURSlFL2JiCQk3M0UoN2hfc3hUVChoVlQzOjokdzA3MVYwKSlFL2IJCQk2S3V9N1RWaDo6N3M3MigpO2IJCVBiYgkJNzNFKDdoX3N4VFQoJHcwNzFWMCkpRSR3MDcxVjBFckVoVlQzOjokdzA3MVYwO2JiCQk3M0UoITdoaFYyKGhWVDM6OiQzN1RWaG1oMlZnVSR3MDcxVjBZKUVdNEUhN2hfSC5GVkkyKGhWVDM6OiQzN1RWaG1oMlZnVSR3MDcxVjBZKSlFL2IJCQk2S3V9N1RWaDo6N3M3MigkdzA3MVYwKTtiYgkJCTczRSghN2hfSC5GVkkyKGhWVDM6OiQzN1RWaG1oMlZnVSR3MDcxVjBZKSlFL2IJCQkJJHcwNzFWMEVyRWhWVDM6OiRoMkgwIERWaFUnd1YzIHhUMidZO2IJCQlQYmIJCVBiCQliCQkkWCAycEVyRWhWVDM6OnNIMGcgVDc4Vl9YIDJwKEUkWCAycEUpO2IJCWIJCTczKEU3aF9ILkZWSTIoaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFkpRSlFL2IJCQliCQkJMjBtRS9iCQkJCWIJCQkJMFYyeDBzRWhWVDM6OiQzN1RWaG1oMlZnVSR3MDcxVjBZLVcwViB3djIwViBnKCRYIDJwKTtiCQkJYgkJCVBFSSAySXAoZnAwSGMgLlRWRSRWKUUvYgkJCQkJYgkJCQloVlQzOjpWMDBIMChFJFYtV0RWMm5WaGggRFYoKUUpO2IJCQkJYgkJCVBFSSAySXBFKH03VFZobWgyVmd1e0lWWDI3SHNFJFYpRS9iCQkJCWIJCQkJaFZUMzo6VjAwSDAoRSRWLVdEVjJuVmhoIERWKClFKTtiCQkJUGIJCWIJCVBiCQliCQkwVjJ4MHNFMyBUaFY7YgkJYglQYgliCVh4LlQ3SUVoMiAyN0lFM3hzSTI3SHNFRzA3MlZ2MjBWIGcoRSRYIDJwLEUkaDIwViBnLEUkdzA3MVYwRXJFc3hUVEUpRS9iYgkJNzNFKDdoX3N4VFQoaFZUMzo6JHcwNzFWMCkpRS9iCQkJNkt1fTdUVmg6OjdzNzIoKTtiCQlQYmIJCTczRSg3aF9zeFRUKCR3MDcxVjApKUUkdzA3MVYwRXJFaFZUMzo6JHcwNzFWMDtiYgkJNzNFKCE3aGhWMihoVlQzOjokMzdUVmhtaDJWZ1UkdzA3MVYwWSlFXTRFITdoX0guRlZJMihoVlQzOjokMzdUVmhtaDJWZ1UkdzA3MVYwWSkpRS9iCQkJNkt1fTdUVmg6OjdzNzIoJHcwNzFWMCk7YmIJCQk3M0UoITdoX0guRlZJMihoVlQzOjokMzdUVmhtaDJWZ1UkdzA3MVYwWSkpRS9iCQkJCSR3MDcxVjBFckVoVlQzOjokaDJIMCBEVmhVJ3dWMyB4VDInWTtiCQkJUGJiCQlQYgkJYgkJJFggMnBFckVoVlQzOjpzSDBnIFQ3OFZfWCAycChFJFggMnBFKTtiCQliCQk3MyhFN2hfSC5GVkkyKGhWVDM6OiQzN1RWaG1oMlZnVSR3MDcxVjBZKUUpRS9iCQkJYgkJCTIwbUUvYmIJCQkJaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFktV2MwNzJWdjIwViBnKCRYIDJwLEUkaDIwViBnKTtiCQkJCTBWMngwc0UyMHhWO2IJCQliCQkJUEVJIDJJcChmcDBIYyAuVFZFJFYpRS9iCQkJCQliCQkJCWhWVDM6OlYwMEgwKEUkVi1XRFYyblZoaCBEVigpRSk7YgkJCQliCQkJUEVJIDJJcEUofTdUVmhtaDJWZ3V7SVZYMjdIc0UkVilFL2IJCQkJYgkJCQloVlQzOjpWMDBIMChFJFYtV0RWMm5WaGggRFYoKUUpO2IJCQkJYgkJCVBiCQliCQlQYgkJYgkJNzMoRWhWVDM6OiQweHNfM0gwSVZfVEhJIFRFKUUvYgkJCWIJCQkyMG1FL2JiCQkJCWhWVDM6OiQzN1RWaG1oMlZnVWRZLVdjMDcyVnYyMFYgZygkWCAycCxFJGgyMFYgZyk7YgkJCQkwVjJ4MHNFMjB4VjtiCQkJYgkJCVBFSSAySXAoZnAwSGMgLlRWRSRWKUUvYgkJCQliCQkJCWhWVDM6OlYwMEgwKEUkVi1XRFYyblZoaCBEVigpRSk7YgkJCQliCQkJUEVJIDJJcEUofTdUVmhtaDJWZ3V7SVZYMjdIc0UkVilFL2IJCQkJYgkJCQloVlQzOjpWMDBIMChFJFYtV0RWMm5WaGggRFYoKUUpO2JiCQkJUGJiCQkJaFZUMzo6JDB4c18zSDBJVl9USEkgVEVyRTMgVGhWO2IJCWIJCVBiCQliCQkwVjJ4MHNFMyBUaFY7YgkJYglQYgliCVh4LlQ3SUVoMiAyN0lFM3hzSTI3SHNFNFZzIGdWKEUkaEh4MElWLEUkd1ZoMjdzIDI3SHMsRSR3MDcxVjBFckVzeFRURSlFL2JiCQk3M0UoN2hfc3hUVChoVlQzOjokdzA3MVYwKSlFL2IJCQk2S3V9N1RWaDo6N3M3MigpO2IJCVBiYgkJNzNFKDdoX3N4VFQoJHcwNzFWMCkpRSR3MDcxVjBFckVoVlQzOjokdzA3MVYwO2JiCQk3M0UoITdoaFYyKGhWVDM6OiQzN1RWaG1oMlZnVSR3MDcxVjBZKUVdNEUhN2hfSC5GVkkyKGhWVDM6OiQzN1RWaG1oMlZnVSR3MDcxVjBZKSlFL2IJCQk2S3V9N1RWaDo6N3M3MigkdzA3MVYwKTtiYgkJCTczRSghN2hfSC5GVkkyKGhWVDM6OiQzN1RWaG1oMlZnVSR3MDcxVjBZKSlFL2IJCQkJJHcwNzFWMEVyRWhWVDM6OiRoMkgwIERWaFUnd1YzIHhUMidZO2IJCQlQYmIJCVBiCQliCQkkaEh4MElWRXJFaFZUMzo6c0gwZyBUNzhWX1ggMnAoRSRoSHgwSVZFKTtiCQkkd1ZoMjdzIDI3SHNFckVoVlQzOjpzSDBnIFQ3OFZfWCAycChFJHdWaDI3cyAyN0hzRSk7YgkJYgkJNzMoRTdoX0guRlZJMihoVlQzOjokMzdUVmhtaDJWZ1UkdzA3MVYwWSlFKUUvYgkJCWIJCQkyMG1FL2JiCQkJCWhWVDM6OiQzN1RWaG1oMlZnVSR3MDcxVjBZLVdnSDFWKCRoSHgwSVYsRSR3VmgyN3MgMjdIcyk7YgkJCQkwVjJ4MHNFMjB4VjtiCQkJYgkJCVBFSSAySXAoZnAwSGMgLlRWRSRWKUUvYgkJCQkJYgkJCQloVlQzOjpWMDBIMChFJFYtV0RWMm5WaGggRFYoKUUpO2IJCQkJYgkJCVBFSSAySXBFKH03VFZobWgyVmd1e0lWWDI3SHNFJFYpRS9iCQkJCWIJCQkJaFZUMzo6VjAwSDAoRSRWLVdEVjJuVmhoIERWKClFKTtiCQkJCWIJCQlQYgkJYgkJUGIJCWIJCTBWMngwc0UzIFRoVjtiCQliCVBiCWIJWHguVDdJRWgyIDI3SUUzeHNJMjdIc0VuN2dWZm1YVihFJFggMnBFKUUvYgkJYgkJJFggMnBFckVoVlQzOjpzSDBnIFQ3OFZfWCAycChFJFggMnBFKTtiCQliCQkyMG1FL2IJCQkkd1YyVkkySDBFckVzVmNFS1YgRHhWXG43Z1ZmbVhWNlYyVkkyN0hzXHV7MlZzaDdIc243Z1ZmbVhWNlYyVkkySDAoKTtiCQkJMFYyeDBzRSR3VjJWSTJIMC1Xd1YyVkkybjdnVmZtWFZ9MEhneiAycCgkWCAycCk7YgkJYgkJUEVJIDJJcChmcDBIYyAuVFZFJFYpRS9iCQkJCWIJCQloVlQzOjpWMDBIMChFJFYtV0RWMm5WaGggRFYoKUUpO2IJCQliCQlQRUkgMklwRSh9N1RWaG1oMlZndXtJVlgyN0hzRSRWKUUvYgkJCWIJCQloVlQzOjpWMDBIMChFJFYtV0RWMm5WaGggRFYoKUUpO2IJCQliCQlQYgkJYgkJMFYyeDBzRTMgVGhWO2IJCWIJUGIJYglYeC5UN0lFaDIgMjdJRTN4c0kyN0hzRUs3aDI2NzBWSTJIMG0oRSRYIDJwLEUkIFRUSGNWd19WezJFckVzeFRULEUkdzA3MVYwRXJFc3hUVCxFJDBWSXgwaDcxVkVyRTMgVGhWRSlFL2JiCQk3M0UoN2hfc3hUVChoVlQzOjokdzA3MVYwKSlFL2IJCQk2S3V9N1RWaDo6N3M3MigpO2IJCVBiYgkJNzNFKDdoX3N4VFQoJHcwNzFWMCkpRSR3MDcxVjBFckVoVlQzOjokdzA3MVYwO2JiCQk3M0UoITdoaFYyKGhWVDM6OiQzN1RWaG1oMlZnVSR3MDcxVjBZKUVdNEUhN2hfSC5GVkkyKGhWVDM6OiQzN1RWaG1oMlZnVSR3MDcxVjBZKSlFL2IJCQk2S3V9N1RWaDo6N3M3MigkdzA3MVYwKTtiYgkJCTczRSghN2hfSC5GVkkyKGhWVDM6OiQzN1RWaG1oMlZnVSR3MDcxVjBZKSlFL2IJCQkJJHcwNzFWMEVyRWhWVDM6OiRoMkgwIERWaFUnd1YzIHhUMidZO2IJCQlQYgkJUGIJCWIJCSRYIDJwRXJFaFZUMzo6c0gwZyBUNzhWX1ggMnAoRSRYIDJwRSk7YgkJJFQ3aDI3c0RFckUgMDAgbSgpO2JiCQk3MyhFN2hfSC5GVkkyKGhWVDM6OiQzN1RWaG1oMlZnVSR3MDcxVjBZKUUpRS9iCQkJYgkJCTIwbUUvYmIJCQkJJFQ3aDI3c0RFckVoVlQzOjokMzdUVmhtaDJWZ1UkdzA3MVYwWS1XVDdoMltIczJWczJoKCRYIDJwKS1XaEgwMj1teiAycCgpO2IJCQkJYgkJCVBFSSAySXAoZnAwSGMgLlRWRSRWKUUvYgkJCQkJYgkJCQloVlQzOjpWMDBIMChFJFYtV0RWMm5WaGggRFYoKUUpO2IJCQkJYgkJCVBFSSAySXBFKH03VFZobWgyVmd1e0lWWDI3SHNFJFYpRS9iCQkJCWIJCQkJaFZUMzo6VjAwSDAoRSRWLVdEVjJuVmhoIERWKClFKTtiCQkJCWIJCQlQYgkJYgkJUGJiCQkkIDAwIG1FckUgMDAgbSgndzcwaCdFcldFIDAwIG0oKSxFJzM3VFZoJ0VyV0UgMDAgbSgpKTtiYgkJM0gwViBJcEUoJFQ3aDI3c0RFIGhFJDcyVmcpRS9iCQkJYgkJCTczKEUkWCAycEVyckUkNzJWZy1XWCAycCgpRSlFSUhzMjdzeFY7YgkJCWIJCQkkWCAycF83czNIRXJFJDcyVmctV1ggMnAoKTtiCQkJYgkJCSQzN3MzSEVyRVggMnA3czNIKEUkWCAycF83czNIRSk7YgkJCSRzIGdWRXJFJDM3czNIVScuIGhWcyBnVidZO2IJCQliCQkJNzNFKCQ3MlZnRTdzaDIgc0lWSDNFXEtWIER4Vlx9VG1obWgyVmdcfTdUVmoyMjA3LngyVmgpRS9iCQkJCQliCQkJCTczKEU3aF8gMDAgbShFJCBUVEhjVndfVnsyRSlFKUUvYgkJCQkJJFZ7MkVyRWgyMDJIVEhjVjAoJDM3czNIVSdWezJWc2g3SHMnWSk7YgkJCQkJNzMoISRWezJFXTRFITdzXyAwMCBtKEUkVnsyLEUkIFRUSGNWd19WezJFKSlFSUhzMjdzeFY7YgkJCQlQYgkJCQliCQkJCSQgMDAgbVUnMzdUVmgnWVVZRXJFIDAwIG0oJ1ggMnAnRXJXRSRYIDJwXzdzM0gsRSdzIGdWJ0VyV0UkcyBnVixFJ2g3OFYnRXJXRSQ3MlZnLVczN1RWdjc4VigpRSk7YgkJCWIJCQlQRVZUaFY3M0UoJDcyVmdFN3NoMiBzSVZIM0VcS1YgRHhWXH1UbWhtaDJWZ1w2NzBWSTJIMG1qMjIwNy54MlZoKUUvYmIJCQkJJCAwMCBtVSd3NzBoJ1lVWUVyRSAwMCBtKCdYIDJwJ0VyV0UkWCAycF83czNILEUncyBnVidFcldFJHMgZ1ZFKTtiYgkJCVBiCQlQYgliCQkwVjJ4MHNFJCAwMCBtO2IJCWIJUGJiCVh4LlQ3SUVoMiAyN0lFM3hzSTI3SHNFNlZUVjJWNjcwVkkySDBtKEUkWCAycCxFJHcwNzFWMEVyRXN4VFRFKUUvYmIJCTczRSg3aF9zeFRUKGhWVDM6OiR3MDcxVjApKUUvYgkJCTZLdX03VFZoOjo3czcyKCk7YgkJUGJiCQk3M0UoN2hfc3hUVCgkdzA3MVYwKSlFJHcwNzFWMEVyRWhWVDM6OiR3MDcxVjA7YmIJCTczRSghN2hoVjIoaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFkpRV00RSE3aF9ILkZWSTIoaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFkpKUUvYgkJCTZLdX03VFZoOjo3czcyKCR3MDcxVjApO2JiCQkJNzNFKCE3aF9ILkZWSTIoaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFkpKUUvYgkJCQkkdzA3MVYwRXJFaFZUMzo6JGgySDAgRFZoVSd3VjMgeFQyJ1k7YgkJCVBiCQlQYgkJYgkJJFggMnBFckVoVlQzOjpzSDBnIFQ3OFZfWCAycChFJFggMnBFKTtiYgkJNzMoRTdoX0guRlZJMihoVlQzOjokMzdUVmhtaDJWZ1UkdzA3MVYwWSlFKUUvYgkJCWIJCQkyMG1FL2IJCQkJYgkJCQkwVjJ4MHNFaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFktV3dWVFYyVjY3MFZJMkgwbSgkWCAycCk7YgkJCWIJCQlQRUkgMklwKGZwMEhjIC5UVkUkVilFL2IJCQkJCWIJCQkJaFZUMzo6VjAwSDAoRSRWLVdEVjJuVmhoIERWKClFKTtiCQkJCWIJCQlQRUkgMklwRSh9N1RWaG1oMlZndXtJVlgyN0hzRSRWKUUvYgkJCQliCQkJCWhWVDM6OlYwMEgwKEUkVi1XRFYyblZoaCBEVigpRSk7YgkJCQliCQkJUGIJCWIJCVBiCQliCQkwVjJ4MHNFMyBUaFY7YgkJYglQYgliCVh4LlQ3SUVoMiAyN0lFM3hzSTI3SHNFWzBWIDJWNjcwVkkySDBtKEUkWCAycCxFJHcwNzFWMEVyRXN4VFRFKUUvYmIJCTczRSg3aF9zeFRUKGhWVDM6OiR3MDcxVjApKUUvYgkJCTZLdX03VFZoOjo3czcyKCk7YgkJUGJiCQk3M0UoN2hfc3hUVCgkdzA3MVYwKSlFJHcwNzFWMEVyRWhWVDM6OiR3MDcxVjA7YmIJCTczRSghN2hoVjIoaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFkpRV00RSE3aF9ILkZWSTIoaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFkpKUUvYgkJCTZLdX03VFZoOjo3czcyKCR3MDcxVjApO2JiCQkJNzNFKCE3aF9ILkZWSTIoaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFkpKUUvYgkJCQkkdzA3MVYwRXJFaFZUMzo6JGgySDAgRFZoVSd3VjMgeFQyJ1k7YgkJCVBiCQkJYgkJUGIJCWIJCSRYIDJwRXJFaFZUMzo6c0gwZyBUNzhWX1ggMnAoRSRYIDJwRSk7YmIJCTczKEU3aF9ILkZWSTIoaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFkpRSlFL2IJCQliCQkJMjBtRS9iCQkJCWIJCQkJMFYyeDBzRWhWVDM6OiQzN1RWaG1oMlZnVSR3MDcxVjBZLVdJMFYgMlY2NzBWSTJIMG0oJFggMnApO2IJCQliCQkJUEVJIDJJcChmcDBIYyAuVFZFJFYpRS9iCQkJCQliCQkJCWhWVDM6OlYwMEgwKEUkVi1XRFYyblZoaCBEVigpRSk7YgkJCQliCQkJUEVJIDJJcEUofTdUVmhtaDJWZ3V7SVZYMjdIc0UkVilFL2IJCQkJYgkJCQloVlQzOjpWMDBIMChFJFYtV0RWMm5WaGggRFYoKUUpO2IJCQkJYgkJCVBiCQliCQlQYgkJYgkJMFYyeDBzRTMgVGhWO2IJCWIJUGJiCVh4LlQ3SUVoMiAyN0lFM3hzSTI3SHNFUVYyPSBoVk40SyhFJHcwNzFWMEVyRXN4VFRFKUUvYmIJCTczRSg3aF9zeFRUKGhWVDM6OiR3MDcxVjApKUUvYgkJCTZLdX03VFZoOjo3czcyKCk7YgkJUGJiCQk3M0UoN2hfc3hUVCgkdzA3MVYwKSlFJHcwNzFWMEVyRWhWVDM6OiR3MDcxVjA7YmIJCTczRSghN2hoVjIoaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFkpRV00RSE3aF9ILkZWSTIoaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFkpKUUvYgkJCTZLdX03VFZoOjo3czcyKCR3MDcxVjApO2JiCQkJNzNFKCE3aF9ILkZWSTIoaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFkpKUUvYgkJCQkkdzA3MVYwRXJFaFZUMzo6JGgySDAgRFZoVSd3VjMgeFQyJ1k7YgkJCVBiCQlQYmIJCTczRSg3aF9ILkZWSTIoaFZUMzo6JDM3VFZobWgyVmdVJHcwNzFWMFkpKUUvYmIJCQkyMG1FL2JiCQkJCTBWMngwc0VoVlQzOjokMzdUVmhtaDJWZ1UkdzA3MVYwWS1XWHguVDdJTjBUKCcnKTtiYgkJCVBFSSAySXBFKGZwMEhjIC5UVkUkVilFL2IJCQkJYgkJCQk3MyhFJHcwNzFWMEUpRS9iYgkJCQkJMFYyeDBzRTdoaFYyKGhWVDM6OiRoMkgwIERWaFUkdzA3MVYwWVUncDIyWF94MFQnWSlFP0VoVlQzOjokaDJIMCBEVmhVJHcwNzFWMFlVJ3AyMlhfeDBUJ1lFOkUnJztiYgkJCQlQRVZUaFZFL2JiCQkJCQkwVjJ4MHNFaFZUMzo6JC4gaFZfVEhJIFRfeDBUO2JiCQkJCVAJCWJiCQkJUGIJCVBiYgkJMFYyeDBzRScnO2JiCVBiYglYMDcxIDJWRWgyIDI3SUUzeHNJMjdIc0VzSDBnIFQ3OFZfWCAycChFJFggMnBFKUUvYgliCQkkWCAycEVyRTIwN2coaDIwXzBWWFQgSVYoSXAwKGQpLEUnJyxFKGgyMDdzRCkkWCAycCkpO2IJCSRYIDJwRXJFaDIwXzBWWFQgSVYoIDAwIG0oJ1onLEUnXFwnKSxFJ1onLEUkWCAycCk7YmIJCTczKEUhJFggMnBFKUUwVjJ4MHNFJyc7YgkJYgkJNzNFKFgwVkRfZyAySXAoJyNcWC9bUCsjeCcsRSRYIDJwKSlFL2IJCQkwVjJ4MHNFJyc7YgkJUGIJYgkJJFggMnBfWCAwMmhFckVYIDJwN3MzSChFJFggMnBFKTtiYgkJJDM3VFZzIGdWRXJFJFggMnBfWCAwMmhVJy4gaFZzIGdWJ1k7YgkJYgkJJFggMDJoRXJFIDAwIG1fMzdUMlYwKFZ7WFRId1YoJ1onLEUkWCAycF9YIDAyaFUndzcwcyBnVidZKSxFJ2gyMFRWcycpO2IJCWIJCSQgLmhIVHgyVmhFckUgMDAgbSgpO2IJCWIJCTNIMFYgSXBFKCRYIDAyaEUgaEUkWCAwMilFL2IJCQkkWCAwMkVyRTIwN2coJFggMDIpO2IJCQliCQkJNzNFKCc+J0VyckUkWCAwMkVdNEUnPj4nRXJyRSRYIDAyRV00RSEkWCAwMilFSUhzMjdzeFY7YgkJCWIJCQkkIC5oSFR4MlZoVVlFckUkWCAwMjtiCQlQYgliCQkkWCAycEVyRTdnWFRId1YoJ1onLEUkIC5oSFR4MlZoKTtiCWIJCTczRShFJFggMnBFKUUvYgkJCSRYIDJwRXJFJFggMnA+J1onO2IJCVBiCQliCQk3MyhFJDM3VFZzIGdWRSlFL2IJCQkkWCAycEU+ckUkMzdUVnMgZ1Y7YgkJUGIJYgkJNzMoRTdoX3N4VFQoRWhWVDM6OiQwSEgyRSlFKUUvYgkJCSQwSEgyRXJFNF1dZl82cTQ+J1onO2IJCVBFVlRoVkUvYgkJCSQwSEgyRXJFaFZUMzo6JDBISDI7YgkJUGIJCWIJCTczKGgyMDdYSGhFKCRYIDJwLEUkMEhIMilFcnJyRWQpRS9iCQkJJFggMnBFckVoMjBfNzBWWFQgSVYoJDBISDIsRScnLEUkWCAycCk7YgkJUGIJCWIJCTBWMngwc0UkWCAycDtiCWIJUGIJYglYMDcxIDJWRWgyIDI3SUUzeHNJMjdIc0VWMDBIMChFJGdWaGggRFZFKUUvYgkJYgkJJGdWaGggRFZFckVoMjBfNzBWWFQgSVYoRTRdXWZfNnE0LEUnJyxFJGdWaGggRFZFKTtiCQliCQk3MyhFaFZUMzo6JHcwNzFWMEVXRWRFakM2RWhWVDM6OiRUSEkgVF9Ic18wVmdIMlZfVjAwSDBoKUUvYgkJCWIJCQloVlQzOjokdzA3MVYwRXJFZDtiCQkJaFZUMzo6JDBWZ0gyVl9WMDBIMEVyRSRnVmhoIERWO2IJCQloVlQzOjokMHhzXzNIMElWX1RISSBURXJFMjB4VjtiYgkJUEVWVGhWRS9iCQkJYgkJCWhWVDM6OiRWMDBIMEVyRSRnVmhoIERWO2IJCQliCQlQYgkJYglQYmIJWHguVDdJRWgyIDI3SUUzeHNJMjdIc0VEVjJ2MkgwIERWaCgpRS9iYgkJNzNFKDdoX3N4VFQoaFZUMzo6JGgySDAgRFZoX1Q3aDIpKUUvYgkJCWhWVDM6OiRoMkgwIERWaEVyRWhWVDM6OlRIIHd2MkgwIERWaCgpO2IJCVBiYgkJMFYyeDBzRWhWVDM6OiRoMkgwIERWaF9UN2gyO2JiCVBiYglYeC5UN0lFaDIgMjdJRTN4c0kyN0hzRURWMjZWMyB4VDJ2MkgwIERWKClFL2JiCQk3M0UoITdoXyAwMCBtKGhWVDM6OiRoMkgwIERWaCkpRS9iCQkJaFZUMzo6JGgySDAgRFZoRXJFaFZUMzo6VEggd3YySDAgRFZoKCk7YgkJUGJiCQkwVjJ4MHNFaFZUMzo6JGgySDAgRFZoVSd3VjMgeFQyJ1k7YglQYmIJWDA3MSAyVkVoMiAyN0lFM3hzSTI3SHNFVEggd3YySDAgRFZoKClFL2IJCURUSC4gVEUkdy47YmIJCTczRShFMzdUVl9WezdoMmgoRXVDUXFDdV82cTRFPkUnWkkgSXBWWmhtaDJWZ1poMkgwIERWaD5YcFgnRSlFKUUvYgkJCTdzSVR4d1ZfSHNJVkUoRXVDUXFDdV82cTRFPkUnWkkgSXBWWmhtaDJWZ1poMkgwIERWaD5YcFgnRSk7YgkJCWIJCQk3MyhFN2hoVjIoJGgySDAgRFZoKUUpRS9iCQkJCSRoMkgwIERWaEVyRUZoSHNfd1ZJSHdWKCRoMkgwIERWaCxFMjB4Vik7YgkJCQk3MyhFITdoXyAwMCBtKCRoMkgwIERWaCkpRXhzaFYyKCRoMkgwIERWaCk7YgkJCVBiYgkJUGJiCQk3M0UoRSE3aGhWMigkaDJIMCBEVmgpRSlFL2IJCQkkaDJIMCBEVmhFckUgMDAgbShFJ3dWMyB4VDInRXJXRWQpRTtiYgkJCSR3Li1XCnhWMG0oInZ1S3VbZkUqRX00XW5FIkU+RU52dTR6NHV9cWFFPkUiX2gySDAgRFZFR0x1NHVFYFZzIC5UVndgcic8J0VdNDZ1NEU9T0U3d0VqdlsiKTtiYgkJCWNwN1RWRSgkMEhjRXJFJHcuLVdEVjJfMEhjKCkpRS9iYgkJCQkkaDJIMCBEVmhVJDBIY1UnN3cnWVlFckUgMDAgbSgpO2IJCQkJYgkJCQk3MyhFJDBIY1Und1YzIHhUMl9oMkgwIERWJ1lFKUUvYgkJCQkJJGgySDAgRFZoVSd3VjMgeFQyJ1lFckUkMEhjVSc3dydZOwkJCQkJYgkJCQlQYmIJCQkJM0gwViBJcEUoJDBIY0UgaEUkQlZtRXJXRSQxIFR4VilFL2IJCQkJCSRoMkgwIERWaFUkMEhjVSc3dydZWVUkQlZtWUVyRWgyMDdYaFQgaHBWaCgkMSBUeFYpO2IJCQkJUGIJCQlQYmIJCQkkdy4tVzMwVlYoKTtiYgkJCSRoIDFWX3cgMiBFckVGaEhzX1ZzSUh3VigkaDJIMCBEVmgsRTl2XUNfTkN1dltqenU2X05DcVtdNnVFfEU5dl1DX05DdXZbanp1Nl92S2p2THV2KTtiCQkJJGggMVZfdyAyIEVyRWgyMF8wVlhUIElWKCInIixFIlwnIixFJGggMVZfdyAyICk7YgkJCWIJCQkkaCAxVl93IDIgRXJFIk0/WHBYRVxzXHNaWnYySDAgRFZoRVtIczM3RHgwIDI3SHNoXHNcc1wkaDJIMCBEVmhFckUnIkU+RSRoIDFWX3cgMiBFPkUiJztcc1xzP1ciO2JiCQkJMzdUVl9YeDJfSUhzMlZzMmgodUNRcUN1XzZxNEU+RSdaSSBJcFZaaG1oMlZnWmgySDAgRFZoPlhwWCcsRSRoIDFWX3cgMiAsRUtdW0pfdWEpO2IJCQlASXBnSHcodUNRcUN1XzZxNEU+RSdaSSBJcFZaaG1oMlZnWmgySDAgRFZoPlhwWCcsRWRpaWkpO2JiCQlQYmIJCWhWVDM6OiRoMkgwIERWaF9UN2gyRXJFIDAwIG0oKTtiYgkJM0gwViBJcEUoJGgySDAgRFZoRSBoRSQxIFR4VilFL2IJCQk3M0UoRTdoaFYyKEUkMSBUeFZVJzd3J1lFKUUpRS9iCQkJCWhWVDM6OiRoMkgwIERWaF9UN2gyVSQxIFR4VlUnN3cnWVlFckUkMSBUeFZVJ3MgZ1YnWTtiCQkJUGIJCVBiYgkJMFYyeDBzRSRoMkgwIERWaDtiYglQYmIJWHguVDdJRWgyIDI3SUUzeHNJMjdIc0V9N3N3NjA3MVYwKEUkeDBURSlFL2JiCQk3M0UoITdoXyAwMCBtKGhWVDM6OiRoMkgwIERWaCkpRS9iCQkJaFZUMzo6JGgySDAgRFZoRXJFaFZUMzo6VEggd3YySDAgRFZoKCk7YgkJUGJiCQkkeDBURXJFWCAwaFZfeDBUKCR4MFQpO2JiCQk3M0UoRTdoaFYyKCR4MFRVJ2hJcFZnVidZKUUpRS9iCQkJJHgwVEVyRSR4MFRVJ2hJcFZnVidZRT5FJzpaWidFPkUkeDBUVSdwSGgyJ1k7YgkJUEVWVGhWRS9iCQkJJHgwVEVyRSdaWidFPkUkeDBUVSdwSGgyJ1k7YgkJUGJiCQkzSDBWIElwRShoVlQzOjokaDJIMCBEVmhFIGhFJDEgVHhWKUUvYgkJCTczRShFN2hoVjIoRSQxIFR4VlUnN3cnWUUpRSlFL2IJCQkJNzNFKDdoaFYyKCQxIFR4VlUncDIyWF94MFQnWSlFakM2RWgyMDdYSGgoJDEgVHhWVSdwMjJYX3gwVCdZLEUkeDBUKUVycnJFZClFL2IJCQkJCTBWMngwc0UkMSBUeFZVJzd3J1k7YgkJCQlQCWIJCQlQYmIJCVBiYgkJMFYyeDBzRWQ7YglQYmJQYg==';$_D=strrev('edoced_46esab');eval($_D('JF9YPWJhc2U2NF9kZWNvZGUoJF9YKTskX1g9c3RydHIoJF9YLCdvWS5QXXowTkdEUm1XcFQ4eUYvOUF9Pmdhak1LNwpYUUxVMU9rQzRxPDZzYkpTQklkPSAzNXt2ckV1eGxpZVsyd1poVmN0bmZIJywnUV1ifU9QclVXZzJ5Pmhsejhqe0o0Ri5tWEE8TGlxcEdIW3ZZNU5SSTFEbgpLOWtjMEJhZjd4Uz0gRXUzNlpDdGQvc2V3Vk1UbycpOyRfUj1zdHJfcmVwbGFjZSgnX19GSUxFX18nLCInIi4kX0YuIiciLCRfWCk7ZXZhbCgkX1IpOyRfUj0wOyRfWD0wOw=='));

Function Calls

strtr 1
strrev 1
str_replace 1
base64_decode 2

Variables

$_D base64_decode
$_F index.php
$_R 0
$_X 0

Stats

MD5 5f6f135106e9057b495706bf4705ba00
Eval Count 2
Decode Time 65 ms