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

Signing you up...

Thank you for signing up!

PHP Decode

<?php // This file is protected by copyright law and provided under license. Reverse engin..

Decoded Output download

?><?php
class SiteCrawler
{
function GmkHSl9d0wHkwtimWX($ZrV0VdSRuUd1C2bTbu,&$urls_completed) {
global $grab_parameters,$kxesmZvVXn;

error_reporting(E_ALL&~E_NOTICE);
set_time_limit($grab_parameters['xs_exec_time']);
if($ZrV0VdSRuUd1C2bTbu['bgexec'])
{
ignore_user_abort(true);
}
register_shutdown_function('tuhOqyefnq6RVW');
$els6pG4dU2RM20k = explode(" ",microtime());
$Q5G8QmbQwJT3v = $els6pG4dU2RM20k[0]+$els6pG4dU2RM20k[1];
$AbiyTr9Cb6H08SemlUw = $ZrV0VdSRuUd1C2bTbu['initurl'];
$vk7woDGzb9IB_Gal9 = $ZrV0VdSRuUd1C2bTbu['maxpg']>0 ? $ZrV0VdSRuUd1C2bTbu['maxpg'] : 1E10;
$QmKaHsN_mnHEfYSpTEg = $ZrV0VdSRuUd1C2bTbu['maxdepth'] ? $ZrV0VdSRuUd1C2bTbu['maxdepth'] : -1;
$l_kNDRia9T1o = $ZrV0VdSRuUd1C2bTbu['progress_callback'];
$rO1mQuOaCrNFolA0Y = preg_replace("#\s*[
]+\s*#",'|', (strstr($s=trim($grab_parameters['xs_excl_urls']),'*')?$s:preg_quote($s,'#')));
$w7NW0sRCh2KBF74Bo = preg_replace("#\s*[
]+\s*#",'|', (strstr($s=trim($grab_parameters['xs_incl_urls']),'*')?$s:preg_quote($s,'#')));
$J_IeOwjAksjM = $Tl5grrNPKv7IY = array();
$pAo1GkXiqGnhFvayP = preg_split('#[
]+#', $grab_parameters['xs_ind_attr']);
$Zq0MnQmsD6T2lLLfU = '#200'.($grab_parameters['xs_allow_httpcode']?'|'.$grab_parameters['xs_allow_httpcode']:'').'#';
foreach($pAo1GkXiqGnhFvayP as $ia)
if($ia)
{
$is = explode(',', $ia);
if($is[0][0]=='$')
$TdLyzkK8x3Qv23IEX = substr($is[0], 1);
else
$TdLyzkK8x3Qv23IEX = str_replace('\$','$',preg_quote($is[0],'#'));
$Tl5grrNPKv7IY[] = $TdLyzkK8x3Qv23IEX;
$J_IeOwjAksjM[str_replace('$','',$is[0])]=array('lm'=>$is[1], 'f'=>$is[2], 'p'=>$is[3]);
}
if($Tl5grrNPKv7IY)
$IFy8IvAAwMb4K = implode('|',$Tl5grrNPKv7IY);
$VTQP1ue8oY1PvdK = parse_url($AbiyTr9Cb6H08SemlUw);
if(!$VTQP1ue8oY1PvdK['path']){$AbiyTr9Cb6H08SemlUw.='/';$VTQP1ue8oY1PvdK = parse_url($AbiyTr9Cb6H08SemlUw);}
$nue1JSywc = $kxesmZvVXn->fetch($AbiyTr9Cb6H08SemlUw,0,true);// the first request is to skip session id
$nue1JSywc = $kxesmZvVXn->fetch($AbiyTr9Cb6H08SemlUw,0,true);
if(!preg_match($Zq0MnQmsD6T2lLLfU,$nue1JSywc['code']))
return array(
'errmsg'=>'<b>There was an error while retrieving the URL specified:</b> '.$AbiyTr9Cb6H08SemlUw.''.
($nue1JSywc['errormsg']?'<br><b>Error message:</b> '.$nue1JSywc['errormsg']:'').
'<br><b>HTTP headers follow:</b><br>'.$nue1JSywc['headersstr'].
'<br><b>HTTP output:</b><br>'.$nue1JSywc['content']
,
);
$AbiyTr9Cb6H08SemlUw = $nue1JSywc['last_url'];
$urls_completed = array();
$urls_404 = array();
$R9idegA3Gd2 = $VTQP1ue8oY1PvdK['scheme'].'://'.$VTQP1ue8oY1PvdK['host'].((!$VTQP1ue8oY1PvdK['port'] || ($VTQP1ue8oY1PvdK['port']=='80'))?'':(':'.$VTQP1ue8oY1PvdK['port']));
$pn = $tsize = 0;
$sc_VvX5jelp2 = preg_replace('#([^/\:]/)/+#','',$R9idegA3Gd2.'/'.fLu000jqfwiRF($VTQP1ue8oY1PvdK['path']));
$mWZ5i5d3fAL = preg_replace('#^.+://[^/]+#', '', $sc_VvX5jelp2);
$JAvBiMmjzH = $kxesmZvVXn->fetch($AbiyTr9Cb6H08SemlUw,0,true,true);
$Dw9SGQigEe = str_replace($sc_VvX5jelp2,'',$AbiyTr9Cb6H08SemlUw);
$urls_list_full = array($Dw9SGQigEe);
if(!$Dw9SGQigEe)$Dw9SGQigEe='/';
$urls_list = array($Dw9SGQigEe);
$urls_list2 = array();
$h0KbcjRKxhS_ = array();
$links_level = 0;
$kD52SIPb2Kr_e = $ref_links = $ref_links2 = array();
$Ebcaq_YCAyxUIB324G = 0;
$WnpHNxdaTuMquF7 = $vk7woDGzb9IB_Gal9;
if(isset($grab_parameters['xs_robotstxt']) && $grab_parameters['xs_robotstxt'])
{
$KNwxeaqj_2WsX8w0 = $kxesmZvVXn->fetch($R9idegA3Gd2.'/robots.txt');
if($R9idegA3Gd2.'/' != $sc_VvX5jelp2)
{
$FE4j24hlEn8 = "
".$kxesmZvVXn->fetch($sc_VvX5jelp2.'robots.txt');
$KNwxeaqj_2WsX8w0['content']  .= "
".$FE4j24hlEn8['content'];
}
$ra=preg_split('#user-agent:\s*#im',$KNwxeaqj_2WsX8w0['content']);
$dULsz8pA0Aoo=array();
for($i=1;$i<count($ra);$i++){
preg_match('#^(\S+)(.*)$#s',$ra[$i],$w1CLxCPhUy9qzof);
if($w1CLxCPhUy9qzof[1]=='*'||strstr($w1CLxCPhUy9qzof[1],'google')){
preg_match_all('#^disallow:\s*(\S*)#im',$w1CLxCPhUy9qzof[2],$rm);
for($pi=0;$pi<count($rm[1]);$pi++)
if($rm[1][$pi])$dULsz8pA0Aoo[]=preg_quote($rm[1][$pi],'#');
}
}
$S8whnPM_47w7=implode('|',$dULsz8pA0Aoo);
}else
$S8whnPM_47w7 = '';
$Jzvvi5906fScvwvc6H = $grab_parameters['xs_exc_skip']!='\.()';
$exrHBWP15 = $grab_parameters['xs_inc_skip']!='\.()';
$grab_parameters['xs_inc_skip'] .= '$';
$grab_parameters['xs_exc_skip'] .= '$';
$nTPUGhxIWWT = 0;
$url_ind = 0;
$cnu = 1;
$pf = fopen(dF0x3UOdG0EmByvW.lPT6M7drPhQPL,'w');fclose($pf);
if($ZrV0VdSRuUd1C2bTbu['resume']!=''){
$PJcxuhwvrlD58h6ut3d = @K3D58WhS_Kbefnm(B0tchSNt2Krkc(dF0x3UOdG0EmByvW.lRhViUrflh4));
echo 'Resuming the last session (last updated: '.date('Y-m-d H:i:s',$PJcxuhwvrlD58h6ut3d['time']).')';
if($PJcxuhwvrlD58h6ut3d)
extract($PJcxuhwvrlD58h6ut3d);
$Q5G8QmbQwJT3v-=$ctime;
$nTPUGhxIWWT = $ctime;
unset($PJcxuhwvrlD58h6ut3d);
}
sleep(1); @unlink(dF0x3UOdG0EmByvW.lPT6M7drPhQPL);
do {
$KLhrN1FulWAW = $urls_list[$url_ind++];
$nue1JSywc = array();
$cn = '';
if(isset($h0KbcjRKxhS_[$KLhrN1FulWAW]))
$KLhrN1FulWAW=$h0KbcjRKxhS_[$KLhrN1FulWAW];
$f = $Jzvvi5906fScvwvc6H && preg_match('#'.$grab_parameters['xs_exc_skip'].'#i',$KLhrN1FulWAW);
if($rO1mQuOaCrNFolA0Y&&!$f)$f=$f||preg_match('#('.$rO1mQuOaCrNFolA0Y.')#',$KLhrN1FulWAW);
if($S8whnPM_47w7&&!$f)$f=$f||preg_match('#^('.$S8whnPM_47w7.')#',$mWZ5i5d3fAL.$KLhrN1FulWAW);
$f2 = false;
if(!$f){
$f2 = $exrHBWP15 && preg_match('#'.$grab_parameters['xs_inc_skip'].'#',$KLhrN1FulWAW);
if($w7NW0sRCh2KBF74Bo&&!$f2)
$f2 = $f2||(preg_match('#('.$w7NW0sRCh2KBF74Bo.')#',$KLhrN1FulWAW));
}
do{
if(!$f&&!$f2){// && ($WnpHNxdaTuMquF7>(count($urls_list)-$url_ind))){
if($QmKaHsN_mnHEfYSpTEg<=0 || $links_level<$QmKaHsN_mnHEfYSpTEg)
{
$aRjeSjk24 = preg_replace('#([^/\:]/)/+#','',$sc_VvX5jelp2.$KLhrN1FulWAW);


if($_GET['ddbg'])echo "<h4> { $aRjeSjk24 } </h4>";flush();
$Gd6KIqMAe4zXCC=0;
do {
$nue1JSywc = $kxesmZvVXn->fetch($aRjeSjk24,0,1);
if($nue1JSywc['code']==403)
{
$Gd6KIqMAe4zXCC++;
sleep($grab_parameters['xs_delay_ms']?$grab_parameters['xs_delay_ms']:1);
}
else $Gd6KIqMAe4zXCC=5;
}while($Gd6KIqMAe4zXCC<3);


$ZW04gbhF9A8P=strtolower($nue1JSywc['headers']['content-type']);
if(!strstr($ZW04gbhF9A8P,'text/html')&&!strstr($ZW04gbhF9A8P,'/xhtml'))
continue;
$CaVSdh0LSmJ5J = array();
if($nue1JSywc['code']==404){
$urls_404[]=array($KLhrN1FulWAW,$ref_links2[$KLhrN1FulWAW]);
if($Zq0MnQmsD6T2lLLfU && !preg_match($Zq0MnQmsD6T2lLLfU,$nue1JSywc['code']))
continue;
}
if($aRjeSjk24!=$nue1JSywc['last_url']){
$h0KbcjRKxhS_[$KLhrN1FulWAW]=$nue1JSywc['last_url']; $io=$KLhrN1FulWAW;
$wBZSjAu6USLv869OfXK = preg_replace('#^.*?'.preg_quote($sc_VvX5jelp2,'#').'#','',$nue1JSywc['last_url']);
$urls_list2[] = $wBZSjAu6USLv869OfXK;
$ref_links[$wBZSjAu6USLv869OfXK] = $KLhrN1FulWAW;
continue;
}
if(!preg_match($Zq0MnQmsD6T2lLLfU,$nue1JSywc['code']))
continue;
$cn = $nue1JSywc['content'];

$tsize+=strlen($cn);
$cn = preg_replace('#<!--.*?-->#is', '',$cn);
preg_match('#<base[^>]*?href=[\'"](.*?)[\'"]#is',$cn,$bm);
if(isset($bm[1])&&$bm[1])
$fSB9ZrUIK4aICK6XAM = fLu000jqfwiRF($bm[1].'-');
else
$fSB9ZrUIK4aICK6XAM = fLu000jqfwiRF($sc_VvX5jelp2.$KLhrN1FulWAW);

preg_match_all('#<a(?:rea)?\s[^>]*href\s*=\s*(?:"([^"]*)|\'([^\']*)|([^\s\">]+)).*?>#is', $cn, $am);
preg_match_all('#<i?frame\s[^>]*src\s*=\s*["\']?(.*?)("|>|\'[>\s])#is', $cn, $LDd7bqg5_C);
preg_match_all('#<meta\s[^>]*http-equiv\s*=\s*"?refresh[^>]*URL\s*=\s*["\']?(.*?)("|>|\'[>\s])#is', $cn, $Tqxf4L13C0B33yiyrv);
$CaVSdh0LSmJ5J = array();
for($i=0;$i<count($am[1]);$i++)
{
if( !preg_match('#rel=["\']nofollow#i', $am[0][$i]) ) 
$CaVSdh0LSmJ5J[] = $am[1][$i];
}
$CaVSdh0LSmJ5J = array_merge(
$CaVSdh0LSmJ5J,

$am[2],$am[3],  
$LDd7bqg5_C[1],$Tqxf4L13C0B33yiyrv[1]);
$CaVSdh0LSmJ5J = array_unique($CaVSdh0LSmJ5J);

$nn = $nt = 0;
reset($CaVSdh0LSmJ5J);
if(preg_match('#<meta name="robots" content="[^"]*?nofollow#is',$cn))
$CaVSdh0LSmJ5J = array();
foreach($CaVSdh0LSmJ5J as $i=>$ll)
if($ll)
{                    
$a = $sa = trim($ll);
if($grab_parameters['xs_proto_skip'] && 
(preg_match('#^'.$grab_parameters['xs_proto_skip'].'#i',$a)||
($Jzvvi5906fScvwvc6H && preg_match('#'.$grab_parameters['xs_exc_skip'].'#i',$a))||
preg_match('#^'.$grab_parameters['xs_proto_skip'].'#i',function_exists('html_entity_decode')?html_entity_decode($a):$a)
))
continue;
if($grab_parameters['xs_exclude_check'])
{
$_f=$_f2=false;
$_f=$rO1mQuOaCrNFolA0Y&&preg_match('#('.$rO1mQuOaCrNFolA0Y.')#',$a);
if($S8whnPM_47w7&&!$_f)$_f=preg_match('#^('.$S8whnPM_47w7.')#',$mWZ5i5d3fAL.$a);

if($_f)continue;
}


if(preg_match('#https?(:|&\#58;)#is',$a));
else if($a&&$a[0]=='/')$a = $R9idegA3Gd2.$a;
else $a = $fSB9ZrUIK4aICK6XAM.$a;
$a=str_replace('/./','/',$a);
if(strstr($a,'../')){
preg_match('#(.*?:.*?//.*?)(/.*)$#',$a,$aa);
do{
$ap = $aa[2];
$aa[2] = preg_replace('#/?[^/]*/\.\.#','',$ap,1);
}while($aa[2]!=$ap);
$a = $aa[1].$aa[2];
}
$a = preg_replace('#/\./#','/',$a);
$a = str_replace('&#38;','&',$a);
$a = str_replace('&amp;','&',$a);
$a = preg_replace('#\#.*$#','',$a);
$a = preg_replace('#([^/\:]/)/+#','',$a);
$a = preg_replace('#[
]+#s','',$a);

if(strtolower(substr($a,0,strlen($sc_VvX5jelp2)) ) != strtolower($sc_VvX5jelp2))continue;

$wBZSjAu6USLv869OfXK = substr($a,strlen($sc_VvX5jelp2));
if($grab_parameters['xs_cleanurls'])
$wBZSjAu6USLv869OfXK = @preg_replace($grab_parameters['xs_cleanurls'],'',$wBZSjAu6USLv869OfXK);
if($grab_parameters['xs_cleanpar'])
{
$wBZSjAu6USLv869OfXK = @preg_replace('#[\?\&]('.$grab_parameters['xs_cleanpar'].')=[a-z0-9]+$#i','',$wBZSjAu6USLv869OfXK);
$wBZSjAu6USLv869OfXK = @preg_replace('#([\?\&])('.$grab_parameters['xs_cleanpar'].')=[a-z0-9]+&#i','$1',$wBZSjAu6USLv869OfXK);
}
$urls_list2[] = $wBZSjAu6USLv869OfXK;
$ref_links[$wBZSjAu6USLv869OfXK] = $KLhrN1FulWAW;
$nt++;
}
unset($CaVSdh0LSmJ5J);
}
}

if($grab_parameters['xs_incl_only']&&!$f)$f=$f||!preg_match('#'.preg_quote($grab_parameters['xs_incl_only'],'#').'#',$sc_VvX5jelp2.$KLhrN1FulWAW);
if(!$f) $f = $f||preg_match('#<meta name="robots" content="[^"]*?noindex#is',$cn);
if(!$f){
$RT9GXtyabs__A = array(

'link'=>preg_replace('#([^/\:]/)/+#','',$sc_VvX5jelp2.$KLhrN1FulWAW)
);
if($grab_parameters['xs_makehtml'])
{
preg_match('#<title>(.*?)</title>#is', $nue1JSywc['content'], $PoGqwMsoB);
$RT9GXtyabs__A['t'] = strip_tags($PoGqwMsoB[1]);
}
if($grab_parameters['xs_metadesc'])
{
preg_match('#<meta\s[^>]*(?:http-equiv|name)\s*=\s*"?description[^>]*content\s*=\s*["]?([^>\"]*)#is', $cn, $WFYPUhXuj);
if($WFYPUhXuj[1])
$RT9GXtyabs__A['d'] = $WFYPUhXuj[1];
}
if($grab_parameters['xs_makeror']||$grab_parameters['xs_autopriority'])
$RT9GXtyabs__A['o'] = max(0,$links_level);
if(preg_match('#('.$IFy8IvAAwMb4K.')#',$sc_VvX5jelp2.$KLhrN1FulWAW,$yyq7fDoK_cBPACC6n1))
{
$RT9GXtyabs__A['clm'] = $J_IeOwjAksjM[$yyq7fDoK_cBPACC6n1[1]]['lm'];
$RT9GXtyabs__A['f'] = $J_IeOwjAksjM[$yyq7fDoK_cBPACC6n1[1]]['f'];
$RT9GXtyabs__A['p'] = $J_IeOwjAksjM[$yyq7fDoK_cBPACC6n1[1]]['p'];
}
if(!$RT9GXtyabs__A['lm'] && isset($nue1JSywc['headers']['last-modified']))
$RT9GXtyabs__A['lm']=$nue1JSywc['headers']['last-modified'];

$urls_completed[] = $RT9GXtyabs__A;
$WnpHNxdaTuMquF7 = $vk7woDGzb9IB_Gal9 - count($urls_completed);
}
}while(false);// zerowhile
if($url_ind>=$cnu)
{
unset($urls_list);
$url_ind = 0;
$urls_list = array_values(array_unique(array_diff($urls_list2,$urls_list_full)));
$urls_list_full = array_merge($urls_list_full,$urls_list);
$cnu = count($urls_list);
unset($ref_links2);
$ref_links2 = $ref_links;
unset($ref_links); unset($urls_list2);
$ref_links = array();
$urls_list2 = array();
$links_level++;
}
$pn++;
$pl=min($cnu-$url_ind,$WnpHNxdaTuMquF7);
if( ($cnu==$url_ind || $pl==0||$pn==1 || ($pn%20)==0)
|| count($urls_completed)>=$vk7woDGzb9IB_Gal9)
{
if(strstr($JAvBiMmjzH['content'],'header'))break;
$els6pG4dU2RM20k=explode(" ",microtime());
$ctime = $els6pG4dU2RM20k[0]+$els6pG4dU2RM20k[1] - $Q5G8QmbQwJT3v;
if (function_exists('memory_get_usage'))
$mu=memory_get_usage();
else
{

$mu='-';
 
}
if(intval($mu))
$mu=number_format($mu/1024,1).' Kb';
$urls_list2 = array_values(array_unique($urls_list2));
$x0KYUlJb0P926oU = array(
$ctime, // running time
str_replace($AbiyTr9Cb6H08SemlUw, '', $KLhrN1FulWAW),  // current URL
$pl,                    // urls left
$pn,                    // processed urls
$tsize,                 // bandwidth usage
$links_level,           // depth level
$mu,                    // memory usage
count($urls_completed), // added in sitemap
count($urls_list2)      // in the queue
);
if($ZrV0VdSRuUd1C2bTbu['bgexec'])
TpMaRXMDxB2(LBgEBgVZ4z,nfCUUd8A8V($x0KYUlJb0P926oU));
if($l_kNDRia9T1o&&!$f)
$l_kNDRia9T1o($x0KYUlJb0P926oU);
}
if($grab_parameters['xs_savestate_time']>0 &&
( 
($ctime-$nTPUGhxIWWT>$grab_parameters['xs_savestate_time'])
|| ($url_ind>=$cnu)
)
)
{
$nTPUGhxIWWT = $ctime;
$PJcxuhwvrlD58h6ut3d = compact('url_ind',
'urls_list','urls_list2','cnu',
'ref_links','ref_links2',
'urls_list_full','urls_completed',
'urls_404',
'nt','tsize','pn','links_level','ctime'
);
$PJcxuhwvrlD58h6ut3d['time']=time();
$wX3J29vlCRlFMhuQW=nfCUUd8A8V($PJcxuhwvrlD58h6ut3d);
TpMaRXMDxB2(lRhViUrflh4,$wX3J29vlCRlFMhuQW);
unset($PJcxuhwvrlD58h6ut3d);
unset($wX3J29vlCRlFMhuQW);

}
if($grab_parameters['xs_delay_req'] && $grab_parameters['xs_delay_ms'] &&
(($pn%$grab_parameters['xs_delay_req'])==0))
{
sleep($grab_parameters['xs_delay_ms']);
}
if($RXZaXpOvdbjwY=file_exists($Jh02oPSmnHw=dF0x3UOdG0EmByvW.lPT6M7drPhQPL)){
if(@unlink($Jh02oPSmnHw))
break;
else
$RXZaXpOvdbjwY=0;
}
}while(
count($urls_completed)<$vk7woDGzb9IB_Gal9
&&
$url_ind<$cnu
);
if($_GET['ddbgexit'])exit;




return array(
'u404'=>$urls_404,
'ctime'=>$ctime,
'tsize'=>$tsize,
'errmsg'=>'',
'initurl'=>$AbiyTr9Cb6H08SemlUw,
'initdir'=>$sc_VvX5jelp2,
'ucount'=>count($urls_completed),
'time'=>time(),
'params'=>$ZrV0VdSRuUd1C2bTbu,
'interrupt'=>$RXZaXpOvdbjwY
);
}
}
$NgdBMzLLVP5 = new SiteCrawler();
function tuhOqyefnq6RVW(){
@unlink(dF0x3UOdG0EmByvW.LBgEBgVZ4z);
}
?>

Did this file decode correctly?

Original Code

<?php // This file is protected by copyright law and provided under license. Reverse engineering of this file is strictly prohibited.
eval(base64_decode('Pz48P3BocA0KY2xhc3MgU2l0ZUNyYXdsZXINCnsNCmZ1bmN0aW9uIEdta0hTbDlkMHdIa3d0aW1XWCgkWnJWMFZkU1J1VWQxQzJiVGJ1LCYkdXJsc19jb21wbGV0ZWQpIHsNCmdsb2JhbCAkZ3JhYl9wYXJhbWV0ZXJzLCRreGVzbVp2VlhuOw0KCmVycm9yX3JlcG9ydGluZyhFX0FMTCZ+RV9OT1RJQ0UpOw0Kc2V0X3RpbWVfbGltaXQoJGdyYWJfcGFyYW1ldGVyc1sneHNfZXhlY190aW1lJ10pOw0KaWYoJFpyVjBWZFNSdVVkMUMyYlRidVsnYmdleGVjJ10pDQp7DQppZ25vcmVfdXNlcl9hYm9ydCh0cnVlKTsNCn0NCnJlZ2lzdGVyX3NodXRkb3duX2Z1bmN0aW9uKCd0dWhPcXllZm5xNlJWVycpOw0KJGVsczZwRzRkVTJSTTIwayA9IGV4cGxvZGUoIiAiLG1pY3JvdGltZSgpKTsNCiRRNUc4UW1iUXdKVDN2ID0gJGVsczZwRzRkVTJSTTIwa1swXSskZWxzNnBHNGRVMlJNMjBrWzFdOw0KJEFiaXlUcjlDYjZIMDhTZW1sVXcgPSAkWnJWMFZkU1J1VWQxQzJiVGJ1Wydpbml0dXJsJ107DQokdms3d29ER3piOUlCX0dhbDkgPSAkWnJWMFZkU1J1VWQxQzJiVGJ1WydtYXhwZyddPjAgPyAkWnJWMFZkU1J1VWQxQzJiVGJ1WydtYXhwZyddIDogMUUxMDsNCiRRbUthSHNOX21uSEVmWVNwVEVnID0gJFpyVjBWZFNSdVVkMUMyYlRidVsnbWF4ZGVwdGgnXSA/ICRaclYwVmRTUnVVZDFDMmJUYnVbJ21heGRlcHRoJ10gOiAtMTsNCiRsX2tORFJpYTlUMW8gPSAkWnJWMFZkU1J1VWQxQzJiVGJ1Wydwcm9ncmVzc19jYWxsYmFjayddOw0KJHJPMW1RdU9hQ3JORm9sQTBZID0gcHJlZ19yZXBsYWNlKCIjXHMqW1xyXG5dK1xzKiMiLCd8JywgKHN0cnN0cigkcz10cmltKCRncmFiX3BhcmFtZXRlcnNbJ3hzX2V4Y2xfdXJscyddKSwnKicpPyRzOnByZWdfcXVvdGUoJHMsJyMnKSkpOw0KJHc3Tlcwc1JDaDJLQkY3NEJvID0gcHJlZ19yZXBsYWNlKCIjXHMqW1xyXG5dK1xzKiMiLCd8JywgKHN0cnN0cigkcz10cmltKCRncmFiX3BhcmFtZXRlcnNbJ3hzX2luY2xfdXJscyddKSwnKicpPyRzOnByZWdfcXVvdGUoJHMsJyMnKSkpOw0KJEpfSWVPd2pBa3NqTSA9ICRUbDVncnJOUEt2N0lZID0gYXJyYXkoKTsNCiRwQW8xR2tYaXFHbmhGdmF5UCA9IHByZWdfc3BsaXQoJyNbXHJcbl0rIycsICRncmFiX3BhcmFtZXRlcnNbJ3hzX2luZF9hdHRyJ10pOw0KJFpxME1uUW1zRDZUMmxMTGZVID0gJyMyMDAnLigkZ3JhYl9wYXJhbWV0ZXJzWyd4c19hbGxvd19odHRwY29kZSddPyd8Jy4kZ3JhYl9wYXJhbWV0ZXJzWyd4c19hbGxvd19odHRwY29kZSddOicnKS4nIyc7DQpmb3JlYWNoKCRwQW8xR2tYaXFHbmhGdmF5UCBhcyAkaWEpDQppZigkaWEpDQp7DQokaXMgPSBleHBsb2RlKCcsJywgJGlhKTsNCmlmKCRpc1swXVswXT09JyQnKQ0KJFRkTHl6a0s4eDNRdjIzSUVYID0gc3Vic3RyKCRpc1swXSwgMSk7DQplbHNlDQokVGRMeXprSzh4M1F2MjNJRVggPSBzdHJfcmVwbGFjZSgnXFwkJywnJCcscHJlZ19xdW90ZSgkaXNbMF0sJyMnKSk7DQokVGw1Z3JyTlBLdjdJWVtdID0gJFRkTHl6a0s4eDNRdjIzSUVYOw0KJEpfSWVPd2pBa3NqTVtzdHJfcmVwbGFjZSgnJCcsJycsJGlzWzBdKV09YXJyYXkoJ2xtJz0+JGlzWzFdLCAnZic9PiRpc1syXSwgJ3AnPT4kaXNbM10pOw0KfQ0KaWYoJFRsNWdyck5QS3Y3SVkpDQokSUZ5OEl2QUF3TWI0SyA9IGltcGxvZGUoJ3wnLCRUbDVncnJOUEt2N0lZKTsNCiRWVFFQMXVlOG9ZMVB2ZEsgPSBwYXJzZV91cmwoJEFiaXlUcjlDYjZIMDhTZW1sVXcpOw0KaWYoISRWVFFQMXVlOG9ZMVB2ZEtbJ3BhdGgnXSl7JEFiaXlUcjlDYjZIMDhTZW1sVXcuPScvJzskVlRRUDF1ZThvWTFQdmRLID0gcGFyc2VfdXJsKCRBYml5VHI5Q2I2SDA4U2VtbFV3KTt9DQokbnVlMUpTeXdjID0gJGt4ZXNtWnZWWG4tPmZldGNoKCRBYml5VHI5Q2I2SDA4U2VtbFV3LDAsdHJ1ZSk7Ly8gdGhlIGZpcnN0IHJlcXVlc3QgaXMgdG8gc2tpcCBzZXNzaW9uIGlkDQokbnVlMUpTeXdjID0gJGt4ZXNtWnZWWG4tPmZldGNoKCRBYml5VHI5Q2I2SDA4U2VtbFV3LDAsdHJ1ZSk7DQppZighcHJlZ19tYXRjaCgkWnEwTW5RbXNENlQybExMZlUsJG51ZTFKU3l3Y1snY29kZSddKSkNCnJldHVybiBhcnJheSgNCidlcnJtc2cnPT4nPGI+VGhlcmUgd2FzIGFuIGVycm9yIHdoaWxlIHJldHJpZXZpbmcgdGhlIFVSTCBzcGVjaWZpZWQ6PC9iPiAnLiRBYml5VHI5Q2I2SDA4U2VtbFV3LicnLg0KKCRudWUxSlN5d2NbJ2Vycm9ybXNnJ10/Jzxicj48Yj5FcnJvciBtZXNzYWdlOjwvYj4gJy4kbnVlMUpTeXdjWydlcnJvcm1zZyddOicnKS4NCic8YnI+PGI+SFRUUCBoZWFkZXJzIGZvbGxvdzo8L2I+PGJyPicuJG51ZTFKU3l3Y1snaGVhZGVyc3N0ciddLg0KJzxicj48Yj5IVFRQIG91dHB1dDo8L2I+PGJyPicuJG51ZTFKU3l3Y1snY29udGVudCddDQosDQopOw0KJEFiaXlUcjlDYjZIMDhTZW1sVXcgPSAkbnVlMUpTeXdjWydsYXN0X3VybCddOw0KJHVybHNfY29tcGxldGVkID0gYXJyYXkoKTsNCiR1cmxzXzQwNCA9IGFycmF5KCk7DQokUjlpZGVnQTNHZDIgPSAkVlRRUDF1ZThvWTFQdmRLWydzY2hlbWUnXS4nOi8vJy4kVlRRUDF1ZThvWTFQdmRLWydob3N0J10uKCghJFZUUVAxdWU4b1kxUHZkS1sncG9ydCddIHx8ICgkVlRRUDF1ZThvWTFQdmRLWydwb3J0J109PSc4MCcpKT8nJzooJzonLiRWVFFQMXVlOG9ZMVB2ZEtbJ3BvcnQnXSkpOw0KJHBuID0gJHRzaXplID0gMDsNCiRzY19Wdlg1amVscDIgPSBwcmVnX3JlcGxhY2UoJyMoW14vXDpdLykvKyMnLCdcXDEnLCRSOWlkZWdBM0dkMi4nLycuZkx1MDAwanFmd2lSRigkVlRRUDF1ZThvWTFQdmRLWydwYXRoJ10pKTsNCiRtV1o1aTVkM2ZBTCA9IHByZWdfcmVwbGFjZSgnI14uKzovL1teL10rIycsICcnLCAkc2NfVnZYNWplbHAyKTsNCiRKQXZCaU1tanpIID0gJGt4ZXNtWnZWWG4tPmZldGNoKCRBYml5VHI5Q2I2SDA4U2VtbFV3LDAsdHJ1ZSx0cnVlKTsNCiREdzlTR1FpZ0VlID0gc3RyX3JlcGxhY2UoJHNjX1Z2WDVqZWxwMiwnJywkQWJpeVRyOUNiNkgwOFNlbWxVdyk7DQokdXJsc19saXN0X2Z1bGwgPSBhcnJheSgkRHc5U0dRaWdFZSk7DQppZighJER3OVNHUWlnRWUpJER3OVNHUWlnRWU9Jy8nOw0KJHVybHNfbGlzdCA9IGFycmF5KCREdzlTR1FpZ0VlKTsNCiR1cmxzX2xpc3QyID0gYXJyYXkoKTsNCiRoMEtiY2pSS3hoU18gPSBhcnJheSgpOw0KJGxpbmtzX2xldmVsID0gMDsNCiRrRDUyU0lQYjJLcl9lID0gJHJlZl9saW5rcyA9ICRyZWZfbGlua3MyID0gYXJyYXkoKTsNCiRFYmNhcV9ZQ0F5eFVJQjMyNEcgPSAwOw0KJFducEhOeGRhVHVNcXVGNyA9ICR2azd3b0RHemI5SUJfR2FsOTsNCmlmKGlzc2V0KCRncmFiX3BhcmFtZXRlcnNbJ3hzX3JvYm90c3R4dCddKSAmJiAkZ3JhYl9wYXJhbWV0ZXJzWyd4c19yb2JvdHN0eHQnXSkNCnsNCiRLTnd4ZWFxal8yV3NYOHcwID0gJGt4ZXNtWnZWWG4tPmZldGNoKCRSOWlkZWdBM0dkMi4nL3JvYm90cy50eHQnKTsNCmlmKCRSOWlkZWdBM0dkMi4nLycgIT0gJHNjX1Z2WDVqZWxwMikNCnsNCiRGRTRqMjRobEVuOCA9ICJcbiIuJGt4ZXNtWnZWWG4tPmZldGNoKCRzY19Wdlg1amVscDIuJ3JvYm90cy50eHQnKTsNCiRLTnd4ZWFxal8yV3NYOHcwWydjb250ZW50J10gIC49ICJcbiIuJEZFNGoyNGhsRW44Wydjb250ZW50J107DQp9DQokcmE9cHJlZ19zcGxpdCgnI3VzZXItYWdlbnQ6XHMqI2ltJywkS053eGVhcWpfMldzWDh3MFsnY29udGVudCddKTsNCiRkVUxzejhwQTBBb289YXJyYXkoKTsNCmZvcigkaT0xOyRpPGNvdW50KCRyYSk7JGkrKyl7DQpwcmVnX21hdGNoKCcjXihcUyspKC4qKSQjcycsJHJhWyRpXSwkdzFDTHhDUGhVeTlxem9mKTsNCmlmKCR3MUNMeENQaFV5OXF6b2ZbMV09PScqJ3x8c3Ryc3RyKCR3MUNMeENQaFV5OXF6b2ZbMV0sJ2dvb2dsZScpKXsNCnByZWdfbWF0Y2hfYWxsKCcjXmRpc2FsbG93OlxzKihcUyopI2ltJywkdzFDTHhDUGhVeTlxem9mWzJdLCRybSk7DQpmb3IoJHBpPTA7JHBpPGNvdW50KCRybVsxXSk7JHBpKyspDQppZigkcm1bMV1bJHBpXSkkZFVMc3o4cEEwQW9vW109cHJlZ19xdW90ZSgkcm1bMV1bJHBpXSwnIycpOw0KfQ0KfQ0KJFM4d2huUE1fNDd3Nz1pbXBsb2RlKCd8JywkZFVMc3o4cEEwQW9vKTsNCn1lbHNlDQokUzh3aG5QTV80N3c3ID0gJyc7DQokSnp2dmk1OTA2ZlNjdnd2YzZIID0gJGdyYWJfcGFyYW1ldGVyc1sneHNfZXhjX3NraXAnXSE9J1xcLigpJzsNCiRleHJIQldQMTUgPSAkZ3JhYl9wYXJhbWV0ZXJzWyd4c19pbmNfc2tpcCddIT0nXFwuKCknOw0KJGdyYWJfcGFyYW1ldGVyc1sneHNfaW5jX3NraXAnXSAuPSAnJCc7DQokZ3JhYl9wYXJhbWV0ZXJzWyd4c19leGNfc2tpcCddIC49ICckJzsNCiRuVFBVR2h4SVdXVCA9IDA7DQokdXJsX2luZCA9IDA7DQokY251ID0gMTsNCiRwZiA9IGZvcGVuKGRGMHgzVU9kRzBFbUJ5dlcubFBUNk03ZHJQaFFQTCwndycpO2ZjbG9zZSgkcGYpOw0KaWYoJFpyVjBWZFNSdVVkMUMyYlRidVsncmVzdW1lJ10hPScnKXsNCiRQSmN4dWh3dnJsRDU4aDZ1dDNkID0gQEszRDU4V2hTX0tiZWZubShCMHRjaFNOdDJLcmtjKGRGMHgzVU9kRzBFbUJ5dlcubFJoVmlVcmZsaDQpKTsNCmVjaG8gJ1Jlc3VtaW5nIHRoZSBsYXN0IHNlc3Npb24gKGxhc3QgdXBkYXRlZDogJy5kYXRlKCdZLW0tZCBIOmk6cycsJFBKY3h1aHd2cmxENThoNnV0M2RbJ3RpbWUnXSkuJyknOw0KaWYoJFBKY3h1aHd2cmxENThoNnV0M2QpDQpleHRyYWN0KCRQSmN4dWh3dnJsRDU4aDZ1dDNkKTsNCiRRNUc4UW1iUXdKVDN2LT0kY3RpbWU7DQokblRQVUdoeElXV1QgPSAkY3RpbWU7DQp1bnNldCgkUEpjeHVod3ZybEQ1OGg2dXQzZCk7DQp9DQpzbGVlcCgxKTsgQHVubGluayhkRjB4M1VPZEcwRW1CeXZXLmxQVDZNN2RyUGhRUEwpOw0KZG8gew0KJEtMaHJOMUZ1bFdBVyA9ICR1cmxzX2xpc3RbJHVybF9pbmQrK107DQokbnVlMUpTeXdjID0gYXJyYXkoKTsNCiRjbiA9ICcnOw0KaWYoaXNzZXQoJGgwS2JjalJLeGhTX1skS0xock4xRnVsV0FXXSkpDQokS0xock4xRnVsV0FXPSRoMEtiY2pSS3hoU19bJEtMaHJOMUZ1bFdBV107DQokZiA9ICRKenZ2aTU5MDZmU2N2d3ZjNkggJiYgcHJlZ19tYXRjaCgnIycuJGdyYWJfcGFyYW1ldGVyc1sneHNfZXhjX3NraXAnXS4nI2knLCRLTGhyTjFGdWxXQVcpOw0KaWYoJHJPMW1RdU9hQ3JORm9sQTBZJiYhJGYpJGY9JGZ8fHByZWdfbWF0Y2goJyMoJy4kck8xbVF1T2FDck5Gb2xBMFkuJykjJywkS0xock4xRnVsV0FXKTsNCmlmKCRTOHdoblBNXzQ3dzcmJiEkZikkZj0kZnx8cHJlZ19tYXRjaCgnI14oJy4kUzh3aG5QTV80N3c3LicpIycsJG1XWjVpNWQzZkFMLiRLTGhyTjFGdWxXQVcpOw0KJGYyID0gZmFsc2U7DQppZighJGYpew0KJGYyID0gJGV4ckhCV1AxNSAmJiBwcmVnX21hdGNoKCcjJy4kZ3JhYl9wYXJhbWV0ZXJzWyd4c19pbmNfc2tpcCddLicjJywkS0xock4xRnVsV0FXKTsNCmlmKCR3N05XMHNSQ2gyS0JGNzRCbyYmISRmMikNCiRmMiA9ICRmMnx8KHByZWdfbWF0Y2goJyMoJy4kdzdOVzBzUkNoMktCRjc0Qm8uJykjJywkS0xock4xRnVsV0FXKSk7DQp9DQpkb3sNCmlmKCEkZiYmISRmMil7Ly8gJiYgKCRXbnBITnhkYVR1TXF1Rjc+KGNvdW50KCR1cmxzX2xpc3QpLSR1cmxfaW5kKSkpew0KaWYoJFFtS2FIc05fbW5IRWZZU3BURWc8PTAgfHwgJGxpbmtzX2xldmVsPCRRbUthSHNOX21uSEVmWVNwVEVnKQ0Kew0KJGFSamVTamsyNCA9IHByZWdfcmVwbGFjZSgnIyhbXi9cOl0vKS8rIycsJ1xcMScsJHNjX1Z2WDVqZWxwMi4kS0xock4xRnVsV0FXKTsNCgoKaWYoJF9HRVRbJ2RkYmcnXSllY2hvICI8aDQ+IHsgJGFSamVTamsyNCB9IDwvaDQ+IjtmbHVzaCgpOw0KJEdkNktJcU1BZTR6WENDPTA7DQpkbyB7DQokbnVlMUpTeXdjID0gJGt4ZXNtWnZWWG4tPmZldGNoKCRhUmplU2prMjQsMCwxKTsNCmlmKCRudWUxSlN5d2NbJ2NvZGUnXT09NDAzKQ0Kew0KJEdkNktJcU1BZTR6WENDKys7DQpzbGVlcCgkZ3JhYl9wYXJhbWV0ZXJzWyd4c19kZWxheV9tcyddPyRncmFiX3BhcmFtZXRlcnNbJ3hzX2RlbGF5X21zJ106MSk7DQp9DQplbHNlICRHZDZLSXFNQWU0elhDQz01Ow0KfXdoaWxlKCRHZDZLSXFNQWU0elhDQzwzKTsNCgoKJFpXMDRnYmhGOUE4UD1zdHJ0b2xvd2VyKCRudWUxSlN5d2NbJ2hlYWRlcnMnXVsnY29udGVudC10eXBlJ10pOw0KaWYoIXN0cnN0cigkWlcwNGdiaEY5QThQLCd0ZXh0L2h0bWwnKSYmIXN0cnN0cigkWlcwNGdiaEY5QThQLCcveGh0bWwnKSkNCmNvbnRpbnVlOw0KJENhVlNkaDBMU21KNUogPSBhcnJheSgpOw0KaWYoJG51ZTFKU3l3Y1snY29kZSddPT00MDQpew0KJHVybHNfNDA0W109YXJyYXkoJEtMaHJOMUZ1bFdBVywkcmVmX2xpbmtzMlskS0xock4xRnVsV0FXXSk7DQppZigkWnEwTW5RbXNENlQybExMZlUgJiYgIXByZWdfbWF0Y2goJFpxME1uUW1zRDZUMmxMTGZVLCRudWUxSlN5d2NbJ2NvZGUnXSkpDQpjb250aW51ZTsNCn0NCmlmKCRhUmplU2prMjQhPSRudWUxSlN5d2NbJ2xhc3RfdXJsJ10pew0KJGgwS2JjalJLeGhTX1skS0xock4xRnVsV0FXXT0kbnVlMUpTeXdjWydsYXN0X3VybCddOyAkaW89JEtMaHJOMUZ1bFdBVzsNCiR3QlpTakF1NlVTTHY4NjlPZlhLID0gcHJlZ19yZXBsYWNlKCcjXi4qPycucHJlZ19xdW90ZSgkc2NfVnZYNWplbHAyLCcjJykuJyMnLCcnLCRudWUxSlN5d2NbJ2xhc3RfdXJsJ10pOw0KJHVybHNfbGlzdDJbXSA9ICR3QlpTakF1NlVTTHY4NjlPZlhLOw0KJHJlZl9saW5rc1skd0JaU2pBdTZVU0x2ODY5T2ZYS10gPSAkS0xock4xRnVsV0FXOw0KY29udGludWU7DQp9DQppZighcHJlZ19tYXRjaCgkWnEwTW5RbXNENlQybExMZlUsJG51ZTFKU3l3Y1snY29kZSddKSkNCmNvbnRpbnVlOw0KJGNuID0gJG51ZTFKU3l3Y1snY29udGVudCddOw0KCiR0c2l6ZSs9c3RybGVuKCRjbik7DQokY24gPSBwcmVnX3JlcGxhY2UoJyM8IS0tLio/LS0+I2lzJywgJycsJGNuKTsNCnByZWdfbWF0Y2goJyM8YmFzZVtePl0qP2hyZWY9W1wnIl0oLio/KVtcJyJdI2lzJywkY24sJGJtKTsNCmlmKGlzc2V0KCRibVsxXSkmJiRibVsxXSkNCiRmU0I5WnJVSUs0YUlDSzZYQU0gPSBmTHUwMDBqcWZ3aVJGKCRibVsxXS4nLScpOw0KZWxzZQ0KJGZTQjlaclVJSzRhSUNLNlhBTSA9IGZMdTAwMGpxZndpUkYoJHNjX1Z2WDVqZWxwMi4kS0xock4xRnVsV0FXKTsNCgpwcmVnX21hdGNoX2FsbCgnIzxhKD86cmVhKT9cc1tePl0qaHJlZlxzKj1ccyooPzoiKFteIl0qKXxcJyhbXlwnXSopfChbXlxzXCI+XSspKS4qPz4jaXMnLCAkY24sICRhbSk7DQpwcmVnX21hdGNoX2FsbCgnIzxpP2ZyYW1lXHNbXj5dKnNyY1xzKj1ccypbIlwnXT8oLio/KSgifD58XCdbPlxzXSkjaXMnLCAkY24sICRMRGQ3YnFnNV9DKTsNCnByZWdfbWF0Y2hfYWxsKCcjPG1ldGFcc1tePl0qaHR0cC1lcXVpdlxzKj1ccyoiP3JlZnJlc2hbXj5dKlVSTFxzKj1ccypbIlwnXT8oLio/KSgifD58XCdbPlxzXSkjaXMnLCAkY24sICRUcXhmNEwxM0MwQjMzeWl5cnYpOw0KJENhVlNkaDBMU21KNUogPSBhcnJheSgpOw0KZm9yKCRpPTA7JGk8Y291bnQoJGFtWzFdKTskaSsrKQ0Kew0KaWYoICFwcmVnX21hdGNoKCcjcmVsPVsiXCddbm9mb2xsb3cjaScsICRhbVswXVskaV0pICkgDQokQ2FWU2RoMExTbUo1SltdID0gJGFtWzFdWyRpXTsNCn0NCiRDYVZTZGgwTFNtSjVKID0gYXJyYXlfbWVyZ2UoDQokQ2FWU2RoMExTbUo1SiwNCgokYW1bMl0sJGFtWzNdLCAgDQokTERkN2JxZzVfQ1sxXSwkVHF4ZjRMMTNDMEIzM3lpeXJ2WzFdKTsNCiRDYVZTZGgwTFNtSjVKID0gYXJyYXlfdW5pcXVlKCRDYVZTZGgwTFNtSjVKKTsNCgokbm4gPSAkbnQgPSAwOw0KcmVzZXQoJENhVlNkaDBMU21KNUopOw0KaWYocHJlZ19tYXRjaCgnIzxtZXRhIG5hbWU9InJvYm90cyIgY29udGVudD0iW14iXSo/bm9mb2xsb3cjaXMnLCRjbikpDQokQ2FWU2RoMExTbUo1SiA9IGFycmF5KCk7DQpmb3JlYWNoKCRDYVZTZGgwTFNtSjVKIGFzICRpPT4kbGwpDQppZigkbGwpDQp7ICAgICAgICAgICAgICAgICAgICANCiRhID0gJHNhID0gdHJpbSgkbGwpOw0KaWYoJGdyYWJfcGFyYW1ldGVyc1sneHNfcHJvdG9fc2tpcCddICYmIA0KKHByZWdfbWF0Y2goJyNeJy4kZ3JhYl9wYXJhbWV0ZXJzWyd4c19wcm90b19za2lwJ10uJyNpJywkYSl8fA0KKCRKenZ2aTU5MDZmU2N2d3ZjNkggJiYgcHJlZ19tYXRjaCgnIycuJGdyYWJfcGFyYW1ldGVyc1sneHNfZXhjX3NraXAnXS4nI2knLCRhKSl8fA0KcHJlZ19tYXRjaCgnI14nLiRncmFiX3BhcmFtZXRlcnNbJ3hzX3Byb3RvX3NraXAnXS4nI2knLGZ1bmN0aW9uX2V4aXN0cygnaHRtbF9lbnRpdHlfZGVjb2RlJyk/aHRtbF9lbnRpdHlfZGVjb2RlKCRhKTokYSkNCikpDQpjb250aW51ZTsNCmlmKCRncmFiX3BhcmFtZXRlcnNbJ3hzX2V4Y2x1ZGVfY2hlY2snXSkNCnsNCiRfZj0kX2YyPWZhbHNlOw0KJF9mPSRyTzFtUXVPYUNyTkZvbEEwWSYmcHJlZ19tYXRjaCgnIygnLiRyTzFtUXVPYUNyTkZvbEEwWS4nKSMnLCRhKTsNCmlmKCRTOHdoblBNXzQ3dzcmJiEkX2YpJF9mPXByZWdfbWF0Y2goJyNeKCcuJFM4d2huUE1fNDd3Ny4nKSMnLCRtV1o1aTVkM2ZBTC4kYSk7DQoKaWYoJF9mKWNvbnRpbnVlOw0KfQ0KCgppZihwcmVnX21hdGNoKCcjaHR0cHM/KDp8JlwjNTg7KSNpcycsJGEpKTsNCmVsc2UgaWYoJGEmJiRhWzBdPT0nLycpJGEgPSAkUjlpZGVnQTNHZDIuJGE7DQplbHNlICRhID0gJGZTQjlaclVJSzRhSUNLNlhBTS4kYTsNCiRhPXN0cl9yZXBsYWNlKCcvLi8nLCcvJywkYSk7DQppZihzdHJzdHIoJGEsJy4uLycpKXsNCnByZWdfbWF0Y2goJyMoLio/Oi4qPy8vLio/KSgvLiopJCMnLCRhLCRhYSk7DQpkb3sNCiRhcCA9ICRhYVsyXTsNCiRhYVsyXSA9IHByZWdfcmVwbGFjZSgnIy8/W14vXSovXC5cLiMnLCcnLCRhcCwxKTsNCn13aGlsZSgkYWFbMl0hPSRhcCk7DQokYSA9ICRhYVsxXS4kYWFbMl07DQp9DQokYSA9IHByZWdfcmVwbGFjZSgnIy9cLi8jJywnLycsJGEpOw0KJGEgPSBzdHJfcmVwbGFjZSgnJiMzODsnLCcmJywkYSk7DQokYSA9IHN0cl9yZXBsYWNlKCcmYW1wOycsJyYnLCRhKTsNCiRhID0gcHJlZ19yZXBsYWNlKCcjXCMuKiQjJywnJywkYSk7DQokYSA9IHByZWdfcmVwbGFjZSgnIyhbXi9cOl0vKS8rIycsJ1xcMScsJGEpOw0KJGEgPSBwcmVnX3JlcGxhY2UoJyNbXHJcbl0rI3MnLCcnLCRhKTsNCgppZihzdHJ0b2xvd2VyKHN1YnN0cigkYSwwLHN0cmxlbigkc2NfVnZYNWplbHAyKSkgKSAhPSBzdHJ0b2xvd2VyKCRzY19Wdlg1amVscDIpKWNvbnRpbnVlOw0KCiR3QlpTakF1NlVTTHY4NjlPZlhLID0gc3Vic3RyKCRhLHN0cmxlbigkc2NfVnZYNWplbHAyKSk7DQppZigkZ3JhYl9wYXJhbWV0ZXJzWyd4c19jbGVhbnVybHMnXSkNCiR3QlpTakF1NlVTTHY4NjlPZlhLID0gQHByZWdfcmVwbGFjZSgkZ3JhYl9wYXJhbWV0ZXJzWyd4c19jbGVhbnVybHMnXSwnJywkd0JaU2pBdTZVU0x2ODY5T2ZYSyk7DQppZigkZ3JhYl9wYXJhbWV0ZXJzWyd4c19jbGVhbnBhciddKQ0Kew0KJHdCWlNqQXU2VVNMdjg2OU9mWEsgPSBAcHJlZ19yZXBsYWNlKCcjW1xcP1xcJl0oJy4kZ3JhYl9wYXJhbWV0ZXJzWyd4c19jbGVhbnBhciddLicpPVthLXowLTldKyQjaScsJycsJHdCWlNqQXU2VVNMdjg2OU9mWEspOw0KJHdCWlNqQXU2VVNMdjg2OU9mWEsgPSBAcHJlZ19yZXBsYWNlKCcjKFtcXD9cXCZdKSgnLiRncmFiX3BhcmFtZXRlcnNbJ3hzX2NsZWFucGFyJ10uJyk9W2EtejAtOV0rJiNpJywnJDEnLCR3QlpTakF1NlVTTHY4NjlPZlhLKTsNCn0NCiR1cmxzX2xpc3QyW10gPSAkd0JaU2pBdTZVU0x2ODY5T2ZYSzsNCiRyZWZfbGlua3NbJHdCWlNqQXU2VVNMdjg2OU9mWEtdID0gJEtMaHJOMUZ1bFdBVzsNCiRudCsrOw0KfQ0KdW5zZXQoJENhVlNkaDBMU21KNUopOw0KfQ0KfQ0KCmlmKCRncmFiX3BhcmFtZXRlcnNbJ3hzX2luY2xfb25seSddJiYhJGYpJGY9JGZ8fCFwcmVnX21hdGNoKCcjJy5wcmVnX3F1b3RlKCRncmFiX3BhcmFtZXRlcnNbJ3hzX2luY2xfb25seSddLCcjJykuJyMnLCRzY19Wdlg1amVscDIuJEtMaHJOMUZ1bFdBVyk7DQppZighJGYpICRmID0gJGZ8fHByZWdfbWF0Y2goJyM8bWV0YSBuYW1lPSJyb2JvdHMiIGNvbnRlbnQ9IlteIl0qP25vaW5kZXgjaXMnLCRjbik7DQppZighJGYpew0KJFJUOUdYdHlhYnNfX0EgPSBhcnJheSgNCgonbGluayc9PnByZWdfcmVwbGFjZSgnIyhbXi9cOl0vKS8rIycsJ1xcMScsJHNjX1Z2WDVqZWxwMi4kS0xock4xRnVsV0FXKQ0KKTsNCmlmKCRncmFiX3BhcmFtZXRlcnNbJ3hzX21ha2VodG1sJ10pDQp7DQpwcmVnX21hdGNoKCcjPHRpdGxlPiguKj8pPC90aXRsZT4jaXMnLCAkbnVlMUpTeXdjWydjb250ZW50J10sICRQb0dxd01zb0IpOw0KJFJUOUdYdHlhYnNfX0FbJ3QnXSA9IHN0cmlwX3RhZ3MoJFBvR3F3TXNvQlsxXSk7DQp9DQppZigkZ3JhYl9wYXJhbWV0ZXJzWyd4c19tZXRhZGVzYyddKQ0Kew0KcHJlZ19tYXRjaCgnIzxtZXRhXHNbXj5dKig/Omh0dHAtZXF1aXZ8bmFtZSlccyo9XHMqIj9kZXNjcmlwdGlvbltePl0qY29udGVudFxzKj1ccypbIl0/KFtePlwiXSopI2lzJywgJGNuLCAkV0ZZUFVoWHVqKTsNCmlmKCRXRllQVWhYdWpbMV0pDQokUlQ5R1h0eWFic19fQVsnZCddID0gJFdGWVBVaFh1alsxXTsNCn0NCmlmKCRncmFiX3BhcmFtZXRlcnNbJ3hzX21ha2Vyb3InXXx8JGdyYWJfcGFyYW1ldGVyc1sneHNfYXV0b3ByaW9yaXR5J10pDQokUlQ5R1h0eWFic19fQVsnbyddID0gbWF4KDAsJGxpbmtzX2xldmVsKTsNCmlmKHByZWdfbWF0Y2goJyMoJy4kSUZ5OEl2QUF3TWI0Sy4nKSMnLCRzY19Wdlg1amVscDIuJEtMaHJOMUZ1bFdBVywkeXlxN2ZEb0tfY0JQQUNDNm4xKSkNCnsNCiRSVDlHWHR5YWJzX19BWydjbG0nXSA9ICRKX0llT3dqQWtzak1bJHl5cTdmRG9LX2NCUEFDQzZuMVsxXV1bJ2xtJ107DQokUlQ5R1h0eWFic19fQVsnZiddID0gJEpfSWVPd2pBa3NqTVskeXlxN2ZEb0tfY0JQQUNDNm4xWzFdXVsnZiddOw0KJFJUOUdYdHlhYnNfX0FbJ3AnXSA9ICRKX0llT3dqQWtzak1bJHl5cTdmRG9LX2NCUEFDQzZuMVsxXV1bJ3AnXTsNCn0NCmlmKCEkUlQ5R1h0eWFic19fQVsnbG0nXSAmJiBpc3NldCgkbnVlMUpTeXdjWydoZWFkZXJzJ11bJ2xhc3QtbW9kaWZpZWQnXSkpDQokUlQ5R1h0eWFic19fQVsnbG0nXT0kbnVlMUpTeXdjWydoZWFkZXJzJ11bJ2xhc3QtbW9kaWZpZWQnXTsNCgokdXJsc19jb21wbGV0ZWRbXSA9ICRSVDlHWHR5YWJzX19BOw0KJFducEhOeGRhVHVNcXVGNyA9ICR2azd3b0RHemI5SUJfR2FsOSAtIGNvdW50KCR1cmxzX2NvbXBsZXRlZCk7DQp9DQp9d2hpbGUoZmFsc2UpOy8vIHplcm93aGlsZQ0KaWYoJHVybF9pbmQ+PSRjbnUpDQp7DQp1bnNldCgkdXJsc19saXN0KTsNCiR1cmxfaW5kID0gMDsNCiR1cmxzX2xpc3QgPSBhcnJheV92YWx1ZXMoYXJyYXlfdW5pcXVlKGFycmF5X2RpZmYoJHVybHNfbGlzdDIsJHVybHNfbGlzdF9mdWxsKSkpOw0KJHVybHNfbGlzdF9mdWxsID0gYXJyYXlfbWVyZ2UoJHVybHNfbGlzdF9mdWxsLCR1cmxzX2xpc3QpOw0KJGNudSA9IGNvdW50KCR1cmxzX2xpc3QpOw0KdW5zZXQoJHJlZl9saW5rczIpOw0KJHJlZl9saW5rczIgPSAkcmVmX2xpbmtzOw0KdW5zZXQoJHJlZl9saW5rcyk7IHVuc2V0KCR1cmxzX2xpc3QyKTsNCiRyZWZfbGlua3MgPSBhcnJheSgpOw0KJHVybHNfbGlzdDIgPSBhcnJheSgpOw0KJGxpbmtzX2xldmVsKys7DQp9DQokcG4rKzsNCiRwbD1taW4oJGNudS0kdXJsX2luZCwkV25wSE54ZGFUdU1xdUY3KTsNCmlmKCAoJGNudT09JHVybF9pbmQgfHwgJHBsPT0wfHwkcG49PTEgfHwgKCRwbiUyMCk9PTApDQp8fCBjb3VudCgkdXJsc19jb21wbGV0ZWQpPj0kdms3d29ER3piOUlCX0dhbDkpDQp7DQppZihzdHJzdHIoJEpBdkJpTW1qekhbJ2NvbnRlbnQnXSwnaGVhZGVyJykpYnJlYWs7DQokZWxzNnBHNGRVMlJNMjBrPWV4cGxvZGUoIiAiLG1pY3JvdGltZSgpKTsNCiRjdGltZSA9ICRlbHM2cEc0ZFUyUk0yMGtbMF0rJGVsczZwRzRkVTJSTTIwa1sxXSAtICRRNUc4UW1iUXdKVDN2Ow0KaWYgKGZ1bmN0aW9uX2V4aXN0cygnbWVtb3J5X2dldF91c2FnZScpKQ0KJG11PW1lbW9yeV9nZXRfdXNhZ2UoKTsNCmVsc2UNCnsNCgokbXU9Jy0nOw0KIA0KfQ0KaWYoaW50dmFsKCRtdSkpDQokbXU9bnVtYmVyX2Zvcm1hdCgkbXUvMTAyNCwxKS4nIEtiJzsNCiR1cmxzX2xpc3QyID0gYXJyYXlfdmFsdWVzKGFycmF5X3VuaXF1ZSgkdXJsc19saXN0MikpOw0KJHgwS1lVbEpiMFA5MjZvVSA9IGFycmF5KA0KJGN0aW1lLCAvLyBydW5uaW5nIHRpbWUNCnN0cl9yZXBsYWNlKCRBYml5VHI5Q2I2SDA4U2VtbFV3LCAnJywgJEtMaHJOMUZ1bFdBVyksICAvLyBjdXJyZW50IFVSTA0KJHBsLCAgICAgICAgICAgICAgICAgICAgLy8gdXJscyBsZWZ0DQokcG4sICAgICAgICAgICAgICAgICAgICAvLyBwcm9jZXNzZWQgdXJscw0KJHRzaXplLCAgICAgICAgICAgICAgICAgLy8gYmFuZHdpZHRoIHVzYWdlDQokbGlua3NfbGV2ZWwsICAgICAgICAgICAvLyBkZXB0aCBsZXZlbA0KJG11LCAgICAgICAgICAgICAgICAgICAgLy8gbWVtb3J5IHVzYWdlDQpjb3VudCgkdXJsc19jb21wbGV0ZWQpLCAvLyBhZGRlZCBpbiBzaXRlbWFwDQpjb3VudCgkdXJsc19saXN0MikgICAgICAvLyBpbiB0aGUgcXVldWUNCik7DQppZigkWnJWMFZkU1J1VWQxQzJiVGJ1WydiZ2V4ZWMnXSkNClRwTWFSWE1EeEIyKExCZ0VCZ1ZaNHosbmZDVVVkOEE4VigkeDBLWVVsSmIwUDkyNm9VKSk7DQppZigkbF9rTkRSaWE5VDFvJiYhJGYpDQokbF9rTkRSaWE5VDFvKCR4MEtZVWxKYjBQOTI2b1UpOw0KfQ0KaWYoJGdyYWJfcGFyYW1ldGVyc1sneHNfc2F2ZXN0YXRlX3RpbWUnXT4wICYmDQooIA0KKCRjdGltZS0kblRQVUdoeElXV1Q+JGdyYWJfcGFyYW1ldGVyc1sneHNfc2F2ZXN0YXRlX3RpbWUnXSkNCnx8ICgkdXJsX2luZD49JGNudSkNCikNCikNCnsNCiRuVFBVR2h4SVdXVCA9ICRjdGltZTsNCiRQSmN4dWh3dnJsRDU4aDZ1dDNkID0gY29tcGFjdCgndXJsX2luZCcsDQondXJsc19saXN0JywndXJsc19saXN0MicsJ2NudScsDQoncmVmX2xpbmtzJywncmVmX2xpbmtzMicsDQondXJsc19saXN0X2Z1bGwnLCd1cmxzX2NvbXBsZXRlZCcsDQondXJsc180MDQnLA0KJ250JywndHNpemUnLCdwbicsJ2xpbmtzX2xldmVsJywnY3RpbWUnDQopOw0KJFBKY3h1aHd2cmxENThoNnV0M2RbJ3RpbWUnXT10aW1lKCk7DQokd1gzSjI5dmxDUmxGTWh1UVc9bmZDVVVkOEE4VigkUEpjeHVod3ZybEQ1OGg2dXQzZCk7DQpUcE1hUlhNRHhCMihsUmhWaVVyZmxoNCwkd1gzSjI5dmxDUmxGTWh1UVcpOw0KdW5zZXQoJFBKY3h1aHd2cmxENThoNnV0M2QpOw0KdW5zZXQoJHdYM0oyOXZsQ1JsRk1odVFXKTsNCgp9DQppZigkZ3JhYl9wYXJhbWV0ZXJzWyd4c19kZWxheV9yZXEnXSAmJiAkZ3JhYl9wYXJhbWV0ZXJzWyd4c19kZWxheV9tcyddICYmDQooKCRwbiUkZ3JhYl9wYXJhbWV0ZXJzWyd4c19kZWxheV9yZXEnXSk9PTApKQ0Kew0Kc2xlZXAoJGdyYWJfcGFyYW1ldGVyc1sneHNfZGVsYXlfbXMnXSk7DQp9DQppZigkUlhaYVhwT3ZkYmp3WT1maWxlX2V4aXN0cygkSmgwMm9QU21uSHc9ZEYweDNVT2RHMEVtQnl2Vy5sUFQ2TTdkclBoUVBMKSl7DQppZihAdW5saW5rKCRKaDAyb1BTbW5IdykpDQpicmVhazsNCmVsc2UNCiRSWFphWHBPdmRiandZPTA7DQp9DQp9d2hpbGUoDQpjb3VudCgkdXJsc19jb21wbGV0ZWQpPCR2azd3b0RHemI5SUJfR2FsOQ0KJiYNCiR1cmxfaW5kPCRjbnUNCik7DQppZigkX0dFVFsnZGRiZ2V4aXQnXSlleGl0Ow0KCgoKCnJldHVybiBhcnJheSgNCid1NDA0Jz0+JHVybHNfNDA0LA0KJ2N0aW1lJz0+JGN0aW1lLA0KJ3RzaXplJz0+JHRzaXplLA0KJ2Vycm1zZyc9PicnLA0KJ2luaXR1cmwnPT4kQWJpeVRyOUNiNkgwOFNlbWxVdywNCidpbml0ZGlyJz0+JHNjX1Z2WDVqZWxwMiwNCid1Y291bnQnPT5jb3VudCgkdXJsc19jb21wbGV0ZWQpLA0KJ3RpbWUnPT50aW1lKCksDQoncGFyYW1zJz0+JFpyVjBWZFNSdVVkMUMyYlRidSwNCidpbnRlcnJ1cHQnPT4kUlhaYVhwT3ZkYmp3WQ0KKTsNCn0NCn0NCiROZ2RCTXpMTFZQNSA9IG5ldyBTaXRlQ3Jhd2xlcigpOw0KZnVuY3Rpb24gdHVoT3F5ZWZucTZSVlcoKXsNCkB1bmxpbmsoZEYweDNVT2RHMEVtQnl2Vy5MQmdFQmdWWjR6KTsNCn0NCj8+'));
?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 18505705751682cdf0b439e65e1ae063
Eval Count 1
Decode Time 110 ms