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

Decoded Output download


 goto t7qjK; Pz32a: class iPayPipe { protected $id = ''; protected $action = ''; protected $transId = ''; protected $amt = ''; protected $responseURL = ''; protected $trackId = ''; protected $udf1 = ''; protected $udf2 = ''; protected $udf3 = ''; protected $udf4 = ''; protected $udf5 = ''; protected $paymentPage = ''; protected $paymentId = ''; protected $result = ''; protected $auth = ''; protected $ref = ''; protected $avr = ''; protected $date = ''; protected $currency = ''; protected $errorURL = ''; protected $language = ''; protected $error = ''; protected $error_text = ''; protected $rawResponse = ''; protected $alias = ''; protected $debugMsg = ''; protected $responseCode = ''; protected $zip = ''; protected $addr = ''; protected $member = ''; protected $cvv2 = ''; protected $cvv2Verification = ''; protected $type = ''; protected $card = ''; protected $expDay = ''; protected $expMonth = ''; protected $expYear = ''; protected $eci = ''; protected $cavv = ''; protected $xid = ''; protected $resourcePath = ''; protected $acsurl = ''; protected $pareq = ''; protected $pares = ''; protected $error_service_tag = ''; protected $keystorePath = ''; protected $seperator = "\"; protected $sep = " / "; protected $webAddress = ''; protected $key = ''; protected $initializationVector = ''; protected $ivrFlag = ''; protected $npc356chphoneidformat = ''; protected $npc356chphoneid = ''; protected $npc356shopchannel = ''; protected $npc356availauthchannel = ''; protected $npc356pareqchannel = ''; protected $npc356itpcredential = ''; protected $authDataName = ''; protected $authDatastrlen = ''; protected $authDataType = ''; protected $authDataLabel = ''; protected $authDataPrompt = ''; protected $authDataEncryptKey = ''; protected $authDataEncryptType = ''; protected $authDataEncryptMandatory = ''; protected $ivrPasswordStatus = ''; protected $ivrPassword = ''; protected $itpauthtran = ''; protected $itpauthiden = ''; protected $url = ''; protected $savedcard = ''; protected $paymentdebitId = ''; protected $paymentUrl = ''; function getid() { return $this->id; } function getaction() { return $this->action; } function gettransId() { return $this->transId; } function getamt() { return $this->amt; } function getresponseURL() { return $this->responseURL; } function gettrackId() { return $this->trackId; } function getudf1() { return $this->udf1; } function getudf2() { return $this->udf2; } function getudf3() { return $this->udf3; } function getudf4() { return $this->udf4; } function getudf5() { return $this->udf5; } function getpaymentPage() { return $this->paymentPage; } function getpaymentId() { return $this->paymentId; } function getresult() { return $this->result; } function getauth() { return $this->auth; } function getref() { return $this->ref; } function getavr() { return $this->avr; } function getDate() { return $this->date; } function getcurrency() { return $this->currency; } function geterrorURL() { return $this->errorURL; } function getlanguage() { return $this->language; } function geterror() { return $this->error; } function geterror_text() { return $this->error_text; } function getrawResponse() { return $this->rawResponse; } function getalias() { return $this->alias; } function getDebugMsg() { return $this->debugMsg; } function getresponseCode() { return $this->responseCode; } function getzip() { return $this->zip; } function getaddr() { return $this->addr; } function getmember() { return $this->member; } function getcvv2() { return $this->cvv2; } function getcvv2Verification() { return $this->cvv2Verification; } function getType() { return $this->type; } function getcard() { return $this->card; } function getexpDay() { return $this->expDay; } function getexpMonth() { return $this->expMonth; } function getexpYear() { return $this->expYear; } function geteci() { return $this->eci; } function getcavv() { return $this->cavv; } function getxid() { return $this->xid; } function getresourcePath() { return $this->resourcePath; } function getacsurl() { return $this->acsurl; } function getpareq() { return $this->pareq; } function getpares() { return $this->pares; } function geterror_service_tag() { return $this->error_service_tag; } function getkeystorePath() { return $this->keystorePath; } function getseperator() { return $this->seperator; } function getsep() { return $this->sep; } function getwebAddress() { return $this->webAddress; } function getkey() { return $this->key; } function getinitializationVector() { return $this->initializationVector; } function getivrFlag() { return $this->ivrFlag; } function getnpc356chphoneidformat() { return $this->npc356availauthchannel; } function getnpc356chphoneid() { return $this->npc356chphoneid; } function getnpc356shopchannel() { return $this->npc356shopchannel; } function getnpc356availauthchannel() { return $this->npc356availauthchannel; } function getnpc356pareqchannel() { return $this->npc356itpcredential; } function getnpc356itpcredential() { return $this->npc356itpcredential; } function getauthDataName() { return $this->authDataName; } function getauthDatastrlen() { return $this->authDatastrlen; } function getauthDataType() { return $this->authDataType; } function getauthDataLabel() { return $this->authDataLabel; } function getauthDataPrompt() { return $this->authDataPrompt; } function getauthDataEncryptKey() { return $this->authDataEncryptKey; } function getauthDataEncryptType() { return $this->authDataEncryptType; } function getauthDataEncryptMandatory() { return $this->authDataEncryptMandatory; } function getivrPasswordStatus() { return $this->ivrPasswordStatus; } function getivrPassword() { return $this->ivrPassword; } function getitpauthtran() { return $this->itpauthtran; } function getitpauthiden() { return $this->itpauthiden; } function geturl() { return $this->url; } function getsavedcard() { return $this->savedcard; } function getpaymentdebitId() { return $this->paymentdebitId; } function getpaymentUrl() { return $this->paymentUrl; } function setid($val) { $this->id = $val; } function setaction($val) { $this->action = $val; } function settransId($val) { $this->transId = $val; } function setamt($val) { $this->amt = $val; } function setresponseURL($val) { $this->responseURL = $val; } function settrackId($val) { $this->trackId = $val; } function setudf1($val) { $this->udf1 = $val; } function setudf2($val) { $this->udf2 = $val; } function setudf3($val) { $this->udf3 = $val; } function setudf4($val) { $this->udf4 = $val; } function setudf5($val) { $this->udf5 = $val; } function setpaymentPage($val) { $this->paymentPage = $val; } function setpaymentId($val) { $this->paymentId = $val; } function setresult($val) { $this->result = $val; } function setauth($val) { $this->auth = $val; } function setref($val) { $this->ref = $val; } function setavr($val) { $this->avr = $val; } function setDate($val) { $this->date = $val; } function setcurrency($val) { $this->currency = $val; } function seterrorURL($val) { $this->errorURL = $val; } function setlanguage($val) { $this->language = $val; } function seterror($val) { $this->error = $val; } function seterror_text($val) { $this->error_text = $val; } function setrawResponse($val) { $this->rawResponse = $val; } function setalias($val) { $this->alias = $val; } function setDebugMsg($val) { $this->debugMsg = $val; } function setresponseCode($val) { $this->responseCode = $val; } function setzip($val) { $this->zip = $val; } function setaddr($val) { $this->addr = $val; } function setmember($val) { $this->member = $val; } function setcvv2($val) { $this->cvv2 = $val; } function setcvv2Verification($val) { $this->cvv2Verification = $val; } function setType($val) { $this->type = $val; } function setcard($val) { $this->card = $val; } function setexpDay($val) { $this->expDay = $val; } function setexpMonth($val) { $this->expMonth = $val; } function setexpYear($val) { $this->expYear = $val; } function seteci($val) { $this->eci = $val; } function setcavv($val) { $this->cavv = $val; } function setxid($val) { $this->xid = $val; } function setresourcePath($val) { $this->resourcePath = $val; } function setacsurl($val) { $this->acsurl = $val; } function setpareq($val) { $this->pareq = $val; } function setpares($val) { $this->pares = $val; } function seterror_service_tag($val) { $this->error_service_tag = $val; } function setkeystorePath($val) { $this->keystorePath = $val; } function setseperator($val) { $this->seperator = $val; } function setsep($val) { $this->sep = $val; } function setwebAddress($val) { $this->webAddress = $val; } function setkey($val) { $this->key = $val; } function setinitializationVector($val) { $this->initializationVector = $val; } function setivrFlag($val) { $this->ivrFlag = $val; } function setnpc356chphoneidformat($val) { $this->npc356availauthchannel = $val; } function setnpc356chphoneid($val) { $this->npc356chphoneid = $val; } function setnpc356shopchannel($val) { $this->npc356shopchannel = $val; } function setnpc356availauthchannel($val) { $this->npc356availauthchannel = $val; } function setnpc356pareqchannel($val) { $this->npc356itpcredential = $val; } function setnpc356itpcredential($val) { $this->npc356itpcredential = $val; } function setauthDataName($val) { $this->authDataName = $val; } function setauthDatastrlen($val) { $this->authDatastrlen = $val; } function setauthDataType($val) { $this->authDataType = $val; } function setauthDataLabel($val) { $this->authDataLabel = $val; } function setauthDataPrompt($val) { $this->authDataPrompt = $val; } function setauthDataEncryptKey($val) { $this->authDataEncryptKey = $val; } function setauthDataEncryptType($val) { $this->authDataEncryptType = $val; } function setauthDataEncryptMandatory($val) { $this->authDataEncryptMandatory = $val; } function setivrPasswordStatus($val) { $this->ivrPasswordStatus = $val; } function setivrPassword($val) { $this->ivrPassword = $val; } function setitpauthtran($val) { $this->itpauthtran = $val; } function setitpauthiden($val) { $this->itpauthiden = $val; } function seturl($val) { $this->url = $val; } function setsavedcard($val) { $this->savedcard = $val; } function setpaymentdebitId($val) { $this->paymentdebitId = $val; } function setpaymentUrl($val) { $this->paymentUrl = $val; } function buildHostRequest() { $strRequest = ''; try { if (strlen($this->amt) > 0) { $strRequest .= "amt=" . $this->amt . "&"; } if (strlen($this->action) > 0) { $strRequest .= "action=" . $this->action . "&"; } if (strlen($this->responseURL) > 0) { $strRequest .= "responseURL=" . $this->responseURL . "&"; } if (strlen($this->errorURL) > 0) { $strRequest .= "errorURL=" . $this->errorURL . "&"; } if (strlen($this->trackId) > 0) { $strRequest .= "trackid=" . $this->trackId . "&"; } if (strlen($this->udf1) > 0) { $strRequest .= "udf1=" . $this->udf1 . "&"; } if (strlen($this->udf2) > 0) { $strRequest .= "udf2=" . $this->udf2 . "&"; } if (strlen($this->udf3) > 0) { $strRequest .= "udf3=" . $this->udf3 . "&"; } if (strlen($this->udf4) > 0) { $strRequest .= "udf4=" . $this->udf4 . "&"; } if (strlen($this->udf5) > 0) { $strRequest .= "udf5=" . $this->udf5 . "&"; } if (strlen($this->currency) > 0) { $strRequest .= "currencycode=" . $this->currency . "&"; } if ($this->language != null && strlen($this->language) > 0) { $strRequest .= "langid=" . $this->language . "&"; } return $strRequest; } catch (Exception $e) { return null; } } function buildXMLRequest() { $requestbuffer = ''; try { $requestbuffer . "<request>"; if ($this->card != null) { if (strlen($this->card) > 0) { $requestbuffer .= "<card>" . $this->card . "</card>"; } } if ($this->cvv2 != null) { if (strlen($this->cvv2) > 0) { $requestbuffer .= "<cvv2>" . $this->cvv2 . "</cvv2>"; } } if ($this->currency != null) { if (strlen($this->currency) > 0) { $requestbuffer .= "<currencycode>" . $this->currency . "</currencycode>"; } } if ($this->expYear != null) { if (strlen($this->expYear) > 0) { $requestbuffer .= "<expyear>" . $this->expYear . "</expyear>"; } } if ($this->expMonth != null) { if (strlen($this->expMonth) > 0) { $requestbuffer .= "<expmonth>" . $this->expMonth . "</expmonth>"; } } if ($this->expDay != null) { if (strlen($this->expDay) > 0) { $requestbuffer .= "<expday>" . "01" . "</expday>"; } } if ($this->type != null) { if (strlen($this->type) > 0) { $requestbuffer .= "<type>" . $this->type . "</type>"; } } if ($this->transId != null) { if (strlen($this->transId) > 0) { $requestbuffer .= "<transid>" . $this->transId . "</transid>"; } } if ($this->zip != null) { if (strlen($this->zip) > 0) { $requestbuffer .= "<zip>" . $this->zip . "</zip>"; } } if ($this->addr != null) { if (strlen($this->addr) > 0) { $requestbuffer .= "<addr>" . $this->addr . "</addr>"; } } if ($this->member != null) { if (strlen($this->member) > 0) { $requestbuffer .= "<member>" . $this->member . "</member>"; } } if ($this->amt != null) { if (strlen($this->amt) > 0) { $requestbuffer .= "<amt>" . $this->amt . "</amt>"; } } if ($this->action != null) { if (strlen($this->action) > 0) { $requestbuffer .= "<action>" . $this->action . "</action>"; } } if ($this->trackId != null) { if (strlen($this->trackId) > 0) { $requestbuffer .= "<trackid>" . $this->trackId . "</trackid>"; } } if ($this->udf1 != null) { if (strlen($this->udf1) > 0) { $requestbuffer .= "<udf1>" . $this->udf1 . "</udf1>"; } } if ($this->udf2 != null) { if (strlen($this->udf2) > 0) { $requestbuffer .= "<udf2>" . $this->udf2 . "</udf2>"; } } if ($this->udf3 != null) { if (strlen($this->udf3) > 0) { $requestbuffer .= "<udf3>" . $this->udf3 . "</udf3>"; } } if ($this->udf4 != null) { if (strlen($this->udf4) > 0) { $requestbuffer .= "<udf4>" . $this->udf4 . "</udf4>"; } } if ($this->udf5 != null) { if (strlen($this->udf5) > 0) { $requestbuffer .= "<udf5>" . $this->udf5 . "</udf5>"; } } if ($this->currency != null) { if (strlen($this->currency) > 0) { $requestbuffer .= "<currencycode>" . $this->currency . "</currencycode>"; } } if ($this->eci != null) { if (strlen($this->eci) > 0) { $requestbuffer .= "<eci>" . $this->eci . "</eci>"; } } if ($this->errorURL != null) { if (strlen($this->errorURL) > 0) { $requestbuffer .= "<errorURL>" . $this->errorURL . "</errorURL>"; } } if ($this->responseURL != null) { if (strlen($this->responseURL) > 0) { $requestbuffer .= "<responseURL>" . $this->responseURL . "</responseURL>"; } } if ($this->ivrFlag != null) { if (strlen($this->ivrFlag) > 0) { $requestbuffer .= "<ivrFlag>" . $this->ivrFlag . "</ivrFlag>"; } } if ($this->npc356chphoneidformat != null) { if (strlen($this->npc356chphoneidformat) > 0) { $requestbuffer .= "<npc356chphoneidformat>" . $this->npc356chphoneidformat . "</npc356chphoneidformat>"; } } if ($this->npc356chphoneid != null) { if (strlen($this->npc356chphoneid) > 0) { $requestbuffer .= "<npc356chphoneid>" . $this->npc356chphoneid . "</npc356chphoneid>"; } } if ($this->npc356shopchannel != null) { if (strlen($this->npc356shopchannel) > 0) { $requestbuffer .= "<npc356shopchannel>" . $this->npc356shopchannel . "</npc356shopchannel>"; } } if ($this->npc356availauthchannel != null) { if (strlen($this->npc356availauthchannel) > 0) { $requestbuffer .= "<npc356availauthchannel>" . $this->npc356availauthchannel . "</npc356availauthchannel>"; } } if ($this->npc356pareqchannel != null) { if (strlen($this->npc356pareqchannel) > 0) { $requestbuffer .= "<npc356pareqchannel>" . $this->npc356pareqchannel . "</npc356pareqchannel>"; } } if ($this->npc356itpcredential != null) { if (strlen($this->npc356itpcredential) > 0) { $requestbuffer .= "<npc356itpcredential>" . $this->npc356itpcredential . "</npc356itpcredential>"; } } if ($this->ivrPasswordStatus != null && $this->ivrPasswordStatus . strlen() > 0) { $requestbuffer .= "<ivrPasswordStatus>" . $this->ivrPasswordStatus . "</ivrPasswordStatus>"; } if ($this->ivrPassword != null && strlen($this->ivrPassword) > 0) { $requestbuffer .= "<ivrPassword>" . $this->ivrPassword . "</ivrPassword>"; } if ($this->savedcard != null) { $requestbuffer .= "<savedcard>" . $this->savedcard . "</savedcard>"; } return $requestbuffer; } catch (Exception $e) { return null; } } function performPaymentInitializationHTTP() { $request = null; $requestbuffer = null; $xmlData = null; try { $keyParser = new KeyStore(); $this->key = $keyParser->parseKeyStore($this->keystorePath); $xmlData = $this->parseResource($this->key, $this->resourcePath, $this->alias); if ($xmlData != null) { $xmlData = $this->parseXMLRequest($xmlData); } else { $error = "Alias name does not exits"; } $this->key = $xmlData["resourceKey"]; $this->setId($xmlData["id"]); $requestbuffer = $this->buildHostRequest(); $requestbuffer .= "id=" . $xmlData["id"] . "&password=" . $xmlData["password"] . "&"; $this->webAddress = $xmlData["webaddress"]; $cipheredText = $this->encryptAES($requestbuffer, $this->key); $request .= "&trandata=" . $cipheredText; $request .= "&errorURL=" . $this->errorURL . "&responseURL=" . $this->responseURL . "&tranportalId=" . $xmlData["id"]; $this->webAddress .= "/PaymentHTTP.htm?param=paymentInit" . $request; } catch (Exception $e) { $this->error = "Problem while encrypting request data"; return -1; } return 0; } function performTransactionHTTP() { $request = null; $requestbuffer = null; $xmlData = null; try { $requestbuffer = $this->buildXMLRequest(); $keyParser = new KeyStore(); $this->key = $keyParser->parseKeyStore($this->keystorePath); $xmlData = $this->parseResource($this->key, $this->resourcePath, $this->alias); if ($xmlData == null) { $this->error = "Alias name does not exits"; return -1; } else { $xmlData = $this->parseXMLRequest($xmlData); } $requestbuffer .= "<id>" . $xmlData["id"] . "</id>"; $requestbuffer .= "<password>" . $xmlData["password"] . "</password>"; $requestbuffer . "</request>"; if ($this->responseURL == null || strlen(trim($this->responseURL)) <= 0) { $this->error = "Response URL is Invalid or NULL"; return -1; } $this->key = $xmlData["resourceKey"]; $cipheredText = $this->encryptAES($requestbuffer, $this->key); $request .= "&trandata=" . $cipheredText; $request .= "&errorURL=" . $this->errorURL; $request .= "&responseURL=" . $this->responseURL; $request .= "&tranportalId=" . $xmlData["id"]; $this->webAddress = $xmlData["webaddress"]; $this->setid($xmlData["id"] . ''); $this->webAddress .= "/tranPipeHTTP.htm?param=tranInit" . $request; return 0; } catch (Exception $e) { $this->error = "Error :("; return -1; } } function parseResource($key, $resourcePath, $alias) { $xmlData = null; $key = null; try { $parseResouce = new parseResource(); $parseResouce->setResourcePath($resourcePath); $parseResouce->setKey($this->key); $parseResouce->setAlias($alias); $parseResouce->createCGZFromCGN(); $xmlData = $parseResouce->readZip(); return $xmlData; } catch (Exception $e) { return null; } } function parseEncryptedResultHttp($response) { $xmlData = null; try { $keyParser = new KeyStore(); $this->key = $keyParser->parseKeyStore($this->keystorePath); $xmlData = $this->parseResource($this->key, $this->resourcePath, $this->alias); if ($xmlData != null) { $hm = $this->parseXMLRequest = $xmlData; } else { $this->error = "Alias name does not exits"; } $this->key = $hm["resourceKey"]; $cipheredText = $this->decryptData($response, $this->key); if ($cipheredText == null) { $this->error = "Invalid response"; return -1; } return parsetrandata($cipheredText); } catch (Exception $e) { $this->error = "Internal Error: " + $e->getMessage(); return -1; } } function performVbVTransaction() { $request = null; $xmlData = null; $requestbuffer = null; $hm = null; try { $requestbuffer = $this->buildXMLRequest(); $keyParser = new KeyStore(); $this->key = $keyParser->parseKeyStore($this->keystorePath); $xmlData = $this->parseResource($this->key, $this->resourcePath, $this->alias); if ($xmlData == null) { $this->error = "Alias name does not exits"; return -1; } else { $hm = $this->parseXMLRequest($xmlData); } $requestbuffer .= "<id>" . $hm["id"] . "</id>"; $requestbuffer .= "<password>" . $hm["password"] . "</password>"; $requestbuffer . "</request>"; if ($this->responseURL == null || strlen(trim($this->responseURL)) == 0) { return -1; } $this->key = $hm["resourceKey"]; $cipheredText = $this->encryptAES($requestbuffer, $this->key); $request = "&trandata=" . $cipheredText . "&errorURL=" . $this->errorURL . "&responseURL=" . $this->responseURL . "&tranportalId=" . $hm["id"]; $this->webAddress = $hm["webaddress"]; $this->webAddress .= "/VPAS.htm?actionVPAS=VbvVEReqProcessHTTP" . $request; return 0; } catch (Exception $e) { $this->error = "Error! " . $e->getMessage(); return -1; } } function parseEncryptedRequest($trandata) { $result = 0; $xmlData = null; $hm = null; try { if ($trandata == null) { return 0; } $keyParser = new KeyStore(); $this->key = $keyParser->parseKeyStore($this->keystorePath); $xmlData = $this->parseResource($this->key, $this->resourcePath, $this->alias); if ($xmlData != null) { $hm = $this->parseXMLRequest($xmlData); } else { $this->error = "Alias name does not exits"; } $this->key = $hm["resourceKey"]; $trandata = $this->decryptData($trandata, $this->key); $result = $this->parsetrandata($trandata); return $result; } catch (Exception $e) { return -1; } } function parseEncryptedResult($response) { $xmlData = null; $hm = null; $resultMap = null; try { $keyParser = new KeyStore(); $this->key = $keyParser->parseKeyStore($this->keystorePath); $xmlData = $this->parseResource($this->key, $this->resourcePath, $this->alias); if ($xmlData != null) { $hm = $this->parseXMLRequest($xmlData); } else { $this->error = "Alias name does not exits"; } $this->key = $hm["resourceKey"]; $response = $this->decryptData($response, $this->key); $resultMap = $this->parseResponse($response); return $this->setTransactionData($resultMap); } catch (Exception $e) { $this->error = "Internal Error: " + e . getMessage(); return -1; } } function parseXMLRequest($request) { try { $responseMap = null; $request = trim($request); $request = substr($request, strpos($request, "<id>"), strlen($request) - strpos($request, "<id>")); $request = str_replace("</terminal>", '', $request); $pos = strpos($request, "<") == 0; if ($request == null || strlen($request) < 0 || $pos === false) { return null; } else { try { $responseMap = $this->parseResponse($request); } catch (Exception $ex) { return null; } } return $responseMap; } catch (Exception $e) { return null; } } function parseResponse($response) { $begin = 0; $end = 0; $start = null; $value = null; $map = array(); $maps = array(); $response = trim($response); $pos = strpos($response, "<") == 0; if ($response == null || strlen($response) < 0 || $pos === false) { return null; } else { do { if (strpos($response, "<") !== false && strpos($response, ">") !== false) { $start = substr($response, ($ind = strpos($response, "<")) + 1, strpos($response, ">") - 1 - $ind); $mapKey = substr($response, ($ind = strpos($response, ">")) + 1, strpos($response, "</" . $start . ">") - 1 - $ind); $response = substr($response, $from = strpos($response, "</" . $start . ">") + strlen($start) + 3, strrpos($response, ">") - $from + 1); $maps[$start] = $mapKey; } else { break; } } while (strlen($response) > 0); } return $maps; } function setTransactionData($resultMap) { if (isset($resultMap["error"])) { $this->error = trim($resultMap["error"]); } if (isset($resultMap["url"])) { $this->acsurl = trim($resultMap["url"]); } if (isset($resultMap["PAReq"])) { $this->pareq = trim($resultMap["PAReq"]); } if (isset($resultMap["paymentid"])) { $this->paymentId = trim($resultMap["paymentid"]); } if (isset($resultMap["payid"])) { $this->paymentId = trim($resultMap["payid"]); } if (isset($resultMap["eci"])) { $this->eci = trim($resultMap["eci"]); } if (isset($resultMap["result"])) { $this->result = trim($resultMap["result"]); } if (isset($resultMap["auth"])) { $this->auth = trim($resultMap["auth"]); } if (isset($resultMap["ref"])) { $this->ref = trim($resultMap["ref"]); } if (isset($resultMap["avr"])) { $this->avr = trim($resultMap["avr"]); } if (isset($resultMap["postdate"])) { $this->date = trim($resultMap["postdate"]); } if (isset($resultMap["tranid"])) { $this->transId = trim($resultMap["tranid"]); } if (isset($resultMap["amt"])) { $this->amt = trim($resultMap["amt"]); } if (isset($resultMap["trackid"])) { $this->trackId = trim($resultMap["trackid"]); } if (isset($resultMap["trackId"])) { $this->trackId = trim($resultMap["trackId"]); } if (isset($resultMap["udf1"])) { $this->udf1 = trim($resultMap["udf1"]); } if (isset($resultMap["udf2"])) { $this->udf2 = trim($resultMap["udf2"]); } if (isset($resultMap["udf3"])) { $this->udf3 = trim($resultMap["udf3"]); } if (isset($resultMap["udf4"])) { $this->udf4 = trim($resultMap["udf4"]); } if (isset($resultMap["udf5"])) { $this->udf5 = trim($resultMap["udf5"]); } if (isset($resultMap["error_code_tag"])) { $this->error = trim($resultMap["error_code_tag"]); } if (isset($resultMap["error_service_tag"])) { $this->error_service_tag = trim($resultMap["error_service_tag"]); } if (isset($resultMap["error_text"])) { $this->error_text = trim($resultMap["error_text"]); } if (isset($resultMap["responsecode"])) { $this->responseCode = trim($resultMap["responsecode"]); } if (isset($resultMap["cvv2response"])) { $this->cvv2Verification = trim($resultMap["cvv2response"]); } if (isset($resultMap["paymentId"])) { $this->paymentdebitId = trim($resultMap["paymentId"]); } if (isset($resultMap["paymenturl"])) { $this->paymentUrl = trim($resultMap["paymenturl"]); return 2; } return 0; } function parsetrandata($trandata) { try { $splitData = $this->splitData($trandata); if (isset($splitData["paymentid"])) { $this->paymentId = $splitData["paymentid"]; } if (isset($splitData["result"])) { $this->result = $splitData["result"]; } if (isset($splitData["udf1"])) { $this->udf1 = $splitData["udf1"]; } if (isset($splitData["udf2"])) { $this->udf2 = $splitData["udf2"]; } if (isset($splitData["udf3"])) { $this->udf3 = $splitData["udf3"]; } if (isset($splitData["udf4"])) { $this->udf4 = $splitData["udf4"]; } if (isset($splitData["udf5"])) { $this->udf5 = $splitData["udf5"]; } if (isset($splitData["amt"])) { $this->amt = $splitData["amt"]; } if (isset($splitData["auth"])) { $this->auth = $splitData["auth"]; } if (isset($splitData["ref"])) { $this->ref = $splitData["ref"]; } if (isset($splitData["tranid"])) { $this->transId = $splitData["tranid"]; } if (isset($splitData["postdate"])) { $this->date = $splitData["postdate"]; } if (isset($splitData["trackId"])) { $this->trackId = $splitData["trackId"]; } if (isset($splitData["trackid"])) { $this->trackId = $splitData["trackid"]; } if (isset($splitData["action"])) { $this->action = $splitData["action"]; } if (isset($splitData["Error"])) { $this->error = $splitData["Error"]; } if (isset($splitData["ErrorText"])) { $this->error_text = $splitData["ErrorText"]; } if (isset($splitData["error_text"])) { $this->error_text = $splitData["error_text"]; } } catch (Exception $e) { return -1; } return 0; } function splitData($trandata) { $splitData = array(); $data = explode("&", $trandata); foreach ($data as $value) { $temp = explode("=", $value); if (!isset($temp[1])) { $temp[1] = ''; } $splitData[$temp[0]] = $temp[1]; } return $splitData; } function encryptAES($str, $key) { $str = $this->pkcs5_pad($str); $ivlen = openssl_cipher_iv_length("aes-256-cbc"); $iv = "PGKEYENCDECIVSPC"; $encrypted = openssl_encrypt($str, "aes-256-cbc", $key, OPENSSL_ZERO_PADDING, $iv); $encrypted = base64_decode($encrypted); $encrypted = unpack("C * ", $encrypted); $encrypted = $this->byteArray2Hex($encrypted); $encrypted = urlencode($encrypted); return $encrypted; } function pkcs5_pad($text) { $blocksize = 8; $pad = $blocksize - strlen($text) % $blocksize; return $text . str_repeat(chr($pad), $pad); } function byteArray2Hex($byteArray) { $chars = array_map("chr", $byteArray); $bin = join($chars); return bin2hex($bin); } function decryptData($code, $key) { $code = $this->hex2ByteArray(trim($code)); $code = $this->byteArray2String($code); $iv = "PGKEYENCDECIVSPC"; $code = base64_encode($code); $decrypted = openssl_decrypt($code, "aes-256-cbc", $key, OPENSSL_ZERO_PADDING, $iv); return $this->pkcs5_unpad($decrypted); } function hex2ByteArray($hexString) { $string = hex2bin($hexString); return unpack("C * ", $string); } function byteArray2String($byteArray) { $chars = array_map("chr", $byteArray); return join($chars); } function pkcs5_unpad($text) { $pad = ord($text[strlen($text) - 1]); if ($pad > strlen($text)) { return false; } if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) { return false; } return substr($text, 0, -1 * $pad); } function performTransaction() { $xmlData = null; $requestbuffer = ''; $response = ''; $webaddr = ''; $resultMap = null; try { $keyParser = new Keystore(); $this->key = $keyParser->parseKeyStore($this->keystorePath); $xmlData = $this->parseResource($this->key, $this->resourcePath, $this->alias); if ($xmlData == null) { $this->error = "Alias name does not exits"; return -1; } else { $xmlData = $this->parseXMLrequest($xmlData); } $requestbuffer = $this->buildXMLRequest(); $requestbuffer .= "<id>" . $xmlData["id"] . "</id>"; $this->setid($xmlData["id"]); $requestbuffer .= "<password>" . $xmlData["password"] . "</password>"; $webaddr = $xmlData["webaddress"]; $requestbuffer .= "</request>"; if ($this->getaction() != null && strlen(trim($this->getaction())) < 1 && (strcasecmp("1", trim($this->getaction())) || strcasecmp("4", trim($this->getaction)))) { $this->error = "Invalid action"; return -1; } $response = $this->performTranPortalTransaction($requestbuffer, $webaddr); if ($response == null || strlen($response) <= 0) { $this->error = "Invalid response"; return -1; } $resultMap = $this->parseResponse($response); return $this->setTransactionData($resultMap); } catch (Exception $e) { $this->error = "Error while processing {$request}! " + $e->getMessage(); return -1; } } function performTranPortalTransaction($request, $webAddress) { $webAddress = $webAddress . "/tranPipe.htm?param=tranInit"; $response = ''; $tranType = "tran"; $response = $this->sendMessage($request, $webAddress, $tranType); return $response; } function performTranPortalTransactionsslKeystore($request, $webAddress, $filePath, $password) { $webAddress = $webAddress . "/tranPipe.htm?param=tranInit"; $response = ''; $tranType = "tran"; $response = $this->sendMessage($request, $webAddress, $tranType, $filePath, $password); return $response; } function sendMessage($request, $webAddress, $tranType) { $rawresponse = ''; $tranType = ''; try { if (strlen($webAddress) <= 0) { return null; } $contentType = ''; if (!strcmp($tranType, "host")) { $contentType = "Content-Type:application/x-www-form-urlencoded"; } else { if (!strcmp($tranType, "tran")) { $contentType = "Content-Type:application/xml"; } } if (strlen($webAddress) <= 0) { return null; } $curl = curl_init(); if (strlen($request) > 0) { curl_setopt($curl, CURLOPT_URL, $webAddress); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1); curl_setopt($curl, CURLOPT_FRESH_CONNECT, TRUE); curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, false); curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0); curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/xml")); curl_setopt($curl, CURLOPT_POSTFIELDS, $request); $rawresponse = curl_exec($curl); if ($rawresponse == false) { echo "<br/>Curl error: " . curl_error($curl); } curl_close($curl); return $rawresponse; } else { return null; } } catch (Exception $exception) { echo "<br/><br/><br/>" . $e->getTraceAsString(); return null; } } } goto bIc_L; xy8tM: include "keystore.php"; goto Pz32a; t7qjK: include "parseResource.php"; goto xy8tM; bIc_L: 

Did this file decode correctly?

Original Code

<?php eval(base64_decode('CiBnb3RvIHQ3cWpLOyBQejMyYTogY2xhc3MgaVBheVBpcGUgeyBwcm90ZWN0ZWQgJGlkID0gJyc7IHByb3RlY3RlZCAkYWN0aW9uID0gJyc7IHByb3RlY3RlZCAkdHJhbnNJZCA9ICcnOyBwcm90ZWN0ZWQgJGFtdCA9ICcnOyBwcm90ZWN0ZWQgJHJlc3BvbnNlVVJMID0gJyc7IHByb3RlY3RlZCAkdHJhY2tJZCA9ICcnOyBwcm90ZWN0ZWQgJHVkZjEgPSAnJzsgcHJvdGVjdGVkICR1ZGYyID0gJyc7IHByb3RlY3RlZCAkdWRmMyA9ICcnOyBwcm90ZWN0ZWQgJHVkZjQgPSAnJzsgcHJvdGVjdGVkICR1ZGY1ID0gJyc7IHByb3RlY3RlZCAkcGF5bWVudFBhZ2UgPSAnJzsgcHJvdGVjdGVkICRwYXltZW50SWQgPSAnJzsgcHJvdGVjdGVkICRyZXN1bHQgPSAnJzsgcHJvdGVjdGVkICRhdXRoID0gJyc7IHByb3RlY3RlZCAkcmVmID0gJyc7IHByb3RlY3RlZCAkYXZyID0gJyc7IHByb3RlY3RlZCAkZGF0ZSA9ICcnOyBwcm90ZWN0ZWQgJGN1cnJlbmN5ID0gJyc7IHByb3RlY3RlZCAkZXJyb3JVUkwgPSAnJzsgcHJvdGVjdGVkICRsYW5ndWFnZSA9ICcnOyBwcm90ZWN0ZWQgJGVycm9yID0gJyc7IHByb3RlY3RlZCAkZXJyb3JfdGV4dCA9ICcnOyBwcm90ZWN0ZWQgJHJhd1Jlc3BvbnNlID0gJyc7IHByb3RlY3RlZCAkYWxpYXMgPSAnJzsgcHJvdGVjdGVkICRkZWJ1Z01zZyA9ICcnOyBwcm90ZWN0ZWQgJHJlc3BvbnNlQ29kZSA9ICcnOyBwcm90ZWN0ZWQgJHppcCA9ICcnOyBwcm90ZWN0ZWQgJGFkZHIgPSAnJzsgcHJvdGVjdGVkICRtZW1iZXIgPSAnJzsgcHJvdGVjdGVkICRjdnYyID0gJyc7IHByb3RlY3RlZCAkY3Z2MlZlcmlmaWNhdGlvbiA9ICcnOyBwcm90ZWN0ZWQgJHR5cGUgPSAnJzsgcHJvdGVjdGVkICRjYXJkID0gJyc7IHByb3RlY3RlZCAkZXhwRGF5ID0gJyc7IHByb3RlY3RlZCAkZXhwTW9udGggPSAnJzsgcHJvdGVjdGVkICRleHBZZWFyID0gJyc7IHByb3RlY3RlZCAkZWNpID0gJyc7IHByb3RlY3RlZCAkY2F2diA9ICcnOyBwcm90ZWN0ZWQgJHhpZCA9ICcnOyBwcm90ZWN0ZWQgJHJlc291cmNlUGF0aCA9ICcnOyBwcm90ZWN0ZWQgJGFjc3VybCA9ICcnOyBwcm90ZWN0ZWQgJHBhcmVxID0gJyc7IHByb3RlY3RlZCAkcGFyZXMgPSAnJzsgcHJvdGVjdGVkICRlcnJvcl9zZXJ2aWNlX3RhZyA9ICcnOyBwcm90ZWN0ZWQgJGtleXN0b3JlUGF0aCA9ICcnOyBwcm90ZWN0ZWQgJHNlcGVyYXRvciA9ICJceDVjIjsgcHJvdGVjdGVkICRzZXAgPSAiXDQwXDU3XDQwIjsgcHJvdGVjdGVkICR3ZWJBZGRyZXNzID0gJyc7IHByb3RlY3RlZCAka2V5ID0gJyc7IHByb3RlY3RlZCAkaW5pdGlhbGl6YXRpb25WZWN0b3IgPSAnJzsgcHJvdGVjdGVkICRpdnJGbGFnID0gJyc7IHByb3RlY3RlZCAkbnBjMzU2Y2hwaG9uZWlkZm9ybWF0ID0gJyc7IHByb3RlY3RlZCAkbnBjMzU2Y2hwaG9uZWlkID0gJyc7IHByb3RlY3RlZCAkbnBjMzU2c2hvcGNoYW5uZWwgPSAnJzsgcHJvdGVjdGVkICRucGMzNTZhdmFpbGF1dGhjaGFubmVsID0gJyc7IHByb3RlY3RlZCAkbnBjMzU2cGFyZXFjaGFubmVsID0gJyc7IHByb3RlY3RlZCAkbnBjMzU2aXRwY3JlZGVudGlhbCA9ICcnOyBwcm90ZWN0ZWQgJGF1dGhEYXRhTmFtZSA9ICcnOyBwcm90ZWN0ZWQgJGF1dGhEYXRhc3RybGVuID0gJyc7IHByb3RlY3RlZCAkYXV0aERhdGFUeXBlID0gJyc7IHByb3RlY3RlZCAkYXV0aERhdGFMYWJlbCA9ICcnOyBwcm90ZWN0ZWQgJGF1dGhEYXRhUHJvbXB0ID0gJyc7IHByb3RlY3RlZCAkYXV0aERhdGFFbmNyeXB0S2V5ID0gJyc7IHByb3RlY3RlZCAkYXV0aERhdGFFbmNyeXB0VHlwZSA9ICcnOyBwcm90ZWN0ZWQgJGF1dGhEYXRhRW5jcnlwdE1hbmRhdG9yeSA9ICcnOyBwcm90ZWN0ZWQgJGl2clBhc3N3b3JkU3RhdHVzID0gJyc7IHByb3RlY3RlZCAkaXZyUGFzc3dvcmQgPSAnJzsgcHJvdGVjdGVkICRpdHBhdXRodHJhbiA9ICcnOyBwcm90ZWN0ZWQgJGl0cGF1dGhpZGVuID0gJyc7IHByb3RlY3RlZCAkdXJsID0gJyc7IHByb3RlY3RlZCAkc2F2ZWRjYXJkID0gJyc7IHByb3RlY3RlZCAkcGF5bWVudGRlYml0SWQgPSAnJzsgcHJvdGVjdGVkICRwYXltZW50VXJsID0gJyc7IGZ1bmN0aW9uIGdldGlkKCkgeyByZXR1cm4gJHRoaXMtPmlkOyB9IGZ1bmN0aW9uIGdldGFjdGlvbigpIHsgcmV0dXJuICR0aGlzLT5hY3Rpb247IH0gZnVuY3Rpb24gZ2V0dHJhbnNJZCgpIHsgcmV0dXJuICR0aGlzLT50cmFuc0lkOyB9IGZ1bmN0aW9uIGdldGFtdCgpIHsgcmV0dXJuICR0aGlzLT5hbXQ7IH0gZnVuY3Rpb24gZ2V0cmVzcG9uc2VVUkwoKSB7IHJldHVybiAkdGhpcy0+cmVzcG9uc2VVUkw7IH0gZnVuY3Rpb24gZ2V0dHJhY2tJZCgpIHsgcmV0dXJuICR0aGlzLT50cmFja0lkOyB9IGZ1bmN0aW9uIGdldHVkZjEoKSB7IHJldHVybiAkdGhpcy0+dWRmMTsgfSBmdW5jdGlvbiBnZXR1ZGYyKCkgeyByZXR1cm4gJHRoaXMtPnVkZjI7IH0gZnVuY3Rpb24gZ2V0dWRmMygpIHsgcmV0dXJuICR0aGlzLT51ZGYzOyB9IGZ1bmN0aW9uIGdldHVkZjQoKSB7IHJldHVybiAkdGhpcy0+dWRmNDsgfSBmdW5jdGlvbiBnZXR1ZGY1KCkgeyByZXR1cm4gJHRoaXMtPnVkZjU7IH0gZnVuY3Rpb24gZ2V0cGF5bWVudFBhZ2UoKSB7IHJldHVybiAkdGhpcy0+cGF5bWVudFBhZ2U7IH0gZnVuY3Rpb24gZ2V0cGF5bWVudElkKCkgeyByZXR1cm4gJHRoaXMtPnBheW1lbnRJZDsgfSBmdW5jdGlvbiBnZXRyZXN1bHQoKSB7IHJldHVybiAkdGhpcy0+cmVzdWx0OyB9IGZ1bmN0aW9uIGdldGF1dGgoKSB7IHJldHVybiAkdGhpcy0+YXV0aDsgfSBmdW5jdGlvbiBnZXRyZWYoKSB7IHJldHVybiAkdGhpcy0+cmVmOyB9IGZ1bmN0aW9uIGdldGF2cigpIHsgcmV0dXJuICR0aGlzLT5hdnI7IH0gZnVuY3Rpb24gZ2V0RGF0ZSgpIHsgcmV0dXJuICR0aGlzLT5kYXRlOyB9IGZ1bmN0aW9uIGdldGN1cnJlbmN5KCkgeyByZXR1cm4gJHRoaXMtPmN1cnJlbmN5OyB9IGZ1bmN0aW9uIGdldGVycm9yVVJMKCkgeyByZXR1cm4gJHRoaXMtPmVycm9yVVJMOyB9IGZ1bmN0aW9uIGdldGxhbmd1YWdlKCkgeyByZXR1cm4gJHRoaXMtPmxhbmd1YWdlOyB9IGZ1bmN0aW9uIGdldGVycm9yKCkgeyByZXR1cm4gJHRoaXMtPmVycm9yOyB9IGZ1bmN0aW9uIGdldGVycm9yX3RleHQoKSB7IHJldHVybiAkdGhpcy0+ZXJyb3JfdGV4dDsgfSBmdW5jdGlvbiBnZXRyYXdSZXNwb25zZSgpIHsgcmV0dXJuICR0aGlzLT5yYXdSZXNwb25zZTsgfSBmdW5jdGlvbiBnZXRhbGlhcygpIHsgcmV0dXJuICR0aGlzLT5hbGlhczsgfSBmdW5jdGlvbiBnZXREZWJ1Z01zZygpIHsgcmV0dXJuICR0aGlzLT5kZWJ1Z01zZzsgfSBmdW5jdGlvbiBnZXRyZXNwb25zZUNvZGUoKSB7IHJldHVybiAkdGhpcy0+cmVzcG9uc2VDb2RlOyB9IGZ1bmN0aW9uIGdldHppcCgpIHsgcmV0dXJuICR0aGlzLT56aXA7IH0gZnVuY3Rpb24gZ2V0YWRkcigpIHsgcmV0dXJuICR0aGlzLT5hZGRyOyB9IGZ1bmN0aW9uIGdldG1lbWJlcigpIHsgcmV0dXJuICR0aGlzLT5tZW1iZXI7IH0gZnVuY3Rpb24gZ2V0Y3Z2MigpIHsgcmV0dXJuICR0aGlzLT5jdnYyOyB9IGZ1bmN0aW9uIGdldGN2djJWZXJpZmljYXRpb24oKSB7IHJldHVybiAkdGhpcy0+Y3Z2MlZlcmlmaWNhdGlvbjsgfSBmdW5jdGlvbiBnZXRUeXBlKCkgeyByZXR1cm4gJHRoaXMtPnR5cGU7IH0gZnVuY3Rpb24gZ2V0Y2FyZCgpIHsgcmV0dXJuICR0aGlzLT5jYXJkOyB9IGZ1bmN0aW9uIGdldGV4cERheSgpIHsgcmV0dXJuICR0aGlzLT5leHBEYXk7IH0gZnVuY3Rpb24gZ2V0ZXhwTW9udGgoKSB7IHJldHVybiAkdGhpcy0+ZXhwTW9udGg7IH0gZnVuY3Rpb24gZ2V0ZXhwWWVhcigpIHsgcmV0dXJuICR0aGlzLT5leHBZZWFyOyB9IGZ1bmN0aW9uIGdldGVjaSgpIHsgcmV0dXJuICR0aGlzLT5lY2k7IH0gZnVuY3Rpb24gZ2V0Y2F2digpIHsgcmV0dXJuICR0aGlzLT5jYXZ2OyB9IGZ1bmN0aW9uIGdldHhpZCgpIHsgcmV0dXJuICR0aGlzLT54aWQ7IH0gZnVuY3Rpb24gZ2V0cmVzb3VyY2VQYXRoKCkgeyByZXR1cm4gJHRoaXMtPnJlc291cmNlUGF0aDsgfSBmdW5jdGlvbiBnZXRhY3N1cmwoKSB7IHJldHVybiAkdGhpcy0+YWNzdXJsOyB9IGZ1bmN0aW9uIGdldHBhcmVxKCkgeyByZXR1cm4gJHRoaXMtPnBhcmVxOyB9IGZ1bmN0aW9uIGdldHBhcmVzKCkgeyByZXR1cm4gJHRoaXMtPnBhcmVzOyB9IGZ1bmN0aW9uIGdldGVycm9yX3NlcnZpY2VfdGFnKCkgeyByZXR1cm4gJHRoaXMtPmVycm9yX3NlcnZpY2VfdGFnOyB9IGZ1bmN0aW9uIGdldGtleXN0b3JlUGF0aCgpIHsgcmV0dXJuICR0aGlzLT5rZXlzdG9yZVBhdGg7IH0gZnVuY3Rpb24gZ2V0c2VwZXJhdG9yKCkgeyByZXR1cm4gJHRoaXMtPnNlcGVyYXRvcjsgfSBmdW5jdGlvbiBnZXRzZXAoKSB7IHJldHVybiAkdGhpcy0+c2VwOyB9IGZ1bmN0aW9uIGdldHdlYkFkZHJlc3MoKSB7IHJldHVybiAkdGhpcy0+d2ViQWRkcmVzczsgfSBmdW5jdGlvbiBnZXRrZXkoKSB7IHJldHVybiAkdGhpcy0+a2V5OyB9IGZ1bmN0aW9uIGdldGluaXRpYWxpemF0aW9uVmVjdG9yKCkgeyByZXR1cm4gJHRoaXMtPmluaXRpYWxpemF0aW9uVmVjdG9yOyB9IGZ1bmN0aW9uIGdldGl2ckZsYWcoKSB7IHJldHVybiAkdGhpcy0+aXZyRmxhZzsgfSBmdW5jdGlvbiBnZXRucGMzNTZjaHBob25laWRmb3JtYXQoKSB7IHJldHVybiAkdGhpcy0+bnBjMzU2YXZhaWxhdXRoY2hhbm5lbDsgfSBmdW5jdGlvbiBnZXRucGMzNTZjaHBob25laWQoKSB7IHJldHVybiAkdGhpcy0+bnBjMzU2Y2hwaG9uZWlkOyB9IGZ1bmN0aW9uIGdldG5wYzM1NnNob3BjaGFubmVsKCkgeyByZXR1cm4gJHRoaXMtPm5wYzM1NnNob3BjaGFubmVsOyB9IGZ1bmN0aW9uIGdldG5wYzM1NmF2YWlsYXV0aGNoYW5uZWwoKSB7IHJldHVybiAkdGhpcy0+bnBjMzU2YXZhaWxhdXRoY2hhbm5lbDsgfSBmdW5jdGlvbiBnZXRucGMzNTZwYXJlcWNoYW5uZWwoKSB7IHJldHVybiAkdGhpcy0+bnBjMzU2aXRwY3JlZGVudGlhbDsgfSBmdW5jdGlvbiBnZXRucGMzNTZpdHBjcmVkZW50aWFsKCkgeyByZXR1cm4gJHRoaXMtPm5wYzM1Nml0cGNyZWRlbnRpYWw7IH0gZnVuY3Rpb24gZ2V0YXV0aERhdGFOYW1lKCkgeyByZXR1cm4gJHRoaXMtPmF1dGhEYXRhTmFtZTsgfSBmdW5jdGlvbiBnZXRhdXRoRGF0YXN0cmxlbigpIHsgcmV0dXJuICR0aGlzLT5hdXRoRGF0YXN0cmxlbjsgfSBmdW5jdGlvbiBnZXRhdXRoRGF0YVR5cGUoKSB7IHJldHVybiAkdGhpcy0+YXV0aERhdGFUeXBlOyB9IGZ1bmN0aW9uIGdldGF1dGhEYXRhTGFiZWwoKSB7IHJldHVybiAkdGhpcy0+YXV0aERhdGFMYWJlbDsgfSBmdW5jdGlvbiBnZXRhdXRoRGF0YVByb21wdCgpIHsgcmV0dXJuICR0aGlzLT5hdXRoRGF0YVByb21wdDsgfSBmdW5jdGlvbiBnZXRhdXRoRGF0YUVuY3J5cHRLZXkoKSB7IHJldHVybiAkdGhpcy0+YXV0aERhdGFFbmNyeXB0S2V5OyB9IGZ1bmN0aW9uIGdldGF1dGhEYXRhRW5jcnlwdFR5cGUoKSB7IHJldHVybiAkdGhpcy0+YXV0aERhdGFFbmNyeXB0VHlwZTsgfSBmdW5jdGlvbiBnZXRhdXRoRGF0YUVuY3J5cHRNYW5kYXRvcnkoKSB7IHJldHVybiAkdGhpcy0+YXV0aERhdGFFbmNyeXB0TWFuZGF0b3J5OyB9IGZ1bmN0aW9uIGdldGl2clBhc3N3b3JkU3RhdHVzKCkgeyByZXR1cm4gJHRoaXMtPml2clBhc3N3b3JkU3RhdHVzOyB9IGZ1bmN0aW9uIGdldGl2clBhc3N3b3JkKCkgeyByZXR1cm4gJHRoaXMtPml2clBhc3N3b3JkOyB9IGZ1bmN0aW9uIGdldGl0cGF1dGh0cmFuKCkgeyByZXR1cm4gJHRoaXMtPml0cGF1dGh0cmFuOyB9IGZ1bmN0aW9uIGdldGl0cGF1dGhpZGVuKCkgeyByZXR1cm4gJHRoaXMtPml0cGF1dGhpZGVuOyB9IGZ1bmN0aW9uIGdldHVybCgpIHsgcmV0dXJuICR0aGlzLT51cmw7IH0gZnVuY3Rpb24gZ2V0c2F2ZWRjYXJkKCkgeyByZXR1cm4gJHRoaXMtPnNhdmVkY2FyZDsgfSBmdW5jdGlvbiBnZXRwYXltZW50ZGViaXRJZCgpIHsgcmV0dXJuICR0aGlzLT5wYXltZW50ZGViaXRJZDsgfSBmdW5jdGlvbiBnZXRwYXltZW50VXJsKCkgeyByZXR1cm4gJHRoaXMtPnBheW1lbnRVcmw7IH0gZnVuY3Rpb24gc2V0aWQoJHZhbCkgeyAkdGhpcy0+aWQgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldGFjdGlvbigkdmFsKSB7ICR0aGlzLT5hY3Rpb24gPSAkdmFsOyB9IGZ1bmN0aW9uIHNldHRyYW5zSWQoJHZhbCkgeyAkdGhpcy0+dHJhbnNJZCA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0YW10KCR2YWwpIHsgJHRoaXMtPmFtdCA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0cmVzcG9uc2VVUkwoJHZhbCkgeyAkdGhpcy0+cmVzcG9uc2VVUkwgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldHRyYWNrSWQoJHZhbCkgeyAkdGhpcy0+dHJhY2tJZCA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0dWRmMSgkdmFsKSB7ICR0aGlzLT51ZGYxID0gJHZhbDsgfSBmdW5jdGlvbiBzZXR1ZGYyKCR2YWwpIHsgJHRoaXMtPnVkZjIgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldHVkZjMoJHZhbCkgeyAkdGhpcy0+dWRmMyA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0dWRmNCgkdmFsKSB7ICR0aGlzLT51ZGY0ID0gJHZhbDsgfSBmdW5jdGlvbiBzZXR1ZGY1KCR2YWwpIHsgJHRoaXMtPnVkZjUgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldHBheW1lbnRQYWdlKCR2YWwpIHsgJHRoaXMtPnBheW1lbnRQYWdlID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRwYXltZW50SWQoJHZhbCkgeyAkdGhpcy0+cGF5bWVudElkID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRyZXN1bHQoJHZhbCkgeyAkdGhpcy0+cmVzdWx0ID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRhdXRoKCR2YWwpIHsgJHRoaXMtPmF1dGggPSAkdmFsOyB9IGZ1bmN0aW9uIHNldHJlZigkdmFsKSB7ICR0aGlzLT5yZWYgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldGF2cigkdmFsKSB7ICR0aGlzLT5hdnIgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldERhdGUoJHZhbCkgeyAkdGhpcy0+ZGF0ZSA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0Y3VycmVuY3koJHZhbCkgeyAkdGhpcy0+Y3VycmVuY3kgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldGVycm9yVVJMKCR2YWwpIHsgJHRoaXMtPmVycm9yVVJMID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRsYW5ndWFnZSgkdmFsKSB7ICR0aGlzLT5sYW5ndWFnZSA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0ZXJyb3IoJHZhbCkgeyAkdGhpcy0+ZXJyb3IgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldGVycm9yX3RleHQoJHZhbCkgeyAkdGhpcy0+ZXJyb3JfdGV4dCA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0cmF3UmVzcG9uc2UoJHZhbCkgeyAkdGhpcy0+cmF3UmVzcG9uc2UgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldGFsaWFzKCR2YWwpIHsgJHRoaXMtPmFsaWFzID0gJHZhbDsgfSBmdW5jdGlvbiBzZXREZWJ1Z01zZygkdmFsKSB7ICR0aGlzLT5kZWJ1Z01zZyA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0cmVzcG9uc2VDb2RlKCR2YWwpIHsgJHRoaXMtPnJlc3BvbnNlQ29kZSA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0emlwKCR2YWwpIHsgJHRoaXMtPnppcCA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0YWRkcigkdmFsKSB7ICR0aGlzLT5hZGRyID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRtZW1iZXIoJHZhbCkgeyAkdGhpcy0+bWVtYmVyID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRjdnYyKCR2YWwpIHsgJHRoaXMtPmN2djIgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldGN2djJWZXJpZmljYXRpb24oJHZhbCkgeyAkdGhpcy0+Y3Z2MlZlcmlmaWNhdGlvbiA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0VHlwZSgkdmFsKSB7ICR0aGlzLT50eXBlID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRjYXJkKCR2YWwpIHsgJHRoaXMtPmNhcmQgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldGV4cERheSgkdmFsKSB7ICR0aGlzLT5leHBEYXkgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldGV4cE1vbnRoKCR2YWwpIHsgJHRoaXMtPmV4cE1vbnRoID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRleHBZZWFyKCR2YWwpIHsgJHRoaXMtPmV4cFllYXIgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldGVjaSgkdmFsKSB7ICR0aGlzLT5lY2kgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldGNhdnYoJHZhbCkgeyAkdGhpcy0+Y2F2diA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0eGlkKCR2YWwpIHsgJHRoaXMtPnhpZCA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0cmVzb3VyY2VQYXRoKCR2YWwpIHsgJHRoaXMtPnJlc291cmNlUGF0aCA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0YWNzdXJsKCR2YWwpIHsgJHRoaXMtPmFjc3VybCA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0cGFyZXEoJHZhbCkgeyAkdGhpcy0+cGFyZXEgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldHBhcmVzKCR2YWwpIHsgJHRoaXMtPnBhcmVzID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRlcnJvcl9zZXJ2aWNlX3RhZygkdmFsKSB7ICR0aGlzLT5lcnJvcl9zZXJ2aWNlX3RhZyA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0a2V5c3RvcmVQYXRoKCR2YWwpIHsgJHRoaXMtPmtleXN0b3JlUGF0aCA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0c2VwZXJhdG9yKCR2YWwpIHsgJHRoaXMtPnNlcGVyYXRvciA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0c2VwKCR2YWwpIHsgJHRoaXMtPnNlcCA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0d2ViQWRkcmVzcygkdmFsKSB7ICR0aGlzLT53ZWJBZGRyZXNzID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRrZXkoJHZhbCkgeyAkdGhpcy0+a2V5ID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRpbml0aWFsaXphdGlvblZlY3RvcigkdmFsKSB7ICR0aGlzLT5pbml0aWFsaXphdGlvblZlY3RvciA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0aXZyRmxhZygkdmFsKSB7ICR0aGlzLT5pdnJGbGFnID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRucGMzNTZjaHBob25laWRmb3JtYXQoJHZhbCkgeyAkdGhpcy0+bnBjMzU2YXZhaWxhdXRoY2hhbm5lbCA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0bnBjMzU2Y2hwaG9uZWlkKCR2YWwpIHsgJHRoaXMtPm5wYzM1NmNocGhvbmVpZCA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0bnBjMzU2c2hvcGNoYW5uZWwoJHZhbCkgeyAkdGhpcy0+bnBjMzU2c2hvcGNoYW5uZWwgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldG5wYzM1NmF2YWlsYXV0aGNoYW5uZWwoJHZhbCkgeyAkdGhpcy0+bnBjMzU2YXZhaWxhdXRoY2hhbm5lbCA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0bnBjMzU2cGFyZXFjaGFubmVsKCR2YWwpIHsgJHRoaXMtPm5wYzM1Nml0cGNyZWRlbnRpYWwgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldG5wYzM1Nml0cGNyZWRlbnRpYWwoJHZhbCkgeyAkdGhpcy0+bnBjMzU2aXRwY3JlZGVudGlhbCA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0YXV0aERhdGFOYW1lKCR2YWwpIHsgJHRoaXMtPmF1dGhEYXRhTmFtZSA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0YXV0aERhdGFzdHJsZW4oJHZhbCkgeyAkdGhpcy0+YXV0aERhdGFzdHJsZW4gPSAkdmFsOyB9IGZ1bmN0aW9uIHNldGF1dGhEYXRhVHlwZSgkdmFsKSB7ICR0aGlzLT5hdXRoRGF0YVR5cGUgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldGF1dGhEYXRhTGFiZWwoJHZhbCkgeyAkdGhpcy0+YXV0aERhdGFMYWJlbCA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0YXV0aERhdGFQcm9tcHQoJHZhbCkgeyAkdGhpcy0+YXV0aERhdGFQcm9tcHQgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldGF1dGhEYXRhRW5jcnlwdEtleSgkdmFsKSB7ICR0aGlzLT5hdXRoRGF0YUVuY3J5cHRLZXkgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldGF1dGhEYXRhRW5jcnlwdFR5cGUoJHZhbCkgeyAkdGhpcy0+YXV0aERhdGFFbmNyeXB0VHlwZSA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0YXV0aERhdGFFbmNyeXB0TWFuZGF0b3J5KCR2YWwpIHsgJHRoaXMtPmF1dGhEYXRhRW5jcnlwdE1hbmRhdG9yeSA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0aXZyUGFzc3dvcmRTdGF0dXMoJHZhbCkgeyAkdGhpcy0+aXZyUGFzc3dvcmRTdGF0dXMgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldGl2clBhc3N3b3JkKCR2YWwpIHsgJHRoaXMtPml2clBhc3N3b3JkID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRpdHBhdXRodHJhbigkdmFsKSB7ICR0aGlzLT5pdHBhdXRodHJhbiA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0aXRwYXV0aGlkZW4oJHZhbCkgeyAkdGhpcy0+aXRwYXV0aGlkZW4gPSAkdmFsOyB9IGZ1bmN0aW9uIHNldHVybCgkdmFsKSB7ICR0aGlzLT51cmwgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldHNhdmVkY2FyZCgkdmFsKSB7ICR0aGlzLT5zYXZlZGNhcmQgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldHBheW1lbnRkZWJpdElkKCR2YWwpIHsgJHRoaXMtPnBheW1lbnRkZWJpdElkID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRwYXltZW50VXJsKCR2YWwpIHsgJHRoaXMtPnBheW1lbnRVcmwgPSAkdmFsOyB9IGZ1bmN0aW9uIGJ1aWxkSG9zdFJlcXVlc3QoKSB7ICRzdHJSZXF1ZXN0ID0gJyc7IHRyeSB7IGlmIChzdHJsZW4oJHRoaXMtPmFtdCkgPiAwKSB7ICRzdHJSZXF1ZXN0IC49ICJceDYxXDE1NVwxNjRcNzUiIC4gJHRoaXMtPmFtdCAuICJcNDYiOyB9IGlmIChzdHJsZW4oJHRoaXMtPmFjdGlvbikgPiAwKSB7ICRzdHJSZXF1ZXN0IC49ICJcMTQxXDE0M1wxNjRceDY5XHg2Zlx4NmVcNzUiIC4gJHRoaXMtPmFjdGlvbiAuICJceDI2IjsgfSBpZiAoc3RybGVuKCR0aGlzLT5yZXNwb25zZVVSTCkgPiAwKSB7ICRzdHJSZXF1ZXN0IC49ICJceDcyXDE0NVwxNjNceDcwXHg2Zlx4NmVcMTYzXHg2NVx4NTVceDUyXDExNFx4M2QiIC4gJHRoaXMtPnJlc3BvbnNlVVJMIC4gIlx4MjYiOyB9IGlmIChzdHJsZW4oJHRoaXMtPmVycm9yVVJMKSA+IDApIHsgJHN0clJlcXVlc3QgLj0gIlwxNDVcMTYyXDE2MlwxNTdcMTYyXHg1NVx4NTJceDRjXDc1IiAuICR0aGlzLT5lcnJvclVSTCAuICJceDI2IjsgfSBpZiAoc3RybGVuKCR0aGlzLT50cmFja0lkKSA+IDApIHsgJHN0clJlcXVlc3QgLj0gIlwxNjRceDcyXHg2MVwxNDNcMTUzXHg2OVwxNDRcNzUiIC4gJHRoaXMtPnRyYWNrSWQgLiAiXDQ2IjsgfSBpZiAoc3RybGVuKCR0aGlzLT51ZGYxKSA+IDApIHsgJHN0clJlcXVlc3QgLj0gIlwxNjVcMTQ0XHg2Nlw2MVw3NSIgLiAkdGhpcy0+dWRmMSAuICJceDI2IjsgfSBpZiAoc3RybGVuKCR0aGlzLT51ZGYyKSA+IDApIHsgJHN0clJlcXVlc3QgLj0gIlx4NzVceDY0XHg2Nlx4MzJcNzUiIC4gJHRoaXMtPnVkZjIgLiAiXDQ2IjsgfSBpZiAoc3RybGVuKCR0aGlzLT51ZGYzKSA+IDApIHsgJHN0clJlcXVlc3QgLj0gIlwxNjVceDY0XHg2Nlx4MzNcNzUiIC4gJHRoaXMtPnVkZjMgLiAiXDQ2IjsgfSBpZiAoc3RybGVuKCR0aGlzLT51ZGY0KSA+IDApIHsgJHN0clJlcXVlc3QgLj0gIlwxNjVceDY0XHg2Nlx4MzRcNzUiIC4gJHRoaXMtPnVkZjQgLiAiXDQ2IjsgfSBpZiAoc3RybGVuKCR0aGlzLT51ZGY1KSA+IDApIHsgJHN0clJlcXVlc3QgLj0gIlx4NzVcMTQ0XDE0Nlw2NVw3NSIgLiAkdGhpcy0+dWRmNSAuICJcNDYiOyB9IGlmIChzdHJsZW4oJHRoaXMtPmN1cnJlbmN5KSA+IDApIHsgJHN0clJlcXVlc3QgLj0gIlx4NjNcMTY1XDE2MlwxNjJceDY1XDE1Nlx4NjNcMTcxXDE0M1x4NmZceDY0XHg2NVw3NSIgLiAkdGhpcy0+Y3VycmVuY3kgLiAiXDQ2IjsgfSBpZiAoJHRoaXMtPmxhbmd1YWdlICE9IG51bGwgJiYgc3RybGVuKCR0aGlzLT5sYW5ndWFnZSkgPiAwKSB7ICRzdHJSZXF1ZXN0IC49ICJceDZjXDE0MVx4NmVceDY3XDE1MVwxNDRcNzUiIC4gJHRoaXMtPmxhbmd1YWdlIC4gIlx4MjYiOyB9IHJldHVybiAkc3RyUmVxdWVzdDsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7IHJldHVybiBudWxsOyB9IH0gZnVuY3Rpb24gYnVpbGRYTUxSZXF1ZXN0KCkgeyAkcmVxdWVzdGJ1ZmZlciA9ICcnOyB0cnkgeyAkcmVxdWVzdGJ1ZmZlciAuICJceDNjXHg3Mlx4NjVceDcxXHg3NVx4NjVcMTYzXDE2NFw3NiI7IGlmICgkdGhpcy0+Y2FyZCAhPSBudWxsKSB7IGlmIChzdHJsZW4oJHRoaXMtPmNhcmQpID4gMCkgeyAkcmVxdWVzdGJ1ZmZlciAuPSAiXDc0XDE0M1x4NjFceDcyXDE0NFx4M2UiIC4gJHRoaXMtPmNhcmQgLiAiXHgzY1x4MmZcMTQzXDE0MVwxNjJceDY0XHgzZSI7IH0gfSBpZiAoJHRoaXMtPmN2djIgIT0gbnVsbCkgeyBpZiAoc3RybGVuKCR0aGlzLT5jdnYyKSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlx4M2NceDYzXDE2Nlx4NzZcNjJceDNlIiAuICR0aGlzLT5jdnYyIC4gIlw3NFx4MmZcMTQzXHg3Nlx4NzZceDMyXHgzZSI7IH0gfSBpZiAoJHRoaXMtPmN1cnJlbmN5ICE9IG51bGwpIHsgaWYgKHN0cmxlbigkdGhpcy0+Y3VycmVuY3kpID4gMCkgeyAkcmVxdWVzdGJ1ZmZlciAuPSAiXDc0XDE0M1x4NzVceDcyXHg3Mlx4NjVceDZlXHg2M1wxNzFcMTQzXDE1N1wxNDRceDY1XHgzZSIgLiAkdGhpcy0+Y3VycmVuY3kgLiAiXHgzY1w1N1wxNDNcMTY1XDE2MlwxNjJcMTQ1XDE1NlwxNDNcMTcxXDE0M1x4NmZcMTQ0XHg2NVx4M2UiOyB9IH0gaWYgKCR0aGlzLT5leHBZZWFyICE9IG51bGwpIHsgaWYgKHN0cmxlbigkdGhpcy0+ZXhwWWVhcikgPiAwKSB7ICRyZXF1ZXN0YnVmZmVyIC49ICJcNzRceDY1XHg3OFwxNjBcMTcxXDE0NVx4NjFceDcyXHgzZSIgLiAkdGhpcy0+ZXhwWWVhciAuICJceDNjXDU3XHg2NVx4NzhceDcwXDE3MVwxNDVceDYxXHg3Mlw3NiI7IH0gfSBpZiAoJHRoaXMtPmV4cE1vbnRoICE9IG51bGwpIHsgaWYgKHN0cmxlbigkdGhpcy0+ZXhwTW9udGgpID4gMCkgeyAkcmVxdWVzdGJ1ZmZlciAuPSAiXHgzY1x4NjVceDc4XDE2MFx4NmRcMTU3XDE1NlwxNjRcMTUwXDc2IiAuICR0aGlzLT5leHBNb250aCAuICJcNzRcNTdceDY1XDE3MFwxNjBceDZkXDE1N1wxNTZceDc0XDE1MFw3NiI7IH0gfSBpZiAoJHRoaXMtPmV4cERheSAhPSBudWxsKSB7IGlmIChzdHJsZW4oJHRoaXMtPmV4cERheSkgPiAwKSB7ICRyZXF1ZXN0YnVmZmVyIC49ICJcNzRceDY1XDE3MFx4NzBcMTQ0XDE0MVx4NzlcNzYiIC4gIlw2MFx4MzEiIC4gIlw3NFx4MmZcMTQ1XHg3OFx4NzBcMTQ0XDE0MVwxNzFceDNlIjsgfSB9IGlmICgkdGhpcy0+dHlwZSAhPSBudWxsKSB7IGlmIChzdHJsZW4oJHRoaXMtPnR5cGUpID4gMCkgeyAkcmVxdWVzdGJ1ZmZlciAuPSAiXHgzY1x4NzRcMTcxXDE2MFx4NjVceDNlIiAuICR0aGlzLT50eXBlIC4gIlw3NFx4MmZcMTY0XHg3OVwxNjBceDY1XHgzZSI7IH0gfSBpZiAoJHRoaXMtPnRyYW5zSWQgIT0gbnVsbCkgeyBpZiAoc3RybGVuKCR0aGlzLT50cmFuc0lkKSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlw3NFx4NzRceDcyXDE0MVwxNTZcMTYzXHg2OVx4NjRcNzYiIC4gJHRoaXMtPnRyYW5zSWQgLiAiXHgzY1w1N1wxNjRceDcyXDE0MVx4NmVcMTYzXDE1MVx4NjRceDNlIjsgfSB9IGlmICgkdGhpcy0+emlwICE9IG51bGwpIHsgaWYgKHN0cmxlbigkdGhpcy0+emlwKSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlx4M2NceDdhXHg2OVwxNjBceDNlIiAuICR0aGlzLT56aXAgLiAiXHgzY1w1N1x4N2FceDY5XHg3MFw3NiI7IH0gfSBpZiAoJHRoaXMtPmFkZHIgIT0gbnVsbCkgeyBpZiAoc3RybGVuKCR0aGlzLT5hZGRyKSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlx4M2NcMTQxXDE0NFwxNDRceDcyXHgzZSIgLiAkdGhpcy0+YWRkciAuICJceDNjXHgyZlwxNDFcMTQ0XDE0NFwxNjJceDNlIjsgfSB9IGlmICgkdGhpcy0+bWVtYmVyICE9IG51bGwpIHsgaWYgKHN0cmxlbigkdGhpcy0+bWVtYmVyKSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlw3NFx4NmRcMTQ1XDE1NVwxNDJceDY1XHg3Mlx4M2UiIC4gJHRoaXMtPm1lbWJlciAuICJceDNjXHgyZlwxNTVceDY1XDE1NVx4NjJceDY1XHg3Mlw3NiI7IH0gfSBpZiAoJHRoaXMtPmFtdCAhPSBudWxsKSB7IGlmIChzdHJsZW4oJHRoaXMtPmFtdCkgPiAwKSB7ICRyZXF1ZXN0YnVmZmVyIC49ICJcNzRceDYxXHg2ZFx4NzRcNzYiIC4gJHRoaXMtPmFtdCAuICJcNzRcNTdceDYxXHg2ZFx4NzRcNzYiOyB9IH0gaWYgKCR0aGlzLT5hY3Rpb24gIT0gbnVsbCkgeyBpZiAoc3RybGVuKCR0aGlzLT5hY3Rpb24pID4gMCkgeyAkcmVxdWVzdGJ1ZmZlciAuPSAiXHgzY1wxNDFceDYzXHg3NFx4NjlcMTU3XDE1Nlx4M2UiIC4gJHRoaXMtPmFjdGlvbiAuICJceDNjXDU3XDE0MVx4NjNceDc0XDE1MVwxNTdcMTU2XDc2IjsgfSB9IGlmICgkdGhpcy0+dHJhY2tJZCAhPSBudWxsKSB7IGlmIChzdHJsZW4oJHRoaXMtPnRyYWNrSWQpID4gMCkgeyAkcmVxdWVzdGJ1ZmZlciAuPSAiXDc0XDE2NFx4NzJcMTQxXHg2M1x4NmJceDY5XHg2NFx4M2UiIC4gJHRoaXMtPnRyYWNrSWQgLiAiXDc0XDU3XHg3NFx4NzJceDYxXDE0M1x4NmJceDY5XDE0NFw3NiI7IH0gfSBpZiAoJHRoaXMtPnVkZjEgIT0gbnVsbCkgeyBpZiAoc3RybGVuKCR0aGlzLT51ZGYxKSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlx4M2NcMTY1XHg2NFx4NjZceDMxXDc2IiAuICR0aGlzLT51ZGYxIC4gIlx4M2NceDJmXDE2NVwxNDRcMTQ2XHgzMVw3NiI7IH0gfSBpZiAoJHRoaXMtPnVkZjIgIT0gbnVsbCkgeyBpZiAoc3RybGVuKCR0aGlzLT51ZGYyKSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlx4M2NceDc1XDE0NFx4NjZceDMyXHgzZSIgLiAkdGhpcy0+dWRmMiAuICJcNzRcNTdceDc1XDE0NFwxNDZcNjJcNzYiOyB9IH0gaWYgKCR0aGlzLT51ZGYzICE9IG51bGwpIHsgaWYgKHN0cmxlbigkdGhpcy0+dWRmMykgPiAwKSB7ICRyZXF1ZXN0YnVmZmVyIC49ICJcNzRcMTY1XHg2NFx4NjZceDMzXDc2IiAuICR0aGlzLT51ZGYzIC4gIlw3NFx4MmZceDc1XHg2NFx4NjZcNjNcNzYiOyB9IH0gaWYgKCR0aGlzLT51ZGY0ICE9IG51bGwpIHsgaWYgKHN0cmxlbigkdGhpcy0+dWRmNCkgPiAwKSB7ICRyZXF1ZXN0YnVmZmVyIC49ICJceDNjXHg3NVwxNDRceDY2XDY0XDc2IiAuICR0aGlzLT51ZGY0IC4gIlx4M2NceDJmXHg3NVwxNDRcMTQ2XDY0XHgzZSI7IH0gfSBpZiAoJHRoaXMtPnVkZjUgIT0gbnVsbCkgeyBpZiAoc3RybGVuKCR0aGlzLT51ZGY1KSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlw3NFx4NzVceDY0XDE0Nlw2NVx4M2UiIC4gJHRoaXMtPnVkZjUgLiAiXDc0XDU3XDE2NVwxNDRcMTQ2XDY1XHgzZSI7IH0gfSBpZiAoJHRoaXMtPmN1cnJlbmN5ICE9IG51bGwpIHsgaWYgKHN0cmxlbigkdGhpcy0+Y3VycmVuY3kpID4gMCkgeyAkcmVxdWVzdGJ1ZmZlciAuPSAiXHgzY1x4NjNceDc1XHg3MlwxNjJceDY1XDE1Nlx4NjNceDc5XHg2M1x4NmZceDY0XDE0NVx4M2UiIC4gJHRoaXMtPmN1cnJlbmN5IC4gIlw3NFw1N1wxNDNcMTY1XHg3Mlx4NzJcMTQ1XDE1NlwxNDNceDc5XDE0M1wxNTdcMTQ0XHg2NVx4M2UiOyB9IH0gaWYgKCR0aGlzLT5lY2kgIT0gbnVsbCkgeyBpZiAoc3RybGVuKCR0aGlzLT5lY2kpID4gMCkgeyAkcmVxdWVzdGJ1ZmZlciAuPSAiXHgzY1wxNDVcMTQzXDE1MVx4M2UiIC4gJHRoaXMtPmVjaSAuICJcNzRcNTdceDY1XDE0M1wxNTFcNzYiOyB9IH0gaWYgKCR0aGlzLT5lcnJvclVSTCAhPSBudWxsKSB7IGlmIChzdHJsZW4oJHRoaXMtPmVycm9yVVJMKSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlw3NFx4NjVcMTYyXDE2Mlx4NmZceDcyXHg1NVx4NTJceDRjXDc2IiAuICR0aGlzLT5lcnJvclVSTCAuICJcNzRcNTdceDY1XDE2MlwxNjJceDZmXHg3MlwxMjVcMTIyXHg0Y1x4M2UiOyB9IH0gaWYgKCR0aGlzLT5yZXNwb25zZVVSTCAhPSBudWxsKSB7IGlmIChzdHJsZW4oJHRoaXMtPnJlc3BvbnNlVVJMKSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlx4M2NceDcyXHg2NVwxNjNcMTYwXDE1N1x4NmVceDczXDE0NVwxMjVcMTIyXDExNFx4M2UiIC4gJHRoaXMtPnJlc3BvbnNlVVJMIC4gIlw3NFx4MmZceDcyXDE0NVx4NzNcMTYwXDE1N1wxNTZcMTYzXHg2NVx4NTVcMTIyXDExNFx4M2UiOyB9IH0gaWYgKCR0aGlzLT5pdnJGbGFnICE9IG51bGwpIHsgaWYgKHN0cmxlbigkdGhpcy0+aXZyRmxhZykgPiAwKSB7ICRyZXF1ZXN0YnVmZmVyIC49ICJceDNjXHg2OVx4NzZceDcyXHg0NlwxNTRcMTQxXHg2N1w3NiIgLiAkdGhpcy0+aXZyRmxhZyAuICJceDNjXHgyZlwxNTFcMTY2XHg3MlwxMDZceDZjXHg2MVwxNDdceDNlIjsgfSB9IGlmICgkdGhpcy0+bnBjMzU2Y2hwaG9uZWlkZm9ybWF0ICE9IG51bGwpIHsgaWYgKHN0cmxlbigkdGhpcy0+bnBjMzU2Y2hwaG9uZWlkZm9ybWF0KSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlw3NFx4NmVceDcwXDE0M1x4MzNcNjVceDM2XDE0M1wxNTBcMTYwXHg2OFwxNTdceDZlXDE0NVwxNTFceDY0XDE0NlwxNTdceDcyXHg2ZFwxNDFcMTY0XDc2IiAuICR0aGlzLT5ucGMzNTZjaHBob25laWRmb3JtYXQgLiAiXHgzY1w1N1wxNTZceDcwXDE0M1x4MzNceDM1XDY2XDE0M1wxNTBceDcwXDE1MFwxNTdcMTU2XDE0NVx4NjlceDY0XHg2Nlx4NmZceDcyXHg2ZFwxNDFceDc0XDc2IjsgfSB9IGlmICgkdGhpcy0+bnBjMzU2Y2hwaG9uZWlkICE9IG51bGwpIHsgaWYgKHN0cmxlbigkdGhpcy0+bnBjMzU2Y2hwaG9uZWlkKSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlw3NFx4NmVcMTYwXHg2M1w2M1x4MzVcNjZcMTQzXHg2OFwxNjBceDY4XDE1N1wxNTZceDY1XDE1MVx4NjRcNzYiIC4gJHRoaXMtPm5wYzM1NmNocGhvbmVpZCAuICJcNzRcNTdceDZlXDE2MFwxNDNcNjNcNjVcNjZceDYzXHg2OFwxNjBcMTUwXDE1N1x4NmVcMTQ1XDE1MVwxNDRcNzYiOyB9IH0gaWYgKCR0aGlzLT5ucGMzNTZzaG9wY2hhbm5lbCAhPSBudWxsKSB7IGlmIChzdHJsZW4oJHRoaXMtPm5wYzM1NnNob3BjaGFubmVsKSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlw3NFwxNTZcMTYwXDE0M1x4MzNceDM1XHgzNlwxNjNceDY4XHg2Zlx4NzBceDYzXDE1MFx4NjFceDZlXDE1Nlx4NjVceDZjXDc2IiAuICR0aGlzLT5ucGMzNTZzaG9wY2hhbm5lbCAuICJcNzRceDJmXDE1NlwxNjBcMTQzXDYzXDY1XDY2XHg3M1x4NjhceDZmXDE2MFx4NjNceDY4XHg2MVwxNTZcMTU2XDE0NVx4NmNcNzYiOyB9IH0gaWYgKCR0aGlzLT5ucGMzNTZhdmFpbGF1dGhjaGFubmVsICE9IG51bGwpIHsgaWYgKHN0cmxlbigkdGhpcy0+bnBjMzU2YXZhaWxhdXRoY2hhbm5lbCkgPiAwKSB7ICRyZXF1ZXN0YnVmZmVyIC49ICJceDNjXDE1NlwxNjBcMTQzXDYzXDY1XHgzNlwxNDFceDc2XDE0MVwxNTFcMTU0XHg2MVwxNjVcMTY0XHg2OFwxNDNceDY4XHg2MVx4NmVceDZlXHg2NVwxNTRcNzYiIC4gJHRoaXMtPm5wYzM1NmF2YWlsYXV0aGNoYW5uZWwgLiAiXHgzY1x4MmZceDZlXHg3MFwxNDNceDMzXHgzNVw2NlwxNDFcMTY2XHg2MVwxNTFceDZjXDE0MVwxNjVceDc0XDE1MFx4NjNcMTUwXHg2MVx4NmVceDZlXHg2NVwxNTRceDNlIjsgfSB9IGlmICgkdGhpcy0+bnBjMzU2cGFyZXFjaGFubmVsICE9IG51bGwpIHsgaWYgKHN0cmxlbigkdGhpcy0+bnBjMzU2cGFyZXFjaGFubmVsKSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlw3NFx4NmVceDcwXDE0M1w2M1x4MzVceDM2XHg3MFwxNDFcMTYyXHg2NVwxNjFcMTQzXDE1MFwxNDFceDZlXDE1NlwxNDVceDZjXHgzZSIgLiAkdGhpcy0+bnBjMzU2cGFyZXFjaGFubmVsIC4gIlx4M2NcNTdcMTU2XHg3MFx4NjNcNjNceDM1XHgzNlwxNjBcMTQxXHg3Mlx4NjVceDcxXHg2M1x4NjhcMTQxXHg2ZVx4NmVceDY1XHg2Y1x4M2UiOyB9IH0gaWYgKCR0aGlzLT5ucGMzNTZpdHBjcmVkZW50aWFsICE9IG51bGwpIHsgaWYgKHN0cmxlbigkdGhpcy0+bnBjMzU2aXRwY3JlZGVudGlhbCkgPiAwKSB7ICRyZXF1ZXN0YnVmZmVyIC49ICJcNzRceDZlXHg3MFwxNDNcNjNceDM1XHgzNlwxNTFcMTY0XHg3MFwxNDNcMTYyXHg2NVx4NjRceDY1XHg2ZVwxNjRceDY5XDE0MVx4NmNcNzYiIC4gJHRoaXMtPm5wYzM1Nml0cGNyZWRlbnRpYWwgLiAiXDc0XDU3XHg2ZVwxNjBceDYzXDYzXDY1XDY2XHg2OVwxNjRceDcwXDE0M1wxNjJceDY1XDE0NFwxNDVcMTU2XDE2NFwxNTFcMTQxXDE1NFw3NiI7IH0gfSBpZiAoJHRoaXMtPml2clBhc3N3b3JkU3RhdHVzICE9IG51bGwgJiYgJHRoaXMtPml2clBhc3N3b3JkU3RhdHVzIC4gc3RybGVuKCkgPiAwKSB7ICRyZXF1ZXN0YnVmZmVyIC49ICJcNzRcMTUxXDE2Nlx4NzJcMTIwXDE0MVwxNjNcMTYzXDE2N1x4NmZceDcyXDE0NFwxMjNceDc0XDE0MVwxNjRceDc1XHg3M1w3NiIgLiAkdGhpcy0+aXZyUGFzc3dvcmRTdGF0dXMgLiAiXHgzY1x4MmZcMTUxXHg3NlwxNjJceDUwXHg2MVx4NzNcMTYzXHg3N1x4NmZcMTYyXHg2NFwxMjNceDc0XHg2MVx4NzRceDc1XHg3M1x4M2UiOyB9IGlmICgkdGhpcy0+aXZyUGFzc3dvcmQgIT0gbnVsbCAmJiBzdHJsZW4oJHRoaXMtPml2clBhc3N3b3JkKSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlx4M2NcMTUxXDE2Nlx4NzJceDUwXDE0MVx4NzNceDczXDE2N1wxNTdceDcyXDE0NFx4M2UiIC4gJHRoaXMtPml2clBhc3N3b3JkIC4gIlx4M2NceDJmXDE1MVwxNjZceDcyXHg1MFwxNDFceDczXDE2M1x4NzdcMTU3XHg3MlwxNDRcNzYiOyB9IGlmICgkdGhpcy0+c2F2ZWRjYXJkICE9IG51bGwpIHsgJHJlcXVlc3RidWZmZXIgLj0gIlw3NFx4NzNceDYxXHg3Nlx4NjVceDY0XHg2M1wxNDFcMTYyXHg2NFx4M2UiIC4gJHRoaXMtPnNhdmVkY2FyZCAuICJcNzRcNTdceDczXDE0MVx4NzZceDY1XHg2NFx4NjNcMTQxXDE2Mlx4NjRceDNlIjsgfSByZXR1cm4gJHJlcXVlc3RidWZmZXI7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyByZXR1cm4gbnVsbDsgfSB9IGZ1bmN0aW9uIHBlcmZvcm1QYXltZW50SW5pdGlhbGl6YXRpb25IVFRQKCkgeyAkcmVxdWVzdCA9IG51bGw7ICRyZXF1ZXN0YnVmZmVyID0gbnVsbDsgJHhtbERhdGEgPSBudWxsOyB0cnkgeyAka2V5UGFyc2VyID0gbmV3IEtleVN0b3JlKCk7ICR0aGlzLT5rZXkgPSAka2V5UGFyc2VyLT5wYXJzZUtleVN0b3JlKCR0aGlzLT5rZXlzdG9yZVBhdGgpOyAkeG1sRGF0YSA9ICR0aGlzLT5wYXJzZVJlc291cmNlKCR0aGlzLT5rZXksICR0aGlzLT5yZXNvdXJjZVBhdGgsICR0aGlzLT5hbGlhcyk7IGlmICgkeG1sRGF0YSAhPSBudWxsKSB7ICR4bWxEYXRhID0gJHRoaXMtPnBhcnNlWE1MUmVxdWVzdCgkeG1sRGF0YSk7IH0gZWxzZSB7ICRlcnJvciA9ICJceDQxXDE1NFx4NjlcMTQxXHg3M1w0MFwxNTZceDYxXHg2ZFx4NjVcNDBcMTQ0XHg2Zlx4NjVceDczXDQwXDE1Nlx4NmZcMTY0XHgyMFwxNDVcMTcwXHg2OVx4NzRcMTYzIjsgfSAkdGhpcy0+a2V5ID0gJHhtbERhdGFbIlwxNjJcMTQ1XDE2M1x4NmZcMTY1XDE2MlwxNDNcMTQ1XDExM1x4NjVceDc5Il07ICR0aGlzLT5zZXRJZCgkeG1sRGF0YVsiXDE1MVwxNDQiXSk7ICRyZXF1ZXN0YnVmZmVyID0gJHRoaXMtPmJ1aWxkSG9zdFJlcXVlc3QoKTsgJHJlcXVlc3RidWZmZXIgLj0gIlwxNTFceDY0XHgzZCIgLiAkeG1sRGF0YVsiXHg2OVx4NjQiXSAuICJcNDZcMTYwXHg2MVwxNjNceDczXHg3N1wxNTdceDcyXDE0NFw3NSIgLiAkeG1sRGF0YVsiXHg3MFwxNDFceDczXDE2M1x4NzdceDZmXHg3Mlx4NjQiXSAuICJcNDYiOyAkdGhpcy0+d2ViQWRkcmVzcyA9ICR4bWxEYXRhWyJceDc3XDE0NVx4NjJceDYxXDE0NFwxNDRcMTYyXHg2NVx4NzNcMTYzIl07ICRjaXBoZXJlZFRleHQgPSAkdGhpcy0+ZW5jcnlwdEFFUygkcmVxdWVzdGJ1ZmZlciwgJHRoaXMtPmtleSk7ICRyZXF1ZXN0IC49ICJceDI2XHg3NFx4NzJcMTQxXHg2ZVx4NjRceDYxXDE2NFwxNDFcNzUiIC4gJGNpcGhlcmVkVGV4dDsgJHJlcXVlc3QgLj0gIlx4MjZceDY1XHg3MlwxNjJceDZmXHg3Mlx4NTVceDUyXDExNFw3NSIgLiAkdGhpcy0+ZXJyb3JVUkwgLiAiXHgyNlwxNjJcMTQ1XHg3M1wxNjBceDZmXDE1NlwxNjNceDY1XHg1NVwxMjJceDRjXDc1IiAuICR0aGlzLT5yZXNwb25zZVVSTCAuICJceDI2XHg3NFwxNjJceDYxXDE1NlwxNjBcMTU3XHg3MlwxNjRcMTQxXHg2Y1wxMTFcMTQ0XHgzZCIgLiAkeG1sRGF0YVsiXHg2OVx4NjQiXTsgJHRoaXMtPndlYkFkZHJlc3MgLj0gIlw1N1x4NTBceDYxXDE3MVx4NmRceDY1XDE1Nlx4NzRcMTEwXDEyNFx4NTRceDUwXDU2XHg2OFx4NzRceDZkXHgzZlx4NzBceDYxXHg3MlwxNDFcMTU1XHgzZFwxNjBcMTQxXDE3MVwxNTVcMTQ1XHg2ZVx4NzRcMTExXHg2ZVwxNTFcMTY0IiAuICRyZXF1ZXN0OyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJHRoaXMtPmVycm9yID0gIlx4NTBceDcyXDE1N1x4NjJceDZjXDE0NVwxNTVcNDBcMTY3XDE1MFx4NjlceDZjXHg2NVx4MjBceDY1XHg2ZVx4NjNcMTYyXDE3MVx4NzBceDc0XDE1MVx4NmVceDY3XDQwXDE2Mlx4NjVceDcxXDE2NVwxNDVceDczXHg3NFx4MjBceDY0XHg2MVwxNjRceDYxIjsgcmV0dXJuIC0xOyB9IHJldHVybiAwOyB9IGZ1bmN0aW9uIHBlcmZvcm1UcmFuc2FjdGlvbkhUVFAoKSB7ICRyZXF1ZXN0ID0gbnVsbDsgJHJlcXVlc3RidWZmZXIgPSBudWxsOyAkeG1sRGF0YSA9IG51bGw7IHRyeSB7ICRyZXF1ZXN0YnVmZmVyID0gJHRoaXMtPmJ1aWxkWE1MUmVxdWVzdCgpOyAka2V5UGFyc2VyID0gbmV3IEtleVN0b3JlKCk7ICR0aGlzLT5rZXkgPSAka2V5UGFyc2VyLT5wYXJzZUtleVN0b3JlKCR0aGlzLT5rZXlzdG9yZVBhdGgpOyAkeG1sRGF0YSA9ICR0aGlzLT5wYXJzZVJlc291cmNlKCR0aGlzLT5rZXksICR0aGlzLT5yZXNvdXJjZVBhdGgsICR0aGlzLT5hbGlhcyk7IGlmICgkeG1sRGF0YSA9PSBudWxsKSB7ICR0aGlzLT5lcnJvciA9ICJceDQxXHg2Y1wxNTFcMTQxXHg3M1x4MjBceDZlXHg2MVx4NmRcMTQ1XHgyMFx4NjRceDZmXDE0NVx4NzNcNDBcMTU2XDE1N1x4NzRcNDBcMTQ1XDE3MFx4NjlceDc0XDE2MyI7IHJldHVybiAtMTsgfSBlbHNlIHsgJHhtbERhdGEgPSAkdGhpcy0+cGFyc2VYTUxSZXF1ZXN0KCR4bWxEYXRhKTsgfSAkcmVxdWVzdGJ1ZmZlciAuPSAiXHgzY1wxNTFceDY0XDc2IiAuICR4bWxEYXRhWyJceDY5XDE0NCJdIC4gIlw3NFw1N1x4NjlceDY0XDc2IjsgJHJlcXVlc3RidWZmZXIgLj0gIlw3NFx4NzBcMTQxXHg3M1wxNjNceDc3XDE1N1wxNjJceDY0XHgzZSIgLiAkeG1sRGF0YVsiXHg3MFwxNDFcMTYzXDE2M1wxNjdceDZmXHg3MlwxNDQiXSAuICJcNzRceDJmXDE2MFwxNDFcMTYzXDE2M1wxNjdcMTU3XHg3MlwxNDRceDNlIjsgJHJlcXVlc3RidWZmZXIgLiAiXDc0XHgyZlx4NzJceDY1XHg3MVx4NzVcMTQ1XDE2M1x4NzRceDNlIjsgaWYgKCR0aGlzLT5yZXNwb25zZVVSTCA9PSBudWxsIHx8IHN0cmxlbih0cmltKCR0aGlzLT5yZXNwb25zZVVSTCkpIDw9IDApIHsgJHRoaXMtPmVycm9yID0gIlwxMjJcMTQ1XHg3M1x4NzBceDZmXHg2ZVwxNjNcMTQ1XHgyMFwxMjVcMTIyXDExNFx4MjBceDY5XDE2M1w0MFx4NDlceDZlXHg3Nlx4NjFceDZjXDE1MVwxNDRcNDBcMTU3XHg3Mlw0MFwxMTZcMTI1XHg0Y1x4NGMiOyByZXR1cm4gLTE7IH0gJHRoaXMtPmtleSA9ICR4bWxEYXRhWyJcMTYyXDE0NVwxNjNceDZmXDE2NVx4NzJcMTQzXHg2NVwxMTNcMTQ1XHg3OSJdOyAkY2lwaGVyZWRUZXh0ID0gJHRoaXMtPmVuY3J5cHRBRVMoJHJlcXVlc3RidWZmZXIsICR0aGlzLT5rZXkpOyAkcmVxdWVzdCAuPSAiXDQ2XHg3NFx4NzJceDYxXDE1Nlx4NjRcMTQxXHg3NFx4NjFcNzUiIC4gJGNpcGhlcmVkVGV4dDsgJHJlcXVlc3QgLj0gIlw0Nlx4NjVcMTYyXDE2Mlx4NmZcMTYyXDEyNVwxMjJcMTE0XDc1IiAuICR0aGlzLT5lcnJvclVSTDsgJHJlcXVlc3QgLj0gIlw0NlwxNjJceDY1XHg3M1wxNjBceDZmXHg2ZVwxNjNcMTQ1XDEyNVx4NTJcMTE0XDc1IiAuICR0aGlzLT5yZXNwb25zZVVSTDsgJHJlcXVlc3QgLj0gIlx4MjZcMTY0XDE2MlwxNDFceDZlXDE2MFwxNTdceDcyXDE2NFx4NjFcMTU0XHg0OVwxNDRceDNkIiAuICR4bWxEYXRhWyJceDY5XHg2NCJdOyAkdGhpcy0+d2ViQWRkcmVzcyA9ICR4bWxEYXRhWyJcMTY3XHg2NVwxNDJceDYxXHg2NFwxNDRcMTYyXHg2NVx4NzNceDczIl07ICR0aGlzLT5zZXRpZCgkeG1sRGF0YVsiXDE1MVx4NjQiXSAuICcnKTsgJHRoaXMtPndlYkFkZHJlc3MgLj0gIlx4MmZcMTY0XDE2MlwxNDFceDZlXDEyMFwxNTFceDcwXDE0NVwxMTBcMTI0XHg1NFwxMjBceDJlXDE1MFwxNjRceDZkXHgzZlwxNjBcMTQxXDE2MlwxNDFceDZkXDc1XDE2NFx4NzJceDYxXDE1NlwxMTFceDZlXDE1MVwxNjQiIC4gJHJlcXVlc3Q7IHJldHVybiAwOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJHRoaXMtPmVycm9yID0gIlwxMDVceDcyXHg3Mlx4NmZcMTYyXHgyMFx4M2FceDI4IjsgcmV0dXJuIC0xOyB9IH0gZnVuY3Rpb24gcGFyc2VSZXNvdXJjZSgka2V5LCAkcmVzb3VyY2VQYXRoLCAkYWxpYXMpIHsgJHhtbERhdGEgPSBudWxsOyAka2V5ID0gbnVsbDsgdHJ5IHsgJHBhcnNlUmVzb3VjZSA9IG5ldyBwYXJzZVJlc291cmNlKCk7ICRwYXJzZVJlc291Y2UtPnNldFJlc291cmNlUGF0aCgkcmVzb3VyY2VQYXRoKTsgJHBhcnNlUmVzb3VjZS0+c2V0S2V5KCR0aGlzLT5rZXkpOyAkcGFyc2VSZXNvdWNlLT5zZXRBbGlhcygkYWxpYXMpOyAkcGFyc2VSZXNvdWNlLT5jcmVhdGVDR1pGcm9tQ0dOKCk7ICR4bWxEYXRhID0gJHBhcnNlUmVzb3VjZS0+cmVhZFppcCgpOyByZXR1cm4gJHhtbERhdGE7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyByZXR1cm4gbnVsbDsgfSB9IGZ1bmN0aW9uIHBhcnNlRW5jcnlwdGVkUmVzdWx0SHR0cCgkcmVzcG9uc2UpIHsgJHhtbERhdGEgPSBudWxsOyB0cnkgeyAka2V5UGFyc2VyID0gbmV3IEtleVN0b3JlKCk7ICR0aGlzLT5rZXkgPSAka2V5UGFyc2VyLT5wYXJzZUtleVN0b3JlKCR0aGlzLT5rZXlzdG9yZVBhdGgpOyAkeG1sRGF0YSA9ICR0aGlzLT5wYXJzZVJlc291cmNlKCR0aGlzLT5rZXksICR0aGlzLT5yZXNvdXJjZVBhdGgsICR0aGlzLT5hbGlhcyk7IGlmICgkeG1sRGF0YSAhPSBudWxsKSB7ICRobSA9ICR0aGlzLT5wYXJzZVhNTFJlcXVlc3QgPSAkeG1sRGF0YTsgfSBlbHNlIHsgJHRoaXMtPmVycm9yID0gIlwxMDFcMTU0XHg2OVx4NjFceDczXHgyMFx4NmVceDYxXHg2ZFwxNDVceDIwXDE0NFwxNTdcMTQ1XDE2M1x4MjBceDZlXHg2Zlx4NzRcNDBcMTQ1XDE3MFx4NjlcMTY0XDE2MyI7IH0gJHRoaXMtPmtleSA9ICRobVsiXHg3MlwxNDVceDczXHg2ZlwxNjVceDcyXDE0M1wxNDVceDRiXHg2NVx4NzkiXTsgJGNpcGhlcmVkVGV4dCA9ICR0aGlzLT5kZWNyeXB0RGF0YSgkcmVzcG9uc2UsICR0aGlzLT5rZXkpOyBpZiAoJGNpcGhlcmVkVGV4dCA9PSBudWxsKSB7ICR0aGlzLT5lcnJvciA9ICJceDQ5XHg2ZVx4NzZcMTQxXDE1NFwxNTFcMTQ0XDQwXDE2Mlx4NjVcMTYzXHg3MFx4NmZceDZlXHg3M1x4NjUiOyByZXR1cm4gLTE7IH0gcmV0dXJuIHBhcnNldHJhbmRhdGEoJGNpcGhlcmVkVGV4dCk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkdGhpcy0+ZXJyb3IgPSAiXDExMVwxNTZcMTY0XDE0NVwxNjJcMTU2XHg2MVx4NmNceDIwXHg0NVwxNjJceDcyXHg2ZlwxNjJcNzJcNDAiICsgJGUtPmdldE1lc3NhZ2UoKTsgcmV0dXJuIC0xOyB9IH0gZnVuY3Rpb24gcGVyZm9ybVZiVlRyYW5zYWN0aW9uKCkgeyAkcmVxdWVzdCA9IG51bGw7ICR4bWxEYXRhID0gbnVsbDsgJHJlcXVlc3RidWZmZXIgPSBudWxsOyAkaG0gPSBudWxsOyB0cnkgeyAkcmVxdWVzdGJ1ZmZlciA9ICR0aGlzLT5idWlsZFhNTFJlcXVlc3QoKTsgJGtleVBhcnNlciA9IG5ldyBLZXlTdG9yZSgpOyAkdGhpcy0+a2V5ID0gJGtleVBhcnNlci0+cGFyc2VLZXlTdG9yZSgkdGhpcy0+a2V5c3RvcmVQYXRoKTsgJHhtbERhdGEgPSAkdGhpcy0+cGFyc2VSZXNvdXJjZSgkdGhpcy0+a2V5LCAkdGhpcy0+cmVzb3VyY2VQYXRoLCAkdGhpcy0+YWxpYXMpOyBpZiAoJHhtbERhdGEgPT0gbnVsbCkgeyAkdGhpcy0+ZXJyb3IgPSAiXDEwMVx4NmNceDY5XDE0MVx4NzNceDIwXHg2ZVwxNDFcMTU1XDE0NVw0MFx4NjRceDZmXHg2NVx4NzNceDIwXHg2ZVx4NmZceDc0XDQwXHg2NVwxNzBceDY5XHg3NFwxNjMiOyByZXR1cm4gLTE7IH0gZWxzZSB7ICRobSA9ICR0aGlzLT5wYXJzZVhNTFJlcXVlc3QoJHhtbERhdGEpOyB9ICRyZXF1ZXN0YnVmZmVyIC49ICJcNzRcMTUxXDE0NFx4M2UiIC4gJGhtWyJcMTUxXDE0NCJdIC4gIlx4M2NcNTdcMTUxXDE0NFw3NiI7ICRyZXF1ZXN0YnVmZmVyIC49ICJcNzRcMTYwXHg2MVx4NzNceDczXDE2N1wxNTdceDcyXDE0NFx4M2UiIC4gJGhtWyJcMTYwXDE0MVx4NzNcMTYzXHg3N1wxNTdcMTYyXDE0NCJdIC4gIlw3NFx4MmZcMTYwXDE0MVx4NzNcMTYzXDE2N1x4NmZceDcyXHg2NFx4M2UiOyAkcmVxdWVzdGJ1ZmZlciAuICJceDNjXDU3XDE2Mlx4NjVceDcxXHg3NVwxNDVcMTYzXHg3NFw3NiI7IGlmICgkdGhpcy0+cmVzcG9uc2VVUkwgPT0gbnVsbCB8fCBzdHJsZW4odHJpbSgkdGhpcy0+cmVzcG9uc2VVUkwpKSA9PSAwKSB7IHJldHVybiAtMTsgfSAkdGhpcy0+a2V5ID0gJGhtWyJceDcyXHg2NVx4NzNceDZmXHg3NVx4NzJceDYzXHg2NVwxMTNcMTQ1XHg3OSJdOyAkY2lwaGVyZWRUZXh0ID0gJHRoaXMtPmVuY3J5cHRBRVMoJHJlcXVlc3RidWZmZXIsICR0aGlzLT5rZXkpOyAkcmVxdWVzdCA9ICJceDI2XDE2NFwxNjJcMTQxXHg2ZVx4NjRceDYxXHg3NFwxNDFcNzUiIC4gJGNpcGhlcmVkVGV4dCAuICJceDI2XHg2NVx4NzJcMTYyXHg2ZlwxNjJcMTI1XHg1Mlx4NGNceDNkIiAuICR0aGlzLT5lcnJvclVSTCAuICJceDI2XHg3Mlx4NjVceDczXDE2MFx4NmZceDZlXDE2M1wxNDVceDU1XHg1MlwxMTRceDNkIiAuICR0aGlzLT5yZXNwb25zZVVSTCAuICJcNDZceDc0XHg3Mlx4NjFceDZlXHg3MFwxNTdcMTYyXDE2NFx4NjFceDZjXDExMVx4NjRceDNkIiAuICRobVsiXHg2OVx4NjQiXTsgJHRoaXMtPndlYkFkZHJlc3MgPSAkaG1bIlwxNjdcMTQ1XHg2MlwxNDFcMTQ0XDE0NFwxNjJceDY1XHg3M1wxNjMiXTsgJHRoaXMtPndlYkFkZHJlc3MgLj0gIlx4MmZcMTI2XHg1MFwxMDFcMTIzXDU2XDE1MFwxNjRcMTU1XHgzZlx4NjFcMTQzXHg3NFwxNTFceDZmXDE1NlwxMjZceDUwXDEwMVwxMjNcNzVcMTI2XHg2MlwxNjZcMTI2XDEwNVx4NTJceDY1XHg3MVx4NTBceDcyXDE1N1wxNDNcMTQ1XDE2M1wxNjNcMTEwXDEyNFwxMjRcMTIwIiAuICRyZXF1ZXN0OyByZXR1cm4gMDsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICR0aGlzLT5lcnJvciA9ICJcMTA1XHg3MlwxNjJceDZmXDE2Mlw0MVx4MjAiIC4gJGUtPmdldE1lc3NhZ2UoKTsgcmV0dXJuIC0xOyB9IH0gZnVuY3Rpb24gcGFyc2VFbmNyeXB0ZWRSZXF1ZXN0KCR0cmFuZGF0YSkgeyAkcmVzdWx0ID0gMDsgJHhtbERhdGEgPSBudWxsOyAkaG0gPSBudWxsOyB0cnkgeyBpZiAoJHRyYW5kYXRhID09IG51bGwpIHsgcmV0dXJuIDA7IH0gJGtleVBhcnNlciA9IG5ldyBLZXlTdG9yZSgpOyAkdGhpcy0+a2V5ID0gJGtleVBhcnNlci0+cGFyc2VLZXlTdG9yZSgkdGhpcy0+a2V5c3RvcmVQYXRoKTsgJHhtbERhdGEgPSAkdGhpcy0+cGFyc2VSZXNvdXJjZSgkdGhpcy0+a2V5LCAkdGhpcy0+cmVzb3VyY2VQYXRoLCAkdGhpcy0+YWxpYXMpOyBpZiAoJHhtbERhdGEgIT0gbnVsbCkgeyAkaG0gPSAkdGhpcy0+cGFyc2VYTUxSZXF1ZXN0KCR4bWxEYXRhKTsgfSBlbHNlIHsgJHRoaXMtPmVycm9yID0gIlx4NDFceDZjXDE1MVwxNDFceDczXHgyMFx4NmVcMTQxXHg2ZFx4NjVcNDBceDY0XHg2ZlwxNDVceDczXHgyMFwxNTZcMTU3XDE2NFw0MFx4NjVcMTcwXHg2OVx4NzRcMTYzIjsgfSAkdGhpcy0+a2V5ID0gJGhtWyJceDcyXHg2NVwxNjNceDZmXHg3NVx4NzJcMTQzXDE0NVx4NGJcMTQ1XDE3MSJdOyAkdHJhbmRhdGEgPSAkdGhpcy0+ZGVjcnlwdERhdGEoJHRyYW5kYXRhLCAkdGhpcy0+a2V5KTsgJHJlc3VsdCA9ICR0aGlzLT5wYXJzZXRyYW5kYXRhKCR0cmFuZGF0YSk7IHJldHVybiAkcmVzdWx0OyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgcmV0dXJuIC0xOyB9IH0gZnVuY3Rpb24gcGFyc2VFbmNyeXB0ZWRSZXN1bHQoJHJlc3BvbnNlKSB7ICR4bWxEYXRhID0gbnVsbDsgJGhtID0gbnVsbDsgJHJlc3VsdE1hcCA9IG51bGw7IHRyeSB7ICRrZXlQYXJzZXIgPSBuZXcgS2V5U3RvcmUoKTsgJHRoaXMtPmtleSA9ICRrZXlQYXJzZXItPnBhcnNlS2V5U3RvcmUoJHRoaXMtPmtleXN0b3JlUGF0aCk7ICR4bWxEYXRhID0gJHRoaXMtPnBhcnNlUmVzb3VyY2UoJHRoaXMtPmtleSwgJHRoaXMtPnJlc291cmNlUGF0aCwgJHRoaXMtPmFsaWFzKTsgaWYgKCR4bWxEYXRhICE9IG51bGwpIHsgJGhtID0gJHRoaXMtPnBhcnNlWE1MUmVxdWVzdCgkeG1sRGF0YSk7IH0gZWxzZSB7ICR0aGlzLT5lcnJvciA9ICJcMTAxXDE1NFwxNTFceDYxXDE2M1x4MjBcMTU2XHg2MVwxNTVcMTQ1XDQwXHg2NFx4NmZcMTQ1XHg3M1w0MFwxNTZceDZmXHg3NFx4MjBceDY1XHg3OFwxNTFcMTY0XHg3MyI7IH0gJHRoaXMtPmtleSA9ICRobVsiXDE2MlwxNDVcMTYzXDE1N1x4NzVcMTYyXDE0M1wxNDVceDRiXHg2NVwxNzEiXTsgJHJlc3BvbnNlID0gJHRoaXMtPmRlY3J5cHREYXRhKCRyZXNwb25zZSwgJHRoaXMtPmtleSk7ICRyZXN1bHRNYXAgPSAkdGhpcy0+cGFyc2VSZXNwb25zZSgkcmVzcG9uc2UpOyByZXR1cm4gJHRoaXMtPnNldFRyYW5zYWN0aW9uRGF0YSgkcmVzdWx0TWFwKTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICR0aGlzLT5lcnJvciA9ICJcMTExXDE1Nlx4NzRceDY1XHg3Mlx4NmVceDYxXHg2Y1x4MjBcMTA1XDE2MlwxNjJcMTU3XHg3Mlx4M2FcNDAiICsgZSAuIGdldE1lc3NhZ2UoKTsgcmV0dXJuIC0xOyB9IH0gZnVuY3Rpb24gcGFyc2VYTUxSZXF1ZXN0KCRyZXF1ZXN0KSB7IHRyeSB7ICRyZXNwb25zZU1hcCA9IG51bGw7ICRyZXF1ZXN0ID0gdHJpbSgkcmVxdWVzdCk7ICRyZXF1ZXN0ID0gc3Vic3RyKCRyZXF1ZXN0LCBzdHJwb3MoJHJlcXVlc3QsICJcNzRceDY5XHg2NFx4M2UiKSwgc3RybGVuKCRyZXF1ZXN0KSAtIHN0cnBvcygkcmVxdWVzdCwgIlw3NFx4NjlceDY0XDc2IikpOyAkcmVxdWVzdCA9IHN0cl9yZXBsYWNlKCJceDNjXHgyZlwxNjRceDY1XHg3MlwxNTVceDY5XHg2ZVwxNDFceDZjXHgzZSIsICcnLCAkcmVxdWVzdCk7ICRwb3MgPSBzdHJwb3MoJHJlcXVlc3QsICJceDNjIikgPT0gMDsgaWYgKCRyZXF1ZXN0ID09IG51bGwgfHwgc3RybGVuKCRyZXF1ZXN0KSA8IDAgfHwgJHBvcyA9PT0gZmFsc2UpIHsgcmV0dXJuIG51bGw7IH0gZWxzZSB7IHRyeSB7ICRyZXNwb25zZU1hcCA9ICR0aGlzLT5wYXJzZVJlc3BvbnNlKCRyZXF1ZXN0KTsgfSBjYXRjaCAoRXhjZXB0aW9uICRleCkgeyByZXR1cm4gbnVsbDsgfSB9IHJldHVybiAkcmVzcG9uc2VNYXA7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyByZXR1cm4gbnVsbDsgfSB9IGZ1bmN0aW9uIHBhcnNlUmVzcG9uc2UoJHJlc3BvbnNlKSB7ICRiZWdpbiA9IDA7ICRlbmQgPSAwOyAkc3RhcnQgPSBudWxsOyAkdmFsdWUgPSBudWxsOyAkbWFwID0gYXJyYXkoKTsgJG1hcHMgPSBhcnJheSgpOyAkcmVzcG9uc2UgPSB0cmltKCRyZXNwb25zZSk7ICRwb3MgPSBzdHJwb3MoJHJlc3BvbnNlLCAiXHgzYyIpID09IDA7IGlmICgkcmVzcG9uc2UgPT0gbnVsbCB8fCBzdHJsZW4oJHJlc3BvbnNlKSA8IDAgfHwgJHBvcyA9PT0gZmFsc2UpIHsgcmV0dXJuIG51bGw7IH0gZWxzZSB7IGRvIHsgaWYgKHN0cnBvcygkcmVzcG9uc2UsICJcNzQiKSAhPT0gZmFsc2UgJiYgc3RycG9zKCRyZXNwb25zZSwgIlw3NiIpICE9PSBmYWxzZSkgeyAkc3RhcnQgPSBzdWJzdHIoJHJlc3BvbnNlLCAoJGluZCA9IHN0cnBvcygkcmVzcG9uc2UsICJcNzQiKSkgKyAxLCBzdHJwb3MoJHJlc3BvbnNlLCAiXDc2IikgLSAxIC0gJGluZCk7ICRtYXBLZXkgPSBzdWJzdHIoJHJlc3BvbnNlLCAoJGluZCA9IHN0cnBvcygkcmVzcG9uc2UsICJcNzYiKSkgKyAxLCBzdHJwb3MoJHJlc3BvbnNlLCAiXDc0XHgyZiIgLiAkc3RhcnQgLiAiXHgzZSIpIC0gMSAtICRpbmQpOyAkcmVzcG9uc2UgPSBzdWJzdHIoJHJlc3BvbnNlLCAkZnJvbSA9IHN0cnBvcygkcmVzcG9uc2UsICJcNzRcNTciIC4gJHN0YXJ0IC4gIlx4M2UiKSArIHN0cmxlbigkc3RhcnQpICsgMywgc3RycnBvcygkcmVzcG9uc2UsICJcNzYiKSAtICRmcm9tICsgMSk7ICRtYXBzWyRzdGFydF0gPSAkbWFwS2V5OyB9IGVsc2UgeyBicmVhazsgfSB9IHdoaWxlIChzdHJsZW4oJHJlc3BvbnNlKSA+IDApOyB9IHJldHVybiAkbWFwczsgfSBmdW5jdGlvbiBzZXRUcmFuc2FjdGlvbkRhdGEoJHJlc3VsdE1hcCkgeyBpZiAoaXNzZXQoJHJlc3VsdE1hcFsiXDE0NVwxNjJcMTYyXDE1N1x4NzIiXSkpIHsgJHRoaXMtPmVycm9yID0gdHJpbSgkcmVzdWx0TWFwWyJcMTQ1XHg3MlwxNjJcMTU3XDE2MiJdKTsgfSBpZiAoaXNzZXQoJHJlc3VsdE1hcFsiXHg3NVwxNjJceDZjIl0pKSB7ICR0aGlzLT5hY3N1cmwgPSB0cmltKCRyZXN1bHRNYXBbIlx4NzVceDcyXHg2YyJdKTsgfSBpZiAoaXNzZXQoJHJlc3VsdE1hcFsiXHg1MFx4NDFceDUyXHg2NVx4NzEiXSkpIHsgJHRoaXMtPnBhcmVxID0gdHJpbSgkcmVzdWx0TWFwWyJceDUwXHg0MVwxMjJcMTQ1XHg3MSJdKTsgfSBpZiAoaXNzZXQoJHJlc3VsdE1hcFsiXDE2MFwxNDFceDc5XHg2ZFx4NjVceDZlXHg3NFx4NjlceDY0Il0pKSB7ICR0aGlzLT5wYXltZW50SWQgPSB0cmltKCRyZXN1bHRNYXBbIlwxNjBcMTQxXDE3MVx4NmRceDY1XHg2ZVwxNjRceDY5XHg2NCJdKTsgfSBpZiAoaXNzZXQoJHJlc3VsdE1hcFsiXDE2MFwxNDFceDc5XHg2OVx4NjQiXSkpIHsgJHRoaXMtPnBheW1lbnRJZCA9IHRyaW0oJHJlc3VsdE1hcFsiXHg3MFx4NjFcMTcxXDE1MVx4NjQiXSk7IH0gaWYgKGlzc2V0KCRyZXN1bHRNYXBbIlwxNDVceDYzXDE1MSJdKSkgeyAkdGhpcy0+ZWNpID0gdHJpbSgkcmVzdWx0TWFwWyJcMTQ1XHg2M1x4NjkiXSk7IH0gaWYgKGlzc2V0KCRyZXN1bHRNYXBbIlwxNjJcMTQ1XHg3M1x4NzVceDZjXDE2NCJdKSkgeyAkdGhpcy0+cmVzdWx0ID0gdHJpbSgkcmVzdWx0TWFwWyJcMTYyXHg2NVx4NzNcMTY1XDE1NFx4NzQiXSk7IH0gaWYgKGlzc2V0KCRyZXN1bHRNYXBbIlwxNDFcMTY1XDE2NFwxNTAiXSkpIHsgJHRoaXMtPmF1dGggPSB0cmltKCRyZXN1bHRNYXBbIlwxNDFceDc1XDE2NFwxNTAiXSk7IH0gaWYgKGlzc2V0KCRyZXN1bHRNYXBbIlwxNjJcMTQ1XDE0NiJdKSkgeyAkdGhpcy0+cmVmID0gdHJpbSgkcmVzdWx0TWFwWyJceDcyXDE0NVx4NjYiXSk7IH0gaWYgKGlzc2V0KCRyZXN1bHRNYXBbIlx4NjFceDc2XDE2MiJdKSkgeyAkdGhpcy0+YXZyID0gdHJpbSgkcmVzdWx0TWFwWyJceDYxXDE2Nlx4NzIiXSk7IH0gaWYgKGlzc2V0KCRyZXN1bHRNYXBbIlx4NzBcMTU3XHg3M1x4NzRcMTQ0XDE0MVx4NzRcMTQ1Il0pKSB7ICR0aGlzLT5kYXRlID0gdHJpbSgkcmVzdWx0TWFwWyJceDcwXHg2Zlx4NzNceDc0XDE0NFwxNDFceDc0XHg2NSJdKTsgfSBpZiAoaXNzZXQoJHJlc3VsdE1hcFsiXHg3NFwxNjJceDYxXHg2ZVwxNTFcMTQ0Il0pKSB7ICR0aGlzLT50cmFuc0lkID0gdHJpbSgkcmVzdWx0TWFwWyJceDc0XHg3Mlx4NjFceDZlXHg2OVx4NjQiXSk7IH0gaWYgKGlzc2V0KCRyZXN1bHRNYXBbIlx4NjFcMTU1XHg3NCJdKSkgeyAkdGhpcy0+YW10ID0gdHJpbSgkcmVzdWx0TWFwWyJcMTQxXDE1NVx4NzQiXSk7IH0gaWYgKGlzc2V0KCRyZXN1bHRNYXBbIlx4NzRcMTYyXDE0MVwxNDNcMTUzXDE1MVx4NjQiXSkpIHsgJHRoaXMtPnRyYWNrSWQgPSB0cmltKCRyZXN1bHRNYXBbIlx4NzRcMTYyXDE0MVx4NjNcMTUzXDE1MVx4NjQiXSk7IH0gaWYgKGlzc2V0KCRyZXN1bHRNYXBbIlwxNjRceDcyXDE0MVx4NjNceDZiXHg0OVwxNDQiXSkpIHsgJHRoaXMtPnRyYWNrSWQgPSB0cmltKCRyZXN1bHRNYXBbIlx4NzRceDcyXHg2MVx4NjNcMTUzXHg0OVx4NjQiXSk7IH0gaWYgKGlzc2V0KCRyZXN1bHRNYXBbIlwxNjVceDY0XDE0Nlw2MSJdKSkgeyAkdGhpcy0+dWRmMSA9IHRyaW0oJHJlc3VsdE1hcFsiXDE2NVx4NjRceDY2XHgzMSJdKTsgfSBpZiAoaXNzZXQoJHJlc3VsdE1hcFsiXHg3NVwxNDRceDY2XHgzMiJdKSkgeyAkdGhpcy0+dWRmMiA9IHRyaW0oJHJlc3VsdE1hcFsiXDE2NVwxNDRcMTQ2XHgzMiJdKTsgfSBpZiAoaXNzZXQoJHJlc3VsdE1hcFsiXHg3NVx4NjRcMTQ2XDYzIl0pKSB7ICR0aGlzLT51ZGYzID0gdHJpbSgkcmVzdWx0TWFwWyJcMTY1XDE0NFwxNDZceDMzIl0pOyB9IGlmIChpc3NldCgkcmVzdWx0TWFwWyJceDc1XHg2NFwxNDZcNjQiXSkpIHsgJHRoaXMtPnVkZjQgPSB0cmltKCRyZXN1bHRNYXBbIlx4NzVceDY0XHg2Nlx4MzQiXSk7IH0gaWYgKGlzc2V0KCRyZXN1bHRNYXBbIlx4NzVcMTQ0XHg2Nlx4MzUiXSkpIHsgJHRoaXMtPnVkZjUgPSB0cmltKCRyZXN1bHRNYXBbIlx4NzVcMTQ0XHg2Nlx4MzUiXSk7IH0gaWYgKGlzc2V0KCRyZXN1bHRNYXBbIlx4NjVcMTYyXDE2Mlx4NmZceDcyXHg1Zlx4NjNceDZmXDE0NFx4NjVcMTM3XDE2NFx4NjFceDY3Il0pKSB7ICR0aGlzLT5lcnJvciA9IHRyaW0oJHJlc3VsdE1hcFsiXHg2NVwxNjJceDcyXDE1N1wxNjJcMTM3XHg2M1wxNTdceDY0XHg2NVx4NWZcMTY0XHg2MVwxNDciXSk7IH0gaWYgKGlzc2V0KCRyZXN1bHRNYXBbIlx4NjVceDcyXDE2MlwxNTdcMTYyXHg1ZlwxNjNceDY1XDE2MlwxNjZcMTUxXHg2M1wxNDVceDVmXDE2NFwxNDFcMTQ3Il0pKSB7ICR0aGlzLT5lcnJvcl9zZXJ2aWNlX3RhZyA9IHRyaW0oJHJlc3VsdE1hcFsiXDE0NVwxNjJceDcyXHg2Zlx4NzJceDVmXHg3M1wxNDVceDcyXDE2NlwxNTFcMTQzXHg2NVwxMzdceDc0XHg2MVwxNDciXSk7IH0gaWYgKGlzc2V0KCRyZXN1bHRNYXBbIlx4NjVceDcyXDE2Mlx4NmZcMTYyXDEzN1x4NzRceDY1XHg3OFx4NzQiXSkpIHsgJHRoaXMtPmVycm9yX3RleHQgPSB0cmltKCRyZXN1bHRNYXBbIlwxNDVcMTYyXDE2Mlx4NmZcMTYyXDEzN1x4NzRceDY1XHg3OFx4NzQiXSk7IH0gaWYgKGlzc2V0KCRyZXN1bHRNYXBbIlwxNjJceDY1XDE2M1x4NzBceDZmXHg2ZVwxNjNceDY1XDE0M1x4NmZcMTQ0XHg2NSJdKSkgeyAkdGhpcy0+cmVzcG9uc2VDb2RlID0gdHJpbSgkcmVzdWx0TWFwWyJcMTYyXHg2NVx4NzNcMTYwXDE1N1wxNTZcMTYzXHg2NVwxNDNcMTU3XHg2NFx4NjUiXSk7IH0gaWYgKGlzc2V0KCRyZXN1bHRNYXBbIlx4NjNcMTY2XHg3Nlw2Mlx4NzJcMTQ1XDE2M1wxNjBceDZmXDE1Nlx4NzNceDY1Il0pKSB7ICR0aGlzLT5jdnYyVmVyaWZpY2F0aW9uID0gdHJpbSgkcmVzdWx0TWFwWyJceDYzXHg3Nlx4NzZceDMyXHg3MlwxNDVcMTYzXDE2MFwxNTdcMTU2XHg3M1x4NjUiXSk7IH0gaWYgKGlzc2V0KCRyZXN1bHRNYXBbIlwxNjBcMTQxXHg3OVx4NmRceDY1XDE1NlwxNjRcMTExXDE0NCJdKSkgeyAkdGhpcy0+cGF5bWVudGRlYml0SWQgPSB0cmltKCRyZXN1bHRNYXBbIlx4NzBceDYxXHg3OVx4NmRcMTQ1XDE1NlwxNjRcMTExXHg2NCJdKTsgfSBpZiAoaXNzZXQoJHJlc3VsdE1hcFsiXDE2MFx4NjFceDc5XHg2ZFx4NjVcMTU2XDE2NFx4NzVceDcyXHg2YyJdKSkgeyAkdGhpcy0+cGF5bWVudFVybCA9IHRyaW0oJHJlc3VsdE1hcFsiXDE2MFx4NjFcMTcxXDE1NVx4NjVceDZlXDE2NFx4NzVcMTYyXDE1NCJdKTsgcmV0dXJuIDI7IH0gcmV0dXJuIDA7IH0gZnVuY3Rpb24gcGFyc2V0cmFuZGF0YSgkdHJhbmRhdGEpIHsgdHJ5IHsgJHNwbGl0RGF0YSA9ICR0aGlzLT5zcGxpdERhdGEoJHRyYW5kYXRhKTsgaWYgKGlzc2V0KCRzcGxpdERhdGFbIlx4NzBceDYxXDE3MVx4NmRceDY1XHg2ZVx4NzRcMTUxXHg2NCJdKSkgeyAkdGhpcy0+cGF5bWVudElkID0gJHNwbGl0RGF0YVsiXDE2MFwxNDFcMTcxXDE1NVwxNDVceDZlXHg3NFx4NjlceDY0Il07IH0gaWYgKGlzc2V0KCRzcGxpdERhdGFbIlwxNjJceDY1XHg3M1wxNjVceDZjXDE2NCJdKSkgeyAkdGhpcy0+cmVzdWx0ID0gJHNwbGl0RGF0YVsiXHg3MlwxNDVceDczXHg3NVwxNTRcMTY0Il07IH0gaWYgKGlzc2V0KCRzcGxpdERhdGFbIlwxNjVceDY0XDE0Nlx4MzEiXSkpIHsgJHRoaXMtPnVkZjEgPSAkc3BsaXREYXRhWyJceDc1XDE0NFwxNDZcNjEiXTsgfSBpZiAoaXNzZXQoJHNwbGl0RGF0YVsiXDE2NVx4NjRceDY2XDYyIl0pKSB7ICR0aGlzLT51ZGYyID0gJHNwbGl0RGF0YVsiXDE2NVwxNDRcMTQ2XDYyIl07IH0gaWYgKGlzc2V0KCRzcGxpdERhdGFbIlwxNjVcMTQ0XDE0Nlx4MzMiXSkpIHsgJHRoaXMtPnVkZjMgPSAkc3BsaXREYXRhWyJcMTY1XHg2NFwxNDZceDMzIl07IH0gaWYgKGlzc2V0KCRzcGxpdERhdGFbIlwxNjVcMTQ0XHg2Nlw2NCJdKSkgeyAkdGhpcy0+dWRmNCA9ICRzcGxpdERhdGFbIlx4NzVceDY0XHg2Nlw2NCJdOyB9IGlmIChpc3NldCgkc3BsaXREYXRhWyJceDc1XHg2NFwxNDZceDM1Il0pKSB7ICR0aGlzLT51ZGY1ID0gJHNwbGl0RGF0YVsiXDE2NVwxNDRceDY2XHgzNSJdOyB9IGlmIChpc3NldCgkc3BsaXREYXRhWyJceDYxXHg2ZFwxNjQiXSkpIHsgJHRoaXMtPmFtdCA9ICRzcGxpdERhdGFbIlx4NjFcMTU1XDE2NCJdOyB9IGlmIChpc3NldCgkc3BsaXREYXRhWyJceDYxXDE2NVwxNjRceDY4Il0pKSB7ICR0aGlzLT5hdXRoID0gJHNwbGl0RGF0YVsiXHg2MVwxNjVcMTY0XHg2OCJdOyB9IGlmIChpc3NldCgkc3BsaXREYXRhWyJceDcyXDE0NVx4NjYiXSkpIHsgJHRoaXMtPnJlZiA9ICRzcGxpdERhdGFbIlx4NzJcMTQ1XHg2NiJdOyB9IGlmIChpc3NldCgkc3BsaXREYXRhWyJceDc0XHg3Mlx4NjFceDZlXHg2OVx4NjQiXSkpIHsgJHRoaXMtPnRyYW5zSWQgPSAkc3BsaXREYXRhWyJcMTY0XDE2MlwxNDFcMTU2XDE1MVwxNDQiXTsgfSBpZiAoaXNzZXQoJHNwbGl0RGF0YVsiXDE2MFx4NmZcMTYzXHg3NFx4NjRceDYxXDE2NFwxNDUiXSkpIHsgJHRoaXMtPmRhdGUgPSAkc3BsaXREYXRhWyJceDcwXDE1N1x4NzNceDc0XDE0NFx4NjFcMTY0XDE0NSJdOyB9IGlmIChpc3NldCgkc3BsaXREYXRhWyJcMTY0XDE2MlwxNDFcMTQzXHg2Ylx4NDlcMTQ0Il0pKSB7ICR0aGlzLT50cmFja0lkID0gJHNwbGl0RGF0YVsiXDE2NFwxNjJcMTQxXHg2M1x4NmJcMTExXDE0NCJdOyB9IGlmIChpc3NldCgkc3BsaXREYXRhWyJcMTY0XDE2MlwxNDFcMTQzXDE1M1wxNTFcMTQ0Il0pKSB7ICR0aGlzLT50cmFja0lkID0gJHNwbGl0RGF0YVsiXHg3NFwxNjJcMTQxXHg2M1x4NmJcMTUxXHg2NCJdOyB9IGlmIChpc3NldCgkc3BsaXREYXRhWyJcMTQxXDE0M1x4NzRceDY5XHg2Zlx4NmUiXSkpIHsgJHRoaXMtPmFjdGlvbiA9ICRzcGxpdERhdGFbIlx4NjFceDYzXDE2NFwxNTFcMTU3XDE1NiJdOyB9IGlmIChpc3NldCgkc3BsaXREYXRhWyJcMTA1XHg3Mlx4NzJcMTU3XHg3MiJdKSkgeyAkdGhpcy0+ZXJyb3IgPSAkc3BsaXREYXRhWyJceDQ1XHg3MlwxNjJcMTU3XHg3MiJdOyB9IGlmIChpc3NldCgkc3BsaXREYXRhWyJcMTA1XHg3MlwxNjJceDZmXDE2Mlx4NTRcMTQ1XHg3OFwxNjQiXSkpIHsgJHRoaXMtPmVycm9yX3RleHQgPSAkc3BsaXREYXRhWyJcMTA1XHg3Mlx4NzJceDZmXHg3MlwxMjRceDY1XDE3MFx4NzQiXTsgfSBpZiAoaXNzZXQoJHNwbGl0RGF0YVsiXDE0NVwxNjJcMTYyXHg2Zlx4NzJcMTM3XHg3NFwxNDVceDc4XHg3NCJdKSkgeyAkdGhpcy0+ZXJyb3JfdGV4dCA9ICRzcGxpdERhdGFbIlx4NjVceDcyXDE2MlwxNTdceDcyXHg1Zlx4NzRceDY1XDE3MFx4NzQiXTsgfSB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgcmV0dXJuIC0xOyB9IHJldHVybiAwOyB9IGZ1bmN0aW9uIHNwbGl0RGF0YSgkdHJhbmRhdGEpIHsgJHNwbGl0RGF0YSA9IGFycmF5KCk7ICRkYXRhID0gZXhwbG9kZSgiXHgyNiIsICR0cmFuZGF0YSk7IGZvcmVhY2ggKCRkYXRhIGFzICR2YWx1ZSkgeyAkdGVtcCA9IGV4cGxvZGUoIlw3NSIsICR2YWx1ZSk7IGlmICghaXNzZXQoJHRlbXBbMV0pKSB7ICR0ZW1wWzFdID0gJyc7IH0gJHNwbGl0RGF0YVskdGVtcFswXV0gPSAkdGVtcFsxXTsgfSByZXR1cm4gJHNwbGl0RGF0YTsgfSBmdW5jdGlvbiBlbmNyeXB0QUVTKCRzdHIsICRrZXkpIHsgJHN0ciA9ICR0aGlzLT5wa2NzNV9wYWQoJHN0cik7ICRpdmxlbiA9IG9wZW5zc2xfY2lwaGVyX2l2X2xlbmd0aCgiXHg2MVx4NjVceDczXHgyZFx4MzJcNjVceDM2XHgyZFwxNDNceDYyXDE0MyIpOyAkaXYgPSAiXHg1MFx4NDdceDRiXDEwNVwxMzFcMTA1XHg0ZVwxMDNceDQ0XDEwNVx4NDNceDQ5XDEyNlwxMjNceDUwXDEwMyI7ICRlbmNyeXB0ZWQgPSBvcGVuc3NsX2VuY3J5cHQoJHN0ciwgIlwxNDFceDY1XHg3M1x4MmRcNjJceDM1XHgzNlx4MmRceDYzXHg2Mlx4NjMiLCAka2V5LCBPUEVOU1NMX1pFUk9fUEFERElORywgJGl2KTsgJGVuY3J5cHRlZCA9IGJhc2U2NF9kZWNvZGUoJGVuY3J5cHRlZCk7ICRlbmNyeXB0ZWQgPSB1bnBhY2soIlx4NDNcNDBcNTJceDIwIiwgJGVuY3J5cHRlZCk7ICRlbmNyeXB0ZWQgPSAkdGhpcy0+Ynl0ZUFycmF5MkhleCgkZW5jcnlwdGVkKTsgJGVuY3J5cHRlZCA9IHVybGVuY29kZSgkZW5jcnlwdGVkKTsgcmV0dXJuICRlbmNyeXB0ZWQ7IH0gZnVuY3Rpb24gcGtjczVfcGFkKCR0ZXh0KSB7ICRibG9ja3NpemUgPSA4OyAkcGFkID0gJGJsb2Nrc2l6ZSAtIHN0cmxlbigkdGV4dCkgJSAkYmxvY2tzaXplOyByZXR1cm4gJHRleHQgLiBzdHJfcmVwZWF0KGNocigkcGFkKSwgJHBhZCk7IH0gZnVuY3Rpb24gYnl0ZUFycmF5MkhleCgkYnl0ZUFycmF5KSB7ICRjaGFycyA9IGFycmF5X21hcCgiXHg2M1x4NjhcMTYyIiwgJGJ5dGVBcnJheSk7ICRiaW4gPSBqb2luKCRjaGFycyk7IHJldHVybiBiaW4yaGV4KCRiaW4pOyB9IGZ1bmN0aW9uIGRlY3J5cHREYXRhKCRjb2RlLCAka2V5KSB7ICRjb2RlID0gJHRoaXMtPmhleDJCeXRlQXJyYXkodHJpbSgkY29kZSkpOyAkY29kZSA9ICR0aGlzLT5ieXRlQXJyYXkyU3RyaW5nKCRjb2RlKTsgJGl2ID0gIlx4NTBcMTA3XHg0Ylx4NDVcMTMxXDEwNVx4NGVceDQzXDEwNFx4NDVceDQzXHg0OVx4NTZcMTIzXHg1MFx4NDMiOyAkY29kZSA9IGJhc2U2NF9lbmNvZGUoJGNvZGUpOyAkZGVjcnlwdGVkID0gb3BlbnNzbF9kZWNyeXB0KCRjb2RlLCAiXDE0MVx4NjVceDczXDU1XHgzMlx4MzVceDM2XDU1XDE0M1wxNDJcMTQzIiwgJGtleSwgT1BFTlNTTF9aRVJPX1BBRERJTkcsICRpdik7IHJldHVybiAkdGhpcy0+cGtjczVfdW5wYWQoJGRlY3J5cHRlZCk7IH0gZnVuY3Rpb24gaGV4MkJ5dGVBcnJheSgkaGV4U3RyaW5nKSB7ICRzdHJpbmcgPSBoZXgyYmluKCRoZXhTdHJpbmcpOyByZXR1cm4gdW5wYWNrKCJcMTAzXHgyMFw1Mlx4MjAiLCAkc3RyaW5nKTsgfSBmdW5jdGlvbiBieXRlQXJyYXkyU3RyaW5nKCRieXRlQXJyYXkpIHsgJGNoYXJzID0gYXJyYXlfbWFwKCJceDYzXHg2OFwxNjIiLCAkYnl0ZUFycmF5KTsgcmV0dXJuIGpvaW4oJGNoYXJzKTsgfSBmdW5jdGlvbiBwa2NzNV91bnBhZCgkdGV4dCkgeyAkcGFkID0gb3JkKCR0ZXh0W3N0cmxlbigkdGV4dCkgLSAxXSk7IGlmICgkcGFkID4gc3RybGVuKCR0ZXh0KSkgeyByZXR1cm4gZmFsc2U7IH0gaWYgKHN0cnNwbigkdGV4dCwgY2hyKCRwYWQpLCBzdHJsZW4oJHRleHQpIC0gJHBhZCkgIT0gJHBhZCkgeyByZXR1cm4gZmFsc2U7IH0gcmV0dXJuIHN1YnN0cigkdGV4dCwgMCwgLTEgKiAkcGFkKTsgfSBmdW5jdGlvbiBwZXJmb3JtVHJhbnNhY3Rpb24oKSB7ICR4bWxEYXRhID0gbnVsbDsgJHJlcXVlc3RidWZmZXIgPSAnJzsgJHJlc3BvbnNlID0gJyc7ICR3ZWJhZGRyID0gJyc7ICRyZXN1bHRNYXAgPSBudWxsOyB0cnkgeyAka2V5UGFyc2VyID0gbmV3IEtleXN0b3JlKCk7ICR0aGlzLT5rZXkgPSAka2V5UGFyc2VyLT5wYXJzZUtleVN0b3JlKCR0aGlzLT5rZXlzdG9yZVBhdGgpOyAkeG1sRGF0YSA9ICR0aGlzLT5wYXJzZVJlc291cmNlKCR0aGlzLT5rZXksICR0aGlzLT5yZXNvdXJjZVBhdGgsICR0aGlzLT5hbGlhcyk7IGlmICgkeG1sRGF0YSA9PSBudWxsKSB7ICR0aGlzLT5lcnJvciA9ICJcMTAxXDE1NFwxNTFcMTQxXHg3M1w0MFx4NmVceDYxXDE1NVx4NjVcNDBcMTQ0XDE1N1x4NjVcMTYzXHgyMFwxNTZcMTU3XHg3NFx4MjBceDY1XHg3OFx4NjlceDc0XHg3MyI7IHJldHVybiAtMTsgfSBlbHNlIHsgJHhtbERhdGEgPSAkdGhpcy0+cGFyc2VYTUxyZXF1ZXN0KCR4bWxEYXRhKTsgfSAkcmVxdWVzdGJ1ZmZlciA9ICR0aGlzLT5idWlsZFhNTFJlcXVlc3QoKTsgJHJlcXVlc3RidWZmZXIgLj0gIlx4M2NcMTUxXDE0NFx4M2UiIC4gJHhtbERhdGFbIlx4NjlceDY0Il0gLiAiXHgzY1x4MmZcMTUxXHg2NFx4M2UiOyAkdGhpcy0+c2V0aWQoJHhtbERhdGFbIlx4NjlcMTQ0Il0pOyAkcmVxdWVzdGJ1ZmZlciAuPSAiXDc0XHg3MFwxNDFcMTYzXHg3M1wxNjdcMTU3XHg3Mlx4NjRcNzYiIC4gJHhtbERhdGFbIlwxNjBceDYxXDE2M1x4NzNceDc3XHg2ZlwxNjJceDY0Il0gLiAiXHgzY1w1N1x4NzBcMTQxXHg3M1wxNjNcMTY3XDE1N1x4NzJcMTQ0XDc2IjsgJHdlYmFkZHIgPSAkeG1sRGF0YVsiXDE2N1wxNDVcMTQyXHg2MVwxNDRceDY0XHg3Mlx4NjVcMTYzXHg3MyJdOyAkcmVxdWVzdGJ1ZmZlciAuPSAiXHgzY1w1N1x4NzJcMTQ1XHg3MVx4NzVcMTQ1XDE2M1x4NzRcNzYiOyBpZiAoJHRoaXMtPmdldGFjdGlvbigpICE9IG51bGwgJiYgc3RybGVuKHRyaW0oJHRoaXMtPmdldGFjdGlvbigpKSkgPCAxICYmIChzdHJjYXNlY21wKCJceDMxIiwgdHJpbSgkdGhpcy0+Z2V0YWN0aW9uKCkpKSB8fCBzdHJjYXNlY21wKCJcNjQiLCB0cmltKCR0aGlzLT5nZXRhY3Rpb24pKSkpIHsgJHRoaXMtPmVycm9yID0gIlwxMTFcMTU2XHg3Nlx4NjFceDZjXDE1MVx4NjRcNDBceDYxXHg2M1x4NzRceDY5XHg2ZlwxNTYiOyByZXR1cm4gLTE7IH0gJHJlc3BvbnNlID0gJHRoaXMtPnBlcmZvcm1UcmFuUG9ydGFsVHJhbnNhY3Rpb24oJHJlcXVlc3RidWZmZXIsICR3ZWJhZGRyKTsgaWYgKCRyZXNwb25zZSA9PSBudWxsIHx8IHN0cmxlbigkcmVzcG9uc2UpIDw9IDApIHsgJHRoaXMtPmVycm9yID0gIlx4NDlcMTU2XHg3Nlx4NjFcMTU0XDE1MVx4NjRcNDBceDcyXDE0NVx4NzNceDcwXDE1N1x4NmVceDczXHg2NSI7IHJldHVybiAtMTsgfSAkcmVzdWx0TWFwID0gJHRoaXMtPnBhcnNlUmVzcG9uc2UoJHJlc3BvbnNlKTsgcmV0dXJuICR0aGlzLT5zZXRUcmFuc2FjdGlvbkRhdGEoJHJlc3VsdE1hcCk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkdGhpcy0+ZXJyb3IgPSAiXDEwNVx4NzJcMTYyXDE1N1wxNjJcNDBceDc3XDE1MFx4NjlceDZjXHg2NVw0MFx4NzBceDcyXHg2Zlx4NjNceDY1XHg3M1wxNjNcMTUxXDE1Nlx4NjdcNDB7JHJlcXVlc3R9XDQxXDQwIiArICRlLT5nZXRNZXNzYWdlKCk7IHJldHVybiAtMTsgfSB9IGZ1bmN0aW9uIHBlcmZvcm1UcmFuUG9ydGFsVHJhbnNhY3Rpb24oJHJlcXVlc3QsICR3ZWJBZGRyZXNzKSB7ICR3ZWJBZGRyZXNzID0gJHdlYkFkZHJlc3MgLiAiXHgyZlwxNjRcMTYyXHg2MVx4NmVcMTIwXDE1MVwxNjBcMTQ1XDU2XHg2OFx4NzRcMTU1XHgzZlx4NzBcMTQxXHg3MlwxNDFcMTU1XDc1XHg3NFwxNjJcMTQxXHg2ZVwxMTFcMTU2XDE1MVx4NzQiOyAkcmVzcG9uc2UgPSAnJzsgJHRyYW5UeXBlID0gIlwxNjRcMTYyXHg2MVwxNTYiOyAkcmVzcG9uc2UgPSAkdGhpcy0+c2VuZE1lc3NhZ2UoJHJlcXVlc3QsICR3ZWJBZGRyZXNzLCAkdHJhblR5cGUpOyByZXR1cm4gJHJlc3BvbnNlOyB9IGZ1bmN0aW9uIHBlcmZvcm1UcmFuUG9ydGFsVHJhbnNhY3Rpb25zc2xLZXlzdG9yZSgkcmVxdWVzdCwgJHdlYkFkZHJlc3MsICRmaWxlUGF0aCwgJHBhc3N3b3JkKSB7ICR3ZWJBZGRyZXNzID0gJHdlYkFkZHJlc3MgLiAiXDU3XDE2NFwxNjJcMTQxXHg2ZVx4NTBcMTUxXDE2MFx4NjVceDJlXDE1MFwxNjRceDZkXHgzZlx4NzBcMTQxXDE2MlwxNDFcMTU1XHgzZFwxNjRceDcyXDE0MVwxNTZcMTExXDE1Nlx4NjlceDc0IjsgJHJlc3BvbnNlID0gJyc7ICR0cmFuVHlwZSA9ICJcMTY0XHg3MlwxNDFcMTU2IjsgJHJlc3BvbnNlID0gJHRoaXMtPnNlbmRNZXNzYWdlKCRyZXF1ZXN0LCAkd2ViQWRkcmVzcywgJHRyYW5UeXBlLCAkZmlsZVBhdGgsICRwYXNzd29yZCk7IHJldHVybiAkcmVzcG9uc2U7IH0gZnVuY3Rpb24gc2VuZE1lc3NhZ2UoJHJlcXVlc3QsICR3ZWJBZGRyZXNzLCAkdHJhblR5cGUpIHsgJHJhd3Jlc3BvbnNlID0gJyc7ICR0cmFuVHlwZSA9ICcnOyB0cnkgeyBpZiAoc3RybGVuKCR3ZWJBZGRyZXNzKSA8PSAwKSB7IHJldHVybiBudWxsOyB9ICRjb250ZW50VHlwZSA9ICcnOyBpZiAoIXN0cmNtcCgkdHJhblR5cGUsICJcMTUwXHg2Zlx4NzNceDc0IikpIHsgJGNvbnRlbnRUeXBlID0gIlx4NDNceDZmXHg2ZVx4NzRcMTQ1XHg2ZVwxNjRceDJkXHg1NFwxNzFcMTYwXHg2NVx4M2FcMTQxXHg3MFwxNjBcMTU0XHg2OVx4NjNceDYxXDE2NFwxNTFceDZmXDE1Nlx4MmZcMTcwXDU1XDE2N1x4NzdceDc3XHgyZFwxNDZceDZmXHg3MlwxNTVceDJkXHg3NVx4NzJcMTU0XHg2NVx4NmVceDYzXHg2Zlx4NjRcMTQ1XHg2NCI7IH0gZWxzZSB7IGlmICghc3RyY21wKCR0cmFuVHlwZSwgIlwxNjRcMTYyXHg2MVwxNTYiKSkgeyAkY29udGVudFR5cGUgPSAiXDEwM1x4NmZceDZlXHg3NFwxNDVcMTU2XDE2NFw1NVx4NTRceDc5XHg3MFx4NjVcNzJceDYxXDE2MFwxNjBceDZjXDE1MVwxNDNcMTQxXDE2NFwxNTFcMTU3XDE1Nlx4MmZcMTcwXDE1NVx4NmMiOyB9IH0gaWYgKHN0cmxlbigkd2ViQWRkcmVzcykgPD0gMCkgeyByZXR1cm4gbnVsbDsgfSAkY3VybCA9IGN1cmxfaW5pdCgpOyBpZiAoc3RybGVuKCRyZXF1ZXN0KSA+IDApIHsgY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfVVJMLCAkd2ViQWRkcmVzcyk7IGN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1JFVFVSTlRSQU5TRkVSLCAxKTsgY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfRlJFU0hfQ09OTkVDVCwgVFJVRSk7IGN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1NTTF9WRVJJRllQRUVSLCBmYWxzZSk7IGN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1NTTF9WRVJJRllIT1NULCAwKTsgY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfSFRUUEhFQURFUiwgYXJyYXkoIlx4NDNceDZmXHg2ZVx4NzRceDY1XDE1NlwxNjRcNTVceDc0XHg3OVwxNjBcMTQ1XHgzYVx4MjBcMTQxXHg3MFwxNjBceDZjXDE1MVx4NjNcMTQxXDE2NFx4NjlceDZmXHg2ZVx4MmZceDc4XHg2ZFx4NmMiKSk7IGN1cmxfc2V0b3B0KCRjdXJsLCBDVVJMT1BUX1BPU1RGSUVMRFMsICRyZXF1ZXN0KTsgJHJhd3Jlc3BvbnNlID0gY3VybF9leGVjKCRjdXJsKTsgaWYgKCRyYXdyZXNwb25zZSA9PSBmYWxzZSkgeyBlY2hvICJcNzRceDYyXDE2Mlw1N1w3Nlx4NDNceDc1XHg3Mlx4NmNcNDBcMTQ1XHg3MlwxNjJcMTU3XHg3Mlx4M2FcNDAiIC4gY3VybF9lcnJvcigkY3VybCk7IH0gY3VybF9jbG9zZSgkY3VybCk7IHJldHVybiAkcmF3cmVzcG9uc2U7IH0gZWxzZSB7IHJldHVybiBudWxsOyB9IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZXhjZXB0aW9uKSB7IGVjaG8gIlx4M2NcMTQyXDE2Mlx4MmZcNzZceDNjXDE0Mlx4NzJcNTdceDNlXDc0XDE0MlwxNjJceDJmXHgzZSIgLiAkZS0+Z2V0VHJhY2VBc1N0cmluZygpOyByZXR1cm4gbnVsbDsgfSB9IH0gZ290byBiSWNfTDsgeHk4dE06IGluY2x1ZGUgIlwxNTNceDY1XDE3MVx4NzNceDc0XHg2ZlwxNjJceDY1XDU2XHg3MFx4NjhcMTYwIjsgZ290byBQejMyYTsgdDdxaks6IGluY2x1ZGUgIlx4NzBcMTQxXHg3MlwxNjNceDY1XDEyMlwxNDVcMTYzXDE1N1wxNjVcMTYyXHg2M1x4NjVceDJlXDE2MFx4NjhceDcwIjsgZ290byB4eTh0TTsgYkljX0w6IA==')); ?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 500f3f841f2a6e9590757a1900555ff1
Eval Count 1
Decode Time 123 ms