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

Decoded Output download


 goto rm6c3; rm6c3: include "parseResource.php"; goto C2EIz; u8IuE: 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 = $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 .= "<currency>" . $this->amt . "</currency>"; } } 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($cipher = "aes-192-cbc"); $iv = "PGKEYENCDECIVSPC"; $encrypted = openssl_encrypt($str, "aes-192-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 = 16; $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-192-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 UzgKi; C2EIz: include "keystore.php"; goto u8IuE; UzgKi: 

Did this file decode correctly?

Original Code

<?php eval(base64_decode('CiBnb3RvIHJtNmMzOyBybTZjMzogaW5jbHVkZSAiXHg3MFx4NjFceDcyXDE2M1x4NjVcMTIyXDE0NVwxNjNceDZmXHg3NVx4NzJceDYzXDE0NVw1Nlx4NzBceDY4XDE2MCI7IGdvdG8gQzJFSXo7IHU4SXVFOiBjbGFzcyBpUGF5UGlwZSB7IHByb3RlY3RlZCAkaWQgPSAnJzsgcHJvdGVjdGVkICRhY3Rpb24gPSAnJzsgcHJvdGVjdGVkICR0cmFuc0lkID0gJyc7IHByb3RlY3RlZCAkYW10ID0gJyc7IHByb3RlY3RlZCAkcmVzcG9uc2VVUkwgPSAnJzsgcHJvdGVjdGVkICR0cmFja0lkID0gJyc7IHByb3RlY3RlZCAkdWRmMSA9ICcnOyBwcm90ZWN0ZWQgJHVkZjIgPSAnJzsgcHJvdGVjdGVkICR1ZGYzID0gJyc7IHByb3RlY3RlZCAkdWRmNCA9ICcnOyBwcm90ZWN0ZWQgJHVkZjUgPSAnJzsgcHJvdGVjdGVkICRwYXltZW50UGFnZSA9ICcnOyBwcm90ZWN0ZWQgJHBheW1lbnRJZCA9ICcnOyBwcm90ZWN0ZWQgJHJlc3VsdCA9ICcnOyBwcm90ZWN0ZWQgJGF1dGggPSAnJzsgcHJvdGVjdGVkICRyZWYgPSAnJzsgcHJvdGVjdGVkICRhdnIgPSAnJzsgcHJvdGVjdGVkICRkYXRlID0gJyc7IHByb3RlY3RlZCAkY3VycmVuY3kgPSAnJzsgcHJvdGVjdGVkICRlcnJvclVSTCA9ICcnOyBwcm90ZWN0ZWQgJGxhbmd1YWdlID0gJyc7IHByb3RlY3RlZCAkZXJyb3IgPSAnJzsgcHJvdGVjdGVkICRlcnJvcl90ZXh0ID0gJyc7IHByb3RlY3RlZCAkcmF3UmVzcG9uc2UgPSAnJzsgcHJvdGVjdGVkICRhbGlhcyA9ICcnOyBwcm90ZWN0ZWQgJGRlYnVnTXNnID0gJyc7IHByb3RlY3RlZCAkcmVzcG9uc2VDb2RlID0gJyc7IHByb3RlY3RlZCAkemlwID0gJyc7IHByb3RlY3RlZCAkYWRkciA9ICcnOyBwcm90ZWN0ZWQgJG1lbWJlciA9ICcnOyBwcm90ZWN0ZWQgJGN2djIgPSAnJzsgcHJvdGVjdGVkICRjdnYyVmVyaWZpY2F0aW9uID0gJyc7IHByb3RlY3RlZCAkdHlwZSA9ICcnOyBwcm90ZWN0ZWQgJGNhcmQgPSAnJzsgcHJvdGVjdGVkICRleHBEYXkgPSAnJzsgcHJvdGVjdGVkICRleHBNb250aCA9ICcnOyBwcm90ZWN0ZWQgJGV4cFllYXIgPSAnJzsgcHJvdGVjdGVkICRlY2kgPSAnJzsgcHJvdGVjdGVkICRjYXZ2ID0gJyc7IHByb3RlY3RlZCAkeGlkID0gJyc7IHByb3RlY3RlZCAkcmVzb3VyY2VQYXRoID0gJyc7IHByb3RlY3RlZCAkYWNzdXJsID0gJyc7IHByb3RlY3RlZCAkcGFyZXEgPSAnJzsgcHJvdGVjdGVkICRwYXJlcyA9ICcnOyBwcm90ZWN0ZWQgJGVycm9yX3NlcnZpY2VfdGFnID0gJyc7IHByb3RlY3RlZCAka2V5c3RvcmVQYXRoID0gJyc7IHByb3RlY3RlZCAkc2VwZXJhdG9yID0gIlwxMzQiOyBwcm90ZWN0ZWQgJHNlcCA9ICJcNTciOyBwcm90ZWN0ZWQgJHdlYkFkZHJlc3MgPSAnJzsgcHJvdGVjdGVkICRrZXkgPSAnJzsgcHJvdGVjdGVkICRpbml0aWFsaXphdGlvblZlY3RvciA9ICcnOyBwcm90ZWN0ZWQgJGl2ckZsYWcgPSAnJzsgcHJvdGVjdGVkICRucGMzNTZjaHBob25laWRmb3JtYXQgPSAnJzsgcHJvdGVjdGVkICRucGMzNTZjaHBob25laWQgPSAnJzsgcHJvdGVjdGVkICRucGMzNTZzaG9wY2hhbm5lbCA9ICcnOyBwcm90ZWN0ZWQgJG5wYzM1NmF2YWlsYXV0aGNoYW5uZWwgPSAnJzsgcHJvdGVjdGVkICRucGMzNTZwYXJlcWNoYW5uZWwgPSAnJzsgcHJvdGVjdGVkICRucGMzNTZpdHBjcmVkZW50aWFsID0gJyc7IHByb3RlY3RlZCAkYXV0aERhdGFOYW1lID0gJyc7IHByb3RlY3RlZCAkYXV0aERhdGFzdHJsZW4gPSAnJzsgcHJvdGVjdGVkICRhdXRoRGF0YVR5cGUgPSAnJzsgcHJvdGVjdGVkICRhdXRoRGF0YUxhYmVsID0gJyc7IHByb3RlY3RlZCAkYXV0aERhdGFQcm9tcHQgPSAnJzsgcHJvdGVjdGVkICRhdXRoRGF0YUVuY3J5cHRLZXkgPSAnJzsgcHJvdGVjdGVkICRhdXRoRGF0YUVuY3J5cHRUeXBlID0gJyc7IHByb3RlY3RlZCAkYXV0aERhdGFFbmNyeXB0TWFuZGF0b3J5ID0gJyc7IHByb3RlY3RlZCAkaXZyUGFzc3dvcmRTdGF0dXMgPSAnJzsgcHJvdGVjdGVkICRpdnJQYXNzd29yZCA9ICcnOyBwcm90ZWN0ZWQgJGl0cGF1dGh0cmFuID0gJyc7IHByb3RlY3RlZCAkaXRwYXV0aGlkZW4gPSAnJzsgcHJvdGVjdGVkICR1cmwgPSAnJzsgcHJvdGVjdGVkICRzYXZlZGNhcmQgPSAnJzsgcHJvdGVjdGVkICRwYXltZW50ZGViaXRJZCA9ICcnOyBwcm90ZWN0ZWQgJHBheW1lbnRVcmwgPSAnJzsgZnVuY3Rpb24gZ2V0aWQoKSB7IHJldHVybiAkdGhpcy0+aWQ7IH0gZnVuY3Rpb24gZ2V0YWN0aW9uKCkgeyByZXR1cm4gJHRoaXMtPmFjdGlvbjsgfSBmdW5jdGlvbiBnZXR0cmFuc0lkKCkgeyByZXR1cm4gJHRoaXMtPnRyYW5zSWQ7IH0gZnVuY3Rpb24gZ2V0YW10KCkgeyByZXR1cm4gJHRoaXMtPmFtdDsgfSBmdW5jdGlvbiBnZXRyZXNwb25zZVVSTCgpIHsgcmV0dXJuICR0aGlzLT5yZXNwb25zZVVSTDsgfSBmdW5jdGlvbiBnZXR0cmFja0lkKCkgeyByZXR1cm4gJHRoaXMtPnRyYWNrSWQ7IH0gZnVuY3Rpb24gZ2V0dWRmMSgpIHsgcmV0dXJuICR0aGlzLT51ZGYxOyB9IGZ1bmN0aW9uIGdldHVkZjIoKSB7IHJldHVybiAkdGhpcy0+dWRmMjsgfSBmdW5jdGlvbiBnZXR1ZGYzKCkgeyByZXR1cm4gJHRoaXMtPnVkZjM7IH0gZnVuY3Rpb24gZ2V0dWRmNCgpIHsgcmV0dXJuICR0aGlzLT51ZGY0OyB9IGZ1bmN0aW9uIGdldHVkZjUoKSB7IHJldHVybiAkdGhpcy0+dWRmNTsgfSBmdW5jdGlvbiBnZXRwYXltZW50UGFnZSgpIHsgcmV0dXJuICR0aGlzLT5wYXltZW50UGFnZTsgfSBmdW5jdGlvbiBnZXRwYXltZW50SWQoKSB7IHJldHVybiAkdGhpcy0+cGF5bWVudElkOyB9IGZ1bmN0aW9uIGdldHJlc3VsdCgpIHsgcmV0dXJuICR0aGlzLT5yZXN1bHQ7IH0gZnVuY3Rpb24gZ2V0YXV0aCgpIHsgcmV0dXJuICR0aGlzLT5hdXRoOyB9IGZ1bmN0aW9uIGdldHJlZigpIHsgcmV0dXJuICR0aGlzLT5yZWY7IH0gZnVuY3Rpb24gZ2V0YXZyKCkgeyByZXR1cm4gJHRoaXMtPmF2cjsgfSBmdW5jdGlvbiBnZXREYXRlKCkgeyByZXR1cm4gJHRoaXMtPmRhdGU7IH0gZnVuY3Rpb24gZ2V0Y3VycmVuY3koKSB7IHJldHVybiAkdGhpcy0+Y3VycmVuY3k7IH0gZnVuY3Rpb24gZ2V0ZXJyb3JVUkwoKSB7IHJldHVybiAkdGhpcy0+ZXJyb3JVUkw7IH0gZnVuY3Rpb24gZ2V0bGFuZ3VhZ2UoKSB7IHJldHVybiAkdGhpcy0+bGFuZ3VhZ2U7IH0gZnVuY3Rpb24gZ2V0ZXJyb3IoKSB7IHJldHVybiAkdGhpcy0+ZXJyb3I7IH0gZnVuY3Rpb24gZ2V0ZXJyb3JfdGV4dCgpIHsgcmV0dXJuICR0aGlzLT5lcnJvcl90ZXh0OyB9IGZ1bmN0aW9uIGdldHJhd1Jlc3BvbnNlKCkgeyByZXR1cm4gJHRoaXMtPnJhd1Jlc3BvbnNlOyB9IGZ1bmN0aW9uIGdldGFsaWFzKCkgeyByZXR1cm4gJHRoaXMtPmFsaWFzOyB9IGZ1bmN0aW9uIGdldERlYnVnTXNnKCkgeyByZXR1cm4gJHRoaXMtPmRlYnVnTXNnOyB9IGZ1bmN0aW9uIGdldHJlc3BvbnNlQ29kZSgpIHsgcmV0dXJuICR0aGlzLT5yZXNwb25zZUNvZGU7IH0gZnVuY3Rpb24gZ2V0emlwKCkgeyByZXR1cm4gJHRoaXMtPnppcDsgfSBmdW5jdGlvbiBnZXRhZGRyKCkgeyByZXR1cm4gJHRoaXMtPmFkZHI7IH0gZnVuY3Rpb24gZ2V0bWVtYmVyKCkgeyByZXR1cm4gJHRoaXMtPm1lbWJlcjsgfSBmdW5jdGlvbiBnZXRjdnYyKCkgeyByZXR1cm4gJHRoaXMtPmN2djI7IH0gZnVuY3Rpb24gZ2V0Y3Z2MlZlcmlmaWNhdGlvbigpIHsgcmV0dXJuICR0aGlzLT5jdnYyVmVyaWZpY2F0aW9uOyB9IGZ1bmN0aW9uIGdldFR5cGUoKSB7IHJldHVybiAkdGhpcy0+dHlwZTsgfSBmdW5jdGlvbiBnZXRjYXJkKCkgeyByZXR1cm4gJHRoaXMtPmNhcmQ7IH0gZnVuY3Rpb24gZ2V0ZXhwRGF5KCkgeyByZXR1cm4gJHRoaXMtPmV4cERheTsgfSBmdW5jdGlvbiBnZXRleHBNb250aCgpIHsgcmV0dXJuICR0aGlzLT5leHBNb250aDsgfSBmdW5jdGlvbiBnZXRleHBZZWFyKCkgeyByZXR1cm4gJHRoaXMtPmV4cFllYXI7IH0gZnVuY3Rpb24gZ2V0ZWNpKCkgeyByZXR1cm4gJHRoaXMtPmVjaTsgfSBmdW5jdGlvbiBnZXRjYXZ2KCkgeyByZXR1cm4gJHRoaXMtPmNhdnY7IH0gZnVuY3Rpb24gZ2V0eGlkKCkgeyByZXR1cm4gJHRoaXMtPnhpZDsgfSBmdW5jdGlvbiBnZXRyZXNvdXJjZVBhdGgoKSB7IHJldHVybiAkdGhpcy0+cmVzb3VyY2VQYXRoOyB9IGZ1bmN0aW9uIGdldGFjc3VybCgpIHsgcmV0dXJuICR0aGlzLT5hY3N1cmw7IH0gZnVuY3Rpb24gZ2V0cGFyZXEoKSB7IHJldHVybiAkdGhpcy0+cGFyZXE7IH0gZnVuY3Rpb24gZ2V0cGFyZXMoKSB7IHJldHVybiAkdGhpcy0+cGFyZXM7IH0gZnVuY3Rpb24gZ2V0ZXJyb3Jfc2VydmljZV90YWcoKSB7IHJldHVybiAkdGhpcy0+ZXJyb3Jfc2VydmljZV90YWc7IH0gZnVuY3Rpb24gZ2V0a2V5c3RvcmVQYXRoKCkgeyByZXR1cm4gJHRoaXMtPmtleXN0b3JlUGF0aDsgfSBmdW5jdGlvbiBnZXRzZXBlcmF0b3IoKSB7IHJldHVybiAkdGhpcy0+c2VwZXJhdG9yOyB9IGZ1bmN0aW9uIGdldHNlcCgpIHsgcmV0dXJuICR0aGlzLT5zZXA7IH0gZnVuY3Rpb24gZ2V0d2ViQWRkcmVzcygpIHsgcmV0dXJuICR0aGlzLT53ZWJBZGRyZXNzOyB9IGZ1bmN0aW9uIGdldGtleSgpIHsgcmV0dXJuICR0aGlzLT5rZXk7IH0gZnVuY3Rpb24gZ2V0aW5pdGlhbGl6YXRpb25WZWN0b3IoKSB7IHJldHVybiAkdGhpcy0+aW5pdGlhbGl6YXRpb25WZWN0b3I7IH0gZnVuY3Rpb24gZ2V0aXZyRmxhZygpIHsgcmV0dXJuICR0aGlzLT5pdnJGbGFnOyB9IGZ1bmN0aW9uIGdldG5wYzM1NmNocGhvbmVpZGZvcm1hdCgpIHsgcmV0dXJuICR0aGlzLT5ucGMzNTZhdmFpbGF1dGhjaGFubmVsOyB9IGZ1bmN0aW9uIGdldG5wYzM1NmNocGhvbmVpZCgpIHsgcmV0dXJuICR0aGlzLT5ucGMzNTZjaHBob25laWQ7IH0gZnVuY3Rpb24gZ2V0bnBjMzU2c2hvcGNoYW5uZWwoKSB7IHJldHVybiAkdGhpcy0+bnBjMzU2c2hvcGNoYW5uZWw7IH0gZnVuY3Rpb24gZ2V0bnBjMzU2YXZhaWxhdXRoY2hhbm5lbCgpIHsgcmV0dXJuICR0aGlzLT5ucGMzNTZhdmFpbGF1dGhjaGFubmVsOyB9IGZ1bmN0aW9uIGdldG5wYzM1NnBhcmVxY2hhbm5lbCgpIHsgcmV0dXJuICR0aGlzLT5ucGMzNTZpdHBjcmVkZW50aWFsOyB9IGZ1bmN0aW9uIGdldG5wYzM1Nml0cGNyZWRlbnRpYWwoKSB7IHJldHVybiAkdGhpcy0+bnBjMzU2aXRwY3JlZGVudGlhbDsgfSBmdW5jdGlvbiBnZXRhdXRoRGF0YU5hbWUoKSB7IHJldHVybiAkdGhpcy0+YXV0aERhdGFOYW1lOyB9IGZ1bmN0aW9uIGdldGF1dGhEYXRhc3RybGVuKCkgeyByZXR1cm4gJHRoaXMtPmF1dGhEYXRhc3RybGVuOyB9IGZ1bmN0aW9uIGdldGF1dGhEYXRhVHlwZSgpIHsgcmV0dXJuICR0aGlzLT5hdXRoRGF0YVR5cGU7IH0gZnVuY3Rpb24gZ2V0YXV0aERhdGFMYWJlbCgpIHsgcmV0dXJuICR0aGlzLT5hdXRoRGF0YUxhYmVsOyB9IGZ1bmN0aW9uIGdldGF1dGhEYXRhUHJvbXB0KCkgeyByZXR1cm4gJHRoaXMtPmF1dGhEYXRhUHJvbXB0OyB9IGZ1bmN0aW9uIGdldGF1dGhEYXRhRW5jcnlwdEtleSgpIHsgcmV0dXJuICR0aGlzLT5hdXRoRGF0YUVuY3J5cHRLZXk7IH0gZnVuY3Rpb24gZ2V0YXV0aERhdGFFbmNyeXB0VHlwZSgpIHsgcmV0dXJuICR0aGlzLT5hdXRoRGF0YUVuY3J5cHRUeXBlOyB9IGZ1bmN0aW9uIGdldGF1dGhEYXRhRW5jcnlwdE1hbmRhdG9yeSgpIHsgcmV0dXJuICR0aGlzLT5hdXRoRGF0YUVuY3J5cHRNYW5kYXRvcnk7IH0gZnVuY3Rpb24gZ2V0aXZyUGFzc3dvcmRTdGF0dXMoKSB7IHJldHVybiAkdGhpcy0+aXZyUGFzc3dvcmRTdGF0dXM7IH0gZnVuY3Rpb24gZ2V0aXZyUGFzc3dvcmQoKSB7IHJldHVybiAkdGhpcy0+aXZyUGFzc3dvcmQ7IH0gZnVuY3Rpb24gZ2V0aXRwYXV0aHRyYW4oKSB7IHJldHVybiAkdGhpcy0+aXRwYXV0aHRyYW47IH0gZnVuY3Rpb24gZ2V0aXRwYXV0aGlkZW4oKSB7IHJldHVybiAkdGhpcy0+aXRwYXV0aGlkZW47IH0gZnVuY3Rpb24gZ2V0dXJsKCkgeyByZXR1cm4gJHRoaXMtPnVybDsgfSBmdW5jdGlvbiBnZXRzYXZlZGNhcmQoKSB7IHJldHVybiAkdGhpcy0+c2F2ZWRjYXJkOyB9IGZ1bmN0aW9uIGdldHBheW1lbnRkZWJpdElkKCkgeyByZXR1cm4gJHRoaXMtPnBheW1lbnRkZWJpdElkOyB9IGZ1bmN0aW9uIGdldHBheW1lbnRVcmwoKSB7IHJldHVybiAkdGhpcy0+cGF5bWVudFVybDsgfSBmdW5jdGlvbiBzZXRpZCgkdmFsKSB7ICR0aGlzLT5pZCA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0YWN0aW9uKCR2YWwpIHsgJHRoaXMtPmFjdGlvbiA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0dHJhbnNJZCgkdmFsKSB7ICR0aGlzLT50cmFuc0lkID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRhbXQoJHZhbCkgeyAkdGhpcy0+YW10ID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRyZXNwb25zZVVSTCgkdmFsKSB7ICR0aGlzLT5yZXNwb25zZVVSTCA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0dHJhY2tJZCgkdmFsKSB7ICR0aGlzLT50cmFja0lkID0gJHZhbDsgfSBmdW5jdGlvbiBzZXR1ZGYxKCR2YWwpIHsgJHRoaXMtPnVkZjEgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldHVkZjIoJHZhbCkgeyAkdGhpcy0+dWRmMiA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0dWRmMygkdmFsKSB7ICR0aGlzLT51ZGYzID0gJHZhbDsgfSBmdW5jdGlvbiBzZXR1ZGY0KCR2YWwpIHsgJHRoaXMtPnVkZjQgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldHVkZjUoJHZhbCkgeyAkdGhpcy0+dWRmNSA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0cGF5bWVudFBhZ2UoJHZhbCkgeyAkdGhpcy0+cGF5bWVudFBhZ2UgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldHBheW1lbnRJZCgkdmFsKSB7ICR0aGlzLT5wYXltZW50SWQgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldHJlc3VsdCgkdmFsKSB7ICR0aGlzLT5yZXN1bHQgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldGF1dGgoJHZhbCkgeyAkdGhpcy0+YXV0aCA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0cmVmKCR2YWwpIHsgJHRoaXMtPnJlZiA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0YXZyKCR2YWwpIHsgJHRoaXMtPmF2ciA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0RGF0ZSgkdmFsKSB7ICR0aGlzLT5kYXRlID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRjdXJyZW5jeSgkdmFsKSB7ICR0aGlzLT5jdXJyZW5jeSA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0ZXJyb3JVUkwoJHZhbCkgeyAkdGhpcy0+ZXJyb3JVUkwgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldGxhbmd1YWdlKCR2YWwpIHsgJHRoaXMtPmxhbmd1YWdlID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRlcnJvcigkdmFsKSB7ICR0aGlzLT5lcnJvciA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0ZXJyb3JfdGV4dCgkdmFsKSB7ICR0aGlzLT5lcnJvcl90ZXh0ID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRyYXdSZXNwb25zZSgkdmFsKSB7ICR0aGlzLT5yYXdSZXNwb25zZSA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0YWxpYXMoJHZhbCkgeyAkdGhpcy0+YWxpYXMgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldERlYnVnTXNnKCR2YWwpIHsgJHRoaXMtPmRlYnVnTXNnID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRyZXNwb25zZUNvZGUoJHZhbCkgeyAkdGhpcy0+cmVzcG9uc2VDb2RlID0gJHZhbDsgfSBmdW5jdGlvbiBzZXR6aXAoJHZhbCkgeyAkdGhpcy0+emlwID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRhZGRyKCR2YWwpIHsgJHRoaXMtPmFkZHIgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldG1lbWJlcigkdmFsKSB7ICR0aGlzLT5tZW1iZXIgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldGN2djIoJHZhbCkgeyAkdGhpcy0+Y3Z2MiA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0Y3Z2MlZlcmlmaWNhdGlvbigkdmFsKSB7ICR0aGlzLT5jdnYyVmVyaWZpY2F0aW9uID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRUeXBlKCR2YWwpIHsgJHRoaXMtPnR5cGUgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldGNhcmQoJHZhbCkgeyAkdGhpcy0+Y2FyZCA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0ZXhwRGF5KCR2YWwpIHsgJHRoaXMtPmV4cERheSA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0ZXhwTW9udGgoJHZhbCkgeyAkdGhpcy0+ZXhwTW9udGggPSAkdmFsOyB9IGZ1bmN0aW9uIHNldGV4cFllYXIoJHZhbCkgeyAkdGhpcy0+ZXhwWWVhciA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0ZWNpKCR2YWwpIHsgJHRoaXMtPmVjaSA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0Y2F2digkdmFsKSB7ICR0aGlzLT5jYXZ2ID0gJHZhbDsgfSBmdW5jdGlvbiBzZXR4aWQoJHZhbCkgeyAkdGhpcy0+eGlkID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRyZXNvdXJjZVBhdGgoJHZhbCkgeyAkdGhpcy0+cmVzb3VyY2VQYXRoID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRhY3N1cmwoJHZhbCkgeyAkdGhpcy0+YWNzdXJsID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRwYXJlcSgkdmFsKSB7ICR0aGlzLT5wYXJlcSA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0cGFyZXMoJHZhbCkgeyAkdGhpcy0+cGFyZXMgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldGVycm9yX3NlcnZpY2VfdGFnKCR2YWwpIHsgJHRoaXMtPmVycm9yX3NlcnZpY2VfdGFnID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRrZXlzdG9yZVBhdGgoJHZhbCkgeyAkdGhpcy0+a2V5c3RvcmVQYXRoID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRzZXBlcmF0b3IoJHZhbCkgeyAkdGhpcy0+c2VwZXJhdG9yID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRzZXAoJHZhbCkgeyAkdGhpcy0+c2VwID0gJHZhbDsgfSBmdW5jdGlvbiBzZXR3ZWJBZGRyZXNzKCR2YWwpIHsgJHRoaXMtPndlYkFkZHJlc3MgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldGtleSgkdmFsKSB7ICR0aGlzLT5rZXkgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldGluaXRpYWxpemF0aW9uVmVjdG9yKCR2YWwpIHsgJHRoaXMtPmluaXRpYWxpemF0aW9uVmVjdG9yID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRpdnJGbGFnKCR2YWwpIHsgJHRoaXMtPml2ckZsYWcgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldG5wYzM1NmNocGhvbmVpZGZvcm1hdCgkdmFsKSB7ICR0aGlzLT5ucGMzNTZhdmFpbGF1dGhjaGFubmVsID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRucGMzNTZjaHBob25laWQoJHZhbCkgeyAkdGhpcy0+bnBjMzU2Y2hwaG9uZWlkID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRucGMzNTZzaG9wY2hhbm5lbCgkdmFsKSB7ICR0aGlzLT5ucGMzNTZzaG9wY2hhbm5lbCA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0bnBjMzU2YXZhaWxhdXRoY2hhbm5lbCgkdmFsKSB7ICR0aGlzLT5ucGMzNTZhdmFpbGF1dGhjaGFubmVsID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRucGMzNTZwYXJlcWNoYW5uZWwoJHZhbCkgeyAkdGhpcy0+bnBjMzU2aXRwY3JlZGVudGlhbCA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0bnBjMzU2aXRwY3JlZGVudGlhbCgkdmFsKSB7ICR0aGlzLT5ucGMzNTZpdHBjcmVkZW50aWFsID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRhdXRoRGF0YU5hbWUoJHZhbCkgeyAkdGhpcy0+YXV0aERhdGFOYW1lID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRhdXRoRGF0YXN0cmxlbigkdmFsKSB7ICR0aGlzLT5hdXRoRGF0YXN0cmxlbiA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0YXV0aERhdGFUeXBlKCR2YWwpIHsgJHRoaXMtPmF1dGhEYXRhVHlwZSA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0YXV0aERhdGFMYWJlbCgkdmFsKSB7ICR0aGlzLT5hdXRoRGF0YUxhYmVsID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRhdXRoRGF0YVByb21wdCgkdmFsKSB7ICR0aGlzLT5hdXRoRGF0YVByb21wdCA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0YXV0aERhdGFFbmNyeXB0S2V5KCR2YWwpIHsgJHRoaXMtPmF1dGhEYXRhRW5jcnlwdEtleSA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0YXV0aERhdGFFbmNyeXB0VHlwZSgkdmFsKSB7ICR0aGlzLT5hdXRoRGF0YUVuY3J5cHRUeXBlID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRhdXRoRGF0YUVuY3J5cHRNYW5kYXRvcnkoJHZhbCkgeyAkdGhpcy0+YXV0aERhdGFFbmNyeXB0TWFuZGF0b3J5ID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRpdnJQYXNzd29yZFN0YXR1cygkdmFsKSB7ICR0aGlzLT5pdnJQYXNzd29yZFN0YXR1cyA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0aXZyUGFzc3dvcmQoJHZhbCkgeyAkdGhpcy0+aXZyUGFzc3dvcmQgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldGl0cGF1dGh0cmFuKCR2YWwpIHsgJHRoaXMtPml0cGF1dGh0cmFuID0gJHZhbDsgfSBmdW5jdGlvbiBzZXRpdHBhdXRoaWRlbigkdmFsKSB7ICR0aGlzLT5pdHBhdXRoaWRlbiA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0dXJsKCR2YWwpIHsgJHRoaXMtPnVybCA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0c2F2ZWRjYXJkKCR2YWwpIHsgJHRoaXMtPnNhdmVkY2FyZCA9ICR2YWw7IH0gZnVuY3Rpb24gc2V0cGF5bWVudGRlYml0SWQoJHZhbCkgeyAkdGhpcy0+cGF5bWVudGRlYml0SWQgPSAkdmFsOyB9IGZ1bmN0aW9uIHNldHBheW1lbnRVcmwoJHZhbCkgeyAkdGhpcy0+cGF5bWVudFVybCA9ICR2YWw7IH0gZnVuY3Rpb24gYnVpbGRIb3N0UmVxdWVzdCgpIHsgJHN0clJlcXVlc3QgPSAnJzsgdHJ5IHsgaWYgKHN0cmxlbigkdGhpcy0+YW10KSA+IDApIHsgJHN0clJlcXVlc3QgLj0gIlx4NjFceDZkXDE2NFx4M2QiIC4gJHRoaXMtPmFtdCAuICJcNDYiOyB9IGlmIChzdHJsZW4oJHRoaXMtPmFjdGlvbikgPiAwKSB7ICRzdHJSZXF1ZXN0IC49ICJcMTQxXHg2M1wxNjRceDY5XDE1N1x4NmVceDNkIiAuICR0aGlzLT5hY3Rpb24gLiAiXHgyNiI7IH0gaWYgKHN0cmxlbigkdGhpcy0+cmVzcG9uc2VVUkwpID4gMCkgeyAkc3RyUmVxdWVzdCAuPSAiXHg3MlwxNDVceDczXDE2MFwxNTdceDZlXHg3M1x4NjVceDU1XHg1MlwxMTRcNzUiIC4gJHRoaXMtPnJlc3BvbnNlVVJMIC4gIlx4MjYiOyB9IGlmIChzdHJsZW4oJHRoaXMtPmVycm9yVVJMKSA+IDApIHsgJHN0clJlcXVlc3QgLj0gIlwxNDVcMTYyXDE2MlwxNTdceDcyXDEyNVx4NTJcMTE0XHgzZCIgLiAkdGhpcy0+ZXJyb3JVUkwgLiAiXDQ2IjsgfSBpZiAoc3RybGVuKCR0aGlzLT50cmFja0lkKSA+IDApIHsgJHN0clJlcXVlc3QgLj0gIlx4NzRceDcyXHg2MVx4NjNceDZiXDE1MVx4NjRceDNkIiAuICR0aGlzLT50cmFja0lkIC4gIlx4MjYiOyB9IGlmIChzdHJsZW4oJHRoaXMtPnVkZjEpID4gMCkgeyAkc3RyUmVxdWVzdCAuPSAiXHg3NVx4NjRcMTQ2XHgzMVw3NSIgLiAkdGhpcy0+dWRmMSAuICJcNDYiOyB9IGlmIChzdHJsZW4oJHRoaXMtPnVkZjIpID4gMCkgeyAkc3RyUmVxdWVzdCAuPSAiXHg3NVwxNDRcMTQ2XHgzMlw3NSIgLiAkdGhpcy0+dWRmMiAuICJceDI2IjsgfSBpZiAoc3RybGVuKCR0aGlzLT51ZGYzKSA+IDApIHsgJHN0clJlcXVlc3QgLj0gIlx4NzVcMTQ0XHg2Nlx4MzNcNzUiIC4gJHRoaXMtPnVkZjMgLiAiXHgyNiI7IH0gaWYgKHN0cmxlbigkdGhpcy0+dWRmNCkgPiAwKSB7ICRzdHJSZXF1ZXN0IC49ICJcMTY1XDE0NFx4NjZceDM0XHgzZCIgLiAkdGhpcy0+dWRmNCAuICJceDI2IjsgfSBpZiAoc3RybGVuKCR0aGlzLT51ZGY1KSA+IDApIHsgJHN0clJlcXVlc3QgLj0gIlx4NzVceDY0XHg2Nlx4MzVcNzUiIC4gJHRoaXMtPnVkZjUgLiAiXHgyNiI7IH0gaWYgKHN0cmxlbigkdGhpcy0+Y3VycmVuY3kpID4gMCkgeyAkc3RyUmVxdWVzdCAuPSAiXHg2M1wxNjVcMTYyXHg3Mlx4NjVcMTU2XHg2M1wxNzFcMTQzXDE1N1x4NjRcMTQ1XDc1IiAuICR0aGlzLT5jdXJyZW5jeSAuICJcNDYiOyB9IGlmICgkdGhpcy0+bGFuZ3VhZ2UgIT0gbnVsbCAmJiBzdHJsZW4oJHRoaXMtPmxhbmd1YWdlKSA+IDApIHsgJHN0clJlcXVlc3QgLj0gIlwxNTRcMTQxXHg2ZVwxNDdcMTUxXDE0NFw3NSIgLiAkdGhpcy0+bGFuZ3VhZ2UgLiAiXDQ2IjsgfSByZXR1cm4gJHN0clJlcXVlc3Q7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyByZXR1cm4gbnVsbDsgfSB9IGZ1bmN0aW9uIGJ1aWxkWE1MUmVxdWVzdCgpIHsgJHJlcXVlc3RidWZmZXIgPSAnJzsgdHJ5IHsgJHJlcXVlc3RidWZmZXIgPSAkcmVxdWVzdGJ1ZmZlciAuICJceDNjXHg3Mlx4NjVcMTYxXHg3NVx4NjVcMTYzXHg3NFx4M2UiOyBpZiAoJHRoaXMtPmNhcmQgIT0gbnVsbCkgeyBpZiAoc3RybGVuKCR0aGlzLT5jYXJkKSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlx4M2NceDYzXDE0MVwxNjJcMTQ0XDc2IiAuICR0aGlzLT5jYXJkIC4gIlw3NFx4MmZceDYzXDE0MVwxNjJceDY0XDc2IjsgfSB9IGlmICgkdGhpcy0+Y3Z2MiAhPSBudWxsKSB7IGlmIChzdHJsZW4oJHRoaXMtPmN2djIpID4gMCkgeyAkcmVxdWVzdGJ1ZmZlciAuPSAiXHgzY1wxNDNcMTY2XDE2Nlx4MzJceDNlIiAuICR0aGlzLT5jdnYyIC4gIlx4M2NcNTdcMTQzXDE2NlwxNjZceDMyXHgzZSI7IH0gfSBpZiAoJHRoaXMtPmN1cnJlbmN5ICE9IG51bGwpIHsgaWYgKHN0cmxlbigkdGhpcy0+Y3VycmVuY3kpID4gMCkgeyAkcmVxdWVzdGJ1ZmZlciAuPSAiXDc0XDE0M1wxNjVcMTYyXHg3Mlx4NjVceDZlXHg2M1x4NzlceDYzXHg2Zlx4NjRceDY1XHgzZSIgLiAkdGhpcy0+Y3VycmVuY3kgLiAiXDc0XHgyZlwxNDNcMTY1XHg3Mlx4NzJcMTQ1XHg2ZVx4NjNceDc5XHg2M1x4NmZcMTQ0XDE0NVw3NiI7IH0gfSBpZiAoJHRoaXMtPmV4cFllYXIgIT0gbnVsbCkgeyBpZiAoc3RybGVuKCR0aGlzLT5leHBZZWFyKSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlx4M2NceDY1XHg3OFwxNjBceDc5XDE0NVwxNDFceDcyXDc2IiAuICR0aGlzLT5leHBZZWFyIC4gIlw3NFx4MmZceDY1XDE3MFx4NzBcMTcxXDE0NVwxNDFceDcyXDc2IjsgfSB9IGlmICgkdGhpcy0+ZXhwTW9udGggIT0gbnVsbCkgeyBpZiAoc3RybGVuKCR0aGlzLT5leHBNb250aCkgPiAwKSB7ICRyZXF1ZXN0YnVmZmVyIC49ICJcNzRcMTQ1XHg3OFwxNjBceDZkXHg2ZlwxNTZcMTY0XDE1MFw3NiIgLiAkdGhpcy0+ZXhwTW9udGggLiAiXHgzY1w1N1x4NjVceDc4XHg3MFx4NmRcMTU3XHg2ZVx4NzRceDY4XHgzZSI7IH0gfSBpZiAoJHRoaXMtPmV4cERheSAhPSBudWxsKSB7IGlmIChzdHJsZW4oJHRoaXMtPmV4cERheSkgPiAwKSB7ICRyZXF1ZXN0YnVmZmVyIC49ICJceDNjXHg2NVx4NzhcMTYwXDE0NFwxNDFcMTcxXDc2IiAuICJceDMwXDYxIiAuICJcNzRceDJmXDE0NVx4NzhceDcwXDE0NFwxNDFcMTcxXHgzZSI7IH0gfSBpZiAoJHRoaXMtPnR5cGUgIT0gbnVsbCkgeyBpZiAoc3RybGVuKCR0aGlzLT50eXBlKSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlx4M2NcMTY0XDE3MVx4NzBcMTQ1XHgzZSIgLiAkdGhpcy0+dHlwZSAuICJcNzRcNTdceDc0XDE3MVx4NzBceDY1XHgzZSI7IH0gfSBpZiAoJHRoaXMtPnRyYW5zSWQgIT0gbnVsbCkgeyBpZiAoc3RybGVuKCR0aGlzLT50cmFuc0lkKSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlw3NFx4NzRcMTYyXDE0MVwxNTZceDczXDE1MVx4NjRcNzYiIC4gJHRoaXMtPnRyYW5zSWQgLiAiXHgzY1x4MmZceDc0XHg3MlwxNDFceDZlXHg3M1wxNTFcMTQ0XHgzZSI7IH0gfSBpZiAoJHRoaXMtPnppcCAhPSBudWxsKSB7IGlmIChzdHJsZW4oJHRoaXMtPnppcCkgPiAwKSB7ICRyZXF1ZXN0YnVmZmVyIC49ICJceDNjXDE3Mlx4NjlceDcwXDc2IiAuICR0aGlzLT56aXAgLiAiXHgzY1x4MmZceDdhXHg2OVx4NzBcNzYiOyB9IH0gaWYgKCR0aGlzLT5hZGRyICE9IG51bGwpIHsgaWYgKHN0cmxlbigkdGhpcy0+YWRkcikgPiAwKSB7ICRyZXF1ZXN0YnVmZmVyIC49ICJceDNjXDE0MVwxNDRceDY0XHg3Mlx4M2UiIC4gJHRoaXMtPmFkZHIgLiAiXDc0XDU3XDE0MVx4NjRceDY0XDE2Mlx4M2UiOyB9IH0gaWYgKCR0aGlzLT5tZW1iZXIgIT0gbnVsbCkgeyBpZiAoc3RybGVuKCR0aGlzLT5tZW1iZXIpID4gMCkgeyAkcmVxdWVzdGJ1ZmZlciAuPSAiXDc0XDE1NVx4NjVcMTU1XHg2Mlx4NjVceDcyXDc2IiAuICR0aGlzLT5tZW1iZXIgLiAiXDc0XHgyZlx4NmRcMTQ1XDE1NVx4NjJcMTQ1XDE2Mlw3NiI7IH0gfSBpZiAoJHRoaXMtPmFtdCAhPSBudWxsKSB7IGlmIChzdHJsZW4oJHRoaXMtPmFtdCkgPiAwKSB7ICRyZXF1ZXN0YnVmZmVyIC49ICJceDNjXHg2MVwxNTVceDc0XHgzZSIgLiAkdGhpcy0+YW10IC4gIlx4M2NceDJmXHg2MVwxNTVcMTY0XHgzZSI7IH0gfSBpZiAoJHRoaXMtPmFjdGlvbiAhPSBudWxsKSB7IGlmIChzdHJsZW4oJHRoaXMtPmFjdGlvbikgPiAwKSB7ICRyZXF1ZXN0YnVmZmVyIC49ICJceDNjXHg2MVwxNDNcMTY0XHg2OVx4NmZceDZlXHgzZSIgLiAkdGhpcy0+YWN0aW9uIC4gIlx4M2NceDJmXHg2MVwxNDNcMTY0XDE1MVx4NmZceDZlXDc2IjsgfSB9IGlmICgkdGhpcy0+dHJhY2tJZCAhPSBudWxsKSB7IGlmIChzdHJsZW4oJHRoaXMtPnRyYWNrSWQpID4gMCkgeyAkcmVxdWVzdGJ1ZmZlciAuPSAiXDc0XDE2NFx4NzJcMTQxXHg2M1x4NmJceDY5XHg2NFx4M2UiIC4gJHRoaXMtPnRyYWNrSWQgLiAiXHgzY1w1N1wxNjRceDcyXDE0MVwxNDNceDZiXDE1MVwxNDRceDNlIjsgfSB9IGlmICgkdGhpcy0+dWRmMSAhPSBudWxsKSB7IGlmIChzdHJsZW4oJHRoaXMtPnVkZjEpID4gMCkgeyAkcmVxdWVzdGJ1ZmZlciAuPSAiXHgzY1wxNjVceDY0XHg2Nlx4MzFcNzYiIC4gJHRoaXMtPnVkZjEgLiAiXHgzY1w1N1wxNjVcMTQ0XDE0Nlx4MzFceDNlIjsgfSB9IGlmICgkdGhpcy0+dWRmMiAhPSBudWxsKSB7IGlmIChzdHJsZW4oJHRoaXMtPnVkZjIpID4gMCkgeyAkcmVxdWVzdGJ1ZmZlciAuPSAiXHgzY1x4NzVcMTQ0XDE0Nlx4MzJcNzYiIC4gJHRoaXMtPnVkZjIgLiAiXDc0XHgyZlwxNjVcMTQ0XHg2Nlw2Mlw3NiI7IH0gfSBpZiAoJHRoaXMtPnVkZjMgIT0gbnVsbCkgeyBpZiAoc3RybGVuKCR0aGlzLT51ZGYzKSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlx4M2NceDc1XHg2NFwxNDZceDMzXHgzZSIgLiAkdGhpcy0+dWRmMyAuICJcNzRceDJmXDE2NVx4NjRceDY2XHgzM1w3NiI7IH0gfSBpZiAoJHRoaXMtPnVkZjQgIT0gbnVsbCkgeyBpZiAoc3RybGVuKCR0aGlzLT51ZGY0KSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlx4M2NceDc1XDE0NFwxNDZceDM0XHgzZSIgLiAkdGhpcy0+dWRmNCAuICJcNzRceDJmXHg3NVx4NjRcMTQ2XHgzNFw3NiI7IH0gfSBpZiAoJHRoaXMtPnVkZjUgIT0gbnVsbCkgeyBpZiAoc3RybGVuKCR0aGlzLT51ZGY1KSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlw3NFwxNjVcMTQ0XDE0Nlw2NVx4M2UiIC4gJHRoaXMtPnVkZjUgLiAiXDc0XHgyZlwxNjVcMTQ0XDE0Nlw2NVw3NiI7IH0gfSBpZiAoJHRoaXMtPmN1cnJlbmN5ICE9IG51bGwpIHsgaWYgKHN0cmxlbigkdGhpcy0+Y3VycmVuY3kpID4gMCkgeyAkcmVxdWVzdGJ1ZmZlciAuPSAiXHgzY1wxNDNcMTY1XHg3MlwxNjJceDY1XDE1Nlx4NjNcMTcxXHgzZSIgLiAkdGhpcy0+YW10IC4gIlx4M2NcNTdcMTQzXDE2NVwxNjJceDcyXHg2NVx4NmVceDYzXHg3OVw3NiI7IH0gfSBpZiAoJHRoaXMtPmVjaSAhPSBudWxsKSB7IGlmIChzdHJsZW4oJHRoaXMtPmVjaSkgPiAwKSB7ICRyZXF1ZXN0YnVmZmVyIC49ICJcNzRcMTQ1XHg2M1wxNTFceDNlIiAuICR0aGlzLT5lY2kgLiAiXHgzY1w1N1x4NjVceDYzXDE1MVx4M2UiOyB9IH0gaWYgKCR0aGlzLT5lcnJvclVSTCAhPSBudWxsKSB7IGlmIChzdHJsZW4oJHRoaXMtPmVycm9yVVJMKSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlx4M2NcMTQ1XDE2Mlx4NzJcMTU3XDE2MlwxMjVcMTIyXHg0Y1w3NiIgLiAkdGhpcy0+ZXJyb3JVUkwgLiAiXDc0XDU3XDE0NVx4NzJcMTYyXHg2ZlwxNjJceDU1XHg1Mlx4NGNceDNlIjsgfSB9IGlmICgkdGhpcy0+cmVzcG9uc2VVUkwgIT0gbnVsbCkgeyBpZiAoc3RybGVuKCR0aGlzLT5yZXNwb25zZVVSTCkgPiAwKSB7ICRyZXF1ZXN0YnVmZmVyIC49ICJcNzRcMTYyXDE0NVx4NzNceDcwXHg2ZlwxNTZcMTYzXDE0NVx4NTVcMTIyXDExNFw3NiIgLiAkdGhpcy0+cmVzcG9uc2VVUkwgLiAiXDc0XHgyZlwxNjJcMTQ1XHg3M1x4NzBcMTU3XDE1NlwxNjNcMTQ1XHg1NVwxMjJcMTE0XHgzZSI7IH0gfSBpZiAoJHRoaXMtPml2ckZsYWcgIT0gbnVsbCkgeyBpZiAoc3RybGVuKCR0aGlzLT5pdnJGbGFnKSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlw3NFwxNTFcMTY2XDE2MlwxMDZceDZjXHg2MVwxNDdcNzYiIC4gJHRoaXMtPml2ckZsYWcgLiAiXDc0XHgyZlx4NjlcMTY2XHg3Mlx4NDZceDZjXHg2MVx4NjdceDNlIjsgfSB9IGlmICgkdGhpcy0+bnBjMzU2Y2hwaG9uZWlkZm9ybWF0ICE9IG51bGwpIHsgaWYgKHN0cmxlbigkdGhpcy0+bnBjMzU2Y2hwaG9uZWlkZm9ybWF0KSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlw3NFwxNTZceDcwXHg2M1w2M1w2NVw2NlwxNDNceDY4XDE2MFwxNTBceDZmXHg2ZVwxNDVcMTUxXHg2NFwxNDZceDZmXHg3MlwxNTVcMTQxXHg3NFw3NiIgLiAkdGhpcy0+bnBjMzU2Y2hwaG9uZWlkZm9ybWF0IC4gIlw3NFx4MmZceDZlXHg3MFwxNDNcNjNceDM1XDY2XHg2M1wxNTBcMTYwXDE1MFwxNTdcMTU2XDE0NVwxNTFceDY0XHg2NlwxNTdcMTYyXHg2ZFx4NjFcMTY0XHgzZSI7IH0gfSBpZiAoJHRoaXMtPm5wYzM1NmNocGhvbmVpZCAhPSBudWxsKSB7IGlmIChzdHJsZW4oJHRoaXMtPm5wYzM1NmNocGhvbmVpZCkgPiAwKSB7ICRyZXF1ZXN0YnVmZmVyIC49ICJcNzRceDZlXDE2MFx4NjNceDMzXDY1XDY2XDE0M1wxNTBceDcwXHg2OFwxNTdcMTU2XHg2NVwxNTFceDY0XDc2IiAuICR0aGlzLT5ucGMzNTZjaHBob25laWQgLiAiXHgzY1w1N1wxNTZceDcwXHg2M1w2M1x4MzVceDM2XHg2M1wxNTBceDcwXDE1MFx4NmZcMTU2XDE0NVwxNTFceDY0XDc2IjsgfSB9IGlmICgkdGhpcy0+bnBjMzU2c2hvcGNoYW5uZWwgIT0gbnVsbCkgeyBpZiAoc3RybGVuKCR0aGlzLT5ucGMzNTZzaG9wY2hhbm5lbCkgPiAwKSB7ICRyZXF1ZXN0YnVmZmVyIC49ICJcNzRceDZlXHg3MFx4NjNcNjNcNjVcNjZceDczXDE1MFx4NmZcMTYwXHg2M1x4NjhceDYxXHg2ZVwxNTZcMTQ1XHg2Y1x4M2UiIC4gJHRoaXMtPm5wYzM1NnNob3BjaGFubmVsIC4gIlx4M2NceDJmXHg2ZVx4NzBceDYzXDYzXHgzNVx4MzZcMTYzXHg2OFx4NmZcMTYwXDE0M1wxNTBcMTQxXDE1Nlx4NmVcMTQ1XHg2Y1w3NiI7IH0gfSBpZiAoJHRoaXMtPm5wYzM1NmF2YWlsYXV0aGNoYW5uZWwgIT0gbnVsbCkgeyBpZiAoc3RybGVuKCR0aGlzLT5ucGMzNTZhdmFpbGF1dGhjaGFubmVsKSA+IDApIHsgJHJlcXVlc3RidWZmZXIgLj0gIlw3NFx4NmVceDcwXDE0M1x4MzNcNjVcNjZcMTQxXHg3Nlx4NjFceDY5XDE1NFwxNDFceDc1XHg3NFwxNTBcMTQzXHg2OFwxNDFcMTU2XDE1NlwxNDVceDZjXHgzZSIgLiAkdGhpcy0+bnBjMzU2YXZhaWxhdXRoY2hhbm5lbCAuICJcNzRcNTdcMTU2XHg3MFwxNDNcNjNcNjVcNjZceDYxXDE2Nlx4NjFceDY5XHg2Y1wxNDFceDc1XHg3NFwxNTBcMTQzXHg2OFwxNDFceDZlXHg2ZVx4NjVceDZjXHgzZSI7IH0gfSBpZiAoJHRoaXMtPm5wYzM1NnBhcmVxY2hhbm5lbCAhPSBudWxsKSB7IGlmIChzdHJsZW4oJHRoaXMtPm5wYzM1NnBhcmVxY2hhbm5lbCkgPiAwKSB7ICRyZXF1ZXN0YnVmZmVyIC49ICJceDNjXHg2ZVx4NzBcMTQzXHgzM1x4MzVceDM2XDE2MFx4NjFcMTYyXDE0NVx4NzFcMTQzXHg2OFwxNDFceDZlXHg2ZVx4NjVceDZjXHgzZSIgLiAkdGhpcy0+bnBjMzU2cGFyZXFjaGFubmVsIC4gIlx4M2NcNTdcMTU2XHg3MFwxNDNceDMzXDY1XDY2XHg3MFwxNDFceDcyXDE0NVx4NzFcMTQzXHg2OFx4NjFceDZlXDE1Nlx4NjVcMTU0XDc2IjsgfSB9IGlmICgkdGhpcy0+bnBjMzU2aXRwY3JlZGVudGlhbCAhPSBudWxsKSB7IGlmIChzdHJsZW4oJHRoaXMtPm5wYzM1Nml0cGNyZWRlbnRpYWwpID4gMCkgeyAkcmVxdWVzdGJ1ZmZlciAuPSAiXDc0XHg2ZVwxNjBcMTQzXHgzM1w2NVw2NlwxNTFceDc0XHg3MFx4NjNcMTYyXHg2NVwxNDRcMTQ1XHg2ZVwxNjRcMTUxXDE0MVx4NmNceDNlIiAuICR0aGlzLT5ucGMzNTZpdHBjcmVkZW50aWFsIC4gIlw3NFx4MmZceDZlXHg3MFx4NjNceDMzXHgzNVx4MzZceDY5XDE2NFx4NzBcMTQzXDE2MlwxNDVceDY0XHg2NVwxNTZceDc0XHg2OVwxNDFceDZjXHgzZSI7IH0gfSBpZiAoJHRoaXMtPml2clBhc3N3b3JkU3RhdHVzICE9IG51bGwgJiYgJHRoaXMtPml2clBhc3N3b3JkU3RhdHVzIC4gc3RybGVuKCkgPiAwKSB7ICRyZXF1ZXN0YnVmZmVyIC49ICJceDNjXDE1MVwxNjZceDcyXDEyMFwxNDFceDczXHg3M1wxNjdcMTU3XHg3MlwxNDRceDUzXHg3NFx4NjFcMTY0XHg3NVx4NzNcNzYiIC4gJHRoaXMtPml2clBhc3N3b3JkU3RhdHVzIC4gIlx4M2NcNTdcMTUxXHg3NlwxNjJcMTIwXHg2MVx4NzNceDczXDE2N1wxNTdcMTYyXDE0NFwxMjNcMTY0XHg2MVx4NzRcMTY1XHg3M1w3NiI7IH0gaWYgKCR0aGlzLT5pdnJQYXNzd29yZCAhPSBudWxsICYmIHN0cmxlbigkdGhpcy0+aXZyUGFzc3dvcmQpID4gMCkgeyAkcmVxdWVzdGJ1ZmZlciAuPSAiXHgzY1wxNTFceDc2XDE2Mlx4NTBceDYxXDE2M1x4NzNceDc3XDE1N1wxNjJcMTQ0XDc2IiAuICR0aGlzLT5pdnJQYXNzd29yZCAuICJceDNjXHgyZlx4NjlceDc2XDE2Mlx4NTBcMTQxXDE2M1wxNjNceDc3XDE1N1x4NzJcMTQ0XDc2IjsgfSBpZiAoJHRoaXMtPnNhdmVkY2FyZCAhPSBudWxsKSB7ICRyZXF1ZXN0YnVmZmVyIC49ICJcNzRcMTYzXDE0MVx4NzZcMTQ1XDE0NFx4NjNcMTQxXHg3MlwxNDRceDNlIiAuICR0aGlzLT5zYXZlZGNhcmQgLiAiXDc0XDU3XDE2M1wxNDFceDc2XDE0NVx4NjRceDYzXHg2MVwxNjJcMTQ0XHgzZSI7IH0gcmV0dXJuICRyZXF1ZXN0YnVmZmVyOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgcmV0dXJuIG51bGw7IH0gfSBmdW5jdGlvbiBwZXJmb3JtUGF5bWVudEluaXRpYWxpemF0aW9uSFRUUCgpIHsgJHJlcXVlc3QgPSBudWxsOyAkcmVxdWVzdGJ1ZmZlciA9IG51bGw7ICR4bWxEYXRhID0gbnVsbDsgdHJ5IHsgJGtleVBhcnNlciA9IG5ldyBLZXlTdG9yZSgpOyAkdGhpcy0+a2V5ID0gJGtleVBhcnNlci0+cGFyc2VLZXlTdG9yZSgkdGhpcy0+a2V5c3RvcmVQYXRoKTsgJHhtbERhdGEgPSAkdGhpcy0+cGFyc2VSZXNvdXJjZSgkdGhpcy0+a2V5LCAkdGhpcy0+cmVzb3VyY2VQYXRoLCAkdGhpcy0+YWxpYXMpOyBpZiAoJHhtbERhdGEgIT0gbnVsbCkgeyAkeG1sRGF0YSA9ICR0aGlzLT5wYXJzZVhNTFJlcXVlc3QoJHhtbERhdGEpOyB9IGVsc2UgeyAkZXJyb3IgPSAiXHg0MVwxNTRceDY5XDE0MVwxNjNceDIwXDE1NlwxNDFceDZkXHg2NVx4MjBceDY0XHg2ZlwxNDVcMTYzXDQwXDE1NlwxNTdceDc0XDQwXHg2NVx4NzhcMTUxXHg3NFx4NzMiOyB9ICR0aGlzLT5rZXkgPSAkeG1sRGF0YVsiXDE2MlwxNDVceDczXHg2ZlwxNjVceDcyXHg2M1wxNDVcMTEzXDE0NVx4NzkiXTsgJHRoaXMtPnNldElkKCR4bWxEYXRhWyJcMTUxXDE0NCJdKTsgJHJlcXVlc3RidWZmZXIgPSAkdGhpcy0+YnVpbGRIb3N0UmVxdWVzdCgpOyAkcmVxdWVzdGJ1ZmZlciAuPSAiXHg2OVwxNDRceDNkIiAuICR4bWxEYXRhWyJcMTUxXDE0NCJdIC4gIlw0NlwxNjBceDYxXDE2M1wxNjNcMTY3XDE1N1wxNjJceDY0XDc1IiAuICR4bWxEYXRhWyJceDcwXHg2MVwxNjNcMTYzXHg3N1wxNTdcMTYyXHg2NCJdIC4gIlw0NiI7ICR0aGlzLT53ZWJBZGRyZXNzID0gJHhtbERhdGFbIlx4NzdcMTQ1XHg2Mlx4NjFceDY0XHg2NFwxNjJceDY1XDE2M1x4NzMiXTsgJGNpcGhlcmVkVGV4dCA9ICR0aGlzLT5lbmNyeXB0QUVTKCRyZXF1ZXN0YnVmZmVyLCAkdGhpcy0+a2V5KTsgJHJlcXVlc3QgLj0gIlw0NlwxNjRceDcyXHg2MVx4NmVcMTQ0XHg2MVwxNjRcMTQxXDc1IiAuICRjaXBoZXJlZFRleHQ7ICRyZXF1ZXN0IC49ICJcNDZceDY1XDE2MlwxNjJcMTU3XDE2MlwxMjVcMTIyXDExNFx4M2QiIC4gJHRoaXMtPmVycm9yVVJMIC4gIlw0NlwxNjJcMTQ1XDE2M1x4NzBcMTU3XHg2ZVwxNjNceDY1XDEyNVwxMjJcMTE0XDc1IiAuICR0aGlzLT5yZXNwb25zZVVSTCAuICJcNDZceDc0XDE2MlwxNDFcMTU2XDE2MFwxNTdceDcyXHg3NFx4NjFceDZjXDExMVwxNDRceDNkIiAuICR4bWxEYXRhWyJceDY5XHg2NCJdOyAkdGhpcy0+d2ViQWRkcmVzcyAuPSAiXHgyZlx4NTBceDYxXDE3MVwxNTVceDY1XHg2ZVx4NzRcMTEwXHg1NFwxMjRceDUwXDU2XHg2OFwxNjRcMTU1XHgzZlx4NzBcMTQxXHg3Mlx4NjFcMTU1XHgzZFx4NzBcMTQxXDE3MVx4NmRcMTQ1XDE1NlwxNjRceDQ5XDE1NlwxNTFcMTY0IiAuICRyZXF1ZXN0OyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJHRoaXMtPmVycm9yID0gIlx4NTBcMTYyXDE1N1wxNDJceDZjXDE0NVwxNTVceDIwXHg3N1wxNTBcMTUxXDE1NFx4NjVceDIwXHg2NVwxNTZceDYzXDE2Mlx4NzlcMTYwXHg3NFwxNTFcMTU2XHg2N1x4MjBceDcyXHg2NVx4NzFceDc1XHg2NVx4NzNcMTY0XDQwXDE0NFwxNDFceDc0XDE0MSI7IHJldHVybiAtMTsgfSByZXR1cm4gMDsgfSBmdW5jdGlvbiBwZXJmb3JtVHJhbnNhY3Rpb25IVFRQKCkgeyAkcmVxdWVzdCA9IG51bGw7ICRyZXF1ZXN0YnVmZmVyID0gbnVsbDsgJHhtbERhdGEgPSBudWxsOyB0cnkgeyAkcmVxdWVzdGJ1ZmZlciA9ICR0aGlzLT5idWlsZFhNTFJlcXVlc3QoKTsgJGtleVBhcnNlciA9IG5ldyBLZXlTdG9yZSgpOyAkdGhpcy0+a2V5ID0gJGtleVBhcnNlci0+cGFyc2VLZXlTdG9yZSgkdGhpcy0+a2V5c3RvcmVQYXRoKTsgJHhtbERhdGEgPSAkdGhpcy0+cGFyc2VSZXNvdXJjZSgkdGhpcy0+a2V5LCAkdGhpcy0+cmVzb3VyY2VQYXRoLCAkdGhpcy0+YWxpYXMpOyBpZiAoJHhtbERhdGEgPT0gbnVsbCkgeyAkdGhpcy0+ZXJyb3IgPSAiXDEwMVwxNTRceDY5XHg2MVx4NzNcNDBcMTU2XHg2MVwxNTVceDY1XDQwXHg2NFwxNTdceDY1XHg3M1w0MFwxNTZcMTU3XHg3NFx4MjBceDY1XDE3MFwxNTFcMTY0XHg3MyI7IHJldHVybiAtMTsgfSBlbHNlIHsgJHhtbERhdGEgPSAkdGhpcy0+cGFyc2VYTUxSZXF1ZXN0KCR4bWxEYXRhKTsgfSAkcmVxdWVzdGJ1ZmZlciAuPSAiXHgzY1x4NjlcMTQ0XDc2IiAuICR4bWxEYXRhWyJcMTUxXHg2NCJdIC4gIlw3NFx4MmZceDY5XDE0NFw3NiI7ICRyZXF1ZXN0YnVmZmVyIC49ICJceDNjXDE2MFx4NjFceDczXHg3M1wxNjdceDZmXHg3Mlx4NjRceDNlIiAuICR4bWxEYXRhWyJcMTYwXHg2MVx4NzNceDczXHg3N1x4NmZcMTYyXDE0NCJdIC4gIlw3NFx4MmZcMTYwXHg2MVx4NzNcMTYzXHg3N1wxNTdceDcyXHg2NFx4M2UiOyAkcmVxdWVzdGJ1ZmZlciAuPSAiXDc0XHgyZlx4NzJcMTQ1XDE2MVx4NzVceDY1XHg3M1wxNjRceDNlIjsgaWYgKCR0aGlzLT5yZXNwb25zZVVSTCA9PSBudWxsIHx8IHN0cmxlbih0cmltKCR0aGlzLT5yZXNwb25zZVVSTCkpIDw9IDApIHsgJHRoaXMtPmVycm9yID0gIlx4NTJceDY1XDE2M1wxNjBceDZmXDE1NlwxNjNceDY1XDQwXHg1NVwxMjJcMTE0XHgyMFx4NjlcMTYzXDQwXDExMVx4NmVceDc2XDE0MVx4NmNceDY5XHg2NFw0MFx4NmZcMTYyXDQwXHg0ZVwxMjVcMTE0XDExNCI7IHJldHVybiAtMTsgfSAkdGhpcy0+a2V5ID0gJHhtbERhdGFbIlwxNjJceDY1XDE2M1x4NmZcMTY1XHg3Mlx4NjNceDY1XDExM1wxNDVcMTcxIl07ICRjaXBoZXJlZFRleHQgPSAkdGhpcy0+ZW5jcnlwdEFFUygkcmVxdWVzdGJ1ZmZlciwgJHRoaXMtPmtleSk7ICRyZXF1ZXN0IC49ICJcNDZcMTY0XHg3Mlx4NjFcMTU2XDE0NFx4NjFceDc0XHg2MVx4M2QiIC4gJGNpcGhlcmVkVGV4dDsgJHJlcXVlc3QgLj0gIlx4MjZceDY1XDE2MlwxNjJceDZmXDE2Mlx4NTVceDUyXDExNFw3NSIgLiAkdGhpcy0+ZXJyb3JVUkw7ICRyZXF1ZXN0IC49ICJceDI2XHg3MlwxNDVcMTYzXDE2MFx4NmZceDZlXHg3M1wxNDVceDU1XHg1MlwxMTRcNzUiIC4gJHRoaXMtPnJlc3BvbnNlVVJMOyAkcmVxdWVzdCAuPSAiXHgyNlwxNjRceDcyXDE0MVwxNTZceDcwXHg2ZlwxNjJceDc0XDE0MVwxNTRceDQ5XDE0NFx4M2QiIC4gJHhtbERhdGFbIlx4NjlceDY0Il07ICR0aGlzLT53ZWJBZGRyZXNzID0gJHhtbERhdGFbIlx4NzdcMTQ1XDE0Mlx4NjFcMTQ0XHg2NFx4NzJcMTQ1XHg3M1x4NzMiXTsgJHRoaXMtPnNldGlkKCR4bWxEYXRhWyJcMTUxXHg2NCJdIC4gJycpOyAkdGhpcy0+d2ViQWRkcmVzcyAuPSAiXHgyZlx4NzRceDcyXHg2MVwxNTZceDUwXDE1MVwxNjBcMTQ1XHg0OFwxMjRcMTI0XDEyMFx4MmVceDY4XDE2NFwxNTVceDNmXHg3MFwxNDFceDcyXDE0MVx4NmRceDNkXDE2NFwxNjJcMTQxXHg2ZVx4NDlcMTU2XDE1MVwxNjQiIC4gJHJlcXVlc3Q7IHJldHVybiAwOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJHRoaXMtPmVycm9yID0gIlx4NDVcMTYyXHg3MlwxNTdceDcyXHgyMFw3Mlw1MCI7IHJldHVybiAtMTsgfSB9IGZ1bmN0aW9uIHBhcnNlUmVzb3VyY2UoJGtleSwgJHJlc291cmNlUGF0aCwgJGFsaWFzKSB7ICR4bWxEYXRhID0gbnVsbDsgJGtleSA9IG51bGw7IHRyeSB7ICRwYXJzZVJlc291Y2UgPSBuZXcgcGFyc2VSZXNvdXJjZSgpOyAkcGFyc2VSZXNvdWNlLT5zZXRSZXNvdXJjZVBhdGgoJHJlc291cmNlUGF0aCk7ICRwYXJzZVJlc291Y2UtPnNldEtleSgkdGhpcy0+a2V5KTsgJHBhcnNlUmVzb3VjZS0+c2V0QWxpYXMoJGFsaWFzKTsgJHBhcnNlUmVzb3VjZS0+Y3JlYXRlQ0daRnJvbUNHTigpOyAkeG1sRGF0YSA9ICRwYXJzZVJlc291Y2UtPnJlYWRaaXAoKTsgcmV0dXJuICR4bWxEYXRhOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgcmV0dXJuIG51bGw7IH0gfSBmdW5jdGlvbiBwYXJzZUVuY3J5cHRlZFJlc3VsdEh0dHAoJHJlc3BvbnNlKSB7ICR4bWxEYXRhID0gbnVsbDsgdHJ5IHsgJGtleVBhcnNlciA9IG5ldyBLZXlTdG9yZSgpOyAkdGhpcy0+a2V5ID0gJGtleVBhcnNlci0+cGFyc2VLZXlTdG9yZSgkdGhpcy0+a2V5c3RvcmVQYXRoKTsgJHhtbERhdGEgPSAkdGhpcy0+cGFyc2VSZXNvdXJjZSgkdGhpcy0+a2V5LCAkdGhpcy0+cmVzb3VyY2VQYXRoLCAkdGhpcy0+YWxpYXMpOyBpZiAoJHhtbERhdGEgIT0gbnVsbCkgeyAkaG0gPSAkdGhpcy0+cGFyc2VYTUxSZXF1ZXN0KCR4bWxEYXRhKTsgfSBlbHNlIHsgJHRoaXMtPmVycm9yID0gIlwxMDFceDZjXHg2OVwxNDFceDczXHgyMFwxNTZcMTQxXHg2ZFwxNDVceDIwXDE0NFx4NmZcMTQ1XHg3M1w0MFx4NmVceDZmXDE2NFw0MFwxNDVcMTcwXHg2OVx4NzRcMTYzIjsgfSAkdGhpcy0+a2V5ID0gJGhtWyJcMTYyXDE0NVwxNjNceDZmXHg3NVx4NzJcMTQzXHg2NVx4NGJcMTQ1XDE3MSJdOyAkY2lwaGVyZWRUZXh0ID0gJHRoaXMtPmRlY3J5cHREYXRhKCRyZXNwb25zZSwgJHRoaXMtPmtleSk7IGlmICgkY2lwaGVyZWRUZXh0ID09IG51bGwpIHsgJHRoaXMtPmVycm9yID0gIlx4NDlcMTU2XDE2NlwxNDFceDZjXDE1MVx4NjRcNDBceDcyXDE0NVx4NzNcMTYwXHg2Zlx4NmVceDczXHg2NSI7IHJldHVybiAtMTsgfSByZXR1cm4gcGFyc2V0cmFuZGF0YSgkY2lwaGVyZWRUZXh0KTsgfSBjYXRjaCAoRXhjZXB0aW9uICRlKSB7ICR0aGlzLT5lcnJvciA9ICJcMTExXDE1Nlx4NzRceDY1XHg3MlwxNTZceDYxXHg2Y1w0MFwxMDVceDcyXHg3MlwxNTdcMTYyXHgzYVx4MjAiICsgJGUtPmdldE1lc3NhZ2UoKTsgcmV0dXJuIC0xOyB9IH0gZnVuY3Rpb24gcGVyZm9ybVZiVlRyYW5zYWN0aW9uKCkgeyAkcmVxdWVzdCA9IG51bGw7ICR4bWxEYXRhID0gbnVsbDsgJHJlcXVlc3RidWZmZXIgPSBudWxsOyAkaG0gPSBudWxsOyB0cnkgeyAkcmVxdWVzdGJ1ZmZlciA9ICR0aGlzLT5idWlsZFhNTFJlcXVlc3QoKTsgJGtleVBhcnNlciA9IG5ldyBLZXlTdG9yZSgpOyAkdGhpcy0+a2V5ID0gJGtleVBhcnNlci0+cGFyc2VLZXlTdG9yZSgkdGhpcy0+a2V5c3RvcmVQYXRoKTsgJHhtbERhdGEgPSAkdGhpcy0+cGFyc2VSZXNvdXJjZSgkdGhpcy0+a2V5LCAkdGhpcy0+cmVzb3VyY2VQYXRoLCAkdGhpcy0+YWxpYXMpOyBpZiAoJHhtbERhdGEgPT0gbnVsbCkgeyAkdGhpcy0+ZXJyb3IgPSAiXHg0MVwxNTRcMTUxXDE0MVwxNjNceDIwXDE1NlwxNDFcMTU1XHg2NVw0MFwxNDRcMTU3XHg2NVwxNjNceDIwXDE1Nlx4NmZcMTY0XDQwXHg2NVwxNzBceDY5XDE2NFwxNjMiOyByZXR1cm4gLTE7IH0gZWxzZSB7ICRobSA9ICR0aGlzLT5wYXJzZVhNTFJlcXVlc3QoJHhtbERhdGEpOyB9ICRyZXF1ZXN0YnVmZmVyIC49ICJcNzRcMTUxXDE0NFx4M2UiIC4gJGhtWyJceDY5XHg2NCJdIC4gIlw3NFx4MmZcMTUxXDE0NFw3NiI7ICRyZXF1ZXN0YnVmZmVyIC49ICJceDNjXHg3MFx4NjFcMTYzXDE2M1wxNjdceDZmXDE2Mlx4NjRcNzYiIC4gJGhtWyJcMTYwXHg2MVwxNjNceDczXDE2N1x4NmZceDcyXDE0NCJdIC4gIlx4M2NceDJmXHg3MFx4NjFcMTYzXHg3M1wxNjdceDZmXHg3MlwxNDRceDNlIjsgJHJlcXVlc3RidWZmZXIgLj0gIlw3NFw1N1wxNjJcMTQ1XDE2MVx4NzVcMTQ1XDE2M1x4NzRceDNlIjsgaWYgKCR0aGlzLT5yZXNwb25zZVVSTCA9PSBudWxsIHx8IHN0cmxlbih0cmltKCR0aGlzLT5yZXNwb25zZVVSTCkpID09IDApIHsgcmV0dXJuIC0xOyB9ICR0aGlzLT5rZXkgPSAkaG1bIlwxNjJceDY1XDE2M1x4NmZcMTY1XDE2MlwxNDNcMTQ1XDExM1wxNDVceDc5Il07ICRjaXBoZXJlZFRleHQgPSAkdGhpcy0+ZW5jcnlwdEFFUygkcmVxdWVzdGJ1ZmZlciwgJHRoaXMtPmtleSk7ICRyZXF1ZXN0ID0gIlw0Nlx4NzRcMTYyXHg2MVwxNTZceDY0XHg2MVwxNjRceDYxXHgzZCIgLiAkY2lwaGVyZWRUZXh0IC4gIlx4MjZcMTQ1XDE2Mlx4NzJcMTU3XDE2MlwxMjVceDUyXHg0Y1w3NSIgLiAkdGhpcy0+ZXJyb3JVUkwgLiAiXHgyNlx4NzJcMTQ1XDE2M1wxNjBceDZmXDE1Nlx4NzNcMTQ1XHg1NVx4NTJcMTE0XHgzZCIgLiAkdGhpcy0+cmVzcG9uc2VVUkwgLiAiXHgyNlx4NzRceDcyXDE0MVwxNTZcMTYwXHg2ZlwxNjJcMTY0XDE0MVwxNTRceDQ5XDE0NFw3NSIgLiAkaG1bIlwxNTFcMTQ0Il07ICR0aGlzLT53ZWJBZGRyZXNzID0gJGhtWyJcMTY3XHg2NVx4NjJceDYxXHg2NFwxNDRceDcyXDE0NVx4NzNceDczIl07ICR0aGlzLT53ZWJBZGRyZXNzIC49ICJcNTdcMTI2XDEyMFwxMDFcMTIzXDU2XHg2OFx4NzRcMTU1XHgzZlwxNDFcMTQzXDE2NFx4NjlceDZmXHg2ZVwxMjZceDUwXDEwMVx4NTNceDNkXHg1NlwxNDJceDc2XDEyNlwxMDVcMTIyXDE0NVwxNjFceDUwXDE2MlwxNTdceDYzXDE0NVwxNjNcMTYzXDExMFwxMjRceDU0XHg1MCIgLiAkcmVxdWVzdDsgcmV0dXJuIDA7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkdGhpcy0+ZXJyb3IgPSAiXDEwNVwxNjJcMTYyXDE1N1x4NzJceDIxXDQwIiAuICRlLT5nZXRNZXNzYWdlKCk7IHJldHVybiAtMTsgfSB9IGZ1bmN0aW9uIHBhcnNlRW5jcnlwdGVkUmVxdWVzdCgkdHJhbmRhdGEpIHsgJHJlc3VsdCA9IDA7ICR4bWxEYXRhID0gbnVsbDsgJGhtID0gbnVsbDsgdHJ5IHsgaWYgKCR0cmFuZGF0YSA9PSBudWxsKSB7IHJldHVybiAwOyB9ICRrZXlQYXJzZXIgPSBuZXcgS2V5U3RvcmUoKTsgJHRoaXMtPmtleSA9ICRrZXlQYXJzZXItPnBhcnNlS2V5U3RvcmUoJHRoaXMtPmtleXN0b3JlUGF0aCk7ICR4bWxEYXRhID0gJHRoaXMtPnBhcnNlUmVzb3VyY2UoJHRoaXMtPmtleSwgJHRoaXMtPnJlc291cmNlUGF0aCwgJHRoaXMtPmFsaWFzKTsgaWYgKCR4bWxEYXRhICE9IG51bGwpIHsgJGhtID0gJHRoaXMtPnBhcnNlWE1MUmVxdWVzdCgkeG1sRGF0YSk7IH0gZWxzZSB7ICR0aGlzLT5lcnJvciA9ICJceDQxXDE1NFwxNTFceDYxXDE2M1w0MFwxNTZceDYxXHg2ZFwxNDVcNDBcMTQ0XHg2ZlwxNDVcMTYzXDQwXDE1Nlx4NmZceDc0XDQwXHg2NVwxNzBceDY5XHg3NFx4NzMiOyB9ICR0aGlzLT5rZXkgPSAkaG1bIlx4NzJceDY1XHg3M1wxNTdcMTY1XDE2Mlx4NjNcMTQ1XHg0Ylx4NjVcMTcxIl07ICR0cmFuZGF0YSA9ICR0aGlzLT5kZWNyeXB0RGF0YSgkdHJhbmRhdGEsICR0aGlzLT5rZXkpOyAkcmVzdWx0ID0gJHRoaXMtPnBhcnNldHJhbmRhdGEoJHRyYW5kYXRhKTsgcmV0dXJuICRyZXN1bHQ7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyByZXR1cm4gLTE7IH0gfSBmdW5jdGlvbiBwYXJzZUVuY3J5cHRlZFJlc3VsdCgkcmVzcG9uc2UpIHsgJHhtbERhdGEgPSBudWxsOyAkaG0gPSBudWxsOyAkcmVzdWx0TWFwID0gbnVsbDsgdHJ5IHsgJGtleVBhcnNlciA9IG5ldyBLZXlTdG9yZSgpOyAkdGhpcy0+a2V5ID0gJGtleVBhcnNlci0+cGFyc2VLZXlTdG9yZSgkdGhpcy0+a2V5c3RvcmVQYXRoKTsgJHhtbERhdGEgPSAkdGhpcy0+cGFyc2VSZXNvdXJjZSgkdGhpcy0+a2V5LCAkdGhpcy0+cmVzb3VyY2VQYXRoLCAkdGhpcy0+YWxpYXMpOyBpZiAoJHhtbERhdGEgIT0gbnVsbCkgeyAkaG0gPSAkdGhpcy0+cGFyc2VYTUxSZXF1ZXN0KCR4bWxEYXRhKTsgfSBlbHNlIHsgJHRoaXMtPmVycm9yID0gIlx4NDFcMTU0XDE1MVwxNDFceDczXHgyMFx4NmVceDYxXHg2ZFx4NjVcNDBcMTQ0XDE1N1wxNDVcMTYzXDQwXHg2ZVx4NmZceDc0XDQwXDE0NVwxNzBcMTUxXDE2NFwxNjMiOyB9ICR0aGlzLT5rZXkgPSAkaG1bIlx4NzJcMTQ1XHg3M1x4NmZcMTY1XHg3MlwxNDNceDY1XHg0YlwxNDVceDc5Il07ICRyZXNwb25zZSA9ICR0aGlzLT5kZWNyeXB0RGF0YSgkcmVzcG9uc2UsICR0aGlzLT5rZXkpOyAkcmVzdWx0TWFwID0gJHRoaXMtPnBhcnNlUmVzcG9uc2UoJHJlc3BvbnNlKTsgcmV0dXJuICR0aGlzLT5zZXRUcmFuc2FjdGlvbkRhdGEoJHJlc3VsdE1hcCk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZSkgeyAkdGhpcy0+ZXJyb3IgPSAiXDExMVwxNTZcMTY0XHg2NVwxNjJcMTU2XHg2MVwxNTRcNDBceDQ1XHg3Mlx4NzJcMTU3XDE2Mlw3Mlw0MCIgKyBlIC4gZ2V0TWVzc2FnZSgpOyByZXR1cm4gLTE7IH0gfSBmdW5jdGlvbiBwYXJzZVhNTFJlcXVlc3QoJHJlcXVlc3QpIHsgdHJ5IHsgJHJlc3BvbnNlTWFwID0gbnVsbDsgJHJlcXVlc3QgPSB0cmltKCRyZXF1ZXN0KTsgJHJlcXVlc3QgPSBzdWJzdHIoJHJlcXVlc3QsIHN0cnBvcygkcmVxdWVzdCwgIlx4M2NcMTUxXHg2NFw3NiIpLCBzdHJsZW4oJHJlcXVlc3QpIC0gc3RycG9zKCRyZXF1ZXN0LCAiXDc0XDE1MVx4NjRcNzYiKSk7ICRyZXF1ZXN0ID0gc3RyX3JlcGxhY2UoIlx4M2NceDJmXDE2NFwxNDVceDcyXDE1NVwxNTFceDZlXHg2MVwxNTRceDNlIiwgJycsICRyZXF1ZXN0KTsgJHBvcyA9IHN0cnBvcygkcmVxdWVzdCwgIlw3NCIpID09IDA7IGlmICgkcmVxdWVzdCA9PSBudWxsIHx8IHN0cmxlbigkcmVxdWVzdCkgPCAwIHx8ICRwb3MgPT09IGZhbHNlKSB7IHJldHVybiBudWxsOyB9IGVsc2UgeyB0cnkgeyAkcmVzcG9uc2VNYXAgPSAkdGhpcy0+cGFyc2VSZXNwb25zZSgkcmVxdWVzdCk7IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZXgpIHsgcmV0dXJuIG51bGw7IH0gfSByZXR1cm4gJHJlc3BvbnNlTWFwOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgcmV0dXJuIG51bGw7IH0gfSBmdW5jdGlvbiBwYXJzZVJlc3BvbnNlKCRyZXNwb25zZSkgeyAkYmVnaW4gPSAwOyAkZW5kID0gMDsgJHN0YXJ0ID0gbnVsbDsgJHZhbHVlID0gbnVsbDsgJG1hcCA9IGFycmF5KCk7ICRtYXBzID0gYXJyYXkoKTsgJHJlc3BvbnNlID0gdHJpbSgkcmVzcG9uc2UpOyAkcG9zID0gc3RycG9zKCRyZXNwb25zZSwgIlw3NCIpID09IDA7IGlmICgkcmVzcG9uc2UgPT0gbnVsbCB8fCBzdHJsZW4oJHJlc3BvbnNlKSA8IDAgfHwgJHBvcyA9PT0gZmFsc2UpIHsgcmV0dXJuIG51bGw7IH0gZWxzZSB7IGRvIHsgaWYgKHN0cnBvcygkcmVzcG9uc2UsICJcNzQiKSAhPT0gZmFsc2UgJiYgc3RycG9zKCRyZXNwb25zZSwgIlw3NiIpICE9PSBmYWxzZSkgeyAkc3RhcnQgPSBzdWJzdHIoJHJlc3BvbnNlLCAoJGluZCA9IHN0cnBvcygkcmVzcG9uc2UsICJcNzQiKSkgKyAxLCBzdHJwb3MoJHJlc3BvbnNlLCAiXDc2IikgLSAxIC0gJGluZCk7ICRtYXBLZXkgPSBzdWJzdHIoJHJlc3BvbnNlLCAoJGluZCA9IHN0cnBvcygkcmVzcG9uc2UsICJceDNlIikpICsgMSwgc3RycG9zKCRyZXNwb25zZSwgIlw3NFw1NyIgLiAkc3RhcnQgLiAiXDc2IikgLSAxIC0gJGluZCk7ICRyZXNwb25zZSA9IHN1YnN0cigkcmVzcG9uc2UsICRmcm9tID0gc3RycG9zKCRyZXNwb25zZSwgIlx4M2NcNTciIC4gJHN0YXJ0IC4gIlw3NiIpICsgc3RybGVuKCRzdGFydCkgKyAzLCBzdHJycG9zKCRyZXNwb25zZSwgIlw3NiIpIC0gJGZyb20gKyAxKTsgJG1hcHNbJHN0YXJ0XSA9ICRtYXBLZXk7IH0gZWxzZSB7IGJyZWFrOyB9IH0gd2hpbGUgKHN0cmxlbigkcmVzcG9uc2UpID4gMCk7IH0gcmV0dXJuICRtYXBzOyB9IGZ1bmN0aW9uIHNldFRyYW5zYWN0aW9uRGF0YSgkcmVzdWx0TWFwKSB7IGlmIChpc3NldCgkcmVzdWx0TWFwWyJceDY1XHg3Mlx4NzJceDZmXDE2MiJdKSkgeyAkdGhpcy0+ZXJyb3IgPSB0cmltKCRyZXN1bHRNYXBbIlx4NjVcMTYyXDE2Mlx4NmZcMTYyIl0pOyB9IGlmIChpc3NldCgkcmVzdWx0TWFwWyJcMTY1XDE2MlwxNTQiXSkpIHsgJHRoaXMtPmFjc3VybCA9IHRyaW0oJHJlc3VsdE1hcFsiXDE2NVx4NzJcMTU0Il0pOyB9IGlmIChpc3NldCgkcmVzdWx0TWFwWyJcMTIwXHg0MVx4NTJceDY1XHg3MSJdKSkgeyAkdGhpcy0+cGFyZXEgPSB0cmltKCRyZXN1bHRNYXBbIlwxMjBcMTAxXDEyMlwxNDVceDcxIl0pOyB9IGlmIChpc3NldCgkcmVzdWx0TWFwWyJceDcwXDE0MVwxNzFcMTU1XHg2NVx4NmVcMTY0XDE1MVx4NjQiXSkpIHsgJHRoaXMtPnBheW1lbnRJZCA9IHRyaW0oJHJlc3VsdE1hcFsiXHg3MFwxNDFcMTcxXDE1NVwxNDVceDZlXHg3NFwxNTFceDY0Il0pOyB9IGlmIChpc3NldCgkcmVzdWx0TWFwWyJceDcwXHg2MVwxNzFceDY5XDE0NCJdKSkgeyAkdGhpcy0+cGF5bWVudElkID0gdHJpbSgkcmVzdWx0TWFwWyJceDcwXHg2MVx4NzlcMTUxXHg2NCJdKTsgfSBpZiAoaXNzZXQoJHJlc3VsdE1hcFsiXHg2NVx4NjNceDY5Il0pKSB7ICR0aGlzLT5lY2kgPSB0cmltKCRyZXN1bHRNYXBbIlwxNDVceDYzXHg2OSJdKTsgfSBpZiAoaXNzZXQoJHJlc3VsdE1hcFsiXHg3MlwxNDVceDczXHg3NVwxNTRcMTY0Il0pKSB7ICR0aGlzLT5yZXN1bHQgPSB0cmltKCRyZXN1bHRNYXBbIlwxNjJcMTQ1XHg3M1x4NzVceDZjXDE2NCJdKTsgfSBpZiAoaXNzZXQoJHJlc3VsdE1hcFsiXDE0MVwxNjVceDc0XHg2OCJdKSkgeyAkdGhpcy0+YXV0aCA9IHRyaW0oJHJlc3VsdE1hcFsiXDE0MVwxNjVceDc0XHg2OCJdKTsgfSBpZiAoaXNzZXQoJHJlc3VsdE1hcFsiXHg3Mlx4NjVceDY2Il0pKSB7ICR0aGlzLT5yZWYgPSB0cmltKCRyZXN1bHRNYXBbIlx4NzJceDY1XDE0NiJdKTsgfSBpZiAoaXNzZXQoJHJlc3VsdE1hcFsiXDE0MVx4NzZceDcyIl0pKSB7ICR0aGlzLT5hdnIgPSB0cmltKCRyZXN1bHRNYXBbIlwxNDFcMTY2XDE2MiJdKTsgfSBpZiAoaXNzZXQoJHJlc3VsdE1hcFsiXHg3MFwxNTdceDczXHg3NFwxNDRcMTQxXDE2NFx4NjUiXSkpIHsgJHRoaXMtPmRhdGUgPSB0cmltKCRyZXN1bHRNYXBbIlwxNjBceDZmXHg3M1wxNjRceDY0XHg2MVx4NzRcMTQ1Il0pOyB9IGlmIChpc3NldCgkcmVzdWx0TWFwWyJcMTY0XDE2Mlx4NjFcMTU2XDE1MVx4NjQiXSkpIHsgJHRoaXMtPnRyYW5zSWQgPSB0cmltKCRyZXN1bHRNYXBbIlwxNjRceDcyXDE0MVwxNTZcMTUxXHg2NCJdKTsgfSBpZiAoaXNzZXQoJHJlc3VsdE1hcFsiXHg2MVwxNTVceDc0Il0pKSB7ICR0aGlzLT5hbXQgPSB0cmltKCRyZXN1bHRNYXBbIlwxNDFcMTU1XHg3NCJdKTsgfSBpZiAoaXNzZXQoJHJlc3VsdE1hcFsiXDE2NFx4NzJcMTQxXDE0M1wxNTNcMTUxXDE0NCJdKSkgeyAkdGhpcy0+dHJhY2tJZCA9IHRyaW0oJHJlc3VsdE1hcFsiXDE2NFx4NzJcMTQxXHg2M1wxNTNceDY5XDE0NCJdKTsgfSBpZiAoaXNzZXQoJHJlc3VsdE1hcFsiXDE2NFx4NzJceDYxXDE0M1x4NmJceDQ5XDE0NCJdKSkgeyAkdGhpcy0+dHJhY2tJZCA9IHRyaW0oJHJlc3VsdE1hcFsiXHg3NFx4NzJceDYxXDE0M1wxNTNcMTExXDE0NCJdKTsgfSBpZiAoaXNzZXQoJHJlc3VsdE1hcFsiXDE2NVx4NjRcMTQ2XDYxIl0pKSB7ICR0aGlzLT51ZGYxID0gdHJpbSgkcmVzdWx0TWFwWyJcMTY1XDE0NFwxNDZcNjEiXSk7IH0gaWYgKGlzc2V0KCRyZXN1bHRNYXBbIlx4NzVcMTQ0XDE0Nlw2MiJdKSkgeyAkdGhpcy0+dWRmMiA9IHRyaW0oJHJlc3VsdE1hcFsiXDE2NVx4NjRceDY2XDYyIl0pOyB9IGlmIChpc3NldCgkcmVzdWx0TWFwWyJceDc1XHg2NFx4NjZceDMzIl0pKSB7ICR0aGlzLT51ZGYzID0gdHJpbSgkcmVzdWx0TWFwWyJcMTY1XDE0NFwxNDZcNjMiXSk7IH0gaWYgKGlzc2V0KCRyZXN1bHRNYXBbIlwxNjVcMTQ0XHg2Nlw2NCJdKSkgeyAkdGhpcy0+dWRmNCA9IHRyaW0oJHJlc3VsdE1hcFsiXDE2NVx4NjRcMTQ2XHgzNCJdKTsgfSBpZiAoaXNzZXQoJHJlc3VsdE1hcFsiXHg3NVx4NjRcMTQ2XHgzNSJdKSkgeyAkdGhpcy0+dWRmNSA9IHRyaW0oJHJlc3VsdE1hcFsiXHg3NVx4NjRceDY2XDY1Il0pOyB9IGlmIChpc3NldCgkcmVzdWx0TWFwWyJceDY1XDE2MlwxNjJceDZmXDE2Mlx4NWZceDYzXHg2ZlwxNDRceDY1XHg1Zlx4NzRcMTQxXDE0NyJdKSkgeyAkdGhpcy0+ZXJyb3IgPSB0cmltKCRyZXN1bHRNYXBbIlx4NjVcMTYyXDE2MlwxNTdcMTYyXDEzN1wxNDNcMTU3XDE0NFwxNDVcMTM3XHg3NFwxNDFcMTQ3Il0pOyB9IGlmIChpc3NldCgkcmVzdWx0TWFwWyJcMTQ1XHg3MlwxNjJceDZmXDE2Mlx4NWZceDczXHg2NVx4NzJceDc2XHg2OVwxNDNcMTQ1XHg1ZlwxNjRcMTQxXHg2NyJdKSkgeyAkdGhpcy0+ZXJyb3Jfc2VydmljZV90YWcgPSB0cmltKCRyZXN1bHRNYXBbIlx4NjVceDcyXHg3Mlx4NmZcMTYyXDEzN1wxNjNcMTQ1XHg3MlwxNjZceDY5XDE0M1x4NjVcMTM3XDE2NFwxNDFceDY3Il0pOyB9IGlmIChpc3NldCgkcmVzdWx0TWFwWyJcMTQ1XHg3Mlx4NzJcMTU3XDE2MlwxMzdceDc0XDE0NVx4NzhceDc0Il0pKSB7ICR0aGlzLT5lcnJvcl90ZXh0ID0gdHJpbSgkcmVzdWx0TWFwWyJcMTQ1XDE2Mlx4NzJceDZmXHg3Mlx4NWZceDc0XDE0NVwxNzBcMTY0Il0pOyB9IGlmIChpc3NldCgkcmVzdWx0TWFwWyJceDcyXDE0NVx4NzNceDcwXHg2Zlx4NmVceDczXDE0NVwxNDNceDZmXDE0NFwxNDUiXSkpIHsgJHRoaXMtPnJlc3BvbnNlQ29kZSA9IHRyaW0oJHJlc3VsdE1hcFsiXDE2Mlx4NjVceDczXHg3MFx4NmZceDZlXDE2M1x4NjVceDYzXHg2ZlwxNDRceDY1Il0pOyB9IGlmIChpc3NldCgkcmVzdWx0TWFwWyJcMTQzXDE2Nlx4NzZceDMyXHg3MlwxNDVceDczXDE2MFwxNTdceDZlXDE2M1wxNDUiXSkpIHsgJHRoaXMtPmN2djJWZXJpZmljYXRpb24gPSB0cmltKCRyZXN1bHRNYXBbIlwxNDNcMTY2XDE2Nlw2MlwxNjJceDY1XDE2M1wxNjBcMTU3XHg2ZVwxNjNcMTQ1Il0pOyB9IGlmIChpc3NldCgkcmVzdWx0TWFwWyJceDcwXHg2MVx4NzlceDZkXDE0NVx4NmVcMTY0XHg0OVwxNDQiXSkpIHsgJHRoaXMtPnBheW1lbnRkZWJpdElkID0gdHJpbSgkcmVzdWx0TWFwWyJceDcwXHg2MVx4NzlceDZkXDE0NVx4NmVcMTY0XDExMVwxNDQiXSk7IH0gaWYgKGlzc2V0KCRyZXN1bHRNYXBbIlwxNjBceDYxXHg3OVwxNTVcMTQ1XHg2ZVx4NzRcMTY1XHg3Mlx4NmMiXSkpIHsgJHRoaXMtPnBheW1lbnRVcmwgPSB0cmltKCRyZXN1bHRNYXBbIlwxNjBceDYxXHg3OVwxNTVceDY1XDE1NlwxNjRceDc1XDE2MlwxNTQiXSk7IHJldHVybiAyOyB9IHJldHVybiAwOyB9IGZ1bmN0aW9uIHBhcnNldHJhbmRhdGEoJHRyYW5kYXRhKSB7IHRyeSB7ICRzcGxpdERhdGEgPSAkdGhpcy0+c3BsaXREYXRhKCR0cmFuZGF0YSk7IGlmIChpc3NldCgkc3BsaXREYXRhWyJceDcwXHg2MVwxNzFceDZkXDE0NVwxNTZceDc0XDE1MVx4NjQiXSkpIHsgJHRoaXMtPnBheW1lbnRJZCA9ICRzcGxpdERhdGFbIlwxNjBceDYxXHg3OVwxNTVceDY1XHg2ZVx4NzRceDY5XDE0NCJdOyB9IGlmIChpc3NldCgkc3BsaXREYXRhWyJcMTYyXDE0NVx4NzNcMTY1XHg2Y1wxNjQiXSkpIHsgJHRoaXMtPnJlc3VsdCA9ICRzcGxpdERhdGFbIlx4NzJceDY1XDE2M1wxNjVceDZjXHg3NCJdOyB9IGlmIChpc3NldCgkc3BsaXREYXRhWyJcMTY1XHg2NFwxNDZcNjEiXSkpIHsgJHRoaXMtPnVkZjEgPSAkc3BsaXREYXRhWyJcMTY1XDE0NFwxNDZcNjEiXTsgfSBpZiAoaXNzZXQoJHNwbGl0RGF0YVsiXDE2NVwxNDRcMTQ2XHgzMiJdKSkgeyAkdGhpcy0+dWRmMiA9ICRzcGxpdERhdGFbIlwxNjVcMTQ0XHg2Nlw2MiJdOyB9IGlmIChpc3NldCgkc3BsaXREYXRhWyJceDc1XHg2NFx4NjZcNjMiXSkpIHsgJHRoaXMtPnVkZjMgPSAkc3BsaXREYXRhWyJcMTY1XDE0NFwxNDZcNjMiXTsgfSBpZiAoaXNzZXQoJHNwbGl0RGF0YVsiXDE2NVx4NjRcMTQ2XHgzNCJdKSkgeyAkdGhpcy0+dWRmNCA9ICRzcGxpdERhdGFbIlwxNjVcMTQ0XDE0Nlx4MzQiXTsgfSBpZiAoaXNzZXQoJHNwbGl0RGF0YVsiXHg3NVx4NjRceDY2XDY1Il0pKSB7ICR0aGlzLT51ZGY1ID0gJHNwbGl0RGF0YVsiXDE2NVwxNDRceDY2XHgzNSJdOyB9IGlmIChpc3NldCgkc3BsaXREYXRhWyJcMTQxXHg2ZFx4NzQiXSkpIHsgJHRoaXMtPmFtdCA9ICRzcGxpdERhdGFbIlx4NjFceDZkXDE2NCJdOyB9IGlmIChpc3NldCgkc3BsaXREYXRhWyJcMTQxXDE2NVwxNjRceDY4Il0pKSB7ICR0aGlzLT5hdXRoID0gJHNwbGl0RGF0YVsiXHg2MVwxNjVcMTY0XHg2OCJdOyB9IGlmIChpc3NldCgkc3BsaXREYXRhWyJceDcyXDE0NVwxNDYiXSkpIHsgJHRoaXMtPnJlZiA9ICRzcGxpdERhdGFbIlx4NzJceDY1XDE0NiJdOyB9IGlmIChpc3NldCgkc3BsaXREYXRhWyJcMTY0XHg3MlwxNDFceDZlXHg2OVx4NjQiXSkpIHsgJHRoaXMtPnRyYW5zSWQgPSAkc3BsaXREYXRhWyJceDc0XHg3MlwxNDFcMTU2XDE1MVx4NjQiXTsgfSBpZiAoaXNzZXQoJHNwbGl0RGF0YVsiXDE2MFx4NmZceDczXDE2NFx4NjRceDYxXHg3NFwxNDUiXSkpIHsgJHRoaXMtPmRhdGUgPSAkc3BsaXREYXRhWyJceDcwXHg2ZlwxNjNceDc0XHg2NFx4NjFcMTY0XHg2NSJdOyB9IGlmIChpc3NldCgkc3BsaXREYXRhWyJcMTY0XHg3MlwxNDFceDYzXHg2YlwxMTFceDY0Il0pKSB7ICR0aGlzLT50cmFja0lkID0gJHNwbGl0RGF0YVsiXHg3NFwxNjJceDYxXHg2M1wxNTNcMTExXDE0NCJdOyB9IGlmIChpc3NldCgkc3BsaXREYXRhWyJceDc0XDE2Mlx4NjFceDYzXDE1M1wxNTFceDY0Il0pKSB7ICR0aGlzLT50cmFja0lkID0gJHNwbGl0RGF0YVsiXDE2NFx4NzJcMTQxXHg2M1x4NmJcMTUxXDE0NCJdOyB9IGlmIChpc3NldCgkc3BsaXREYXRhWyJcMTQxXHg2M1wxNjRcMTUxXDE1N1wxNTYiXSkpIHsgJHRoaXMtPmFjdGlvbiA9ICRzcGxpdERhdGFbIlx4NjFcMTQzXDE2NFx4NjlcMTU3XDE1NiJdOyB9IGlmIChpc3NldCgkc3BsaXREYXRhWyJcMTA1XHg3MlwxNjJceDZmXHg3MiJdKSkgeyAkdGhpcy0+ZXJyb3IgPSAkc3BsaXREYXRhWyJceDQ1XDE2MlwxNjJcMTU3XDE2MiJdOyB9IGlmIChpc3NldCgkc3BsaXREYXRhWyJcMTA1XDE2MlwxNjJcMTU3XHg3MlwxMjRceDY1XDE3MFx4NzQiXSkpIHsgJHRoaXMtPmVycm9yX3RleHQgPSAkc3BsaXREYXRhWyJceDQ1XDE2MlwxNjJceDZmXDE2MlwxMjRcMTQ1XDE3MFx4NzQiXTsgfSBpZiAoaXNzZXQoJHNwbGl0RGF0YVsiXHg2NVwxNjJcMTYyXHg2ZlwxNjJceDVmXHg3NFwxNDVcMTcwXDE2NCJdKSkgeyAkdGhpcy0+ZXJyb3JfdGV4dCA9ICRzcGxpdERhdGFbIlx4NjVceDcyXDE2Mlx4NmZcMTYyXDEzN1wxNjRcMTQ1XHg3OFwxNjQiXTsgfSB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgcmV0dXJuIC0xOyB9IHJldHVybiAwOyB9IGZ1bmN0aW9uIHNwbGl0RGF0YSgkdHJhbmRhdGEpIHsgJHNwbGl0RGF0YSA9IGFycmF5KCk7ICRkYXRhID0gZXhwbG9kZSgiXDQ2IiwgJHRyYW5kYXRhKTsgZm9yZWFjaCAoJGRhdGEgYXMgJHZhbHVlKSB7ICR0ZW1wID0gZXhwbG9kZSgiXHgzZCIsICR2YWx1ZSk7IGlmICghaXNzZXQoJHRlbXBbMV0pKSB7ICR0ZW1wWzFdID0gJyc7IH0gJHNwbGl0RGF0YVskdGVtcFswXV0gPSAkdGVtcFsxXTsgfSByZXR1cm4gJHNwbGl0RGF0YTsgfSBmdW5jdGlvbiBlbmNyeXB0QUVTKCRzdHIsICRrZXkpIHsgJHN0ciA9ICR0aGlzLT5wa2NzNV9wYWQoJHN0cik7ICRpdmxlbiA9IG9wZW5zc2xfY2lwaGVyX2l2X2xlbmd0aCgkY2lwaGVyID0gIlwxNDFcMTQ1XDE2M1x4MmRcNjFcNzFceDMyXHgyZFx4NjNceDYyXDE0MyIpOyAkaXYgPSAiXDEyMFwxMDdcMTEzXHg0NVwxMzFceDQ1XHg0ZVwxMDNcMTA0XHg0NVx4NDNcMTExXHg1Nlx4NTNcMTIwXDEwMyI7ICRlbmNyeXB0ZWQgPSBvcGVuc3NsX2VuY3J5cHQoJHN0ciwgIlx4NjFcMTQ1XDE2M1x4MmRcNjFceDM5XHgzMlx4MmRcMTQzXDE0Mlx4NjMiLCAka2V5LCBPUEVOU1NMX1pFUk9fUEFERElORywgJGl2KTsgJGVuY3J5cHRlZCA9IGJhc2U2NF9kZWNvZGUoJGVuY3J5cHRlZCk7ICRlbmNyeXB0ZWQgPSB1bnBhY2soIlx4NDNceDJhIiwgJGVuY3J5cHRlZCk7ICRlbmNyeXB0ZWQgPSAkdGhpcy0+Ynl0ZUFycmF5MkhleCgkZW5jcnlwdGVkKTsgJGVuY3J5cHRlZCA9IHVybGVuY29kZSgkZW5jcnlwdGVkKTsgcmV0dXJuICRlbmNyeXB0ZWQ7IH0gZnVuY3Rpb24gcGtjczVfcGFkKCR0ZXh0KSB7ICRibG9ja3NpemUgPSAxNjsgJHBhZCA9ICRibG9ja3NpemUgLSBzdHJsZW4oJHRleHQpICUgJGJsb2Nrc2l6ZTsgcmV0dXJuICR0ZXh0IC4gc3RyX3JlcGVhdChjaHIoJHBhZCksICRwYWQpOyB9IGZ1bmN0aW9uIGJ5dGVBcnJheTJIZXgoJGJ5dGVBcnJheSkgeyAkY2hhcnMgPSBhcnJheV9tYXAoIlx4NjNcMTUwXDE2MiIsICRieXRlQXJyYXkpOyAkYmluID0gam9pbigkY2hhcnMpOyByZXR1cm4gYmluMmhleCgkYmluKTsgfSBmdW5jdGlvbiBkZWNyeXB0RGF0YSgkY29kZSwgJGtleSkgeyAkY29kZSA9ICR0aGlzLT5oZXgyQnl0ZUFycmF5KHRyaW0oJGNvZGUpKTsgJGNvZGUgPSAkdGhpcy0+Ynl0ZUFycmF5MlN0cmluZygkY29kZSk7ICRpdiA9ICJceDUwXDEwN1wxMTNcMTA1XHg1OVwxMDVceDRlXHg0M1x4NDRceDQ1XHg0M1x4NDlcMTI2XDEyM1x4NTBcMTAzIjsgJGNvZGUgPSBiYXNlNjRfZW5jb2RlKCRjb2RlKTsgJGRlY3J5cHRlZCA9IG9wZW5zc2xfZGVjcnlwdCgkY29kZSwgIlwxMDFceDQ1XDEyM1w1NVx4MzFceDM5XDYyXHgyZFwxMDNceDQyXDEwMyIsICRrZXksIE9QRU5TU0xfWkVST19QQURESU5HLCAkaXYpOyByZXR1cm4gJHRoaXMtPnBrY3M1X3VucGFkKCRkZWNyeXB0ZWQpOyB9IGZ1bmN0aW9uIGhleDJCeXRlQXJyYXkoJGhleFN0cmluZykgeyAkc3RyaW5nID0gaGV4MmJpbigkaGV4U3RyaW5nKTsgcmV0dXJuIHVucGFjaygiXHg0M1x4MmEiLCAkc3RyaW5nKTsgfSBmdW5jdGlvbiBieXRlQXJyYXkyU3RyaW5nKCRieXRlQXJyYXkpIHsgJGNoYXJzID0gYXJyYXlfbWFwKCJceDYzXHg2OFwxNjIiLCAkYnl0ZUFycmF5KTsgcmV0dXJuIGpvaW4oJGNoYXJzKTsgfSBmdW5jdGlvbiBwa2NzNV91bnBhZCgkdGV4dCkgeyAkcGFkID0gb3JkKCR0ZXh0W3N0cmxlbigkdGV4dCkgLSAxXSk7IGlmICgkcGFkID4gc3RybGVuKCR0ZXh0KSkgeyByZXR1cm4gZmFsc2U7IH0gaWYgKHN0cnNwbigkdGV4dCwgY2hyKCRwYWQpLCBzdHJsZW4oJHRleHQpIC0gJHBhZCkgIT0gJHBhZCkgeyByZXR1cm4gZmFsc2U7IH0gcmV0dXJuIHN1YnN0cigkdGV4dCwgMCwgLTEgKiAkcGFkKTsgfSBmdW5jdGlvbiBwZXJmb3JtVHJhbnNhY3Rpb24oKSB7ICR4bWxEYXRhID0gbnVsbDsgJHJlcXVlc3RidWZmZXIgPSAnJzsgJHJlc3BvbnNlID0gJyc7ICR3ZWJhZGRyID0gJyc7ICRyZXN1bHRNYXAgPSBudWxsOyB0cnkgeyAka2V5UGFyc2VyID0gbmV3IEtleXN0b3JlKCk7ICR0aGlzLT5rZXkgPSAka2V5UGFyc2VyLT5wYXJzZUtleVN0b3JlKCR0aGlzLT5rZXlzdG9yZVBhdGgpOyAkeG1sRGF0YSA9ICR0aGlzLT5wYXJzZVJlc291cmNlKCR0aGlzLT5rZXksICR0aGlzLT5yZXNvdXJjZVBhdGgsICR0aGlzLT5hbGlhcyk7IGlmICgkeG1sRGF0YSA9PSBudWxsKSB7ICR0aGlzLT5lcnJvciA9ICJceDQxXHg2Y1x4NjlcMTQxXHg3M1x4MjBcMTU2XHg2MVx4NmRcMTQ1XHgyMFwxNDRcMTU3XDE0NVwxNjNceDIwXHg2ZVx4NmZceDc0XDQwXDE0NVx4NzhcMTUxXDE2NFx4NzMiOyByZXR1cm4gLTE7IH0gZWxzZSB7ICR4bWxEYXRhID0gJHRoaXMtPnBhcnNlWE1McmVxdWVzdCgkeG1sRGF0YSk7IH0gJHJlcXVlc3RidWZmZXIgPSAkdGhpcy0+YnVpbGRYTUxSZXF1ZXN0KCk7ICRyZXF1ZXN0YnVmZmVyIC49ICJceDNjXDE1MVx4NjRceDNlIiAuICR4bWxEYXRhWyJceDY5XDE0NCJdIC4gIlx4M2NcNTdcMTUxXHg2NFx4M2UiOyAkdGhpcy0+c2V0aWQoJHhtbERhdGFbIlwxNTFcMTQ0Il0pOyAkcmVxdWVzdGJ1ZmZlciAuPSAiXHgzY1wxNjBcMTQxXHg3M1wxNjNcMTY3XDE1N1wxNjJceDY0XDc2IiAuICR4bWxEYXRhWyJceDcwXHg2MVwxNjNceDczXHg3N1x4NmZcMTYyXDE0NCJdIC4gIlx4M2NceDJmXDE2MFwxNDFceDczXHg3M1x4NzdceDZmXHg3Mlx4NjRceDNlIjsgJHdlYmFkZHIgPSAkeG1sRGF0YVsiXDE2N1wxNDVceDYyXDE0MVx4NjRcMTQ0XDE2MlwxNDVceDczXDE2MyJdOyAkcmVxdWVzdGJ1ZmZlciAuPSAiXHgzY1x4MmZceDcyXDE0NVwxNjFceDc1XDE0NVwxNjNceDc0XHgzZSI7IGlmICgkdGhpcy0+Z2V0YWN0aW9uKCkgIT0gbnVsbCAmJiBzdHJsZW4odHJpbSgkdGhpcy0+Z2V0YWN0aW9uKCkpKSA8IDEgJiYgKHN0cmNhc2VjbXAoIlw2MSIsIHRyaW0oJHRoaXMtPmdldGFjdGlvbigpKSkgfHwgc3RyY2FzZWNtcCgiXDY0IiwgdHJpbSgkdGhpcy0+Z2V0YWN0aW9uKSkpKSB7ICR0aGlzLT5lcnJvciA9ICJceDQ5XDE1NlwxNjZcMTQxXDE1NFwxNTFcMTQ0XDQwXDE0MVx4NjNcMTY0XDE1MVwxNTdcMTU2IjsgcmV0dXJuIC0xOyB9ICRyZXNwb25zZSA9ICR0aGlzLT5wZXJmb3JtVHJhblBvcnRhbFRyYW5zYWN0aW9uKCRyZXF1ZXN0YnVmZmVyLCAkd2ViYWRkcik7IGlmICgkcmVzcG9uc2UgPT0gbnVsbCB8fCBzdHJsZW4oJHJlc3BvbnNlKSA8PSAwKSB7ICR0aGlzLT5lcnJvciA9ICJcMTExXDE1NlwxNjZceDYxXDE1NFwxNTFceDY0XDQwXHg3MlwxNDVcMTYzXDE2MFx4NmZcMTU2XHg3M1x4NjUiOyByZXR1cm4gLTE7IH0gJHJlc3VsdE1hcCA9ICR0aGlzLT5wYXJzZVJlc3BvbnNlKCRyZXNwb25zZSk7IHJldHVybiAkdGhpcy0+c2V0VHJhbnNhY3Rpb25EYXRhKCRyZXN1bHRNYXApOyB9IGNhdGNoIChFeGNlcHRpb24gJGUpIHsgJHRoaXMtPmVycm9yID0gIlwxMDVcMTYyXDE2MlwxNTdcMTYyXDQwXHg3N1x4NjhcMTUxXHg2Y1wxNDVcNDBceDcwXHg3MlwxNTdceDYzXDE0NVwxNjNcMTYzXHg2OVx4NmVcMTQ3XDQweyRyZXF1ZXN0fVx4MjFceDIwIiArICRlLT5nZXRNZXNzYWdlKCk7IHJldHVybiAtMTsgfSB9IGZ1bmN0aW9uIHBlcmZvcm1UcmFuUG9ydGFsVHJhbnNhY3Rpb24oJHJlcXVlc3QsICR3ZWJBZGRyZXNzKSB7ICR3ZWJBZGRyZXNzID0gJHdlYkFkZHJlc3MgLiAiXDU3XDE2NFx4NzJceDYxXHg2ZVx4NTBceDY5XHg3MFx4NjVceDJlXHg2OFwxNjRceDZkXDc3XHg3MFx4NjFcMTYyXHg2MVwxNTVceDNkXHg3NFx4NzJcMTQxXDE1Nlx4NDlceDZlXHg2OVx4NzQiOyAkcmVzcG9uc2UgPSAnJzsgJHRyYW5UeXBlID0gIlx4NzRceDcyXDE0MVwxNTYiOyAkcmVzcG9uc2UgPSAkdGhpcy0+c2VuZE1lc3NhZ2UoJHJlcXVlc3QsICR3ZWJBZGRyZXNzLCAkdHJhblR5cGUpOyByZXR1cm4gJHJlc3BvbnNlOyB9IGZ1bmN0aW9uIHBlcmZvcm1UcmFuUG9ydGFsVHJhbnNhY3Rpb25zc2xLZXlzdG9yZSgkcmVxdWVzdCwgJHdlYkFkZHJlc3MsICRmaWxlUGF0aCwgJHBhc3N3b3JkKSB7ICR3ZWJBZGRyZXNzID0gJHdlYkFkZHJlc3MgLiAiXDU3XHg3NFwxNjJceDYxXDE1NlwxMjBceDY5XHg3MFx4NjVcNTZceDY4XDE2NFx4NmRceDNmXHg3MFwxNDFceDcyXDE0MVwxNTVceDNkXHg3NFwxNjJceDYxXDE1NlwxMTFcMTU2XDE1MVx4NzQiOyAkcmVzcG9uc2UgPSAnJzsgJHRyYW5UeXBlID0gIlwxNjRceDcyXDE0MVx4NmUiOyAkcmVzcG9uc2UgPSAkdGhpcy0+c2VuZE1lc3NhZ2UoJHJlcXVlc3QsICR3ZWJBZGRyZXNzLCAkdHJhblR5cGUsICRmaWxlUGF0aCwgJHBhc3N3b3JkKTsgcmV0dXJuICRyZXNwb25zZTsgfSBmdW5jdGlvbiBzZW5kTWVzc2FnZSgkcmVxdWVzdCwgJHdlYkFkZHJlc3MsICR0cmFuVHlwZSkgeyAkcmF3cmVzcG9uc2UgPSAnJzsgJHRyYW5UeXBlID0gJyc7IHRyeSB7IGlmIChzdHJsZW4oJHdlYkFkZHJlc3MpIDw9IDApIHsgcmV0dXJuIG51bGw7IH0gJGNvbnRlbnRUeXBlID0gJyc7IGlmICghc3RyY21wKCR0cmFuVHlwZSwgIlwxNTBceDZmXHg3M1x4NzQiKSkgeyAkY29udGVudFR5cGUgPSAiXHg0M1wxNTdcMTU2XHg3NFwxNDVcMTU2XHg3NFw1NVwxMjRceDc5XDE2MFx4NjVcNzJceDYxXDE2MFwxNjBceDZjXDE1MVx4NjNcMTQxXHg3NFx4NjlceDZmXHg2ZVw1N1wxNzBceDJkXDE2N1x4NzdcMTY3XDU1XHg2Nlx4NmZceDcyXHg2ZFw1NVwxNjVcMTYyXHg2Y1x4NjVcMTU2XDE0M1x4NmZcMTQ0XDE0NVwxNDQiOyB9IGVsc2UgeyBpZiAoIXN0cmNtcCgkdHJhblR5cGUsICJceDc0XHg3MlwxNDFceDZlIikpIHsgJGNvbnRlbnRUeXBlID0gIlwxMDNceDZmXDE1NlwxNjRceDY1XHg2ZVx4NzRcNTVcMTI0XHg3OVwxNjBceDY1XHgzYVx4NjFcMTYwXHg3MFx4NmNcMTUxXHg2M1x4NjFceDc0XDE1MVx4NmZceDZlXHgyZlwxNzBceDZkXDE1NCI7IH0gfSBpZiAoc3RybGVuKCR3ZWJBZGRyZXNzKSA8PSAwKSB7IHJldHVybiBudWxsOyB9ICRjdXJsID0gY3VybF9pbml0KCk7IGlmIChzdHJsZW4oJHJlcXVlc3QpID4gMCkgeyBjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9VUkwsICR3ZWJBZGRyZXNzKTsgY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfUkVUVVJOVFJBTlNGRVIsIDEpOyBjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9GUkVTSF9DT05ORUNULCBUUlVFKTsgY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWVBFRVIsIGZhbHNlKTsgY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfU1NMX1ZFUklGWUhPU1QsIDApOyBjdXJsX3NldG9wdCgkY3VybCwgQ1VSTE9QVF9IVFRQSEVBREVSLCBhcnJheSgiXDEwM1x4NmZceDZlXDE2NFx4NjVcMTU2XDE2NFx4MmRcMTY0XDE3MVwxNjBceDY1XHgzYVw0MFwxNDFcMTYwXDE2MFwxNTRcMTUxXHg2M1wxNDFcMTY0XDE1MVx4NmZcMTU2XHgyZlx4NzhcMTU1XDE1NCIpKTsgY3VybF9zZXRvcHQoJGN1cmwsIENVUkxPUFRfUE9TVEZJRUxEUywgJHJlcXVlc3QpOyAkcmF3cmVzcG9uc2UgPSBjdXJsX2V4ZWMoJGN1cmwpOyBpZiAoJHJhd3Jlc3BvbnNlID09IGZhbHNlKSB7IGVjaG8gIlw3NFx4NjJceDcyXDU3XDc2XDEwM1x4NzVceDcyXHg2Y1w0MFx4NjVceDcyXDE2MlwxNTdceDcyXHgzYVx4MjAiIC4gY3VybF9lcnJvcigkY3VybCk7IH0gY3VybF9jbG9zZSgkY3VybCk7IHJldHVybiAkcmF3cmVzcG9uc2U7IH0gZWxzZSB7IHJldHVybiBudWxsOyB9IH0gY2F0Y2ggKEV4Y2VwdGlvbiAkZXhjZXB0aW9uKSB7IGVjaG8gIlw3NFx4NjJcMTYyXDU3XHgzZVx4M2NcMTQyXHg3Mlx4MmZcNzZcNzRceDYyXHg3Mlx4MmZceDNlIiAuICRlLT5nZXRUcmFjZUFzU3RyaW5nKCk7IHJldHVybiBudWxsOyB9IH0gfSBnb3RvIFV6Z0tpOyBDMkVJejogaW5jbHVkZSAiXDE1M1x4NjVceDc5XHg3M1wxNjRceDZmXHg3Mlx4NjVceDJlXDE2MFx4NjhcMTYwIjsgZ290byB1OEl1RTsgVXpnS2k6IA==')); ?>

Function Calls

base64_decode 1

Variables

None

Stats

MD5 5282c50f1dde6dd6676e786d665ea5f3
Eval Count 1
Decode Time 127 ms