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 ################################################################################ ..

Decoded Output download

<?php 
 
################################################################################ 
# PHP Suchscript - Version 2.5.39                                              # 
# copyright webdesign weisshart                                                # 
# http://webdesign.weisshart.de                                                # 
# dieser copyright Hinweis darf nicht entfernt werden!                         # 
#                                                                              # 
# Sie koennen dieses Script kostenlos einsetzen,                               # 
# solange Sie die Links auf webdesign.weisshart.de unveraendert intakt lassen. # 
# Wenn Sie die Links auf webdesign.weisshart.de entfernen wollen,              # 
# koennen Sie eine Lizenz erwerben bei                                         # 
# http://webdesign.weisshart.de/suchen-lizenz.php                              # 
################################################################################ 
 
include("search_config.php"); 
 
$NCiR0aW1lX29sZCA9IDA7IC8vIGb8ciBkaWUgRm9ydHNjaHJpdHRzYW56ZWlnZQNCiR0aW1lX29sZCA9IDA7IC8vIGb8ciBkaWUgRm9ydHNjaHJpdHRzYW56ZWlnZQ="CQovLyBOZXR0LCBkYXNzIFNpZSBzaWNoIGZ1ZXIgbWVpbmVuIHNvdXJjZWNvZGUgaW50ZXJlc3NpZXJlbi4gRGVyIExpbmsgYXVmIHdlYmRlc2lnbi53ZWlzc2hhcnQuZGUgZGFyZiBudXIgbmFjaCBFcndlcmIgZWluZXIgTGl6ZW56IGVudGZlcm50IHdlcmRlbiEKLy8gQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgJzEnKTsKCgpzZXRsb2NhbGUgKExDX0NUWVBFLCAnZGVfREUnKTsgLy8gc3RydG9sb3dlciBhdWNoIG1pdCBVbWxhdXRlbiAtIGFiZXIgYW5zY2hlaW5lbmQgbmljaHQgdW50ZXIgUEhQIDUuNAoKLy8gUEhQIDgueCBlcnpldWd0IGJlaSBmZWhsZW5kZW0gZGlyIGVpbmVuIGZhdGFsIGVycm9yLgovLyAkaSA9IDA7Ci8vICRtaXNzaW5nX2RpciA9ICIiOwovLyBpZiAoJGFsbGVkaXJzID09PSAhdHJ1ZSkgewovLyAJd2hpbGUoJGkgPCBjb3VudCgkZGlycykpIHsKLy8gCQlpZiAoIWlzX2RpcigkZGlyc1skaV0pKSB7Ci8vIAkJCSRtaXNzaW5nX2RpciAuPSAkZGlyc1skaV0uJzxicj4nOwovLyAJCX0KLy8gCSAgICRpKys7Ci8vIAl9Ci8vCi8vIAlpZiAoJG1pc3NpbmdfZGlyICE9ICIiKSB7Ci8vIAkJZWNobyAiRm9sZ2VuZGUocykgVmVyemVpY2huaXMoc2UpIGdpYnQgZXMgbmljaHQ6PGJyPiI7Ci8vIAkJZWNobyAkbWlzc2luZ19kaXI7Ci8vIAkJZWNobyAiQml0dGUgZGllIGNvbmZpZy1EYXRlaSBrb3JyaWdpZXJlbi4iOwovLyAJZXhpdDsKLy8gCX0KLy8gfQovLyA9PiAjNDIwIGlmICgkZGVzY3JpcHRpb24gIT0gIiIpewoKCmlmICghQGluaV9nZXQoJ3NhZmVfbW9kZScpKSBAc2V0X3RpbWVfbGltaXQoNDUpOwokbXRpbWUgPSBtaWNyb3RpbWUoKTsgJG10aW1lID0gZXhwbG9kZSggJyAnLCAkbXRpbWUpOyAkbXRpbWUgPSAkbXRpbWVbMV0gKyAkbXRpbWVbMF07CiRzdWNoX3N0YXJ0ID0gJG10aW1lOwoKJHZlcnNpb249ICc8IS0tIFZlcnNpb24gMi41LjM5IC0tPic7CgoKaWYgKHBocHZlcnNpb24oKSA8ICc0LjMuMCcpIHsKCWVjaG8gIjxwPkRpZXNlcyBTY3JpcHQgZXJmb3JkZXJ0IFBIUCBWZXJzaW9uIDQuMy4wIG9kZXIgaCZvdW1sO2hlciE8YnIgLz4iOwoJZWNobyAiYXVmIElocmVtIFNlcnZlciBsJmF1bWw7dWZ0IGFiZXIgUEhQIFZlcnNpb24gIi5waHB2ZXJzaW9uKCkuIi48L3A+IjsKCWV4aXQ7Cn0KCiRtZXRob2QgPSAkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXTsKCiRhcnJheSA9ICIiOwokYXVzZ2FiZSA9IiI7CiRmb3VuZCA9IDA7CiRlID0gIiI7CiRzb3J0aGlud2VpcyA9ICIiOwokbGluayA9ICIiOwokZHVyY2hzdWNodCA9IDA7CiRiZXJlaXRzX2ZvdW5kID0gYXJyYXkoKTsgCgoKaWYgKCFpc3NldCgkcGx1cmFsKSl7CgkkcGx1cmFsID0gIm4iOwp9CgovL2lmICghaXNzZXQoJHB1bmN0KSl7JHB1bmN0ID0gIm5vIjt9CgppZiAoIWlzc2V0KCRtYXhtc2cpKXsKCSRtYXhtc2cgPSAxMDA7Cn0KCmlmICghaXNzZXQoJGRhdGVmb3JtKSl7CgkkZGF0ZWZvcm0gPSAiZGUiOwp9CgppZiAoIWlzc2V0KCRzdWNoZGF1ZXIpKXsKCSRzdWNoZGF1ZXIgPSAiU2VrdW5kZW4iOwp9CgppZiAoIWlzc2V0KCRiZXNjaHJlaWIpKXsKCSRiZXNjaHJlaWIgPSAiQmVzY2hyZWlidW5nOiAiOwp9CgppZiAoIWlzc2V0KCR0cmVmZikpewoJJHRyZWZmID0gIlRyZWZmZXIiOwp9CgppZiAoIWlzc2V0KCRmaWxlZGF0ZSkpewoJJGZpbGVkYXRlID0gInp1bGV0enQgZ2UmYXVtbDtuZGVydCBhbSAiOwp9CgppZiAoIWlzc2V0KCRub3Jlc3VsdCkpewoJJG5vcmVzdWx0ID0gIjxwPjxiciAvPkVzIHd1cmRlbiBsZWlkZXIga2VpbmUgZXhha3RlbiAmVXVtbDtiZXJlaW5zdGltbXVuZ2VuIG1pdCBkZW0gZWluZ2VnZWJlbmVuIFN1Y2hiZWdyaWZmIGdlZnVuZGVuLjxiciAvPlZpZWxsZWljaHQgd29sbGVuIFNpZSBlcyBtaXQgZWluZW0gYWxsZ2VtZWluZXJlbiBTdWNoYmVncmlmZiB2ZXJzdWNoZW4uPC9wPiI7Cn0KCmlmICghaXNzZXQoJHZvcnNjaGxhZykpewoJJHZvcnNjaGxhZyA9ICJPZGVyIFNpZSB2ZXJzdWNoZW4gZXMgZWluZmFjaCBtYWwgbWl0IjsKfQoKaWYgKCFpc3NldCgkbWlubGVuZ3RoKSl7CgkkbWlubGVuZ3RoID0gIjxwPjxiciAvPkdlYmVuIFNpZSBiaXR0ZSBlaW5lbiBTdWNoYmVncmlmZiB2b24gbWluZGVzdGVucyZuYnNwOyIuJGxlbmd0aC4iJm5ic3A7QnVjaHN0YWJlbiBMJmF1bWw7bmdlIGVpbi48L3A+IjsKfQoKCgppZiAoIWlzc2V0KCRpZnJhbWUpKXsKICAgJGlmcmFtZT1mYWxzZTsKfQoKaWYgKCFpc3NldCgkdGFyZ2V0d2FobCkpewogICAkdGFyZ2V0d2FobD1mYWxzZTsKfQoKLy8gaWYgKCFpc3NldCgkZXhjbHVkZV9zdHJpbmdzKSl7Ci8vICAgICRleGNsdWRlX3N0cmluZ3MgPSBhcnJheSgpOwovLyB9CgppZiAoIWlzc2V0KCRpbnN0YWxsYXRpb25fcGF0aCkpIHsKCSRpbnN0YWxsYXRpb25fcGF0aCA9ICJ3ZHdfc3VjaGUiOwp9CgppZiAoIWlzc2V0KCRlbmNvZGluZykpIHsKCSRlbmNvZGluZyA9ICJJU08iOwp9CgppZiAoIWlzc2V0KCR0aHVtYl9yZXBsYWNlKSkgewoJJHRodW1iX3JlcGxhY2UgPSAiX3NzLmpwZyI7Cn0KCiRsaXN0X2h4X3N0YXJ0ID0gJGxpc3RfaHhfZW5kID0gIiI7CmlmIChpc3NldCgkbGlzdF9oeCkgJiYgaXNfbnVtZXJpYygkbGlzdF9oeCkpIHsKCSRsaXN0X2h4X3N0YXJ0ID0gJzxoJy4kbGlzdF9oeC4nPic7CgkkbGlzdF9oeF9lbmQgICA9ICc8L2gnLiRsaXN0X2h4Lic+ICc7Cn0KCmlmICghaXNzZXQoJGh4X3N1Y2h0aXApIHx8ICFpc19udW1lcmljKCRoeF9zdWNodGlwICkpIHsKCSRoeF9zdWNodGlwID0gMzsKfQoKCgovLyB2ZXJib3RlbmUgWmVpY2hlbgokZXhjbHVkZV9zdHJpbmdzX21lcmdlID0gYXJyYXkoCiAgICdcXCcsIC8vIGRhcyBcIGRpZW50IHp1bSBNYXNraWVyZW4gdm9uIHJlc2VydmllcnRlbiBaZWljaGVuIAoJIiciLAogICAnKicsCgknfCcsCiAgICcrJwopOwoKLy8gJGV4Y2x1ZGVfc3RyaW5nc19tZXJnZSA9IGFycmF5X21lcmdlKCRleGNsdWRlX3N0cmluZ3MsICRleGNsdWRlX3N0cmluZ3MyKTsKLy8gJGV4Y2x1ZGVfc3RyaW5nc19tZXJnZSA9ICRleGNsdWRlX3N0cmluZ3MyOwoKCmlmIChpc3NldCgkc3VjaHRpcDApKXsKCSRzZWFyY2h0aXAwID0gIlxuPGgkaHhfc3VjaHRpcCBpZD0nc3VjaHRpcGhlYWRlcic+JHN1Y2h0aXAwIDwvaCRoeF9zdWNodGlwPlxuIjsKCX0gZWxzZSB7Cgkkc2VhcmNodGlwMCA9ICJcbjxoJGh4X3N1Y2h0aXAgaWQ9J3N1Y2h0aXBoZWFkZXInPlN1Y2h0aXBwczogPC9oJGh4X3N1Y2h0aXA+XG4iOwp9CgppZiAoaXNzZXQoJHN1Y2h0aXAxKSl7Cgkkc2VhcmNodGlwMSA9ICI8bGk+JHN1Y2h0aXAxPC9saT5cbiI7Cgl9IGVsc2UgewoJJHNlYXJjaHRpcDEgPSAiPGxpPkRpZSBTdWNoZSBmaW5kZXQgYWxsZSBTZWl0ZW4sIGRpZSBJaHJlbiBTdWNoYmVncmlmZiBlbnRoYWx0ZW4gLSBhdWNoIGFscyBXb3J0YmVzdGFuZHRlaWwuIEVpbmUgU3VjaGUgbmFjaCAmcmFxdW87dGVzdCZsYXF1bzsgZmluZGV0IGFsc28gYXVjaCAmcmFxdW87c3AmYXVtbDs8ZW0+dGVzdDwvZW0+ZSZsYXF1bzsuPC9saT4iOwoJCn0KCmlmIChpc3NldCgkc3VjaHRpcDIpKXsKCSRzZWFyY2h0aXAyID0gIjxsaT4kc3VjaHRpcDI8L2xpPlxuIjsKCX0gZWxzZSB7Cgkkc2VhcmNodGlwMiA9ICI8bGk+V2VubiBTaWUgSWhyZSBTdWNoZSBhdWYgZ2FuemUgVyZvdW1sO3J0ZXIgZWluc2NociZhdW1sO25rZW4gd29sbGVuLCBmJnV1bWw7Z2VuIFNpZSB2b3IgdW5kIGhpbnRlciBkZW0gV29ydCBlaW4gTGVlcnplaWNoZW4gZWluLCB1bmQgdW1zY2hsaWUmc3psaWc7ZW4gYWxsZXMgbWl0IEFuZiZ1dW1sO2hydW5nc3plaWNoZW4uIEJlaXNwaWVsOiBcIiB0ZXN0IFwiLiAmcmFxdW87c3AmYXVtbDs8ZW0+dGVzdDwvZW0+ZSZsYXF1bzsgd2lyZCBkYW5uIG5pY2h0IG1laHIgZ2VmdW5kZW4uIDwvbGk+IjsKfQoKJHNlYXJjaHRpcDIgPSAiIjsKCmlmIChpc3NldCgkc3VjaHRpcDMpKXsKCSRzZWFyY2h0aXAzID0gIjxsaT4kc3VjaHRpcDM8L2xpPlxuIjsKCX0gZWxzZSB7CgkJJHNlYXJjaHRpcDMgPSAiPGxpPldlbm4gU2llIG1laHJlcmUgVyZvdW1sO3J0ZXIgZWluZ2ViZW4sIHdlcmRlbiBhbGxlIERva3VtZW50ZSBnZWZ1bmRlbiwgZGllIDxlbT5hbGxlPC9lbT4gZWluZ2VnZWJlbmVuIFcmb3VtbDtydGVyIGVudGhhbHRlbiwgZWdhbCBpbiB3ZWxjaGVyIFJlaWhlbmZvbGdlIChBTkQtVmVya24mdXVtbDtwZnVuZykuCgkJPGJyIC8+PGVtPkplIG1laHIgVyZvdW1sO3J0ZXIsIGRlc3RvIHdlbmlnZXIgVHJlZmZlci48L2VtPjwvbGk+IjsKfQoJCQppZiAoaXNzZXQoJHN1Y2h0aXAzMSkpewoJJHNlYXJjaHRpcDMxID0gIjxsaT4kc3VjaHRpcDMxPC9saT5cbiI7Cgl9IGVsc2UgewoJJHNlYXJjaHRpcDMxID0JIjxsaT5XZW5uIFNpZSBtZWhyZXJlIFcmb3VtbDtydGVyIFwibWl0IEFuZiZ1dW1sO2hydW5nc3plaWNoZW4gdW1zY2hsaWUmc3psaWc7ZW5cIiwgd2VyZGVuIGFsbGUgRG9rdW1lbnRlIGdlZnVuZGVuLCBkaWUgYWxsZSBlaW5nZWdlYmVuZW4gVyZvdW1sO3J0ZXIgZXhha3QgaW4gZGVyIGVpbmdlZ2ViZW5lbiBXZWlzZSBlbnRoYWx0ZW4uPC9saT4iOwp9CgppZiAoaXNzZXQoJHN1Y2h0aXAzb3IpKXsKCSRzZWFyY2h0aXAzb3IgPSAiPGxpPiRzdWNodGlwM29yPC9saT5cbiI7Cn0KCgppZiAoIWlzc2V0KCR3ZWl0ZXJ0eHQpKXsKCSR3ZWl0ZXJ0eHQgPSAid2VpdGVyZSBUcmVmZmVyIHplaWdlbiI7Cn0KaWYgKCFpc3NldCgkenVydWVja3R4dCkpewoJJHp1cnVlY2t0eHQgPSAidm9yaGVyaWdlIFRyZWZmZXIiOwp9CgokdmFsdWUgPSAiIjsKCmlmICghaXNzZXQoJHNlYXJjaCkpIHskc2VhcmNoID0gJHZhbHVlO30KCmlmICghaXNzZXQoJHNob3dfZXh0KSkgeyRzaG93X2V4dCA9IHRydWU7fQoKaWYgKCFpc3NldCgkcHJvdCkpIHskcHJvdCA9ICJodHRwOi8vIjt9CgoKCgoKCiRzZWFyY2h0aXA0ID0gIiI7CmlmICgkanVtcCA9PSB0cnVlICYmICR0YXJnZXQgPT0gIiIpIHsKCglpZiAoaXNzZXQoJHN1Y2h0aXA0KSl7CgkJJHNlYXJjaHRpcDQgPSAiPGxpPiRzdWNodGlwNDwvbGk+XG4iOwoJCX0gZWxzZSB7CgkJJHNlYXJjaHRpcDQgPSAiPGxpPkZhbGxzIGRpZSBTdWNoZSBudXIgZWluZW4gZWluemlnZW4gVHJlZmZlciBlcmdpYnQsIHdpcmQgZGllIFRyZWZmZXJzZWl0ZSBkaXJla3QgYW5nZXNwcnVuZ2VuLjwvbGk+XG4iOwoJfQp9CgovLyAkdWxzdGFydCA9ICIkc2VhcmNodGlwMDxkaXYgaWQ9J3N1Y2h0aXBwcycgIGNsYXNzPSdrbGFwcGVuJyA+XG48dWw+XG4iOwovLyAkdWxlbmQgPSAiPC91bD5cbjwvZGl2PlxuIjsKLy8KLy8gaWYgKCR0aXBwcykgeyRzZWFyY2h0aXAgPSAkdWxzdGFydC4kc2VhcmNodGlwMS4kc2VhcmNodGlwMi4kc2VhcmNodGlwMy4kc2VhcmNodGlwMzEuJHNlYXJjaHRpcDNvci4kc2VhcmNodGlwNC4kdWxlbmQ7IH1lbHNlIHskc2VhcmNodGlwID0iIjt9CgovLyBiZyBmdWVyIENyZWRpdC1MaW5rOgppZiAoIWlzc2V0KCRiZykpICRiZyA9ICIjRkZGRkZGIjsKaWYgKHN0cnBvcygkYmcsJyMnKSA9PT0gZmFsc2UpICRiZyA9ICcjJy4kYmc7CgppZiAocHJlZ19tYXRjaCgnL14jWzAtOUEtRl17MSw2fSQvaScsICRiZykgJiYgc3RybGVuKCRiZykgPT0gNykgewoKICAgICAgJHJlZEggPSBiYXNlX2NvbnZlcnQoc3Vic3RyKCRiZywgMSwgMiksIDE2LCAxMCk7CiAgICAgICRncmVlbkggPSBiYXNlX2NvbnZlcnQoc3Vic3RyKCRiZywgMywgMiksICAxNiwgMTApOwogICAgICAkYmx1ZUggPSBiYXNlX2NvbnZlcnQoc3Vic3RyKCRiZywgNSwgMiksICAxNiwgMTApOwoKICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvQUVSVCNjb2xvci1jb250cmFzdAogICAgICAkc3VtID0gJHJlZEgqMjk5ICsgJGdyZWVuSCo1ODcgKyAkYmx1ZUgqMTE0OwogICAgICBpZiAoJHN1bSA8IDEyNzAwMCApIHsKICAgICAgICAgICAkY29tcCA9ICIjRkZGRkZGIjsKICAgICAgfSBlbHNlIHsKICAgICAgICAgICAkY29tcCA9IiMwMDAwMDAiOwogICAgICB9Cn0gZWxzZSB7CiAgICAgICRmZWhsZXIgPSAxOwogICAgICAkYmcgPSAiI0ZGRkZGRiI7CiAgICAgICRjb21wID0gIiMwMDAwMDAiOwp9Cgokd2R3ID0gJzxwIHN0eWxlPSJkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnQ7IGZvbnQtc2l6ZTogMTBweCAhaW1wb3J0YW50OyBjb2xvcjonLiRjb21wLicgIWltcG9ydGFudDsgYmFja2dyb3VuZDonLiRiZy4nICFpbXBvcnRhbnQiPiZuYnNwO3NjcmlwdCZuYnNwOyZjb3B5OyZuYnNwOzIwMjMmbmJzcDtieSZuYnNwOzxhIHN0eWxlPSJjb2xvcjonLiRjb21wLicgIWltcG9ydGFudDsgZGlzcGxheTppbmxpbmUgIWltcG9ydGFudDsgZm9udC1zaXplOiAxMHB4ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0Om5vcm1hbCAhaW1wb3J0YW50OyB0ZXh0LWRlY29yYXRpb246bm9uZSAhaW1wb3J0YW50IiBocmVmPSJodHRwczovL3dlYmRlc2lnbi53ZWlzc2hhcnQuZGUiPndlYmRlc2lnbiZuYnNwO3dlaXNzaGFydDwvYT48L3A+JzsKCgppZiAoaXNzZXQoJHB3ZCkpIHsKCSRzZXJ2ZXIgPSBzdHJfcmVwbGFjZSAoInd3dy4iLCIiLCAkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSApOwoJJHNlcnZlciA9IHN0cl9yZXBsYWNlICgiKyIsIiIsICRzZXJ2ZXIpOwoJJHNlcnZlciA9IHN0cl9yZXBsYWNlICgiLSIsIiIsICRzZXJ2ZXIpOwoJJGRvbSA9IGNyYzMyKCRzZXJ2ZXIpOwogICAgICAkY2hhdmUgPSAkcHdkIC8gc3ByaW50ZigiJXUiLCAkZG9tKTsKfQppZiAoaXNzZXQoJGNoYXZlKSAmJiAkY2hhdmUgPT0gIjMyMSIpewoJJHdkdyA9Jyc7Cn0KCgovLyBuZXVlcyBGZW5zdGVyCmVjaG8nCjxzY3JpcHQ+Ci8qIDwhW0NEQVRBWyAqLwoKZnVuY3Rpb24gbGlua29wZW5lcihhKSB7CiAgIHZhciBiPWE/Il9ibGFuayI6Il9zZWxmIjsKICAgdmFyIGM9ZG9jdW1lbnQubGlua3M7CiAgIGZvcih2YXIgaT0wO2k8Yy5sZW5ndGg7aSsrKSB7CiAgIAkvLyBudXIgU3VjaHRyZWZmZXI6CiAgIAlpZiAoY1tpXS50b1N0cmluZygpLmluZGV4T2YoIm5leHQiKSA9PSAtMSAmJiBjW2ldLnRvU3RyaW5nKCkuaW5kZXhPZigiP3E9IikgPiAtMSApIHsKICAgICAgCQljW2ldLnRhcmdldD1iOwogICAJfQogICB9Cn0KCmZ1bmN0aW9uIGxpbmtjb29raWUoKSB7CiAgIGlmKGRvY3VtZW50LmNvb2tpZS5pbmRleE9mKCJzdWNob2VmZm5lbiIpICE9PSAtMSl7CiAgICAgIGRvY3VtZW50LmNvb2tpZSA9ICJzdWNoPTA7cGF0aD0vO2V4cGlyZXM9VGh1LCAwMS1KYW4tNzAgMDA6MDA6MDEgR01UIjsKICAgfSBlbHNlIHsKICAgICBkb2N1bWVudC5jb29raWU9InN1Y2g9c3VjaG9lZmZuZW47IHBhdGggPS8iOwogICB9Cn0KCmZ1bmN0aW9uIGFkZEV2ZW50KG9iaiwgZXZUeXBlLCBmbil7CiBpZiAob2JqLmFkZEV2ZW50TGlzdGVuZXIpewogICBvYmouYWRkRXZlbnRMaXN0ZW5lcihldlR5cGUsIGZuLCBmYWxzZSk7CiAgIHJldHVybiB0cnVlOwogfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpewogICB2YXIgciA9IG9iai5hdHRhY2hFdmVudCgib24iK2V2VHlwZSwgZm4pOwogICByZXR1cm4gcjsKIH0gZWxzZSB7CiAgIHJldHVybiBmYWxzZTsKIH0KfQoKLyogXV0+ICovCjwvc2NyaXB0PgonOwoKCmlmKGlzc2V0KCRfR0VUWyJxIl0pIHx8IGlzc2V0KCRfUE9TVFsicSJdKSkgewoJCglpZiAoaXNzZXQoJF9HRVRbInEiXSkgJiYgJF9HRVRbInEiXSAhPSAiIikgJHNlYXJjaCA9IHN0cmlwc2xhc2hlcygkX0dFVFsicSJdKTsKCWlmIChpc3NldCgkX1BPU1RbInEiXSkgJiYgJF9QT1NUWyJxIl0gIT0gIiIpICRzZWFyY2ggPSBzdHJpcHNsYXNoZXMoJF9QT1NUWyJxIl0pOwoKCSRnYW56ZXJhdXNkcnVjayA9ICRzZWFyY2g7CglpZiAoc3RyaXN0cigkc2VhcmNoLCAiQ29udGVudC1UeXBlIikpJHNlYXJjaCA9ICJubyBzcGFtIGhlcmUhIjsKCgoJaWYgKHN0cnBvcyhzdHJ0b2xvd2VyKCRlbmNvZGluZyksInV0ZiIpIT09IGZhbHNlKSB7Ci8vCQllY2hvICJ1dGYtODoiOwoJCSRzZWFyY2ggPSBodG1sc3BlY2lhbGNoYXJzKCRzZWFyY2gsIEVOVF9OT1FVT1RFUywgIlVURi04Iik7Cgl9IGVsc2UgewovLwkJZWNobyAiSVNPOiI7CgkJJHNlYXJjaCA9IGh0bWxzcGVjaWFsY2hhcnMoJHNlYXJjaCwgRU5UX05PUVVPVEVTLCAiSVNPLTg4NTktMTUiKTsKCX0KCgoKCWZvcmVhY2goJGV4Y2x1ZGVfc3RyaW5nc19tZXJnZSBhcyAkaykgewoJCSRnZXN1Y2h0ID0gc3RyX3JlcGxhY2UoJGssIiIsJHNlYXJjaCk7CgoJCS8qIHdlbm4gZXhjbHVkZWQgc3RyaW5ncyBpbSBTdWNoYmVncmlmZiwgdW5kIGRhZHVyY2ggU3VjaGJlZ3JpZmYga2xlaW5lciBhbHMgJGxlbmd0aCB3aXJkOiAqLwoJCWlmIChzdHJsZW4odHJpbSgkc2VhcmNoKSkgPiBzdHJsZW4odHJpbSgkZ2VzdWNodCkpICYmIHN0cmxlbih0cmltKCRzZWFyY2gpKSA+PSAkbGVuZ3RoICkgewoJCQkkbWlubGVuZ3RoID0gJG5vcmVzdWx0OyAKCQl9Cgl9CgkJCgkvLyBnYW56ZSBBdXNkcnVlY2tlIHN1Y2hlbjoKCSRhdXNkcnVjayA9IGZhbHNlOwoJaWYgKHN0cnBvcygkZ2FuemVyYXVzZHJ1Y2ssJyInKSAhPT0gZmFsc2UgfHwgc3RycG9zKCRnYW56ZXJhdXNkcnVjaywiJyIpICE9PSBmYWxzZSApIHsgCgkJJGF1c2RydWNrID0gdHJ1ZTsKCX0gCgkKCgkkc2VhcmNoID0gcHJlZ19yZXBsYWNlKCcvWyBdezIsfS9zbScsICcgJywgJHNlYXJjaCk7CgoKCWlmIChmaWxlX2V4aXN0cygic2VhcmNoX3JlcGxhY2UucGhwIikpIHtpbmNsdWRlICgic2VhcmNoX3JlcGxhY2UucGhwIik7fQoKCS8vIHVuZXJ3dWVuc2NodGUgU3RyaW5ncyB2b24gZGVyIFN1Y2hlIGF1c3NjaGxpZXNzZW4KCWZvcmVhY2goJGV4Y2x1ZGVfc3RyaW5nc19tZXJnZSBhcyAkaykgewoJCSRzZWFyY2ggPSBzdHJfcmVwbGFjZSgkaywiIiwkc2VhcmNoKTsKCX0KCgoJJHNlYXJjaCA9IHRyaW0oJHNlYXJjaCk7Cgkkc2VhcmNoID0gc3RyX3JlcGxhY2UgKCAnJmFtcDsnLCAnJicsICRzZWFyY2ggKTsgLy8gbGFlc3N0IGh0bWwgZW50aXRpZXMgd2llICYjMzUxOyB6dSAoei5CLiB0dWVya2lzY2hlIFNvbmRlcnplaWNoZW4pCgkvL2RpZSBnbGVpY2hlIFplaWxlIGF1Y2ggaW4gZGllIHN1Y2hlbi5waHAsIGF1c3NlcmRlbSBaZWlsZSA0OCBoaWVyIHdlZ2tvbW1lbnRpZXJlbi4KCgoJaWYoZW1wdHkoJHNlYXJjaCkpIHskc2VhcmNoPSIiO30KCSRzZWFyY2hsZW5ndGggPSBzdHJfcmVwbGFjZSgnJnF1b3Q7JywnJywkc2VhcmNoKTsKCWlmKHN0cmxlbigkc2VhcmNobGVuZ3RoKSA+PSAkbGVuZ3RoICYmICRzZWFyY2ggIT0gJHZhbHVlKSB7CgoJaWYgKCFpc3NldCgkc3VjaGhpbndlaXMpIHx8ICAkc3VjaGhpbndlaXMgPT0gIiIpIHsKCQkkc2VhcmNoaGlud2VpcyA9ICJTaWUgc3VjaGVuIG5hY2giOwoJfSBlbHNlIHsKCQkkc2VhcmNoaGlud2VpcyA9ICRzdWNoaGlud2VpczsKCQllY2hvICc8cD4nLiRzZWFyY2hoaW53ZWlzLicgPGVtPiZyYXF1bzsnLiRnZXN1Y2h0LicmbGFxdW87PC9lbT4nOwoJfQoKCS8vIGRpZSBGdW5rdGlvbiB6dW0gZXh0cmFoaWVyZW4gdm9uIFRlaWxzdHJpbmdzCglmdW5jdGlvbiBhdXNsZXNlbigkYWxsLCAkc3RhcnQsICRlbmQpIHsKCQlpZiAoc3RyaXN0cigkYWxsLCRzdGFydCkpIHsKCQkJJHN0YXJ0X3Bvcz1zdHJwb3Moc3RydG9sb3dlcigkYWxsKSxzdHJ0b2xvd2VyKCRzdGFydCkpICsgc3RybGVuKCRzdGFydCk7CgkJCSRyZXN0ID0gc3Vic3RyKCRhbGwsJHN0YXJ0X3Bvcyk7CgkJCSRlbmRfcG9zPXN0cnBvcyhzdHJ0b2xvd2VyKCRyZXN0KSxzdHJ0b2xvd2VyKCRlbmQpKTsKCQkJJGVyZyA9IHN1YnN0cigkcmVzdCwwLCRlbmRfcG9zKTsKCQkJcmV0dXJuICRlcmc7CgkJfQoJfQoKCgkvLyBkaWUgRnVua3Rpb24genVtIER1cmNoc3VjaGVuIGRlcyBWZXJ6ZWljaG5pc2JhdW1zOgoJaWYgKCFpc3NldCgkZXhjbHVkZV9kaXJzKSkgJGV4Y2x1ZGVfZGlycyA9IGFycmF5KCIiKTsKCglmdW5jdGlvbiB0cmVlKCRvcmRuZXIsICRzdWIgPSBGQUxTRSkgewoJCWdsb2JhbCAkZXJnZWIsICRleGNsdWRlX2RpcnM7CgkJJGhhbmRsZSA9IG9wZW5kaXIoJG9yZG5lcik7CgkJd2hpbGUgKGZhbHNlICE9PSAoJGZpbGUgPSByZWFkZGlyICgkaGFuZGxlKSkpIHsKCQkJaWYoJGZpbGUgIT0gIi4iICYmICRmaWxlICE9ICIuLiIgJiYgaXNfZGlyKCRvcmRuZXIuIi8iLiRmaWxlKSAgJiYgIWluX2FycmF5KCRmaWxlLCAkZXhjbHVkZV9kaXJzKSApIHsKCQkJCSRjb21wbCA9ICRvcmRuZXIuIi8iLiRmaWxlLiIvIjsKCSAgICAgICAJCSRlcmdlYiA9ICRlcmdlYi4iLCIuJGNvbXBsOwogICAgICAgIAkJdHJlZSgkb3JkbmVyLiIvIi4kZmlsZSwgVFJVRSk7CgkJCX0KCQl9CgkgIAljbG9zZWRpcigkaGFuZGxlKTsKCX0KCglpZiAoJGFsbGVkaXJzKSB7CgkgICB0cmVlKCIuIik7CgkgICAkZXJnZWIgPSAiLi8iLiRlcmdlYjsKCSAgICRkaXJzID0gZXhwbG9kZSAoIiwiLCAkZXJnZWIpOwoJfQoKCS8vIHVuc2V0KCRkaXJzW2FycmF5X3NlYXJjaCgnLi90YmEvJywgJGRpcnMpXSk7CgkvLyAvLyBVbmQgdW0gZGVuIEluZGV4IHdpZWRlcmhlcnp1c3RlbGxlbgoJLy8gJGRpcnMgPSBhcnJheV92YWx1ZXMoJGRpcnMpOwoJLy8gcHJpbnRfcigkZGlycyk7IGV4aXQ7CgoJZm9yZWFjaCgkZGlycyBhcyAkZGlyKSB7CQkKCQlpZiAoIWlzX2RpcigkZGlyKSkgeyBjb250aW51ZTt9CgkJCQoJCS8vIGlmKCFpbl9hcnJheSgkZGlyLCRleGNsdWRlX2RpcnMpKSB7CgkJJHZlcnogPSBvcGVuZGlyKCRkaXIpOwoKCQl3aGlsZSgkZmlsZSA9IHJlYWRkaXIoJHZlcnopKSB7CgoJCWlmKCRmaWxlICE9ICIuIiAmJiAkZmlsZSAhPSAiLi4iICYmICRmaWxlICE9ICIuaHRhY2Nlc3MiKSB7CgoKCQkkZHVyY2hzdWNodCA9ICRkdXJjaHN1Y2h0ICsgMTsKCQkvLyBlaW56ZWxuZSBEYXRlaWVuIHZvbiBkZXIgU3VjaGUgYXVzc2NobGllc3NlbgoJCS8vIGRpZSBmb2xnZW5kZW4gOCBaZWlsZW4gZXJsYXViZW4gQXVzY2hsdXNzIHZvbiBTdWJzdHJpbmdzIGluICRleGNsdWRlX2ZpbGVzCgkJJG5vbGlzdD1mYWxzZTsKCQlmb3IgKCRlPTA7JGU8Y291bnQoJGV4Y2x1ZGVfZmlsZXMpOyRlKyspIHsKCQkJJHBvcyA9IHN0cnBvcygkZmlsZSwkZXhjbHVkZV9maWxlc1skZV0pOwoJCQlpZiAoJHBvcyAhPT0gZmFsc2UpIHsKCQkJCSRub2xpc3QgPSB0cnVlOwoJCQl9CgkJfSAKCQkKCQlpZigkbm9saXN0ICE9PSB0cnVlICYmIHByZWdfbWF0Y2goIj0oXC4kZGF0X3R5cGUpJD0iLCRmaWxlKSkgewoKCQkJLy8gTWV0YS1BbmdhYmVuIGVybWl0dGVsbgoJCQkkdGl0ZWwgPSAiIjsKCQkJJGtleXdvcmRzID0gIiI7CgkJCSRkZXNjcmlwdGlvbiA9ICIiOwoJCQlAJGdtdGFycmF5PWdldF9tZXRhX3RhZ3MoJGRpci4kZmlsZSk7CgkJCQkKCQkJZm9yZWFjaCAoJGdtdGFycmF5IGFzICRrZXkxID0+ICR2YWwpIHsKCQkJLy8gd2hpbGUobGlzdCgka2V5MSwkdmFsKT1lYWNoKCRnbXRhcnJheSkpewoJCQkJc3dpdGNoKHN0cnRvbG93ZXIoJGtleTEpKXsKCQkJCQljYXNlICJ0aXRsZSI6ICR0aXRlbD0kdmFsOyBicmVhazsKCQkJCQljYXNlICJrZXl3b3JkcyI6ICRrZXl3b3Jkcz0kdmFsOyBicmVhazsKCQkJCQljYXNlICJkZXNjcmlwdGlvbiI6ICRkZXNjcmlwdGlvbj0kdmFsOyBicmVhazsKCQkJCX0KCQkJfQoKCQkJJHN0cmluZzEgPSAkc3RyaW5nID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRkaXIuJGZpbGUpOwoJCQkJCgkJCSRzdHJpbmcgPSBzdHJfcmVwbGFjZSgiJm5ic3A7IiwiICIsJHN0cmluZyk7IC8vIHdlaWwgc29uc3QgJmx0OyZuYnNwOyBhbHMgbGltaXQtZW5kIHdpcmt0Pz8/CgkJCQoJCQkkc3RyaW5nID0gcHJlZ19yZXBsYWNlKCcjW1xzXXsyLH0jcycsICcgJywgJHN0cmluZyk7IC8vIG1laHJlcmUgTGVlcnplaWNoZW4gaW4gZWlucyB1bXdhbmRlbG4KCQkJCgkJCS8vIHdlaWwgYW5zb25zdGVuIGVpbiAmbHQ7IGltIFF1ZWxsdGV4dCBkZW4gU3VjaGJlcmVpY2ggYmVlbmRldDoKCQkJJHN0cmluZyA9IHN0cl9yZXBsYWNlKCImbHQ7IiwiIiwkc3RyaW5nKTsKCQkJCgkJCWlmIChmaWxlX2V4aXN0cygidGFyZ2V0X3JlcGxhY2UucGhwIikpIHtpbmNsdWRlICgidGFyZ2V0X3JlcGxhY2UucGhwIik7fQoJCQkKCQoJCQkvLyBkYW1pdCB3ZXJkZW4gZ2FuemUgV29lcnRlciBnZWZ1bmRlbiwgYXVjaCB3ZW5uIHNpZSBpbiBUYWdzIGVpbmdlc2NobG9zc2VuIHNpbmQ6CgkJCSRzdHJpbmcgPSBzdHJfcmVwbGFjZSgiPCIsIiA8Iiwkc3RyaW5nKTsKCQkJJHN0cmluZyA9IHN0cl9yZXBsYWNlKCI+IiwiPiAiLCRzdHJpbmcpOwoKCQkJLy8gaHRtbCB0YWdzIG1pdCBlaW5nZXNjaGxvc3NlbmVuIHBocCB0YWdzIHJhdXMgLSB3ZWlsIHNvbnN0IGVpbiBlaW56ZWxuZXMgPCBvZGVyICZsdDsgYWxzIGVuZCB3aXJrdAogIAkJCSRzdWNobXVzdGVyID0gIi88XD9bXj5dK1w/Pi8iOyAKICAJCQkkc3RyaW5nID0gcHJlZ19yZXBsYWNlKCRzdWNobXVzdGVyLCIiLCRzdHJpbmcpOwoKCi8vZWNobyAkZW5jb2Rpbmc7CgkJCWlmIChzdHJwb3Moc3RydG9sb3dlcigkZW5jb2RpbmcpLCJ1dGYiKSE9PSBmYWxzZSkgewoJCQkJJHN0cmluZyA9IGh0bWxfZW50aXR5X2RlY29kZSgkc3RyaW5nLCBFTlRfTk9RVU9URVMsICJVVEYtOCIpOwoJCQl9IGVsc2UgewoJCQkJJHN0cmluZyA9IGh0bWxfZW50aXR5X2RlY29kZSgkc3RyaW5nLCBFTlRfTk9RVU9URVMsICJJU08tODg1OS0xIik7CgkJCX0KICAgICAgICAgICAgCS8vIG51ciBmdWVyIHdkdyBkeW4uIGRlc2NyaXB0aW9uczoKICAgICAgICAgICAgCWlmICgkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSA9PSAid2ViZGVzaWduLndlaXNzaGFydC5kZSIpIHsKICAgCQkJCWlmICgkZGVzY3JpcHRpb24gPT0gIiIpewogICAJCQkJCSRkZXNjcmlwdGlvbiA9IGF1c2xlc2VuKCRzdHJpbmcxLCAiZGVzY3JpcHRpb24iLCAnIjsnKTsKCSAgIAkJCQlpZiAoJGRlc2NyaXB0aW9uICE9ICIiKXsKCQkJCQkJJGRlc2NyaXB0aW9uID0gc3RyaXBfdGFncygkZGVzY3JpcHRpb24pOwoJCQkJCQkkZGVzY3JpcHRpb24gPSBwcmVnX3JlcGxhY2UoIi9cbnxccnxjb250ZW50fFwifD18XC98XD8vIiwgIiIsICRkZXNjcmlwdGlvbik7CgkJCQkJfQogICAJCQkJfQogICAgICAgICAgICAJfQoKCQkJLy8gdW5kIHdlaWwgPHRpdGxlPiBuaWNodCBpbW1lciBhbHMgTWV0YS10YWcgY29kaWVydCB3aXJkOgoJCQlpZiAoJHRpdGVsID09ICIiKSAkdGl0ZWwgPSBhdXNsZXNlbigkc3RyaW5nLCAiPHRpdGxlPiIsICI8L3RpdGxlPiIpOwoKCQkJLy8gd2VpbCBlcyBMZXV0ZSBnaWJ0LCBkaWUgbWV0YSBUYWdzIG1pdCBaZWlsZW51bWJydWNoIHNjaHJlaWJlbjoKCQkJaWYgKCRkZXNjcmlwdGlvbiAhPSAiIil7JGRlc2NyaXB0aW9uID0gc3RyX3JlcGxhY2UoIlxuIiwiIiwkZGVzY3JpcHRpb24pO30KCQkJaWYgKCRrZXl3b3JkcyAhPSAiIil7JGtleXdvcmRzID0gc3RyX3JlcGxhY2UoIlxuIiwiIiwka2V5d29yZHMpO30KCQkJaWYgKCR0aXRlbCAhPSAiIil7JHRpdGVsID0gc3RyX3JlcGxhY2UoIlxuIiwiIiwkdGl0ZWwpO30KCgkJCS8vIERhdGVpZW4gbnVyIHp3aXNjaGVuIGRlbiBiZWlkZW4gbGltaXRlciB0YWdzIGF1c3dlcnRlbjoKCQkJaWYgKCRsaW1pdF9zdGFydCAhPSAiIikgewoJCQkJLy8gV3VyZGUgbmVlZGxlIG5pY2h0IGdlZnVuZGVuLCBnaWJ0IHN0cnBvcygpIGRlbiBib29sZWFuLVdlcnQgRkFMU0UgenVyw4PCvGNrLgoJCQkJaWYgKHN0cnBvcyhzdHJ0b2xvd2VyKCRzdHJpbmcpLHN0cnRvbG93ZXIoJGxpbWl0X3N0YXJ0KSkgIT09IGZhbHNlKSB7CgkJCQkJJHBvcz1zdHJwb3Moc3RydG9sb3dlcigkc3RyaW5nKSxzdHJ0b2xvd2VyKCRsaW1pdF9zdGFydCkpICsgc3RybGVuKCRsaW1pdF9zdGFydCk7CgkJCQkJJHN1YnN0cmluZ19yZXN0ID0gc3Vic3RyKCRzdHJpbmcsJHBvcyk7CgkJCQl9IGVsc2UgewoJCQkJCWlmIChpc3NldCgkbGltaXRfb25seSkgJiYgJGxpbWl0X29ubHkgPT09IHRydWUpIHskc3Vic3RyaW5nX3Jlc3QgPSAiIjt9IC8vZGFtaXQgYnJpY2h0IGRpZSBTdWNoZSBhYiwgd2VubiAkbGltaXRfc3RhcnQgbmljaHQgZ2VmdW5kZW4gd2lyZC4KCQkJCQllbHNlIHskc3Vic3RyaW5nX3Jlc3QgPSAkc3RyaW5nO30KCQkJCX0KCQkJfSBlbHNlIHsKCQkJCSRzdWJzdHJpbmdfcmVzdCA9ICRzdHJpbmc7CgkJCX0KCgkJCS8vIHdlbm4gJGxpbWl0X2VuZCBnZXNldHp0OgoJCQlpZiAoJGxpbWl0X2VuZCAhPSAiIikgewoJCQkJJGVuZF9wb3M9c3RycG9zKHN0cnRvbG93ZXIoJHN1YnN0cmluZ19yZXN0KSxzdHJ0b2xvd2VyKCRsaW1pdF9lbmQpKTsKCQkJCWlmICgkZW5kX3BvcyAhPT0gZmFsc2UpIHsKCQkJCQkkc3RyaW5nID0gc3Vic3RyKCRzdWJzdHJpbmdfcmVzdCwwLCRlbmRfcG9zKTsKCQkJCX0gZWxzZSB7CgkJCQkJJHN0cmluZyA9ICRzdWJzdHJpbmdfcmVzdDsKCQkJCX0KICAgICAgICAgICAgIAl9IGVsc2UgewoJCQkJJHN0cmluZyA9ICRzdWJzdHJpbmdfcmVzdDsKICAgICAgICAgICAgIAl9CgoKCQkJLy9JbmhhbHQgdm9uIHRhZ3MgYXVzd2VydGVuOgoJCQlpZiAoJHRhZ3M9PT1mYWxzZSkgCSRzdHJpbmcgPSBzdHJpcF90YWdzKCRzdHJpbmcpOwoKCQkJLy8gZGllIG1ldGEgdGFncyBpbiBkaWUgU3VjaGUgZWluc2NobGllc3NlbiBnZW1hZXNzIGNvbmZpZzoKICAgICAgICAgICAgCWlmICgkdGFncyA9PT0gdHJ1ZSkgeyRrZXk9dHJ1ZTsgJGRlc2M9dHJ1ZTsgJHRpdD10cnVlO30KCQkJaWYgKCRrZXkgPT09IHRydWUpICRzdHJpbmc9JHN0cmluZy4ka2V5d29yZHM7CgkJCWlmICgkZGVzYyA9PT0gdHJ1ZSkgJHN0cmluZz0kc3RyaW5nLiRkZXNjcmlwdGlvbjsKCQkJaWYgKCR0aXQgPT09IHRydWUpICRzdHJpbmc9JHN0cmluZy4kdGl0ZWw7CgoJCQkkc3RyaW5nID0gc3RyX3JlcGxhY2UoIlxuIiwgIiAiLCAkc3RyaW5nKTsKCgkJCSRzdHJpbmcgPSBzdHJfcmVwbGFjZSgidGl0bGU+IiwgIiIsICRzdHJpbmcpOyAvLyB3ZW5uIFRyZWZmZXIgaW4gPHRpdGxlPiB3aXJkIHRpdGxlPiBhbmdlemVpZ3Q/CgoJCQkKCQkJLy8gdW5lcnd1ZW5zY2h0ZSBTdHJpbmdzIHZvbiBkZXIgU3VjaGUgYXVzc2NobGllc3NlbgoJCQlmb3JlYWNoKCRleGNsdWRlX3N0cmluZ3NfbWVyZ2UgYXMgJGspIHsKCQkJCSRzdHJpbmcgPSBzdHJfcmVwbGFjZSgkaywiIiwkc3RyaW5nKTsKCQkJfQkJCQoKCiAgICAgICAgICAgCQkvLyBFLU1haWxzIHJhdXM6IGh0dHA6Ly93d3cucmVndWxhci1leHByZXNzaW9ucy5pbmZvL2VtYWlsLmh0bWwKICAgICAgICAgICAgCSRzdWNobXVzdGVyID0gJy9cYltBLVowLTkuXyUrLV0rQFtBLVowLTkuLV0rXC5bQS1aXXsyLDR9XGIvaSc7CiAgICAgICAgICAgIAkkc3RyaW5nID0gcHJlZ19yZXBsYWNlKCRzdWNobXVzdGVyLCcnLCAkc3RyaW5nKTsKCgkJCWlmIChmdW5jdGlvbl9leGlzdHMoJ21iX3N0cnRvbG93ZXInKSl7CgkJCQlpZiAobWJfZGV0ZWN0X2VuY29kaW5nKCRzZWFyY2gsICdVVEYtOCcsIHRydWUpICE9PSBmYWxzZSkgeyAvL251ciBzbyBmw7xyIFBIUCA3CgkJCQkJJHN0cmluZ2xvdyA9IG1iX3N0cnRvbG93ZXIoJHN0cmluZywnVVRGLTgnKTsKCQkJCQkkc2VhcmNobG93ID0gbWJfc3RydG9sb3dlcigkc2VhcmNoLCdVVEYtOCcpOwoJCQkJfSBlbHNlIHsKCQkJCQkkc3RyaW5nbG93ID0gc3RydG9sb3dlcigkc3RyaW5nKTsKCQkJCQkkc2VhcmNobG93ID0gc3RydG9sb3dlcigkc2VhcmNoKTsJCgkJCQl9CgkJCX0gZWxzZSB7CgkJCQkkc3RyaW5nbG93ID0gc3RydG9sb3dlcigkc3RyaW5nKTsKCQkJCSRzZWFyY2hsb3cgPSBzdHJ0b2xvd2VyKCRzZWFyY2gpOwoJCQl9CgkJCQoKCQkJLy8gd2VpbCBzdHJ0b2xvd2VyIHVudGVyIFBIUCA1LjQgYW5zY2hlaW5lbmQgbmljaHQgbWVociB0dXQKCQkJJHVtbGF1dF9ncm9zcyA9IGFycmF5KCfDhCcsJ8OWJywnw5wnKTsKCQkJJHVtbGF1dF9rbGVpbiA9IGFycmF5KCfDpCcsJ8O2Jywnw7wnKTsKCQkJJHNlYXJjaGxvdyA9IHN0cl9yZXBsYWNlKCR1bWxhdXRfZ3Jvc3MsICR1bWxhdXRfa2xlaW4sICRzZWFyY2hsb3cpOwoJCQkkc3RyaW5nbG93ID0gc3RyX3JlcGxhY2UoJHVtbGF1dF9ncm9zcywgJHVtbGF1dF9rbGVpbiwgJHN0cmluZ2xvdyk7CgoJCQkjIGRpZSB1bmQtVmVya251ZXBmdW5nOgoJCQkkb3IgPSBmYWxzZTsgCgoJCQlpZiAoKHN0cnBvcygkc2VhcmNobG93LCIgb3IgIikgIT09IGZhbHNlIHx8IHN0cnBvcygkc2VhcmNobG93LCIgb2RlciAiKSAhPT0gZmFsc2UpICYmICBpc3NldCgkc3VjaHRpcDNvcikgJiYgJGF1c2RydWNrICE9PSB0cnVlICkgeyAvLyBVbXNjaGFsdGVuIHZvbiB1bmQgYXVmIG9yIAoJCQkJJG9yID0gdHJ1ZTsKCQkJCSRzZWFyY2hsb3cgPSBzdHJfcmVwbGFjZSgiIG9yICIsICIgIiwgJHNlYXJjaGxvdyk7CgkJCQkkc2VhcmNobG93ID0gc3RyX3JlcGxhY2UoIiBvZGVyICIsICIgIiwgJHNlYXJjaGxvdyk7CgkJCX0KCQkJCQoJCQkjIFdvcnRncnVwcGVuCgkJCWlmICgkYXVzZHJ1Y2sgIT09IGZhbHNlKSB7CgkJCQkkc2VhcmNobG93ID0gc3RyX3JlcGxhY2UoJyZxdW90OycsJycsJHNlYXJjaGxvdyk7CgkJCQkkc2VhcmNobG93ID0gc3RyX3JlcGxhY2UoJyInLCcnLCRzZWFyY2hsb3cpOwoJCQkJJHNlYXJjaF9hcnJbMF0gPSAkc2VhcmNobG93OwoKCQkJfSBlbHNlIHsKCQkJCSRzZWFyY2hfYXJyID0gZXhwbG9kZSgiICIsJHNlYXJjaGxvdyk7CgkJCX0KCQkJJHNlYXJjaF9jb3VudCA9IGNvdW50KCRzZWFyY2hfYXJyKTsKCgoKCQkJJGk9MDsKCQkJZm9yZWFjaCAoJHNlYXJjaF9hcnIgYXMgJHNlYXJjaF93b3JkKSB7CgkJCQlpZiAoQHN0cnBvcygkc3RyaW5nbG93LCRzZWFyY2hfd29yZCkgIT09IGZhbHNlKSB7CSAJLy8gd2VubiBTdWNoYmVncmlmZiB2b3Jrb21tdCwgc2NobmVsbGVyIGFscyBwcmVnX21hdGNoCQkJCQoJCQkJCSRpKys7CgoKCQkJCQlpZiAoJG9yID09PSB0cnVlKSB7JGkgPSAkc2VhcmNoX2NvdW50ID0gMTt9IC8vIGRlciBIYWNrLCB1bSBiZWkgT1IgbmljaHQgenUgd2FydGVuLCBiaXMgYWxsZSBTdWNoYmVncmlmZmUgZ2VmdW5kZW4gd2VyZGVuCgoJCQkJCWlmICgkaT09JHNlYXJjaF9jb3VudCkgewkJLy8gc29iYWxkIGFsbGUgU3VjaGJlZ3JpZmZlIGdlZnVuZGVuIHd1cmRlbi4uLgoJCQkJCQkKCQkJCQkJJHN0cmluZ2xvdyA9IHN0cmlwX3RhZ3MoJHN0cmluZ2xvdyk7CgoJCQkJCQkkdGVzdCA9IEBzdWJzdHJfY291bnQoJHN0cmluZ2xvdywgJHNlYXJjaF93b3JkKTsKCgkJCQkJCWlmICgkc2VhcmNoX2NvdW50ID4gMSl7CgkJCQkJCQkkcG9zPXN0cnBvcygkc3RyaW5nbG93LCRzZWFyY2hfd29yZCk7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkcG9zPXN0cnBvcygkc3RyaW5nbG93LCRzZWFyY2hsb3cpOwoJCQkJCQl9CgoKCQkJCQkJaWYgKCR2b3IgPj0gJHBvcykgewoJCQkJCQkJJHBpZWNlMSA9IHN1YnN0cigkc3RyaW5nLDAsJG5hY2gpOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJHBpZWNlMSA9IHN1YnN0cigkc3RyaW5nLCRwb3MtJHZvciwkdm9yKyRuYWNoKTsKCgkJCQkJCQkkcGllY2UxID0gc3Ryc3RyICgkcGllY2UxLCIgIik7IC8vIHZlcm1laWRldCBCcnVjaHN0dWVja2Ugdm9uIFdvZXJ0ZXJuIGFtIEFuZmFuZyBkZXMgS29udGV4dAoJCQkJCQl9CgoKCQkJCQkJLy8gJHBpZWNlMSA9IHN1YnN0cigkcGllY2UxLCAwLCBzdHJsZW4oc3RycmNocigkcGllY2UxLDMyKSkqKC0xKSkuIiAuLi4iOyAvLyB2ZXJtZWlkZXQgQnJ1Y2hzdHVlY2tlIHZvbiBXb2VydGVybiBhbSBFbmRlIGRlcyBLb250ZXh0CgkJCQkJCSRsZW5ndGggPSAkbmFjaCskdm9yOyAvLyBaZWljaGVubMOkbmdlCgkJCQkJCSRwaWVjZTEgPSBwcmVnX3JlcGxhY2UoICcvW14gXSokLycsICcnLCBzdWJzdHIoICRwaWVjZTEsIDAsICRsZW5ndGggKSApIC4gJyDigKYnOwoJCQkJCQkkcmVzdCA9ICI8YnIgLz4kcGllY2UxIjsKCgoKCQkJCQkJJGZpbGVmb3JzaXplID0gJGZpbGU7CgkJCQkJCWlmICgkc2hvd19leHQgIT09IHRydWUpIHsKCQkJCQkJCSRpbmZvID0gcGF0aGluZm8oJGZpbGUpOwoJCQkJCQkJJGZpbGUgPSAgYmFzZW5hbWUoJGZpbGUsJy4nLiRpbmZvWydleHRlbnNpb24nXSk7CgkJCQkJCX0KCgoJCQkJCQlpZigkdm9yPT0iMCIgJiYgJG5hY2g9PSIwIikgJHJlc3QgPSAiIjsKCgkgICAgICAgICAgICAgICAgICAgIGlmKCEkZGVzY3JpcHRpb24gPT0gIiIgJiYgJHNob3dfZGVzYyA9PSB0cnVlKSAkcmVzdCA9ICI8YnIgLz48c3Ryb25nPiRiZXNjaHJlaWI8L3N0cm9uZz4gJGRlc2NyaXB0aW9uIjsKCQkJCQkJaWYoJGZpbGVuYW1lKSAkdGl0ZWwgPSAkZmlsZTsKCgkJCQkJCWlmIChpc3NldCgkY2hhdmUpICYmICRjaGF2ZSA9PSAiMzIxIil7CgkJCQkJCQkvLyB1bmRvY3VtZW50ZWQ6IG51ciBkaXIgemVpZ2VuCgkJCQkJCQlpZiAoaXNzZXQoJHNob3dfZGlyX29ubHkpICYmICRzaG93X2Rpcl9vbmx5ID09PSB0cnVlKSB7CgkJCQkJCQkJJGxhc3RfZGlyID0gZXhwbG9kZSgnLycsICRkaXIpOwoJCQkJCQkJCSR4ID0gYXJyYXlfa2V5cygkbGFzdF9kaXIpOwoJCQkJCQkJCSRsYXN0X2tleSA9IGVuZCgkeCkgLTE7CgkJCQkJCQkJJHRpdGVsID0gJGxhc3RfZGlyWyRsYXN0X2tleV07CgkJCQkJCQkJJGZpbGU9IiI7CgkJCQkJCQl9CgkJCQkJCX0KCgkJCQkJCWlmKCR0aXRlbCA9PSAiIikgJHRpdGVsID0gJGZpbGU7CgoKCQkJCQkJaWYgKGlzc2V0KCRxdWVyeSkpewoJCQkJCQkJJHFkaXIgPSBzdHJfcmVwbGFjZSgiLi8iLCIiLCRkaXIpOyAvLyBlbnRmZXJudCBkYXMgZnVlaHJlbmRlIC4vIGJlaW0gcXVlcnkgc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAJaWYgKGlzc2V0KCRxdWVyeV9lbmR1bmcpICYmICRxdWVyeV9lbmR1bmcgPT0gIm5vIikgewogICAgICAgICAgICAgICAgICAgICAgICAgIAkJJGZleHQgID0gYXJyYXlfcG9wKGV4cGxvZGUoJy4nLCAkZmlsZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmbmFtZSA9IGJhc2VuYW1lKCRmaWxlLCAnLicuJGZleHQpOwoJCQkJCQkJICAgICRsaW5rID0gJHF1ZXJ5LiRxZGlyLiRmbmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgCX0gZWxzZSB7CgkJCQkJCQkJJGxpbmsgPSAkcXVlcnkuJHFkaXIuJGZpbGU7CiAgICAgICAgICAgICAgICAgICAgICAgCQl9CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkbGluayA9ICRkaXIuJGZpbGU7CgkJCQkJCX0KCgkJCQkJCWlmIChpc3NldCgkcXVlcnkpKXsKCQkJCQkJCS8vIGlmICgkYXVzZHJ1Y2sgPT09IHRydWUpIHsKCQkJCQkJCS8vIAkkbGluayA9ICRsaW5rLicmcT0lMjInLiRzZWFyY2hsb3c7CgkJCQkJCQkvLyB9IGVsc2UgewoJCQkJCQkJLy8gCSRsaW5rID0gJGxpbmsuIiZxPSIuJHNlYXJjaGxvdzsKCQkJCQkJCS8vIH0KCgkJCQkJCQkkbGluayA9ICRsaW5rLiImcT0iLiRzZWFyY2hsb3c7CgoJCQkJCQl9IGVsc2UgewoJCQkJCQkJLy8gaWYgKCRhdXNkcnVjayA9PT0gdHJ1ZSkgewoJCQkJCQkJLy8gCSRsaW5rID0gJGxpbmsuJz9xPSUyMicuJHNlYXJjaGxvdzsKCQkJCQkJCS8vIH0gZWxzZSB7CgkJCQkJCQkvLyAJJGxpbmsgPSAkbGluay4iP3E9Ii4kc2VhcmNobG93OwoJCQkJCQkJLy8gfQoKCQkJCQkJCSRsaW5rID0gJGxpbmsuIj9xPSIuJHNlYXJjaGxvdzsKCQkJCQkJfQoKCgkJCQkJCQkKCgkJCQkJCWlmICgkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSA9PSAid2ViZGVzaWduLndlaXNzaGFydC5kZSIpIHsKCQkJICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIAkJCS8vIFVtbGVpdGVuIHZvbiBLb21tZW50YXJlbiBhdWYgZGVuIEFydGlrZWw6CiAgICAgICAgICAgICAgICAgIAkJCWlmIChzdHJwb3MoJGxpbmssJ2NvbW1lbnQnKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgCQkJJHRpdGVsID0gc3RyX3JlcGxhY2UoImNvbW1lbnRfIiwiIiwkdGl0ZWwpOwogICAgICAgICAgICAgICAgICAgICAJCQkkdGl0ZWwgPSBzdHJfcmVwbGFjZSgiLnhtbCIsIi5waHAiLCR0aXRlbCk7CiAgICAgICAgICAgICAgICAgICAgIAkJCSR0aXRlbCA9ICdLb21tZW50YXIgYXVmIGRlciBTZWl0ZSAnLiR0aXRlbDsKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIAkJCSRsaW5rID0gc3RyX3JlcGxhY2UoImNvbW1lbnRfIiwiIiwkbGluayk7CiAgICAgICAgICAgICAgICAgICAgIAkJCSRsaW5rID0gc3RyX3JlcGxhY2UoIi54bWwiLCIucGhwIiwkbGluayk7CiAgICAgICAgICAgICAgICAgIAkJCX0KCiAgICAgICAgICAgICAgICAgIAkJCS8vIEpldHp0IFVtbGVpdGVuIHZvbiBtZC1UZXh0ZmlsZXMgYXVmIGRlbiBBcnRpa2VsOgogICAgICAgICAgICAgICAgICAJCQlpZiAoc3RycG9zKCRsaW5rLCcvbWFya2Rvd24vJykgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgIAkJCSRsaW5rID0gc3RyX3JlcGxhY2UoIm1hcmtkb3duLyIsIiIsJGxpbmspOwogICAgICAgICAgICAgICAgICAgICAJCQkkbGluayA9IHN0cl9yZXBsYWNlKCJfdGV4dC50eHQiLCIucGhwIiwkbGluayk7CiAgICAgICAgICAgICAgICAgICAgIAkJCSRsaW5rID0gc3RyX3JlcGxhY2UoInBiXyIsIiIsJGxpbmspOwoJCQkgICAJCQkJCSR0aXRlbCA9IHN0cl9yZXBsYWNlKCIuLyIsIiIsJGxpbmspOyAKICAgICAgICAgICAgICAgICAgCQkJfQoJCQkJCQl9CgkJCQkJCQoJCQkJCQlpZiAoaXNzZXQoJGNoYXZlKSAmJiAkY2hhdmUgPT0gIjMyMSIpewoJCQkJICAJCQkvLyBVbWxlaXRlbiB2b24gSW5jbHVkZS1EYXRlaWVuOgoJCQkJICAJCQlpZiAoaXNzZXQoJHJlZGlyX3N1ZmZpeCkgJiYgaXNzZXQoJHJlZGlyX3JlcGxhY2UpKSB7CiAgICAgICAgICAgICAgICAgICAgIAkJCSR0aXRlbCA9IHN0cl9yZXBsYWNlKCRyZWRpcl9zdWZmaXgsJHJlZGlyX3JlcGxhY2UsJHRpdGVsKTsKICAgICAgICAgICAgICAgICAgICAgCQkJJGxpbmsgPSBzdHJfcmVwbGFjZSgkcmVkaXJfc3VmZml4LCRyZWRpcl9yZXBsYWNlLCRsaW5rKTsKCQkJCSAgCQkJfQkJCQkKCQkJCQkJfQoJCQkJCQkKCQkJCQkJaWYoJHRpdGVsICE9ICIiKSB7CgkJCQkJCQkKCQkJCQkJCSR0aXRlbCA9IHRyaW0oJHRpdGVsKTsKCgkJCQkJCQlpZiAoJHRhcmdldCA9PSAiYmxhbmsiKSB7CgkJCQkJCQkJJHppZWwgPSAnIHRhcmdldD0iX2JsYW5rIic7CgkJCQkJCQkJJGp1bXAgPSBmYWxzZTsKCQkJCQkJCX0gZWxzZWlmICgkdGFyZ2V0ID09ICJwYXJlbnQiKSB7CgkJCQkJCQkJJHppZWwgPSAnIHRhcmdldD0iX3BhcmVudCInOwoJCQkJCQkJCSRqdW1wID0gZmFsc2U7CgkJCQkJCQl9IGVsc2VpZiAoJHRhcmdldCAhPSAiIikgewoJCQkJCQkJCSR6aWVsID0gJyB0YXJnZXQ9IicuJHRhcmdldC4nIic7CgkJCQkJCQkJJGp1bXAgPSBmYWxzZTsKCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJJHppZWwgPSAnJzsKCQkJCQkJCX0KCgkJCQkJCQkvLyB1bSBkZW4gVVJJLVBhcmFtZXRlciBxPSB6dSB1bnRlcmRyw7xja2VuID0+IGRhbm4gZ2VodCAkdGFyZ2V0d2FobCBuYXTDvHJsaWNoIG5pY2h0IG1laHIsIHdlaWwgbGlua29wZW5lciBpbiBzZWFyY2gucGhwICI/cT0iIGFiZnJhZ3QKCQkJCQkJCWlmIChpc3NldCgkcXVlcnlzdHJpbmcpICYmICRxdWVyeXN0cmluZyA9PT0gdHJ1ZSkgeyRsaW5rID0gc3RyX3JlcGxhY2UoJz9xPScuJHNlYXJjaGxvdywnJywkbGluayk7fQoJCQkJCQkJaWYgKCRwZmFkID09IHRydWUpIHsKCQkJCQkJCQkKCQkJCQkJCQlpZiAoaXNzZXQoJHF1ZXJ5KSl7CgkJICAgICAgICAgICAgICAgICAgICAgICAgCSR1cmwgPSAiIDxhIGhyZWY9XCIiLiRsaW5rLiJcIiIuJHppZWwuIj4iLiRwcm90LiRwZmFkaW5mby4kbGluay4iPC9hPiAiOwoJCQkJCQkJCX0gZWxzZSB7CgoJCQkJCQkJLy8kbGlua19hbnogPSBzdHJfcmVwbGFjZSgnI3dkd19zdWNoZScsJycsJGxpbmspOwoJCQkJCQkJJGxpbmtfYW56ID0gc3RyX3JlcGxhY2UoJyUyMicsJycsJGxpbmspOwoJCQkJCQkJJGxpbmtfYW56ID0gc3RyX3JlcGxhY2UoJz9xPScuJHNlYXJjaGxvdywnJywkbGlua19hbnopOwoJCQkJCQkJJGxpbmtfYW56ID0gc3RyX3JlcGxhY2UoJy4uLycsJy8nLCRsaW5rX2Fueik7CgkJCQkJCQkkbGlua19hbnogPSBzdHJfcmVwbGFjZSgnLi8nLCcvJywkbGlua19hbnopOwoJCQkJCQkJaWYgKHN0cnBvcyAoJGxpbmssJy4uJykgIT09IGZhbHNlKSB7JHBmYWRpbmZvID0gc3RyX3JlcGxhY2UoJHAyLCcnLCRwZmFkaW5mbyk7fQoJCQkJCQkJCQkKCQkJCQkJCS8vICR1cmwgPSAiIDxhIGhyZWY9XCIiLiRsaW5rLiJcIiIuJHppZWwuIj4iLiRwcm90LiRwZmFkaW5mby5zdWJzdHIoJGxpbmssMSkuIjwvYT4gIjsKCQkgICAgICAgICAgICAgICAgICAgICAgICAJJHVybCA9ICIgPGEgaHJlZj1cIiIuJGxpbmsuIlwiIi4kemllbC4iPiIuJHByb3QuJHBmYWRpbmZvLiRsaW5rX2Fuei4iPC9hPiAiOwoJCQkJCQkJCX0KCSAgICAgICAgICAgICAgICAgICAJCX0gZWxzZSB7CgkgICAgICAgICAgICAgICAgICAgICAJCSR1cmwgPSAiIjsKCSAgICAgICAgICAgICAgICAgICAgICAgCX0KCgkgICAgICAgICAgICAgICAgICAgCQlpZiAoJGFlbmRfZGF0ID09IHRydWUpIHsKCQkJCQkJCQlpZiAoJGRhdGVmb3JtID09ICJlbiIpIHsKCQkJCQkJCQkJQCRtb2QgPSAkZmlsZWRhdGUuZGF0ZSgibS9kL3kiLCBmaWxlbXRpbWUoJGRpci4kZmlsZWZvcnNpemUpKTsKCQkJCQkJCQkKCQkJCQkJCQl9IGVsc2VpZiAoJGRhdGVmb3JtID09ICJkZSIgfHwgJGRhdGVmb3JtID09ICIiIHx8ICFpc3NldCgkZGF0ZWZvcm0pKSB7CgkJCQkJCQkJCUAkbW9kID0gJGZpbGVkYXRlLmRhdGUoImQubS55IiwgZmlsZW10aW1lKCRkaXIuJGZpbGVmb3JzaXplKSk7CgkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJQCRtb2QgPSAkZmlsZWRhdGUuZGF0ZSgkZGF0ZWZvcm0sIGZpbGVtdGltZSgkZGlyLiRmaWxlZm9yc2l6ZSkpOwoJCQkJCQkJCX0KCQkJCQkJCQkkbW9kID0gIjxzcGFuIGNsYXNzPSdtb2QxJz4iLiRtb2QuIjwvc3Bhbj4iOwoJCQkJCQkJfSBlbHNlIHsKCSAgICAgICAgICAgICAgICAgICAgCQkkbW9kID0gIiI7CgkgICAgICAgICAgICAgICAgICAgIAl9CgoJCQkJCQkJLy8gZWluIFRodW1iIGVpbmJpbmRlbiwgd2VubiBlaW5lIEdyYWZpay1EYXRlaSBtaXQgZ2xlaWNoZW0gRGF0ZWluYW1lbiBpbSBPcmRuZXIgbGllZ3QKCQkJCQkJCQoJCQkJCQkJJHRodW1iID0gJyc7CgkJCQkJCQlpZiAoaXNzZXQoJGNoYXZlKSAmJiAkY2hhdmUgPT0gIjMyMSIgJiYgJHNob3dfZXh0ICE9PSBmYWxzZSkgewoJCgkJCQkJCQkJJGV4dGVuc2lvbnMgPSBhcnJheSgiLmh0bSIsIi5odG1sIiwiLnNodG1sIiwiLnBocCIsIi5waHAzIiwiLnBocDQiLCIucGhwNSIsICIucGRmIik7CgkJCQkJCQkJJHRodW1iID0gc3RyX3JlcGxhY2UoJGV4dGVuc2lvbnMsJHRodW1iX3JlcGxhY2UsJGxpbmspOwoJCQkJCQkJfQoKCQkJCQkJCSRpbWdsaW5rID0gIiI7CgkJCQkJCQkkdGh1bWIgPSBzdHJ0b2soJHRodW1iLCAnPycpOwoJCQkJCQkJaWYgKGZpbGVfZXhpc3RzKCR0aHVtYikgJiYgJHRodW1iICE9ICRsaW5rKSB7CgkJCQkJCQkJJGltZ2xpbmsgPSAnPGEgaHJlZiA9IicuJGxpbmsuJyIgYXJpYS1oaWRkZW49InRydWUiPjxpbWcgc3JjPSInLiR0aHVtYi4nIiBhbHQ9IlN5bWJvbCBkZXIgU2VpdGUgIi8+PC9hPic7CgkJCQkJCQl9CgoJICAgICAgICAgICAgICAgIAkJJHRyZWZmX2Fuej0iIjsKCSAgICAgICAgICAgICAgICAgIAkJaWYoJHRyZWZmZXIgJiYgJHRlc3Q+PTEpICR0cmVmZl9hbno9IjxzcGFuIGNsYXNzPSd0cmVmZmVyJz5bIi4kdGVzdC4iJm5ic3A7Ii4kdHJlZmYuIl08L3NwYW4+IjsKCgkJCQkJLy8gc28ga2FubiBtYW4gYWxwaGFiZXRpc2NoIHNvcnRpZXJlbjogKE5lZ2VydHJpY2spCgkJCQkJaWYgKGlzc2V0KCRhbHBoYXNvcnQpICYmICRhbHBoYXNvcnQgPT09IHRydWUpIHskdGVzdCA9ICR0aXRlbDt9CgoJCQkJCS8vIFRyZWZmZXIgYmVpIG9yIG51ciBlaW5tYWwgYXVmbGlzdGVuCgkJCQkJaWYgKCFpbl9hcnJheSgkbGluaywgJGJlcmVpdHNfZm91bmQpKSB7CgkJCQkJCWlmICgkb3IgPT09IHRydWUpIHskYmVyZWl0c19mb3VuZFtdID0gJGxpbms7fSAKCiAgICAgICAgICAgICAgICAgICAgICAJCQlpZiAoJHBmYWQgfHwgJGFlbmRfZGF0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIAkJCWlmICgkaWZyYW1lICE9PSB0cnVlKSB7IAogICAgICAgICAgICAgICAgICAgICAgICAgCQkJCSRhcnJheSAuPSAkdGVzdC4kaW1nbGluay4iPGEgaHJlZj1cIiIuJGxpbmsuIlwiIi4kemllbC4iPiIuJHRpdGVsLiI8L2E+ICIuJGxpc3RfaHhfZW5kLiR0cmVmZl9hbnouJHJlc3QuIjxzcGFuIGNsYXNzPSdtb2QnPiIuJHVybC4iPC9zcGFuPiIuJG1vZC4iXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAJCQl9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJJGFycmF5IC49ICIkbGlua1xuIjsKICAgICAgICAgICAgICAgICAgICAgICAJCQkJfQogICAgICAgICAgICAgICAgICAgICAJCQl9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAJCQlpZiAoJGlmcmFtZSAhPT0gdHJ1ZSkgeyAKICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkkYXJyYXkgLj0gJHRlc3QuJGltZ2xpbmsuIjxhIGhyZWY9XCIiLiRsaW5rLiJcIiIuJHppZWwuIj4iLiR0aXRlbC4iPC9hPiAiLiRsaXN0X2h4X2VuZC4kdHJlZmZfYW56LiRyZXN0LiJcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQl9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgIAkJCQkJJGFycmF5IC49ICIkbGlua1xuIjsKICAgICAgICAgICAgICAgICAgICAgICAgIAkJCX0KICAgICAgICAgICAgICAgICAgICAgICAgCQl9CgkJCQkJCSRmb3VuZCArKzsKCQkJCQl9CgoKCSAgICAgICAgICAgICAgIAkJCS8vJGZvdW5kICsrOwoKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCS8vIH0KCX0KCX0KCX0KCQoJQGNsb3NlZGlyKCR2ZXJ6KTsKCgl9CmVjaG8gJzwvcD4nOwppZiAoJHNlYXJjaCA9PSAiwqdmb3VuZCIpIHtlY2hvICcmIzgzO3UmIzk5O2gmIzExNTtjJiMxMTQ7aSYjMTEyO3QgJiMxNjk7IDImIzQ4OzA1ICYjMTE5O2UmIzk4O2QmIzEwMTtzJiMxMDU7Z24mIzQ2OyYjMTE5ZSYjMTA1O3MmIzExNTtoJiM5NztyJiMxMTY7JiM0NjsmIzEwMDtlJztleGl0O30KCgovLyBMb2dkYXRlaSBzY2hyZWliZW4gdW5kIEJlbmFjaHJpY2h0aWd1bmdzLU1haWwgbWl0IGlwIC0gU3BlcnJlOgoKLy8gaXAgYW5vbnltaXNpZXJlbjoKJHJlbG9hZF9pcCA9ICRfU0VSVkVSWyJSRU1PVEVfQUREUiJdOwokaXBfYXJyYXkgPSBleHBsb2RlKCIuIiwkcmVsb2FkX2lwKTsKJHJlbG9hZF9pcCA9ICRpcF9hcnJheVswXS4iLiIuJGlwX2FycmF5WzFdLiIuIi4kaXBfYXJyYXlbMl0uIi54eHgiOwoKCmZ1bmN0aW9uIHNjaHJlaWJlbigkZGF0ZWksJG1vZGUpewoJZ2xvYmFsICRzZWFyY2gsICRyZWxvYWRfaXA7CgkkZnAgPSBAZm9wZW4oJGRhdGVpLCRtb2RlKTsKCWZ3cml0ZSgkZnAsJHJlbG9hZF9pcC4ifCIudGltZSgpLiJ8Ii4kc2VhcmNoLiJcbiIpOwoJZmNsb3NlKCRmcCk7Cn0KCgpmdW5jdGlvbiBpcF9zcGVycmUoKSB7CglnbG9iYWwgJHNlYXJjaCwgJHJlbG9hZGxpbWl0LCAkaW5zdGFsbGF0aW9uX3BhdGgsJHJlbG9hZF9pcDsKCSRyZWxvYWRsb2dkYXRlaSA9ICRpbnN0YWxsYXRpb25fcGF0aC4nL3JlbG9hZC50eHQnOwoJJGFuemFobGVpbnRyYWVnZSA9IDEwMDsKCSRhdXNnYWJlID0gZmFsc2U7CgoJLy8gUHJ1ZWZlbiwgb2IgcmVsb2FkZGF0ZWkgZXhpc3RpZXJ0ID0+IGFuc29uc3RlbiBFcnN0ZWxsZW4KCglpZighZmlsZV9leGlzdHMoJHJlbG9hZGxvZ2RhdGVpKSkgewoJCSRkYXRlaSA9IGZvcGVuKCRyZWxvYWRsb2dkYXRlaSwidysiKTsKCQlmY2xvc2UoJGRhdGVpKTsKCX0KCgkkZnAgPSBmaWxlKCRyZWxvYWRsb2dkYXRlaSk7Cgkkc2l6ZSA9IHNpemVvZigkZnApOwoJJGF1c2dhYmUgPSBmYWxzZTsKCS8vIERhdGVpIHNjaHJlaWJlbiwgd2VubiBMaXN0ZSB2b2xsOgoJaWYoJHNpemUgPj0gJGFuemFobGVpbnRyYWVnZSl7CgkJc2NocmVpYmVuKCRyZWxvYWRsb2dkYXRlaSwidyIpOwoKCS8vIFBydWVmZW4sIG9iIGVpbmUgSVAgaW4gZGVyIExpc3RlIHN0ZWh0Cgl9IGVsc2UgewoJCWZvciAoJGk9MDskaTwkc2l6ZTskaSsrKSB7CiAgICAgIAkJJHplaWxlID0gZXhwbG9kZSgifCIsJGZwWyRpXSk7CgoKCgoJCQlpZiAoJHplaWxlWzFdID4gdGltZSgpLTMgfHwKCQkJCQkKCQkJJHplaWxlWzBdID09ICRyZWxvYWRfaXAgJiYgJHplaWxlWzFdID4gdGltZSgpLTYgfHwKCQkJJHplaWxlWzBdID09ICRyZWxvYWRfaXAgJiYgdHJpbSgkemVpbGVbMl0pID09ICRzZWFyY2ggJiYgJHplaWxlWzFdID4gKHRpbWUoKS0kcmVsb2FkbGltaXQpKSB7IC8vIGdsZWljaGUgSVAsIHJlbG9hZGxpbWl0IHVuZCBnbGVpY2hlciBTdWNoYmVncmlmZgoJCQkJJGF1c2dhYmUgPSB0cnVlOwogICAgICAJCX0KCQl9CgkJLy8gUHJvdG9rb2xsaWVydCBkaWUgSVAtQWRyZXNzZSAoc2NocmVpYnQpOgoJCXNjaHJlaWJlbigkcmVsb2FkbG9nZGF0ZWksImErIik7Cgl9CgoKCXJldHVybiBAJGF1c2dhYmU7Cn0KCi8vIGpldHp0IExvZ2ZpbGUgdW5kIEJlbmFjaHJpY2h0aWd1bmdzLU1haWwgc2NocmVpYmVuOgoKaWYoaXBfc3BlcnJlKCk9PT1mYWxzZSkgewoKCS8vIEJlbmFjaHJpY2h0aWd1bmdzIE1haWw6CglpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9zdHJ0b2xvd2VyJykpewoJCWlmIChtYl9kZXRlY3RfZW5jb2RpbmcoJHNlYXJjaCwgJ1VURi04JywgdHJ1ZSkgIT09IGZhbHNlKSB7IC8vbnVyIHNvIGbDvHIgUEhQIDcKCQkJJHN1Y2hiZWdyaWZmX21haWwgPSBodG1sc3BlY2lhbGNoYXJzKCRzZWFyY2gsIEVOVF9OT1FVT1RFUywgIlVURi04Iik7CgkJCSRzdWNoYmVncmlmZl9sb2cgPSB1dGY4X2RlY29kZSgkc3VjaGJlZ3JpZmZfbWFpbCk7CgkJfSBlbHNlIHsKCQkJJHN1Y2hiZWdyaWZmX21haWwgPSBodG1sc3BlY2lhbGNoYXJzKCRzZWFyY2gsIEVOVF9OT1FVT1RFUywgIklTTy04ODU5LTE1Iik7CgkJCSRzdWNoYmVncmlmZl9sb2cgPSAkc3VjaGJlZ3JpZmZfbWFpbDsJCgkJfSAKCX0gZWxzZSB7CgkJJHN1Y2hiZWdyaWZmX21haWwgPSBodG1sc3BlY2lhbGNoYXJzKCRzZWFyY2gsIEVOVF9OT1FVT1RFUywgIklTTy04ODU5LTE1Iik7CgkJJHN1Y2hiZWdyaWZmX2xvZyA9ICRzdWNoYmVncmlmZl9tYWlsOwoJfQoJCgkkaGVhZGVyID0gJ0Zyb206ICcuJGFkbWluYWRkcmVzcy4nJyAuICJcclxuIiAuJ1gtTWFpbGVyOiBQSFAvJyAuIHBocHZlcnNpb24oKTsKCQoJaWYoJG1haWwgPT0gdHJ1ZSAmJiAkc2VhcmNoICE9ICR2YWx1ZSkgewoJCWlmICghJHNlbmRlcikgeyRzZW5kZXIgPSAiU3VjaHNjcmlwdCI7fQoJCW1haWwoJGFkbWluYWRkcmVzcywiU3VjaGUgYXVmICRzZWl0ZSIsIiRzZW5kZXIgXG5cbkZvbGdlbmRlciBCZWdyaWZmIHd1cmRlIHNvZWJlbiBhdWYgZGVyIFNlaXRlICRzZWl0ZSBnZXN1Y2h0OiBcbiRzdWNoYmVncmlmZl9tYWlsXG5UcmVmZmVyOiAkZm91bmQiLCRoZWFkZXIpOwoJfQoKCS8vIExvZ2ZpbGUgc2NocmVpYmVuOgoJJHRvZGF5ID0gZGF0ZSgiZC5tLlkgSDppICIpOwoJJG5sID0gJHRvZGF5LiRzdWNoYmVncmlmZl9sb2cuIigiLiRmb3VuZC4iKVxuIjsKCSRsaW5lcyA9IGZpbGUoJGluc3RhbGxhdGlvbl9wYXRoLicvc2VhcmNobG9nLnR4dCcpOwoJJGxpbmVzID0gYXJyYXlfdW5pcXVlKCRsaW5lcyk7IC8vIER1cGxpa2F0ZSBsb2VzY2hlbgoKCS8vIFdlbm4gbWVociBhbHMgJG1heG1zZyAoZGVmYXVsdDoxMDApIExvZ2VpbnRyYWVnZSBhZWx0ZXN0ZSBsb2VzY2hlbjoKCS8vICRtYXhtc2cgPSAxMDA7CglpZihjb3VudCgkbGluZXMpID4gJG1heG1zZykgdW5zZXQoJGxpbmVzWzBdKTsKCgkkbmwgPSBpbXBsb2RlKCIiLCAkbGluZXMpLiRubDsKCiAKCSRmcDIgPSBmb3BlbigkaW5zdGFsbGF0aW9uX3BhdGguJy9zZWFyY2hsb2cudHh0JywgJ3diJyk7Cglmd3JpdGUoJGZwMiwgJG5sKTsKCWZjbG9zZSgkZnAyKTsKfQoKCgoJaWYoJGZvdW5kID09ICIwIikJewoJCWVjaG8gJG5vcmVzdWx0OwoJCWlmIChzdHJsZW4oJHNlYXJjaCkgPiAkbGVuZ3RoICYmICR2b3JzY2hsYWcgIT0gIiIpIHsgCgoJCQkkc3luID0gc3RyX3JlcGxhY2UoJyZxdW90OycsJycsJHNlYXJjaCk7CgkJCSRzeW4gPSBzdHJfcmVwbGFjZSgnIicsJycsJHNlYXJjaCk7CgkJCgkJCWlmIChzdHJwb3Moc3RydG9sb3dlcigkZW5jb2RpbmcpLCJ1dGYiKSE9PSBmYWxzZSkgewoJCQkJJHN5biA9IG1iX3N1YnN0cih0cmltKCRzeW4pLDAsJGxlbmd0aCwndXRmLTgnKTsKCQkJfSBlbHNlIHsKCQkJCSRzeW4gPSBzdWJzdHIodHJpbSgkc3luKSwwLCRsZW5ndGgpOwoJCQl9CgoJCQllY2hvICI8cD4kdm9yc2NobGFnIDxhIGhyZWYgPVwiIi4gYmFzZW5hbWUoJF9TRVJWRVJbJ1BIUF9TRUxGJ10pLiI/cT0kc3luJmFtcDtnZWdlbj0mYW1wO2RhdGU9Ii50aW1lKCkuIlwiPiRzeW48L2E+LjwvcD4iOwoJCX0KCX0KCglpZigkZm91bmQgPT0gIjEiICYmICRqdW1wID09IHRydWUgJiYgJF9TRVJWRVJbJ1BIUF9TRUxGJ10gIT0gc3Vic3RyKCRsaW5rLDEpKQl7IC8vZGFzIFN1Y2hzY3JpcHQgc2VsYnN0IGRhcmYgbmljaHQgYW5nZXNwcnVuZ2VuIHdlcmRlbjogRW5kbG9zc2NobGVpZmUKICAJCSRsaW5rID0gc3Vic3RyKCRsaW5rLDEpOwkvL2RlbiBQdW5rdCB2b3IgZGVtIGRpciB3ZWcKCQkkbGluayA9IHN0cl9yZXBsYWNlKCc/cT0nLiRzZWFyY2hsb3csJycsJGxpbmspOwoKCQkkc2VhcmNoID0gc3RyX3JlcGxhY2UoJyZxdW90OycsJyInLCRzZWFyY2gpOyAvLyB3ZWdlbiBzZWFyY2h0ZXJtLmpzCgkJCgkJLy8gZG9wcGVsdGUgc2xhc2ggdm9yIERhdGVpbmFtZW4gdW50ZXJkcnVlY2tlbgoJCSRkaXJuYW1lID0gZGlybmFtZSgkX1NFUlZFUlsnUEhQX1NFTEYnXSk7CgkJaWYoJGRpcm5hbWUgPT0gIi8iKSAkZGlybmFtZSA9ICIiOwoJCS8vIGJhY2tzbGFzaCB2b24gV2luZG93cyBTZXJ2ZXJuIHJhdXM6CgkJJGRpcm5hbWUgPSBzdHJfcmVwbGFjZSgiXFwiLCIiLCRkaXJuYW1lKTsKCgoKCQlpZiAoaXNzZXQoJHF1ZXJ5KSl7CgkJCWhlYWRlcigiTG9jYXRpb246IC8vIi4kX1NFUlZFUlsnSFRUUF9IT1NUJ10uJGRpcm5hbWUuIi8iLiRsaW5rLiImcT0iLiRzZWFyY2gpOwoJCX0gZWxzZSB7CgkJCWhlYWRlcigiTG9jYXRpb246IC8vIi4kX1NFUlZFUlsnSFRUUF9IT1NUJ10uJGRpcm5hbWUuJGxpbmsuIj9xPSIuJHNlYXJjaCk7CgkJfQoJCWV4aXQ7CgoJfQoKCWlmKCRmb3VuZCA+ICIxIikgewogICAgICAgICRuID0gJHBsdXJhbDsgJGUgPSAiZSI7ICRzID0gInMiOwoJfSBlbHNlIHsKICAgIAkkZSA9ICRuID0gJHMgPSAiIjsKCX0KCglpZigkZm91bmQgPj0gIjEiKSB7CgoJCSRhcnJheSA9IGV4cGxvZGUoIlxuIiwgJGFycmF5KTsKCQlpZiAoaXNzZXQoJGFscGhhc29ydCkgJiYgJGFscGhhc29ydCA9PT0gdHJ1ZSkgewoJCQlzb3J0KCRhcnJheSk7CgkJfSBlbHNlIHsKCQkJbmF0c29ydCgkYXJyYXkpOwoJCX0KCQlyZXNldCgkYXJyYXkpOwoJCWlmICghaXNzZXQoJHJldmVyc2Vzb3J0KSkgeyRhcnJheSA9IGFycmF5X3JldmVyc2UoJGFycmF5KTt9CgogICAgICAkaSA9ICRhbnpfZGF0OwoKCiAgICAgIC8vIGFuc3RlbGxlIGRlciB3aGlsZSBlaW4gZm9yIFNjaGxlaWZlLCB3ZW5uIGljaCB3ZWl0ZXJlIFNlaXRlbiBhbnplaWdlbiB3aWxsOgogICAgICAkbmV4dD0wOwogICAgICBpZihpc3NldCgkX0dFVFsibmV4dCJdKSB8fCBpc3NldCgkX1BPU1RbIm5leHQiXSkpIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCRfR0VUWyJuZXh0Il0pICYmICRfR0VUWyJuZXh0Il0gIT0gIiIpICRuZXh0ID0gJF9HRVRbIm5leHQiXTsKICAgICAgICAgICAgaWYgKGlzc2V0KCRfUE9TVFsibmV4dCJdKSAmJiAkX1BPU1RbIm5leHQiXSAhPSAiIikgJG5leHQgPSAkX1BPU1RbIm5leHQiXTsKICAgICAgfQogICAgICAKICAgICAgJG5leHQxPSRuZXh0KzE7CiAgICAgICR3ZWl0ZXI9JG5leHQrJGFuel9kYXQ7CiAgICAgIGZvcigkY291bnQgPSAwICsgJG5leHQ7ICRjb3VudCA8ICRhbnpfZGF0ICsgJG5leHQ7ICRjb3VudCsrKSB7CiAgICAgICAgIGlmICgkaWZyYW1lICE9PSB0cnVlKSB7IAoKCiAgICAgICAgICAgIGlmIChAJGFycmF5WyRjb3VudF0pICRhdXNnYWJlIC49ICI8bGk+Ii4kbGlzdF9oeF9zdGFydC5zdWJzdHIoc3Ryc3RyKCRhcnJheVskY291bnRdLCAnPGEgaHJlZicpLDApLiI8L2xpPlxuIjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKEAkYXJyYXlbJGNvdW50XSkgJGF1c2dhYmUgLj0gIjxpZnJhbWUgY2xhc3M9J3NlYXJjaGlmcmFtZScgc3JjPSciLiRhcnJheVskY291bnRdLiInPjwvaWZyYW1lPlxuIjsKICAgICAgICAgfQoJCiAgICAgIH0KCQoJCglpZiAoIWlzc2V0KCRmb3VuZHR4dDEpKXskZm91bmR0eHQxID0gIklociBTdWNoYmVncmlmZiB3dXJkZSBhdWYgIjt9CglpZiAoIWlzc2V0KCRmb3VuZHR4dDIpKXskZm91bmR0eHQyID0gIlNlaXRlIjt9CglpZiAoIWlzc2V0KCRmb3VuZHR4dDMpKXskZm91bmR0eHQzID0gIiBnZWZ1bmRlbiI7fQoJJGxlZXIgPSAiICI7CglpZiAoJGZvdW5kdHh0MyA9PSIiKSB7JGxlZXIgPSAiIjt9CgoJCWVjaG8gJzxwPicuJGZvdW5kdHh0MS4nPHN0cm9uZz4gJy4kZm91bmQuJyA8L3N0cm9uZz4nLiRmb3VuZHR4dDIuJG4uJGxlZXIuJGZvdW5kdHh0MzsKCiAgICAgIGlmICgkbmV4dCA9PSAwKSB7CiAgICAgICAgICAgIGlmICgkYW56X2RhdCA8ICRmb3VuZCkgewogICAgICAJCQlpZiAoaXNzZXQoJGFuZ2V6ZWlndHR4dCkpewogICAgICAgICAJCQkJZWNobyAkYW5nZXplaWd0dHh0OwogICAgICAJCQl9IGVsc2UgewogICAgICAgICAJCQkJZWNobyAiPGJyIC8+QW5nZXplaWd0IHdlcmRlbiA8c3Ryb25nPiRhbnpfZGF0PC9zdHJvbmc+IEVyZ2Vibmlzc2UgcHJvIFNlaXRlIjsKICAgICAgCQkJfQogICAgICAJCX0KCi8vICAgICAgCQlpZigkdHJlZmZlciAmJiAkZm91bmQgPiAxICYmICRvciA9PT0gZmFsc2UpIHsgCgkgICAgICAJaWYoJHRyZWZmZXIgJiYgJGZvdW5kID4gMSkgeyAKICAgICAgCQkJaWYgKGlzc2V0KCRzb3J0dHh0KSl7CiAgICAgIAkJCQkkc29ydGhpbndlaXMgPSAkc29ydHR4dDsKICAgICAgCQkJfSBlbHNlIHsKICAgICAgCQkJCSRzb3J0aGlud2VpcyA9ICIsIHNvcnRpZXJ0IG5hY2ggW0FuemFobCZuYnNwO2RlciZuYnNwO1RyZWZmZXImbmJzcDtwcm8mbmJzcDtEb2t1bWVudF0iOwogICAgICAJCQl9CiAgICAgIAkJfSAKCQkJZWNobyAiJHNvcnRoaW53ZWlzLiI7CiAgICAgIH0KICAgICAgZWNobyAiPC9wPiI7CgovLyBOZXVlcyBGZW5zdGVyCmlmICgkdGFyZ2V0ID09ICIiICYmICR0YXJnZXR3YWhsID09IHRydWUpIHsKZWNobycKPHNjcmlwdD4KLyogPCFbQ0RBVEFbICovCmlmKGRvY3VtZW50LmNvb2tpZS5pbmRleE9mKFwnc3VjaG9lZmZuZW5cJykgIT09IC0xKXsKICAgYWRkRXZlbnQod2luZG93LCBcJ2xvYWRcJywgbGlua29wZW5lcik7CiAgIGRvY3VtZW50LndyaXRlIChcJzxmb3JtIGFjdGlvbj0iIj48cCBjbGFzcz0ibGlua29wZW5lciI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBjaGVja2VkPSJjaGVja2VkIiBvbmNoYW5nZT0ibGlua2Nvb2tpZSgpIiBvbmNsaWNrPSJsaW5rb3BlbmVyKHRoaXMuY2hlY2tlZCkiIGlkPSJsaW5rc25ld3dpbjEiIC8+IDxsYWJlbCBmb3I9ImxpbmtzbmV3d2luMSI+VHJlZmZlciBpbiBuZXVlbSBGZW5zdGVyICZvdW1sO2ZmbmVuPyA8XC9sYWJlbD48XC9wPjxcL2Zvcm0+XCcpOwp9IGVsc2UgewogICBkb2N1bWVudC53cml0ZSAoXCc8Zm9ybSBhY3Rpb249IiI+PHAgY2xhc3M9ImxpbmtvcGVuZXIiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25jaGFuZ2U9Imxpbmtjb29raWUoKSIgb25jbGljaz0ibGlua29wZW5lcih0aGlzLmNoZWNrZWQpIiBpZD0ibGlua3NuZXd3aW4xIiAvPiA8bGFiZWwgZm9yPSJsaW5rc25ld3dpbjEiPlRyZWZmZXIgaW4gbmV1ZW0gRmVuc3RlciAmb3VtbDtmZm5lbj8gPFwvbGFiZWw+PFwvcD48XC9mb3JtPlwnKTsKfQovKiBdXT4gKi8KPC9zY3JpcHQ+Cic7Cn0KCiAgICAgICAgICAgICRsaXN0X2FydD0idWwiOwogICAgICAgICAgICBpZiAoJG51bV9saXN0KSRsaXN0X2FydD0ib2wgc3RhcnQ9JG5leHQiOwoKICAgICAgICAgICAgLy8gdW0gWE1MIEZlaGxlciAoSFRNTCBUaWR5IFdhcm51bmdlbikgenUgdW50ZXJiaW5kZW46CiAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cudGltcmVldmVzLmRlL25ldS93ZWJkZXNpZ24vd2ViLTIwLnBocAogICAgICAgICAgICAkc3VjaG11c3RlciA9ICcvJig/IShbYS16QS1aXXsyLDd9fCNcZCt8I3hbMC05YS1mQS1GXSspOykvaSc7CiAgICAgICAgICAgICRlcnNldHp1bmcgPSAnJmFtcDsnOwogICAgICAgICAgICAkYXVzZ2FiZSA9IHByZWdfcmVwbGFjZSgkc3VjaG11c3RlciwgJGVyc2V0enVuZywgJGF1c2dhYmUpOwoKICAgICAgICAgICAgaWYgKCRpZnJhbWUgIT09IHRydWUpIHsgCiAgICAgICAgICAgICAgIGlmICgkbnVtX2xpc3QpIHsKICAgICAgICAgICAgICAgICAgZWNobyAiXG48b2wgc3RhcnQ9JyIuJG5leHQxLiInPlxuIi4kYXVzZ2FiZS4iPC9vbD5cbiI7CiAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIGVjaG8gIlxuPHVsPlxuIi4kYXVzZ2FiZS4iPC91bD5cbiI7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgZWNobyAiXG4iLiRhdXNnYWJlLiJcbiI7CiAgICAgICAgICAgIH0KCi8vICAgICAgaWYgKCRuZXh0IDwgKCRmb3VuZCAtICRhbnpfZGF0KSkgewogICAgICAKICAgICAgICAgaWYgKCRtZXRob2QgPT0gIkdFVCIpIHsKICAgICAgICAgICAgLy9uZXh0IHJhdXMsIHdlaWxzIHNvbnN0IHgtbWFsIGFuZ2VoYWVuZ3Qgd2lyZDoKICAgICAgICAgICAgJHF1ZXJ5c3RyaW5nID0gIiI7CiAgICAgICAgICAgIGlmKGlzc2V0KCRfU0VSVkVSWyJRVUVSWV9TVFJJTkciXSkpIHsgCiAgICAgICAgICAgICAgICRxdWVyeXN0cmluZyA9ICRfU0VSVkVSWyJRVUVSWV9TVFJJTkciXTsgCiAgICAgICAgICAgICAgICRmaXJzdHF1ZXJ5ID0gc3RycG9zKCRxdWVyeXN0cmluZywiJm5leHQiKTsKICAgICAgICAgICAgICAgaWYgKCRmaXJzdHF1ZXJ5ICE9PSBmYWxzZSkgeyAKICAgICAgICAgICAgICAgICAgJHF1ZXJ5c3RyaW5nID0gc3Vic3RyKCRxdWVyeXN0cmluZywwLCRmaXJzdHF1ZXJ5KTsgCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoJCQkKCQkJJHByZXZpb3VzID0gJHdlaXRlciAtICgkYW56X2RhdCAqIDIpOyAKCQkJCiAgICAgICAgICAgICRxdWVyeXN0cmluZyA9IHN0cl9yZXBsYWNlKCImIiwiJmFtcDsiLCRxdWVyeXN0cmluZyk7CiAgICAgICAgICAgIAoJCQllY2hvICc8cCBjbGFzcz0id2VpdGVyIj4nOwoJCQkKCQkJaWYgKCRuZXh0ID49ICRhbnpfZGF0KSB7IAoJCQkJZWNobyAnPGEgaHJlZj0iJy5iYXNlbmFtZSgkX1NFUlZFUlsiUEhQX1NFTEYiXSkuJz8nLiRxdWVyeXN0cmluZy4nJmFtcDtuZXh0PScuJHByZXZpb3VzLiciPicuJHp1cnVlY2t0eHQuJzwvYT4nOwoJCQkJLy8gZWNobyAnPHNjcmlwdD5kb2N1bWVudC53cml0ZSAoIjxhIGhyZWY9XCJqYXZhc2NyaXB0Omhpc3RvcnkuYmFjaygpXCI+Jy4kenVydWVja3R4dC4nPC9hPiIpPC9zY3JpcHQ+JzsKCQkJfQoJCQkKCQkJaWYgKCRuZXh0ID49ICRhbnpfZGF0ICYmICRuZXh0IDwgKCRmb3VuZCAtICRhbnpfZGF0KSkgewoJCQkJZWNobyAnIHwgJzsKCQkJCS8vIGVjaG8gJzxzY3JpcHQ+ZG9jdW1lbnQud3JpdGUgKCIgfCAiKTwvc2NyaXB0Pic7CgkJCX0KCQkJCgkJCWlmICgkbmV4dCA8ICgkZm91bmQgLSAkYW56X2RhdCkpIHsKCQkJCWVjaG8gJzxhIGhyZWY9IicuYmFzZW5hbWUoJF9TRVJWRVJbIlBIUF9TRUxGIl0pLic/Jy4kcXVlcnlzdHJpbmcuJyZhbXA7bmV4dD0nLiR3ZWl0ZXIuJyI+Jy4kd2VpdGVydHh0Lic8L2E+JzsKCQkJfQoJCQllY2hvJzwvcD4nOwogICAgICAgICB9Ci8vICAgICAgfQoJfQp9CmVsc2Uge2VjaG8gJG1pbmxlbmd0aDt9Cn0KCmlmKCRmb3VuZCA+PSAiMSIgfHwgIWlzc2V0KCRfR0VUWyJxIl0pICkgewoJJHVsc3RhcnQgPSAiJHNlYXJjaHRpcDA8ZGl2IGlkPSdzdWNodGlwcHMnICBjbGFzcz0na2xhcHBlbicgPlxuPHVsPlxuIjsKfSBlbHNlIHsKCSR1bHN0YXJ0ID0gIiRzZWFyY2h0aXAwPGRpdiBpZD0nc3VjaHRpcHBzJyA+XG48dWw+XG4iOwkKfQoKJHVsZW5kID0gIjwvdWw+XG48L2Rpdj5cbiI7CgppZiAoJHRpcHBzKSB7JHNlYXJjaHRpcCA9ICR1bHN0YXJ0LiRzZWFyY2h0aXAxLiRzZWFyY2h0aXAyLiRzZWFyY2h0aXAzLiRzZWFyY2h0aXAzMS4kc2VhcmNodGlwM29yLiRzZWFyY2h0aXA0LiR1bGVuZDsgfWVsc2UgeyRzZWFyY2h0aXAgPSIiO30KCgplY2hvICRzZWFyY2h0aXA7CgokbXRpbWUgPSBtaWNyb3RpbWUoKTsgJG10aW1lID0gZXhwbG9kZSggJyAnLCAkbXRpbWUpOyAkbXRpbWUgPSAkbXRpbWVbMV0gKyAkbXRpbWVbMF07CiRzdWNoX2VuZGUgPSAkbXRpbWU7CiR0aW1lX2dlc2FtdCA9ICRzdWNoX2VuZGUgLSAkc3VjaF9zdGFydDsKCmVjaG8gIjxkaXYgaWQ9XCJzZWFyY2hmb290ZXJcIj48cD4iOwoKaWYgKGlzc2V0KCRhbnphaGxkYXQpKXsKCSR6ZGF0ID0gJGFuemFobGRhdDsKCX0gZWxzZSB7CgkkemRhdCA9ICJBbnphaGwgZHVyY2hzdWNodGVyIERhdGVpZW46ICI7Cn0KCmlmICgkemFobHplaWcgJiYgJGZvdW5kID4gMCkgZWNobyAkemRhdC4kZHVyY2hzdWNodC4iPGJyIC8+IjsKCmlmICgkZm91bmQgPiAwICkgewoJaWYgKGlzc2V0KCR0aW1ldHh0KSl7CgkJJHRpbWVoaW53ZWlzID0gJHRpbWV0eHQ7Cgl9IGVsc2UgewoJCSR0aW1laGlud2VpcyA9ICJTdWNoZSBhdXNnZWYmdXVtbDtocnQgaW4gIjsKCX0KCglpZigkZGF1ZXIpIHsKCSAgICAgIGVjaG8gIiR0aW1laGlud2VpcyIubnVtYmVyX2Zvcm1hdCgkdGltZV9nZXNhbXQsMiwnLCcsJy4nKS4iICRzdWNoZGF1ZXIgJHZlcnNpb25cbiI7Cgl9IGVsc2UgewoJICAgICAgZWNobyAiXG4kdmVyc2lvblxuIjsKCX0KfSBlbHNlIHsKICAgICAgZWNobyAiXG4kdmVyc2lvblxuIjsKfQplY2hvICI8L3A+PC9kaXY+IjsKZWNobyAkd2R3Owo=";@eval(base64_decode($NCiR0aW1lX29sZCA9IDA7IC8vIGb8ciBkaWUgRm9ydHNjaHJpdHRzYW56ZWlnZQNCiR0aW1lX29sZCA9IDA7IC8vIGb8ciBkaWUgRm9ydHNjaHJpdHRzYW56ZWlnZQ)); 
 
?>

Did this file decode correctly?

Original Code

<?php

################################################################################
# PHP Suchscript - Version 2.5.39                                              #
# copyright webdesign weisshart                                                #
# http://webdesign.weisshart.de                                                #
# dieser copyright Hinweis darf nicht entfernt werden!                         #
#                                                                              #
# Sie koennen dieses Script kostenlos einsetzen,                               #
# solange Sie die Links auf webdesign.weisshart.de unveraendert intakt lassen. #
# Wenn Sie die Links auf webdesign.weisshart.de entfernen wollen,              #
# koennen Sie eine Lizenz erwerben bei                                         #
# http://webdesign.weisshart.de/suchen-lizenz.php                              #
################################################################################

include("search_config.php");

$NCiR0aW1lX29sZCA9IDA7IC8vIGb8ciBkaWUgRm9ydHNjaHJpdHRzYW56ZWlnZQNCiR0aW1lX29sZCA9IDA7IC8vIGb8ciBkaWUgRm9ydHNjaHJpdHRzYW56ZWlnZQ="CQovLyBOZXR0LCBkYXNzIFNpZSBzaWNoIGZ1ZXIgbWVpbmVuIHNvdXJjZWNvZGUgaW50ZXJlc3NpZXJlbi4gRGVyIExpbmsgYXVmIHdlYmRlc2lnbi53ZWlzc2hhcnQuZGUgZGFyZiBudXIgbmFjaCBFcndlcmIgZWluZXIgTGl6ZW56IGVudGZlcm50IHdlcmRlbiEKLy8gQGluaV9zZXQoJ2Rpc3BsYXlfZXJyb3JzJywgJzEnKTsKCgpzZXRsb2NhbGUgKExDX0NUWVBFLCAnZGVfREUnKTsgLy8gc3RydG9sb3dlciBhdWNoIG1pdCBVbWxhdXRlbiAtIGFiZXIgYW5zY2hlaW5lbmQgbmljaHQgdW50ZXIgUEhQIDUuNAoKLy8gUEhQIDgueCBlcnpldWd0IGJlaSBmZWhsZW5kZW0gZGlyIGVpbmVuIGZhdGFsIGVycm9yLgovLyAkaSA9IDA7Ci8vICRtaXNzaW5nX2RpciA9ICIiOwovLyBpZiAoJGFsbGVkaXJzID09PSAhdHJ1ZSkgewovLyAJd2hpbGUoJGkgPCBjb3VudCgkZGlycykpIHsKLy8gCQlpZiAoIWlzX2RpcigkZGlyc1skaV0pKSB7Ci8vIAkJCSRtaXNzaW5nX2RpciAuPSAkZGlyc1skaV0uJzxicj4nOwovLyAJCX0KLy8gCSAgICRpKys7Ci8vIAl9Ci8vCi8vIAlpZiAoJG1pc3NpbmdfZGlyICE9ICIiKSB7Ci8vIAkJZWNobyAiRm9sZ2VuZGUocykgVmVyemVpY2huaXMoc2UpIGdpYnQgZXMgbmljaHQ6PGJyPiI7Ci8vIAkJZWNobyAkbWlzc2luZ19kaXI7Ci8vIAkJZWNobyAiQml0dGUgZGllIGNvbmZpZy1EYXRlaSBrb3JyaWdpZXJlbi4iOwovLyAJZXhpdDsKLy8gCX0KLy8gfQovLyA9PiAjNDIwIGlmICgkZGVzY3JpcHRpb24gIT0gIiIpewoKCmlmICghQGluaV9nZXQoJ3NhZmVfbW9kZScpKSBAc2V0X3RpbWVfbGltaXQoNDUpOwokbXRpbWUgPSBtaWNyb3RpbWUoKTsgJG10aW1lID0gZXhwbG9kZSggJyAnLCAkbXRpbWUpOyAkbXRpbWUgPSAkbXRpbWVbMV0gKyAkbXRpbWVbMF07CiRzdWNoX3N0YXJ0ID0gJG10aW1lOwoKJHZlcnNpb249ICc8IS0tIFZlcnNpb24gMi41LjM5IC0tPic7CgoKaWYgKHBocHZlcnNpb24oKSA8ICc0LjMuMCcpIHsKCWVjaG8gIjxwPkRpZXNlcyBTY3JpcHQgZXJmb3JkZXJ0IFBIUCBWZXJzaW9uIDQuMy4wIG9kZXIgaCZvdW1sO2hlciE8YnIgLz4iOwoJZWNobyAiYXVmIElocmVtIFNlcnZlciBsJmF1bWw7dWZ0IGFiZXIgUEhQIFZlcnNpb24gIi5waHB2ZXJzaW9uKCkuIi48L3A+IjsKCWV4aXQ7Cn0KCiRtZXRob2QgPSAkX1NFUlZFUlsnUkVRVUVTVF9NRVRIT0QnXTsKCiRhcnJheSA9ICIiOwokYXVzZ2FiZSA9IiI7CiRmb3VuZCA9IDA7CiRlID0gIiI7CiRzb3J0aGlud2VpcyA9ICIiOwokbGluayA9ICIiOwokZHVyY2hzdWNodCA9IDA7CiRiZXJlaXRzX2ZvdW5kID0gYXJyYXkoKTsgCgoKaWYgKCFpc3NldCgkcGx1cmFsKSl7CgkkcGx1cmFsID0gIm4iOwp9CgovL2lmICghaXNzZXQoJHB1bmN0KSl7JHB1bmN0ID0gIm5vIjt9CgppZiAoIWlzc2V0KCRtYXhtc2cpKXsKCSRtYXhtc2cgPSAxMDA7Cn0KCmlmICghaXNzZXQoJGRhdGVmb3JtKSl7CgkkZGF0ZWZvcm0gPSAiZGUiOwp9CgppZiAoIWlzc2V0KCRzdWNoZGF1ZXIpKXsKCSRzdWNoZGF1ZXIgPSAiU2VrdW5kZW4iOwp9CgppZiAoIWlzc2V0KCRiZXNjaHJlaWIpKXsKCSRiZXNjaHJlaWIgPSAiQmVzY2hyZWlidW5nOiAiOwp9CgppZiAoIWlzc2V0KCR0cmVmZikpewoJJHRyZWZmID0gIlRyZWZmZXIiOwp9CgppZiAoIWlzc2V0KCRmaWxlZGF0ZSkpewoJJGZpbGVkYXRlID0gInp1bGV0enQgZ2UmYXVtbDtuZGVydCBhbSAiOwp9CgppZiAoIWlzc2V0KCRub3Jlc3VsdCkpewoJJG5vcmVzdWx0ID0gIjxwPjxiciAvPkVzIHd1cmRlbiBsZWlkZXIga2VpbmUgZXhha3RlbiAmVXVtbDtiZXJlaW5zdGltbXVuZ2VuIG1pdCBkZW0gZWluZ2VnZWJlbmVuIFN1Y2hiZWdyaWZmIGdlZnVuZGVuLjxiciAvPlZpZWxsZWljaHQgd29sbGVuIFNpZSBlcyBtaXQgZWluZW0gYWxsZ2VtZWluZXJlbiBTdWNoYmVncmlmZiB2ZXJzdWNoZW4uPC9wPiI7Cn0KCmlmICghaXNzZXQoJHZvcnNjaGxhZykpewoJJHZvcnNjaGxhZyA9ICJPZGVyIFNpZSB2ZXJzdWNoZW4gZXMgZWluZmFjaCBtYWwgbWl0IjsKfQoKaWYgKCFpc3NldCgkbWlubGVuZ3RoKSl7CgkkbWlubGVuZ3RoID0gIjxwPjxiciAvPkdlYmVuIFNpZSBiaXR0ZSBlaW5lbiBTdWNoYmVncmlmZiB2b24gbWluZGVzdGVucyZuYnNwOyIuJGxlbmd0aC4iJm5ic3A7QnVjaHN0YWJlbiBMJmF1bWw7bmdlIGVpbi48L3A+IjsKfQoKCgppZiAoIWlzc2V0KCRpZnJhbWUpKXsKICAgJGlmcmFtZT1mYWxzZTsKfQoKaWYgKCFpc3NldCgkdGFyZ2V0d2FobCkpewogICAkdGFyZ2V0d2FobD1mYWxzZTsKfQoKLy8gaWYgKCFpc3NldCgkZXhjbHVkZV9zdHJpbmdzKSl7Ci8vICAgICRleGNsdWRlX3N0cmluZ3MgPSBhcnJheSgpOwovLyB9CgppZiAoIWlzc2V0KCRpbnN0YWxsYXRpb25fcGF0aCkpIHsKCSRpbnN0YWxsYXRpb25fcGF0aCA9ICJ3ZHdfc3VjaGUiOwp9CgppZiAoIWlzc2V0KCRlbmNvZGluZykpIHsKCSRlbmNvZGluZyA9ICJJU08iOwp9CgppZiAoIWlzc2V0KCR0aHVtYl9yZXBsYWNlKSkgewoJJHRodW1iX3JlcGxhY2UgPSAiX3NzLmpwZyI7Cn0KCiRsaXN0X2h4X3N0YXJ0ID0gJGxpc3RfaHhfZW5kID0gIiI7CmlmIChpc3NldCgkbGlzdF9oeCkgJiYgaXNfbnVtZXJpYygkbGlzdF9oeCkpIHsKCSRsaXN0X2h4X3N0YXJ0ID0gJzxoJy4kbGlzdF9oeC4nPic7CgkkbGlzdF9oeF9lbmQgICA9ICc8L2gnLiRsaXN0X2h4Lic+ICc7Cn0KCmlmICghaXNzZXQoJGh4X3N1Y2h0aXApIHx8ICFpc19udW1lcmljKCRoeF9zdWNodGlwICkpIHsKCSRoeF9zdWNodGlwID0gMzsKfQoKCgovLyB2ZXJib3RlbmUgWmVpY2hlbgokZXhjbHVkZV9zdHJpbmdzX21lcmdlID0gYXJyYXkoCiAgICdcXCcsIC8vIGRhcyBcIGRpZW50IHp1bSBNYXNraWVyZW4gdm9uIHJlc2VydmllcnRlbiBaZWljaGVuIAoJIiciLAogICAnKicsCgknfCcsCiAgICcrJwopOwoKLy8gJGV4Y2x1ZGVfc3RyaW5nc19tZXJnZSA9IGFycmF5X21lcmdlKCRleGNsdWRlX3N0cmluZ3MsICRleGNsdWRlX3N0cmluZ3MyKTsKLy8gJGV4Y2x1ZGVfc3RyaW5nc19tZXJnZSA9ICRleGNsdWRlX3N0cmluZ3MyOwoKCmlmIChpc3NldCgkc3VjaHRpcDApKXsKCSRzZWFyY2h0aXAwID0gIlxuPGgkaHhfc3VjaHRpcCBpZD0nc3VjaHRpcGhlYWRlcic+JHN1Y2h0aXAwIDwvaCRoeF9zdWNodGlwPlxuIjsKCX0gZWxzZSB7Cgkkc2VhcmNodGlwMCA9ICJcbjxoJGh4X3N1Y2h0aXAgaWQ9J3N1Y2h0aXBoZWFkZXInPlN1Y2h0aXBwczogPC9oJGh4X3N1Y2h0aXA+XG4iOwp9CgppZiAoaXNzZXQoJHN1Y2h0aXAxKSl7Cgkkc2VhcmNodGlwMSA9ICI8bGk+JHN1Y2h0aXAxPC9saT5cbiI7Cgl9IGVsc2UgewoJJHNlYXJjaHRpcDEgPSAiPGxpPkRpZSBTdWNoZSBmaW5kZXQgYWxsZSBTZWl0ZW4sIGRpZSBJaHJlbiBTdWNoYmVncmlmZiBlbnRoYWx0ZW4gLSBhdWNoIGFscyBXb3J0YmVzdGFuZHRlaWwuIEVpbmUgU3VjaGUgbmFjaCAmcmFxdW87dGVzdCZsYXF1bzsgZmluZGV0IGFsc28gYXVjaCAmcmFxdW87c3AmYXVtbDs8ZW0+dGVzdDwvZW0+ZSZsYXF1bzsuPC9saT4iOwoJCn0KCmlmIChpc3NldCgkc3VjaHRpcDIpKXsKCSRzZWFyY2h0aXAyID0gIjxsaT4kc3VjaHRpcDI8L2xpPlxuIjsKCX0gZWxzZSB7Cgkkc2VhcmNodGlwMiA9ICI8bGk+V2VubiBTaWUgSWhyZSBTdWNoZSBhdWYgZ2FuemUgVyZvdW1sO3J0ZXIgZWluc2NociZhdW1sO25rZW4gd29sbGVuLCBmJnV1bWw7Z2VuIFNpZSB2b3IgdW5kIGhpbnRlciBkZW0gV29ydCBlaW4gTGVlcnplaWNoZW4gZWluLCB1bmQgdW1zY2hsaWUmc3psaWc7ZW4gYWxsZXMgbWl0IEFuZiZ1dW1sO2hydW5nc3plaWNoZW4uIEJlaXNwaWVsOiBcIiB0ZXN0IFwiLiAmcmFxdW87c3AmYXVtbDs8ZW0+dGVzdDwvZW0+ZSZsYXF1bzsgd2lyZCBkYW5uIG5pY2h0IG1laHIgZ2VmdW5kZW4uIDwvbGk+IjsKfQoKJHNlYXJjaHRpcDIgPSAiIjsKCmlmIChpc3NldCgkc3VjaHRpcDMpKXsKCSRzZWFyY2h0aXAzID0gIjxsaT4kc3VjaHRpcDM8L2xpPlxuIjsKCX0gZWxzZSB7CgkJJHNlYXJjaHRpcDMgPSAiPGxpPldlbm4gU2llIG1laHJlcmUgVyZvdW1sO3J0ZXIgZWluZ2ViZW4sIHdlcmRlbiBhbGxlIERva3VtZW50ZSBnZWZ1bmRlbiwgZGllIDxlbT5hbGxlPC9lbT4gZWluZ2VnZWJlbmVuIFcmb3VtbDtydGVyIGVudGhhbHRlbiwgZWdhbCBpbiB3ZWxjaGVyIFJlaWhlbmZvbGdlIChBTkQtVmVya24mdXVtbDtwZnVuZykuCgkJPGJyIC8+PGVtPkplIG1laHIgVyZvdW1sO3J0ZXIsIGRlc3RvIHdlbmlnZXIgVHJlZmZlci48L2VtPjwvbGk+IjsKfQoJCQppZiAoaXNzZXQoJHN1Y2h0aXAzMSkpewoJJHNlYXJjaHRpcDMxID0gIjxsaT4kc3VjaHRpcDMxPC9saT5cbiI7Cgl9IGVsc2UgewoJJHNlYXJjaHRpcDMxID0JIjxsaT5XZW5uIFNpZSBtZWhyZXJlIFcmb3VtbDtydGVyIFwibWl0IEFuZiZ1dW1sO2hydW5nc3plaWNoZW4gdW1zY2hsaWUmc3psaWc7ZW5cIiwgd2VyZGVuIGFsbGUgRG9rdW1lbnRlIGdlZnVuZGVuLCBkaWUgYWxsZSBlaW5nZWdlYmVuZW4gVyZvdW1sO3J0ZXIgZXhha3QgaW4gZGVyIGVpbmdlZ2ViZW5lbiBXZWlzZSBlbnRoYWx0ZW4uPC9saT4iOwp9CgppZiAoaXNzZXQoJHN1Y2h0aXAzb3IpKXsKCSRzZWFyY2h0aXAzb3IgPSAiPGxpPiRzdWNodGlwM29yPC9saT5cbiI7Cn0KCgppZiAoIWlzc2V0KCR3ZWl0ZXJ0eHQpKXsKCSR3ZWl0ZXJ0eHQgPSAid2VpdGVyZSBUcmVmZmVyIHplaWdlbiI7Cn0KaWYgKCFpc3NldCgkenVydWVja3R4dCkpewoJJHp1cnVlY2t0eHQgPSAidm9yaGVyaWdlIFRyZWZmZXIiOwp9CgokdmFsdWUgPSAiIjsKCmlmICghaXNzZXQoJHNlYXJjaCkpIHskc2VhcmNoID0gJHZhbHVlO30KCmlmICghaXNzZXQoJHNob3dfZXh0KSkgeyRzaG93X2V4dCA9IHRydWU7fQoKaWYgKCFpc3NldCgkcHJvdCkpIHskcHJvdCA9ICJodHRwOi8vIjt9CgoKCgoKCiRzZWFyY2h0aXA0ID0gIiI7CmlmICgkanVtcCA9PSB0cnVlICYmICR0YXJnZXQgPT0gIiIpIHsKCglpZiAoaXNzZXQoJHN1Y2h0aXA0KSl7CgkJJHNlYXJjaHRpcDQgPSAiPGxpPiRzdWNodGlwNDwvbGk+XG4iOwoJCX0gZWxzZSB7CgkJJHNlYXJjaHRpcDQgPSAiPGxpPkZhbGxzIGRpZSBTdWNoZSBudXIgZWluZW4gZWluemlnZW4gVHJlZmZlciBlcmdpYnQsIHdpcmQgZGllIFRyZWZmZXJzZWl0ZSBkaXJla3QgYW5nZXNwcnVuZ2VuLjwvbGk+XG4iOwoJfQp9CgovLyAkdWxzdGFydCA9ICIkc2VhcmNodGlwMDxkaXYgaWQ9J3N1Y2h0aXBwcycgIGNsYXNzPSdrbGFwcGVuJyA+XG48dWw+XG4iOwovLyAkdWxlbmQgPSAiPC91bD5cbjwvZGl2PlxuIjsKLy8KLy8gaWYgKCR0aXBwcykgeyRzZWFyY2h0aXAgPSAkdWxzdGFydC4kc2VhcmNodGlwMS4kc2VhcmNodGlwMi4kc2VhcmNodGlwMy4kc2VhcmNodGlwMzEuJHNlYXJjaHRpcDNvci4kc2VhcmNodGlwNC4kdWxlbmQ7IH1lbHNlIHskc2VhcmNodGlwID0iIjt9CgovLyBiZyBmdWVyIENyZWRpdC1MaW5rOgppZiAoIWlzc2V0KCRiZykpICRiZyA9ICIjRkZGRkZGIjsKaWYgKHN0cnBvcygkYmcsJyMnKSA9PT0gZmFsc2UpICRiZyA9ICcjJy4kYmc7CgppZiAocHJlZ19tYXRjaCgnL14jWzAtOUEtRl17MSw2fSQvaScsICRiZykgJiYgc3RybGVuKCRiZykgPT0gNykgewoKICAgICAgJHJlZEggPSBiYXNlX2NvbnZlcnQoc3Vic3RyKCRiZywgMSwgMiksIDE2LCAxMCk7CiAgICAgICRncmVlbkggPSBiYXNlX2NvbnZlcnQoc3Vic3RyKCRiZywgMywgMiksICAxNiwgMTApOwogICAgICAkYmx1ZUggPSBiYXNlX2NvbnZlcnQoc3Vic3RyKCRiZywgNSwgMiksICAxNiwgMTApOwoKICAgICAgLy8gaHR0cDovL3d3dy53My5vcmcvVFIvQUVSVCNjb2xvci1jb250cmFzdAogICAgICAkc3VtID0gJHJlZEgqMjk5ICsgJGdyZWVuSCo1ODcgKyAkYmx1ZUgqMTE0OwogICAgICBpZiAoJHN1bSA8IDEyNzAwMCApIHsKICAgICAgICAgICAkY29tcCA9ICIjRkZGRkZGIjsKICAgICAgfSBlbHNlIHsKICAgICAgICAgICAkY29tcCA9IiMwMDAwMDAiOwogICAgICB9Cn0gZWxzZSB7CiAgICAgICRmZWhsZXIgPSAxOwogICAgICAkYmcgPSAiI0ZGRkZGRiI7CiAgICAgICRjb21wID0gIiMwMDAwMDAiOwp9Cgokd2R3ID0gJzxwIHN0eWxlPSJkaXNwbGF5OmJsb2NrICFpbXBvcnRhbnQ7IGZvbnQtc2l6ZTogMTBweCAhaW1wb3J0YW50OyBjb2xvcjonLiRjb21wLicgIWltcG9ydGFudDsgYmFja2dyb3VuZDonLiRiZy4nICFpbXBvcnRhbnQiPiZuYnNwO3NjcmlwdCZuYnNwOyZjb3B5OyZuYnNwOzIwMjMmbmJzcDtieSZuYnNwOzxhIHN0eWxlPSJjb2xvcjonLiRjb21wLicgIWltcG9ydGFudDsgZGlzcGxheTppbmxpbmUgIWltcG9ydGFudDsgZm9udC1zaXplOiAxMHB4ICFpbXBvcnRhbnQ7IGZvbnQtd2VpZ2h0Om5vcm1hbCAhaW1wb3J0YW50OyB0ZXh0LWRlY29yYXRpb246bm9uZSAhaW1wb3J0YW50IiBocmVmPSJodHRwczovL3dlYmRlc2lnbi53ZWlzc2hhcnQuZGUiPndlYmRlc2lnbiZuYnNwO3dlaXNzaGFydDwvYT48L3A+JzsKCgppZiAoaXNzZXQoJHB3ZCkpIHsKCSRzZXJ2ZXIgPSBzdHJfcmVwbGFjZSAoInd3dy4iLCIiLCAkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSApOwoJJHNlcnZlciA9IHN0cl9yZXBsYWNlICgiKyIsIiIsICRzZXJ2ZXIpOwoJJHNlcnZlciA9IHN0cl9yZXBsYWNlICgiLSIsIiIsICRzZXJ2ZXIpOwoJJGRvbSA9IGNyYzMyKCRzZXJ2ZXIpOwogICAgICAkY2hhdmUgPSAkcHdkIC8gc3ByaW50ZigiJXUiLCAkZG9tKTsKfQppZiAoaXNzZXQoJGNoYXZlKSAmJiAkY2hhdmUgPT0gIjMyMSIpewoJJHdkdyA9Jyc7Cn0KCgovLyBuZXVlcyBGZW5zdGVyCmVjaG8nCjxzY3JpcHQ+Ci8qIDwhW0NEQVRBWyAqLwoKZnVuY3Rpb24gbGlua29wZW5lcihhKSB7CiAgIHZhciBiPWE/Il9ibGFuayI6Il9zZWxmIjsKICAgdmFyIGM9ZG9jdW1lbnQubGlua3M7CiAgIGZvcih2YXIgaT0wO2k8Yy5sZW5ndGg7aSsrKSB7CiAgIAkvLyBudXIgU3VjaHRyZWZmZXI6CiAgIAlpZiAoY1tpXS50b1N0cmluZygpLmluZGV4T2YoIm5leHQiKSA9PSAtMSAmJiBjW2ldLnRvU3RyaW5nKCkuaW5kZXhPZigiP3E9IikgPiAtMSApIHsKICAgICAgCQljW2ldLnRhcmdldD1iOwogICAJfQogICB9Cn0KCmZ1bmN0aW9uIGxpbmtjb29raWUoKSB7CiAgIGlmKGRvY3VtZW50LmNvb2tpZS5pbmRleE9mKCJzdWNob2VmZm5lbiIpICE9PSAtMSl7CiAgICAgIGRvY3VtZW50LmNvb2tpZSA9ICJzdWNoPTA7cGF0aD0vO2V4cGlyZXM9VGh1LCAwMS1KYW4tNzAgMDA6MDA6MDEgR01UIjsKICAgfSBlbHNlIHsKICAgICBkb2N1bWVudC5jb29raWU9InN1Y2g9c3VjaG9lZmZuZW47IHBhdGggPS8iOwogICB9Cn0KCmZ1bmN0aW9uIGFkZEV2ZW50KG9iaiwgZXZUeXBlLCBmbil7CiBpZiAob2JqLmFkZEV2ZW50TGlzdGVuZXIpewogICBvYmouYWRkRXZlbnRMaXN0ZW5lcihldlR5cGUsIGZuLCBmYWxzZSk7CiAgIHJldHVybiB0cnVlOwogfSBlbHNlIGlmIChvYmouYXR0YWNoRXZlbnQpewogICB2YXIgciA9IG9iai5hdHRhY2hFdmVudCgib24iK2V2VHlwZSwgZm4pOwogICByZXR1cm4gcjsKIH0gZWxzZSB7CiAgIHJldHVybiBmYWxzZTsKIH0KfQoKLyogXV0+ICovCjwvc2NyaXB0PgonOwoKCmlmKGlzc2V0KCRfR0VUWyJxIl0pIHx8IGlzc2V0KCRfUE9TVFsicSJdKSkgewoJCglpZiAoaXNzZXQoJF9HRVRbInEiXSkgJiYgJF9HRVRbInEiXSAhPSAiIikgJHNlYXJjaCA9IHN0cmlwc2xhc2hlcygkX0dFVFsicSJdKTsKCWlmIChpc3NldCgkX1BPU1RbInEiXSkgJiYgJF9QT1NUWyJxIl0gIT0gIiIpICRzZWFyY2ggPSBzdHJpcHNsYXNoZXMoJF9QT1NUWyJxIl0pOwoKCSRnYW56ZXJhdXNkcnVjayA9ICRzZWFyY2g7CglpZiAoc3RyaXN0cigkc2VhcmNoLCAiQ29udGVudC1UeXBlIikpJHNlYXJjaCA9ICJubyBzcGFtIGhlcmUhIjsKCgoJaWYgKHN0cnBvcyhzdHJ0b2xvd2VyKCRlbmNvZGluZyksInV0ZiIpIT09IGZhbHNlKSB7Ci8vCQllY2hvICJ1dGYtODoiOwoJCSRzZWFyY2ggPSBodG1sc3BlY2lhbGNoYXJzKCRzZWFyY2gsIEVOVF9OT1FVT1RFUywgIlVURi04Iik7Cgl9IGVsc2UgewovLwkJZWNobyAiSVNPOiI7CgkJJHNlYXJjaCA9IGh0bWxzcGVjaWFsY2hhcnMoJHNlYXJjaCwgRU5UX05PUVVPVEVTLCAiSVNPLTg4NTktMTUiKTsKCX0KCgoKCWZvcmVhY2goJGV4Y2x1ZGVfc3RyaW5nc19tZXJnZSBhcyAkaykgewoJCSRnZXN1Y2h0ID0gc3RyX3JlcGxhY2UoJGssIiIsJHNlYXJjaCk7CgoJCS8qIHdlbm4gZXhjbHVkZWQgc3RyaW5ncyBpbSBTdWNoYmVncmlmZiwgdW5kIGRhZHVyY2ggU3VjaGJlZ3JpZmYga2xlaW5lciBhbHMgJGxlbmd0aCB3aXJkOiAqLwoJCWlmIChzdHJsZW4odHJpbSgkc2VhcmNoKSkgPiBzdHJsZW4odHJpbSgkZ2VzdWNodCkpICYmIHN0cmxlbih0cmltKCRzZWFyY2gpKSA+PSAkbGVuZ3RoICkgewoJCQkkbWlubGVuZ3RoID0gJG5vcmVzdWx0OyAKCQl9Cgl9CgkJCgkvLyBnYW56ZSBBdXNkcnVlY2tlIHN1Y2hlbjoKCSRhdXNkcnVjayA9IGZhbHNlOwoJaWYgKHN0cnBvcygkZ2FuemVyYXVzZHJ1Y2ssJyInKSAhPT0gZmFsc2UgfHwgc3RycG9zKCRnYW56ZXJhdXNkcnVjaywiJyIpICE9PSBmYWxzZSApIHsgCgkJJGF1c2RydWNrID0gdHJ1ZTsKCX0gCgkKCgkkc2VhcmNoID0gcHJlZ19yZXBsYWNlKCcvWyBdezIsfS9zbScsICcgJywgJHNlYXJjaCk7CgoKCWlmIChmaWxlX2V4aXN0cygic2VhcmNoX3JlcGxhY2UucGhwIikpIHtpbmNsdWRlICgic2VhcmNoX3JlcGxhY2UucGhwIik7fQoKCS8vIHVuZXJ3dWVuc2NodGUgU3RyaW5ncyB2b24gZGVyIFN1Y2hlIGF1c3NjaGxpZXNzZW4KCWZvcmVhY2goJGV4Y2x1ZGVfc3RyaW5nc19tZXJnZSBhcyAkaykgewoJCSRzZWFyY2ggPSBzdHJfcmVwbGFjZSgkaywiIiwkc2VhcmNoKTsKCX0KCgoJJHNlYXJjaCA9IHRyaW0oJHNlYXJjaCk7Cgkkc2VhcmNoID0gc3RyX3JlcGxhY2UgKCAnJmFtcDsnLCAnJicsICRzZWFyY2ggKTsgLy8gbGFlc3N0IGh0bWwgZW50aXRpZXMgd2llICYjMzUxOyB6dSAoei5CLiB0dWVya2lzY2hlIFNvbmRlcnplaWNoZW4pCgkvL2RpZSBnbGVpY2hlIFplaWxlIGF1Y2ggaW4gZGllIHN1Y2hlbi5waHAsIGF1c3NlcmRlbSBaZWlsZSA0OCBoaWVyIHdlZ2tvbW1lbnRpZXJlbi4KCgoJaWYoZW1wdHkoJHNlYXJjaCkpIHskc2VhcmNoPSIiO30KCSRzZWFyY2hsZW5ndGggPSBzdHJfcmVwbGFjZSgnJnF1b3Q7JywnJywkc2VhcmNoKTsKCWlmKHN0cmxlbigkc2VhcmNobGVuZ3RoKSA+PSAkbGVuZ3RoICYmICRzZWFyY2ggIT0gJHZhbHVlKSB7CgoJaWYgKCFpc3NldCgkc3VjaGhpbndlaXMpIHx8ICAkc3VjaGhpbndlaXMgPT0gIiIpIHsKCQkkc2VhcmNoaGlud2VpcyA9ICJTaWUgc3VjaGVuIG5hY2giOwoJfSBlbHNlIHsKCQkkc2VhcmNoaGlud2VpcyA9ICRzdWNoaGlud2VpczsKCQllY2hvICc8cD4nLiRzZWFyY2hoaW53ZWlzLicgPGVtPiZyYXF1bzsnLiRnZXN1Y2h0LicmbGFxdW87PC9lbT4nOwoJfQoKCS8vIGRpZSBGdW5rdGlvbiB6dW0gZXh0cmFoaWVyZW4gdm9uIFRlaWxzdHJpbmdzCglmdW5jdGlvbiBhdXNsZXNlbigkYWxsLCAkc3RhcnQsICRlbmQpIHsKCQlpZiAoc3RyaXN0cigkYWxsLCRzdGFydCkpIHsKCQkJJHN0YXJ0X3Bvcz1zdHJwb3Moc3RydG9sb3dlcigkYWxsKSxzdHJ0b2xvd2VyKCRzdGFydCkpICsgc3RybGVuKCRzdGFydCk7CgkJCSRyZXN0ID0gc3Vic3RyKCRhbGwsJHN0YXJ0X3Bvcyk7CgkJCSRlbmRfcG9zPXN0cnBvcyhzdHJ0b2xvd2VyKCRyZXN0KSxzdHJ0b2xvd2VyKCRlbmQpKTsKCQkJJGVyZyA9IHN1YnN0cigkcmVzdCwwLCRlbmRfcG9zKTsKCQkJcmV0dXJuICRlcmc7CgkJfQoJfQoKCgkvLyBkaWUgRnVua3Rpb24genVtIER1cmNoc3VjaGVuIGRlcyBWZXJ6ZWljaG5pc2JhdW1zOgoJaWYgKCFpc3NldCgkZXhjbHVkZV9kaXJzKSkgJGV4Y2x1ZGVfZGlycyA9IGFycmF5KCIiKTsKCglmdW5jdGlvbiB0cmVlKCRvcmRuZXIsICRzdWIgPSBGQUxTRSkgewoJCWdsb2JhbCAkZXJnZWIsICRleGNsdWRlX2RpcnM7CgkJJGhhbmRsZSA9IG9wZW5kaXIoJG9yZG5lcik7CgkJd2hpbGUgKGZhbHNlICE9PSAoJGZpbGUgPSByZWFkZGlyICgkaGFuZGxlKSkpIHsKCQkJaWYoJGZpbGUgIT0gIi4iICYmICRmaWxlICE9ICIuLiIgJiYgaXNfZGlyKCRvcmRuZXIuIi8iLiRmaWxlKSAgJiYgIWluX2FycmF5KCRmaWxlLCAkZXhjbHVkZV9kaXJzKSApIHsKCQkJCSRjb21wbCA9ICRvcmRuZXIuIi8iLiRmaWxlLiIvIjsKCSAgICAgICAJCSRlcmdlYiA9ICRlcmdlYi4iLCIuJGNvbXBsOwogICAgICAgIAkJdHJlZSgkb3JkbmVyLiIvIi4kZmlsZSwgVFJVRSk7CgkJCX0KCQl9CgkgIAljbG9zZWRpcigkaGFuZGxlKTsKCX0KCglpZiAoJGFsbGVkaXJzKSB7CgkgICB0cmVlKCIuIik7CgkgICAkZXJnZWIgPSAiLi8iLiRlcmdlYjsKCSAgICRkaXJzID0gZXhwbG9kZSAoIiwiLCAkZXJnZWIpOwoJfQoKCS8vIHVuc2V0KCRkaXJzW2FycmF5X3NlYXJjaCgnLi90YmEvJywgJGRpcnMpXSk7CgkvLyAvLyBVbmQgdW0gZGVuIEluZGV4IHdpZWRlcmhlcnp1c3RlbGxlbgoJLy8gJGRpcnMgPSBhcnJheV92YWx1ZXMoJGRpcnMpOwoJLy8gcHJpbnRfcigkZGlycyk7IGV4aXQ7CgoJZm9yZWFjaCgkZGlycyBhcyAkZGlyKSB7CQkKCQlpZiAoIWlzX2RpcigkZGlyKSkgeyBjb250aW51ZTt9CgkJCQoJCS8vIGlmKCFpbl9hcnJheSgkZGlyLCRleGNsdWRlX2RpcnMpKSB7CgkJJHZlcnogPSBvcGVuZGlyKCRkaXIpOwoKCQl3aGlsZSgkZmlsZSA9IHJlYWRkaXIoJHZlcnopKSB7CgoJCWlmKCRmaWxlICE9ICIuIiAmJiAkZmlsZSAhPSAiLi4iICYmICRmaWxlICE9ICIuaHRhY2Nlc3MiKSB7CgoKCQkkZHVyY2hzdWNodCA9ICRkdXJjaHN1Y2h0ICsgMTsKCQkvLyBlaW56ZWxuZSBEYXRlaWVuIHZvbiBkZXIgU3VjaGUgYXVzc2NobGllc3NlbgoJCS8vIGRpZSBmb2xnZW5kZW4gOCBaZWlsZW4gZXJsYXViZW4gQXVzY2hsdXNzIHZvbiBTdWJzdHJpbmdzIGluICRleGNsdWRlX2ZpbGVzCgkJJG5vbGlzdD1mYWxzZTsKCQlmb3IgKCRlPTA7JGU8Y291bnQoJGV4Y2x1ZGVfZmlsZXMpOyRlKyspIHsKCQkJJHBvcyA9IHN0cnBvcygkZmlsZSwkZXhjbHVkZV9maWxlc1skZV0pOwoJCQlpZiAoJHBvcyAhPT0gZmFsc2UpIHsKCQkJCSRub2xpc3QgPSB0cnVlOwoJCQl9CgkJfSAKCQkKCQlpZigkbm9saXN0ICE9PSB0cnVlICYmIHByZWdfbWF0Y2goIj0oXC4kZGF0X3R5cGUpJD0iLCRmaWxlKSkgewoKCQkJLy8gTWV0YS1BbmdhYmVuIGVybWl0dGVsbgoJCQkkdGl0ZWwgPSAiIjsKCQkJJGtleXdvcmRzID0gIiI7CgkJCSRkZXNjcmlwdGlvbiA9ICIiOwoJCQlAJGdtdGFycmF5PWdldF9tZXRhX3RhZ3MoJGRpci4kZmlsZSk7CgkJCQkKCQkJZm9yZWFjaCAoJGdtdGFycmF5IGFzICRrZXkxID0+ICR2YWwpIHsKCQkJLy8gd2hpbGUobGlzdCgka2V5MSwkdmFsKT1lYWNoKCRnbXRhcnJheSkpewoJCQkJc3dpdGNoKHN0cnRvbG93ZXIoJGtleTEpKXsKCQkJCQljYXNlICJ0aXRsZSI6ICR0aXRlbD0kdmFsOyBicmVhazsKCQkJCQljYXNlICJrZXl3b3JkcyI6ICRrZXl3b3Jkcz0kdmFsOyBicmVhazsKCQkJCQljYXNlICJkZXNjcmlwdGlvbiI6ICRkZXNjcmlwdGlvbj0kdmFsOyBicmVhazsKCQkJCX0KCQkJfQoKCQkJJHN0cmluZzEgPSAkc3RyaW5nID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRkaXIuJGZpbGUpOwoJCQkJCgkJCSRzdHJpbmcgPSBzdHJfcmVwbGFjZSgiJm5ic3A7IiwiICIsJHN0cmluZyk7IC8vIHdlaWwgc29uc3QgJmx0OyZuYnNwOyBhbHMgbGltaXQtZW5kIHdpcmt0Pz8/CgkJCQoJCQkkc3RyaW5nID0gcHJlZ19yZXBsYWNlKCcjW1xzXXsyLH0jcycsICcgJywgJHN0cmluZyk7IC8vIG1laHJlcmUgTGVlcnplaWNoZW4gaW4gZWlucyB1bXdhbmRlbG4KCQkJCgkJCS8vIHdlaWwgYW5zb25zdGVuIGVpbiAmbHQ7IGltIFF1ZWxsdGV4dCBkZW4gU3VjaGJlcmVpY2ggYmVlbmRldDoKCQkJJHN0cmluZyA9IHN0cl9yZXBsYWNlKCImbHQ7IiwiIiwkc3RyaW5nKTsKCQkJCgkJCWlmIChmaWxlX2V4aXN0cygidGFyZ2V0X3JlcGxhY2UucGhwIikpIHtpbmNsdWRlICgidGFyZ2V0X3JlcGxhY2UucGhwIik7fQoJCQkKCQoJCQkvLyBkYW1pdCB3ZXJkZW4gZ2FuemUgV29lcnRlciBnZWZ1bmRlbiwgYXVjaCB3ZW5uIHNpZSBpbiBUYWdzIGVpbmdlc2NobG9zc2VuIHNpbmQ6CgkJCSRzdHJpbmcgPSBzdHJfcmVwbGFjZSgiPCIsIiA8Iiwkc3RyaW5nKTsKCQkJJHN0cmluZyA9IHN0cl9yZXBsYWNlKCI+IiwiPiAiLCRzdHJpbmcpOwoKCQkJLy8gaHRtbCB0YWdzIG1pdCBlaW5nZXNjaGxvc3NlbmVuIHBocCB0YWdzIHJhdXMgLSB3ZWlsIHNvbnN0IGVpbiBlaW56ZWxuZXMgPCBvZGVyICZsdDsgYWxzIGVuZCB3aXJrdAogIAkJCSRzdWNobXVzdGVyID0gIi88XD9bXj5dK1w/Pi8iOyAKICAJCQkkc3RyaW5nID0gcHJlZ19yZXBsYWNlKCRzdWNobXVzdGVyLCIiLCRzdHJpbmcpOwoKCi8vZWNobyAkZW5jb2Rpbmc7CgkJCWlmIChzdHJwb3Moc3RydG9sb3dlcigkZW5jb2RpbmcpLCJ1dGYiKSE9PSBmYWxzZSkgewoJCQkJJHN0cmluZyA9IGh0bWxfZW50aXR5X2RlY29kZSgkc3RyaW5nLCBFTlRfTk9RVU9URVMsICJVVEYtOCIpOwoJCQl9IGVsc2UgewoJCQkJJHN0cmluZyA9IGh0bWxfZW50aXR5X2RlY29kZSgkc3RyaW5nLCBFTlRfTk9RVU9URVMsICJJU08tODg1OS0xIik7CgkJCX0KICAgICAgICAgICAgCS8vIG51ciBmdWVyIHdkdyBkeW4uIGRlc2NyaXB0aW9uczoKICAgICAgICAgICAgCWlmICgkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSA9PSAid2ViZGVzaWduLndlaXNzaGFydC5kZSIpIHsKICAgCQkJCWlmICgkZGVzY3JpcHRpb24gPT0gIiIpewogICAJCQkJCSRkZXNjcmlwdGlvbiA9IGF1c2xlc2VuKCRzdHJpbmcxLCAiZGVzY3JpcHRpb24iLCAnIjsnKTsKCSAgIAkJCQlpZiAoJGRlc2NyaXB0aW9uICE9ICIiKXsKCQkJCQkJJGRlc2NyaXB0aW9uID0gc3RyaXBfdGFncygkZGVzY3JpcHRpb24pOwoJCQkJCQkkZGVzY3JpcHRpb24gPSBwcmVnX3JlcGxhY2UoIi9cbnxccnxjb250ZW50fFwifD18XC98XD8vIiwgIiIsICRkZXNjcmlwdGlvbik7CgkJCQkJfQogICAJCQkJfQogICAgICAgICAgICAJfQoKCQkJLy8gdW5kIHdlaWwgPHRpdGxlPiBuaWNodCBpbW1lciBhbHMgTWV0YS10YWcgY29kaWVydCB3aXJkOgoJCQlpZiAoJHRpdGVsID09ICIiKSAkdGl0ZWwgPSBhdXNsZXNlbigkc3RyaW5nLCAiPHRpdGxlPiIsICI8L3RpdGxlPiIpOwoKCQkJLy8gd2VpbCBlcyBMZXV0ZSBnaWJ0LCBkaWUgbWV0YSBUYWdzIG1pdCBaZWlsZW51bWJydWNoIHNjaHJlaWJlbjoKCQkJaWYgKCRkZXNjcmlwdGlvbiAhPSAiIil7JGRlc2NyaXB0aW9uID0gc3RyX3JlcGxhY2UoIlxuIiwiIiwkZGVzY3JpcHRpb24pO30KCQkJaWYgKCRrZXl3b3JkcyAhPSAiIil7JGtleXdvcmRzID0gc3RyX3JlcGxhY2UoIlxuIiwiIiwka2V5d29yZHMpO30KCQkJaWYgKCR0aXRlbCAhPSAiIil7JHRpdGVsID0gc3RyX3JlcGxhY2UoIlxuIiwiIiwkdGl0ZWwpO30KCgkJCS8vIERhdGVpZW4gbnVyIHp3aXNjaGVuIGRlbiBiZWlkZW4gbGltaXRlciB0YWdzIGF1c3dlcnRlbjoKCQkJaWYgKCRsaW1pdF9zdGFydCAhPSAiIikgewoJCQkJLy8gV3VyZGUgbmVlZGxlIG5pY2h0IGdlZnVuZGVuLCBnaWJ0IHN0cnBvcygpIGRlbiBib29sZWFuLVdlcnQgRkFMU0UgenVyw4PCvGNrLgoJCQkJaWYgKHN0cnBvcyhzdHJ0b2xvd2VyKCRzdHJpbmcpLHN0cnRvbG93ZXIoJGxpbWl0X3N0YXJ0KSkgIT09IGZhbHNlKSB7CgkJCQkJJHBvcz1zdHJwb3Moc3RydG9sb3dlcigkc3RyaW5nKSxzdHJ0b2xvd2VyKCRsaW1pdF9zdGFydCkpICsgc3RybGVuKCRsaW1pdF9zdGFydCk7CgkJCQkJJHN1YnN0cmluZ19yZXN0ID0gc3Vic3RyKCRzdHJpbmcsJHBvcyk7CgkJCQl9IGVsc2UgewoJCQkJCWlmIChpc3NldCgkbGltaXRfb25seSkgJiYgJGxpbWl0X29ubHkgPT09IHRydWUpIHskc3Vic3RyaW5nX3Jlc3QgPSAiIjt9IC8vZGFtaXQgYnJpY2h0IGRpZSBTdWNoZSBhYiwgd2VubiAkbGltaXRfc3RhcnQgbmljaHQgZ2VmdW5kZW4gd2lyZC4KCQkJCQllbHNlIHskc3Vic3RyaW5nX3Jlc3QgPSAkc3RyaW5nO30KCQkJCX0KCQkJfSBlbHNlIHsKCQkJCSRzdWJzdHJpbmdfcmVzdCA9ICRzdHJpbmc7CgkJCX0KCgkJCS8vIHdlbm4gJGxpbWl0X2VuZCBnZXNldHp0OgoJCQlpZiAoJGxpbWl0X2VuZCAhPSAiIikgewoJCQkJJGVuZF9wb3M9c3RycG9zKHN0cnRvbG93ZXIoJHN1YnN0cmluZ19yZXN0KSxzdHJ0b2xvd2VyKCRsaW1pdF9lbmQpKTsKCQkJCWlmICgkZW5kX3BvcyAhPT0gZmFsc2UpIHsKCQkJCQkkc3RyaW5nID0gc3Vic3RyKCRzdWJzdHJpbmdfcmVzdCwwLCRlbmRfcG9zKTsKCQkJCX0gZWxzZSB7CgkJCQkJJHN0cmluZyA9ICRzdWJzdHJpbmdfcmVzdDsKCQkJCX0KICAgICAgICAgICAgIAl9IGVsc2UgewoJCQkJJHN0cmluZyA9ICRzdWJzdHJpbmdfcmVzdDsKICAgICAgICAgICAgIAl9CgoKCQkJLy9JbmhhbHQgdm9uIHRhZ3MgYXVzd2VydGVuOgoJCQlpZiAoJHRhZ3M9PT1mYWxzZSkgCSRzdHJpbmcgPSBzdHJpcF90YWdzKCRzdHJpbmcpOwoKCQkJLy8gZGllIG1ldGEgdGFncyBpbiBkaWUgU3VjaGUgZWluc2NobGllc3NlbiBnZW1hZXNzIGNvbmZpZzoKICAgICAgICAgICAgCWlmICgkdGFncyA9PT0gdHJ1ZSkgeyRrZXk9dHJ1ZTsgJGRlc2M9dHJ1ZTsgJHRpdD10cnVlO30KCQkJaWYgKCRrZXkgPT09IHRydWUpICRzdHJpbmc9JHN0cmluZy4ka2V5d29yZHM7CgkJCWlmICgkZGVzYyA9PT0gdHJ1ZSkgJHN0cmluZz0kc3RyaW5nLiRkZXNjcmlwdGlvbjsKCQkJaWYgKCR0aXQgPT09IHRydWUpICRzdHJpbmc9JHN0cmluZy4kdGl0ZWw7CgoJCQkkc3RyaW5nID0gc3RyX3JlcGxhY2UoIlxuIiwgIiAiLCAkc3RyaW5nKTsKCgkJCSRzdHJpbmcgPSBzdHJfcmVwbGFjZSgidGl0bGU+IiwgIiIsICRzdHJpbmcpOyAvLyB3ZW5uIFRyZWZmZXIgaW4gPHRpdGxlPiB3aXJkIHRpdGxlPiBhbmdlemVpZ3Q/CgoJCQkKCQkJLy8gdW5lcnd1ZW5zY2h0ZSBTdHJpbmdzIHZvbiBkZXIgU3VjaGUgYXVzc2NobGllc3NlbgoJCQlmb3JlYWNoKCRleGNsdWRlX3N0cmluZ3NfbWVyZ2UgYXMgJGspIHsKCQkJCSRzdHJpbmcgPSBzdHJfcmVwbGFjZSgkaywiIiwkc3RyaW5nKTsKCQkJfQkJCQoKCiAgICAgICAgICAgCQkvLyBFLU1haWxzIHJhdXM6IGh0dHA6Ly93d3cucmVndWxhci1leHByZXNzaW9ucy5pbmZvL2VtYWlsLmh0bWwKICAgICAgICAgICAgCSRzdWNobXVzdGVyID0gJy9cYltBLVowLTkuXyUrLV0rQFtBLVowLTkuLV0rXC5bQS1aXXsyLDR9XGIvaSc7CiAgICAgICAgICAgIAkkc3RyaW5nID0gcHJlZ19yZXBsYWNlKCRzdWNobXVzdGVyLCcnLCAkc3RyaW5nKTsKCgkJCWlmIChmdW5jdGlvbl9leGlzdHMoJ21iX3N0cnRvbG93ZXInKSl7CgkJCQlpZiAobWJfZGV0ZWN0X2VuY29kaW5nKCRzZWFyY2gsICdVVEYtOCcsIHRydWUpICE9PSBmYWxzZSkgeyAvL251ciBzbyBmw7xyIFBIUCA3CgkJCQkJJHN0cmluZ2xvdyA9IG1iX3N0cnRvbG93ZXIoJHN0cmluZywnVVRGLTgnKTsKCQkJCQkkc2VhcmNobG93ID0gbWJfc3RydG9sb3dlcigkc2VhcmNoLCdVVEYtOCcpOwoJCQkJfSBlbHNlIHsKCQkJCQkkc3RyaW5nbG93ID0gc3RydG9sb3dlcigkc3RyaW5nKTsKCQkJCQkkc2VhcmNobG93ID0gc3RydG9sb3dlcigkc2VhcmNoKTsJCgkJCQl9CgkJCX0gZWxzZSB7CgkJCQkkc3RyaW5nbG93ID0gc3RydG9sb3dlcigkc3RyaW5nKTsKCQkJCSRzZWFyY2hsb3cgPSBzdHJ0b2xvd2VyKCRzZWFyY2gpOwoJCQl9CgkJCQoKCQkJLy8gd2VpbCBzdHJ0b2xvd2VyIHVudGVyIFBIUCA1LjQgYW5zY2hlaW5lbmQgbmljaHQgbWVociB0dXQKCQkJJHVtbGF1dF9ncm9zcyA9IGFycmF5KCfDhCcsJ8OWJywnw5wnKTsKCQkJJHVtbGF1dF9rbGVpbiA9IGFycmF5KCfDpCcsJ8O2Jywnw7wnKTsKCQkJJHNlYXJjaGxvdyA9IHN0cl9yZXBsYWNlKCR1bWxhdXRfZ3Jvc3MsICR1bWxhdXRfa2xlaW4sICRzZWFyY2hsb3cpOwoJCQkkc3RyaW5nbG93ID0gc3RyX3JlcGxhY2UoJHVtbGF1dF9ncm9zcywgJHVtbGF1dF9rbGVpbiwgJHN0cmluZ2xvdyk7CgoJCQkjIGRpZSB1bmQtVmVya251ZXBmdW5nOgoJCQkkb3IgPSBmYWxzZTsgCgoJCQlpZiAoKHN0cnBvcygkc2VhcmNobG93LCIgb3IgIikgIT09IGZhbHNlIHx8IHN0cnBvcygkc2VhcmNobG93LCIgb2RlciAiKSAhPT0gZmFsc2UpICYmICBpc3NldCgkc3VjaHRpcDNvcikgJiYgJGF1c2RydWNrICE9PSB0cnVlICkgeyAvLyBVbXNjaGFsdGVuIHZvbiB1bmQgYXVmIG9yIAoJCQkJJG9yID0gdHJ1ZTsKCQkJCSRzZWFyY2hsb3cgPSBzdHJfcmVwbGFjZSgiIG9yICIsICIgIiwgJHNlYXJjaGxvdyk7CgkJCQkkc2VhcmNobG93ID0gc3RyX3JlcGxhY2UoIiBvZGVyICIsICIgIiwgJHNlYXJjaGxvdyk7CgkJCX0KCQkJCQoJCQkjIFdvcnRncnVwcGVuCgkJCWlmICgkYXVzZHJ1Y2sgIT09IGZhbHNlKSB7CgkJCQkkc2VhcmNobG93ID0gc3RyX3JlcGxhY2UoJyZxdW90OycsJycsJHNlYXJjaGxvdyk7CgkJCQkkc2VhcmNobG93ID0gc3RyX3JlcGxhY2UoJyInLCcnLCRzZWFyY2hsb3cpOwoJCQkJJHNlYXJjaF9hcnJbMF0gPSAkc2VhcmNobG93OwoKCQkJfSBlbHNlIHsKCQkJCSRzZWFyY2hfYXJyID0gZXhwbG9kZSgiICIsJHNlYXJjaGxvdyk7CgkJCX0KCQkJJHNlYXJjaF9jb3VudCA9IGNvdW50KCRzZWFyY2hfYXJyKTsKCgoKCQkJJGk9MDsKCQkJZm9yZWFjaCAoJHNlYXJjaF9hcnIgYXMgJHNlYXJjaF93b3JkKSB7CgkJCQlpZiAoQHN0cnBvcygkc3RyaW5nbG93LCRzZWFyY2hfd29yZCkgIT09IGZhbHNlKSB7CSAJLy8gd2VubiBTdWNoYmVncmlmZiB2b3Jrb21tdCwgc2NobmVsbGVyIGFscyBwcmVnX21hdGNoCQkJCQoJCQkJCSRpKys7CgoKCQkJCQlpZiAoJG9yID09PSB0cnVlKSB7JGkgPSAkc2VhcmNoX2NvdW50ID0gMTt9IC8vIGRlciBIYWNrLCB1bSBiZWkgT1IgbmljaHQgenUgd2FydGVuLCBiaXMgYWxsZSBTdWNoYmVncmlmZmUgZ2VmdW5kZW4gd2VyZGVuCgoJCQkJCWlmICgkaT09JHNlYXJjaF9jb3VudCkgewkJLy8gc29iYWxkIGFsbGUgU3VjaGJlZ3JpZmZlIGdlZnVuZGVuIHd1cmRlbi4uLgoJCQkJCQkKCQkJCQkJJHN0cmluZ2xvdyA9IHN0cmlwX3RhZ3MoJHN0cmluZ2xvdyk7CgoJCQkJCQkkdGVzdCA9IEBzdWJzdHJfY291bnQoJHN0cmluZ2xvdywgJHNlYXJjaF93b3JkKTsKCgkJCQkJCWlmICgkc2VhcmNoX2NvdW50ID4gMSl7CgkJCQkJCQkkcG9zPXN0cnBvcygkc3RyaW5nbG93LCRzZWFyY2hfd29yZCk7CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkcG9zPXN0cnBvcygkc3RyaW5nbG93LCRzZWFyY2hsb3cpOwoJCQkJCQl9CgoKCQkJCQkJaWYgKCR2b3IgPj0gJHBvcykgewoJCQkJCQkJJHBpZWNlMSA9IHN1YnN0cigkc3RyaW5nLDAsJG5hY2gpOwoJCQkJCQl9IGVsc2UgewoJCQkJCQkJJHBpZWNlMSA9IHN1YnN0cigkc3RyaW5nLCRwb3MtJHZvciwkdm9yKyRuYWNoKTsKCgkJCQkJCQkkcGllY2UxID0gc3Ryc3RyICgkcGllY2UxLCIgIik7IC8vIHZlcm1laWRldCBCcnVjaHN0dWVja2Ugdm9uIFdvZXJ0ZXJuIGFtIEFuZmFuZyBkZXMgS29udGV4dAoJCQkJCQl9CgoKCQkJCQkJLy8gJHBpZWNlMSA9IHN1YnN0cigkcGllY2UxLCAwLCBzdHJsZW4oc3RycmNocigkcGllY2UxLDMyKSkqKC0xKSkuIiAuLi4iOyAvLyB2ZXJtZWlkZXQgQnJ1Y2hzdHVlY2tlIHZvbiBXb2VydGVybiBhbSBFbmRlIGRlcyBLb250ZXh0CgkJCQkJCSRsZW5ndGggPSAkbmFjaCskdm9yOyAvLyBaZWljaGVubMOkbmdlCgkJCQkJCSRwaWVjZTEgPSBwcmVnX3JlcGxhY2UoICcvW14gXSokLycsICcnLCBzdWJzdHIoICRwaWVjZTEsIDAsICRsZW5ndGggKSApIC4gJyDigKYnOwoJCQkJCQkkcmVzdCA9ICI8YnIgLz4kcGllY2UxIjsKCgoKCQkJCQkJJGZpbGVmb3JzaXplID0gJGZpbGU7CgkJCQkJCWlmICgkc2hvd19leHQgIT09IHRydWUpIHsKCQkJCQkJCSRpbmZvID0gcGF0aGluZm8oJGZpbGUpOwoJCQkJCQkJJGZpbGUgPSAgYmFzZW5hbWUoJGZpbGUsJy4nLiRpbmZvWydleHRlbnNpb24nXSk7CgkJCQkJCX0KCgoJCQkJCQlpZigkdm9yPT0iMCIgJiYgJG5hY2g9PSIwIikgJHJlc3QgPSAiIjsKCgkgICAgICAgICAgICAgICAgICAgIGlmKCEkZGVzY3JpcHRpb24gPT0gIiIgJiYgJHNob3dfZGVzYyA9PSB0cnVlKSAkcmVzdCA9ICI8YnIgLz48c3Ryb25nPiRiZXNjaHJlaWI8L3N0cm9uZz4gJGRlc2NyaXB0aW9uIjsKCQkJCQkJaWYoJGZpbGVuYW1lKSAkdGl0ZWwgPSAkZmlsZTsKCgkJCQkJCWlmIChpc3NldCgkY2hhdmUpICYmICRjaGF2ZSA9PSAiMzIxIil7CgkJCQkJCQkvLyB1bmRvY3VtZW50ZWQ6IG51ciBkaXIgemVpZ2VuCgkJCQkJCQlpZiAoaXNzZXQoJHNob3dfZGlyX29ubHkpICYmICRzaG93X2Rpcl9vbmx5ID09PSB0cnVlKSB7CgkJCQkJCQkJJGxhc3RfZGlyID0gZXhwbG9kZSgnLycsICRkaXIpOwoJCQkJCQkJCSR4ID0gYXJyYXlfa2V5cygkbGFzdF9kaXIpOwoJCQkJCQkJCSRsYXN0X2tleSA9IGVuZCgkeCkgLTE7CgkJCQkJCQkJJHRpdGVsID0gJGxhc3RfZGlyWyRsYXN0X2tleV07CgkJCQkJCQkJJGZpbGU9IiI7CgkJCQkJCQl9CgkJCQkJCX0KCgkJCQkJCWlmKCR0aXRlbCA9PSAiIikgJHRpdGVsID0gJGZpbGU7CgoKCQkJCQkJaWYgKGlzc2V0KCRxdWVyeSkpewoJCQkJCQkJJHFkaXIgPSBzdHJfcmVwbGFjZSgiLi8iLCIiLCRkaXIpOyAvLyBlbnRmZXJudCBkYXMgZnVlaHJlbmRlIC4vIGJlaW0gcXVlcnkgc3RyaW5nCiAgICAgICAgICAgICAgICAgICAgICAgICAJaWYgKGlzc2V0KCRxdWVyeV9lbmR1bmcpICYmICRxdWVyeV9lbmR1bmcgPT0gIm5vIikgewogICAgICAgICAgICAgICAgICAgICAgICAgIAkJJGZleHQgID0gYXJyYXlfcG9wKGV4cGxvZGUoJy4nLCAkZmlsZSkpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRmbmFtZSA9IGJhc2VuYW1lKCRmaWxlLCAnLicuJGZleHQpOwoJCQkJCQkJICAgICRsaW5rID0gJHF1ZXJ5LiRxZGlyLiRmbmFtZTsKICAgICAgICAgICAgICAgICAgICAgICAgCX0gZWxzZSB7CgkJCQkJCQkJJGxpbmsgPSAkcXVlcnkuJHFkaXIuJGZpbGU7CiAgICAgICAgICAgICAgICAgICAgICAgCQl9CgkJCQkJCX0gZWxzZSB7CgkJCQkJCQkkbGluayA9ICRkaXIuJGZpbGU7CgkJCQkJCX0KCgkJCQkJCWlmIChpc3NldCgkcXVlcnkpKXsKCQkJCQkJCS8vIGlmICgkYXVzZHJ1Y2sgPT09IHRydWUpIHsKCQkJCQkJCS8vIAkkbGluayA9ICRsaW5rLicmcT0lMjInLiRzZWFyY2hsb3c7CgkJCQkJCQkvLyB9IGVsc2UgewoJCQkJCQkJLy8gCSRsaW5rID0gJGxpbmsuIiZxPSIuJHNlYXJjaGxvdzsKCQkJCQkJCS8vIH0KCgkJCQkJCQkkbGluayA9ICRsaW5rLiImcT0iLiRzZWFyY2hsb3c7CgoJCQkJCQl9IGVsc2UgewoJCQkJCQkJLy8gaWYgKCRhdXNkcnVjayA9PT0gdHJ1ZSkgewoJCQkJCQkJLy8gCSRsaW5rID0gJGxpbmsuJz9xPSUyMicuJHNlYXJjaGxvdzsKCQkJCQkJCS8vIH0gZWxzZSB7CgkJCQkJCQkvLyAJJGxpbmsgPSAkbGluay4iP3E9Ii4kc2VhcmNobG93OwoJCQkJCQkJLy8gfQoKCQkJCQkJCSRsaW5rID0gJGxpbmsuIj9xPSIuJHNlYXJjaGxvdzsKCQkJCQkJfQoKCgkJCQkJCQkKCgkJCQkJCWlmICgkX1NFUlZFUlsnU0VSVkVSX05BTUUnXSA9PSAid2ViZGVzaWduLndlaXNzaGFydC5kZSIpIHsKCQkJICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgIAkJCS8vIFVtbGVpdGVuIHZvbiBLb21tZW50YXJlbiBhdWYgZGVuIEFydGlrZWw6CiAgICAgICAgICAgICAgICAgIAkJCWlmIChzdHJwb3MoJGxpbmssJ2NvbW1lbnQnKSAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgICAgICAgCQkJJHRpdGVsID0gc3RyX3JlcGxhY2UoImNvbW1lbnRfIiwiIiwkdGl0ZWwpOwogICAgICAgICAgICAgICAgICAgICAJCQkkdGl0ZWwgPSBzdHJfcmVwbGFjZSgiLnhtbCIsIi5waHAiLCR0aXRlbCk7CiAgICAgICAgICAgICAgICAgICAgIAkJCSR0aXRlbCA9ICdLb21tZW50YXIgYXVmIGRlciBTZWl0ZSAnLiR0aXRlbDsKICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIAkJCSRsaW5rID0gc3RyX3JlcGxhY2UoImNvbW1lbnRfIiwiIiwkbGluayk7CiAgICAgICAgICAgICAgICAgICAgIAkJCSRsaW5rID0gc3RyX3JlcGxhY2UoIi54bWwiLCIucGhwIiwkbGluayk7CiAgICAgICAgICAgICAgICAgIAkJCX0KCiAgICAgICAgICAgICAgICAgIAkJCS8vIEpldHp0IFVtbGVpdGVuIHZvbiBtZC1UZXh0ZmlsZXMgYXVmIGRlbiBBcnRpa2VsOgogICAgICAgICAgICAgICAgICAJCQlpZiAoc3RycG9zKCRsaW5rLCcvbWFya2Rvd24vJykgIT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgICAgICAgIAkJCSRsaW5rID0gc3RyX3JlcGxhY2UoIm1hcmtkb3duLyIsIiIsJGxpbmspOwogICAgICAgICAgICAgICAgICAgICAJCQkkbGluayA9IHN0cl9yZXBsYWNlKCJfdGV4dC50eHQiLCIucGhwIiwkbGluayk7CiAgICAgICAgICAgICAgICAgICAgIAkJCSRsaW5rID0gc3RyX3JlcGxhY2UoInBiXyIsIiIsJGxpbmspOwoJCQkgICAJCQkJCSR0aXRlbCA9IHN0cl9yZXBsYWNlKCIuLyIsIiIsJGxpbmspOyAKICAgICAgICAgICAgICAgICAgCQkJfQoJCQkJCQl9CgkJCQkJCQoJCQkJCQlpZiAoaXNzZXQoJGNoYXZlKSAmJiAkY2hhdmUgPT0gIjMyMSIpewoJCQkJICAJCQkvLyBVbWxlaXRlbiB2b24gSW5jbHVkZS1EYXRlaWVuOgoJCQkJICAJCQlpZiAoaXNzZXQoJHJlZGlyX3N1ZmZpeCkgJiYgaXNzZXQoJHJlZGlyX3JlcGxhY2UpKSB7CiAgICAgICAgICAgICAgICAgICAgIAkJCSR0aXRlbCA9IHN0cl9yZXBsYWNlKCRyZWRpcl9zdWZmaXgsJHJlZGlyX3JlcGxhY2UsJHRpdGVsKTsKICAgICAgICAgICAgICAgICAgICAgCQkJJGxpbmsgPSBzdHJfcmVwbGFjZSgkcmVkaXJfc3VmZml4LCRyZWRpcl9yZXBsYWNlLCRsaW5rKTsKCQkJCSAgCQkJfQkJCQkKCQkJCQkJfQoJCQkJCQkKCQkJCQkJaWYoJHRpdGVsICE9ICIiKSB7CgkJCQkJCQkKCQkJCQkJCSR0aXRlbCA9IHRyaW0oJHRpdGVsKTsKCgkJCQkJCQlpZiAoJHRhcmdldCA9PSAiYmxhbmsiKSB7CgkJCQkJCQkJJHppZWwgPSAnIHRhcmdldD0iX2JsYW5rIic7CgkJCQkJCQkJJGp1bXAgPSBmYWxzZTsKCQkJCQkJCX0gZWxzZWlmICgkdGFyZ2V0ID09ICJwYXJlbnQiKSB7CgkJCQkJCQkJJHppZWwgPSAnIHRhcmdldD0iX3BhcmVudCInOwoJCQkJCQkJCSRqdW1wID0gZmFsc2U7CgkJCQkJCQl9IGVsc2VpZiAoJHRhcmdldCAhPSAiIikgewoJCQkJCQkJCSR6aWVsID0gJyB0YXJnZXQ9IicuJHRhcmdldC4nIic7CgkJCQkJCQkJJGp1bXAgPSBmYWxzZTsKCQkJCQkJCX0gZWxzZSB7CgkJCQkJCQkJJHppZWwgPSAnJzsKCQkJCQkJCX0KCgkJCQkJCQkvLyB1bSBkZW4gVVJJLVBhcmFtZXRlciBxPSB6dSB1bnRlcmRyw7xja2VuID0+IGRhbm4gZ2VodCAkdGFyZ2V0d2FobCBuYXTDvHJsaWNoIG5pY2h0IG1laHIsIHdlaWwgbGlua29wZW5lciBpbiBzZWFyY2gucGhwICI/cT0iIGFiZnJhZ3QKCQkJCQkJCWlmIChpc3NldCgkcXVlcnlzdHJpbmcpICYmICRxdWVyeXN0cmluZyA9PT0gdHJ1ZSkgeyRsaW5rID0gc3RyX3JlcGxhY2UoJz9xPScuJHNlYXJjaGxvdywnJywkbGluayk7fQoJCQkJCQkJaWYgKCRwZmFkID09IHRydWUpIHsKCQkJCQkJCQkKCQkJCQkJCQlpZiAoaXNzZXQoJHF1ZXJ5KSl7CgkJICAgICAgICAgICAgICAgICAgICAgICAgCSR1cmwgPSAiIDxhIGhyZWY9XCIiLiRsaW5rLiJcIiIuJHppZWwuIj4iLiRwcm90LiRwZmFkaW5mby4kbGluay4iPC9hPiAiOwoJCQkJCQkJCX0gZWxzZSB7CgoJCQkJCQkJLy8kbGlua19hbnogPSBzdHJfcmVwbGFjZSgnI3dkd19zdWNoZScsJycsJGxpbmspOwoJCQkJCQkJJGxpbmtfYW56ID0gc3RyX3JlcGxhY2UoJyUyMicsJycsJGxpbmspOwoJCQkJCQkJJGxpbmtfYW56ID0gc3RyX3JlcGxhY2UoJz9xPScuJHNlYXJjaGxvdywnJywkbGlua19hbnopOwoJCQkJCQkJJGxpbmtfYW56ID0gc3RyX3JlcGxhY2UoJy4uLycsJy8nLCRsaW5rX2Fueik7CgkJCQkJCQkkbGlua19hbnogPSBzdHJfcmVwbGFjZSgnLi8nLCcvJywkbGlua19hbnopOwoJCQkJCQkJaWYgKHN0cnBvcyAoJGxpbmssJy4uJykgIT09IGZhbHNlKSB7JHBmYWRpbmZvID0gc3RyX3JlcGxhY2UoJHAyLCcnLCRwZmFkaW5mbyk7fQoJCQkJCQkJCQkKCQkJCQkJCS8vICR1cmwgPSAiIDxhIGhyZWY9XCIiLiRsaW5rLiJcIiIuJHppZWwuIj4iLiRwcm90LiRwZmFkaW5mby5zdWJzdHIoJGxpbmssMSkuIjwvYT4gIjsKCQkgICAgICAgICAgICAgICAgICAgICAgICAJJHVybCA9ICIgPGEgaHJlZj1cIiIuJGxpbmsuIlwiIi4kemllbC4iPiIuJHByb3QuJHBmYWRpbmZvLiRsaW5rX2Fuei4iPC9hPiAiOwoJCQkJCQkJCX0KCSAgICAgICAgICAgICAgICAgICAJCX0gZWxzZSB7CgkgICAgICAgICAgICAgICAgICAgICAJCSR1cmwgPSAiIjsKCSAgICAgICAgICAgICAgICAgICAgICAgCX0KCgkgICAgICAgICAgICAgICAgICAgCQlpZiAoJGFlbmRfZGF0ID09IHRydWUpIHsKCQkJCQkJCQlpZiAoJGRhdGVmb3JtID09ICJlbiIpIHsKCQkJCQkJCQkJQCRtb2QgPSAkZmlsZWRhdGUuZGF0ZSgibS9kL3kiLCBmaWxlbXRpbWUoJGRpci4kZmlsZWZvcnNpemUpKTsKCQkJCQkJCQkKCQkJCQkJCQl9IGVsc2VpZiAoJGRhdGVmb3JtID09ICJkZSIgfHwgJGRhdGVmb3JtID09ICIiIHx8ICFpc3NldCgkZGF0ZWZvcm0pKSB7CgkJCQkJCQkJCUAkbW9kID0gJGZpbGVkYXRlLmRhdGUoImQubS55IiwgZmlsZW10aW1lKCRkaXIuJGZpbGVmb3JzaXplKSk7CgkJCQkJCQkJfSBlbHNlIHsKCQkJCQkJCQkJQCRtb2QgPSAkZmlsZWRhdGUuZGF0ZSgkZGF0ZWZvcm0sIGZpbGVtdGltZSgkZGlyLiRmaWxlZm9yc2l6ZSkpOwoJCQkJCQkJCX0KCQkJCQkJCQkkbW9kID0gIjxzcGFuIGNsYXNzPSdtb2QxJz4iLiRtb2QuIjwvc3Bhbj4iOwoJCQkJCQkJfSBlbHNlIHsKCSAgICAgICAgICAgICAgICAgICAgCQkkbW9kID0gIiI7CgkgICAgICAgICAgICAgICAgICAgIAl9CgoJCQkJCQkJLy8gZWluIFRodW1iIGVpbmJpbmRlbiwgd2VubiBlaW5lIEdyYWZpay1EYXRlaSBtaXQgZ2xlaWNoZW0gRGF0ZWluYW1lbiBpbSBPcmRuZXIgbGllZ3QKCQkJCQkJCQoJCQkJCQkJJHRodW1iID0gJyc7CgkJCQkJCQlpZiAoaXNzZXQoJGNoYXZlKSAmJiAkY2hhdmUgPT0gIjMyMSIgJiYgJHNob3dfZXh0ICE9PSBmYWxzZSkgewoJCgkJCQkJCQkJJGV4dGVuc2lvbnMgPSBhcnJheSgiLmh0bSIsIi5odG1sIiwiLnNodG1sIiwiLnBocCIsIi5waHAzIiwiLnBocDQiLCIucGhwNSIsICIucGRmIik7CgkJCQkJCQkJJHRodW1iID0gc3RyX3JlcGxhY2UoJGV4dGVuc2lvbnMsJHRodW1iX3JlcGxhY2UsJGxpbmspOwoJCQkJCQkJfQoKCQkJCQkJCSRpbWdsaW5rID0gIiI7CgkJCQkJCQkkdGh1bWIgPSBzdHJ0b2soJHRodW1iLCAnPycpOwoJCQkJCQkJaWYgKGZpbGVfZXhpc3RzKCR0aHVtYikgJiYgJHRodW1iICE9ICRsaW5rKSB7CgkJCQkJCQkJJGltZ2xpbmsgPSAnPGEgaHJlZiA9IicuJGxpbmsuJyIgYXJpYS1oaWRkZW49InRydWUiPjxpbWcgc3JjPSInLiR0aHVtYi4nIiBhbHQ9IlN5bWJvbCBkZXIgU2VpdGUgIi8+PC9hPic7CgkJCQkJCQl9CgoJICAgICAgICAgICAgICAgIAkJJHRyZWZmX2Fuej0iIjsKCSAgICAgICAgICAgICAgICAgIAkJaWYoJHRyZWZmZXIgJiYgJHRlc3Q+PTEpICR0cmVmZl9hbno9IjxzcGFuIGNsYXNzPSd0cmVmZmVyJz5bIi4kdGVzdC4iJm5ic3A7Ii4kdHJlZmYuIl08L3NwYW4+IjsKCgkJCQkJLy8gc28ga2FubiBtYW4gYWxwaGFiZXRpc2NoIHNvcnRpZXJlbjogKE5lZ2VydHJpY2spCgkJCQkJaWYgKGlzc2V0KCRhbHBoYXNvcnQpICYmICRhbHBoYXNvcnQgPT09IHRydWUpIHskdGVzdCA9ICR0aXRlbDt9CgoJCQkJCS8vIFRyZWZmZXIgYmVpIG9yIG51ciBlaW5tYWwgYXVmbGlzdGVuCgkJCQkJaWYgKCFpbl9hcnJheSgkbGluaywgJGJlcmVpdHNfZm91bmQpKSB7CgkJCQkJCWlmICgkb3IgPT09IHRydWUpIHskYmVyZWl0c19mb3VuZFtdID0gJGxpbms7fSAKCiAgICAgICAgICAgICAgICAgICAgICAJCQlpZiAoJHBmYWQgfHwgJGFlbmRfZGF0KSB7CiAgICAgICAgICAgICAgICAgICAgICAgIAkJCWlmICgkaWZyYW1lICE9PSB0cnVlKSB7IAogICAgICAgICAgICAgICAgICAgICAgICAgCQkJCSRhcnJheSAuPSAkdGVzdC4kaW1nbGluay4iPGEgaHJlZj1cIiIuJGxpbmsuIlwiIi4kemllbC4iPiIuJHRpdGVsLiI8L2E+ICIuJGxpc3RfaHhfZW5kLiR0cmVmZl9hbnouJHJlc3QuIjxzcGFuIGNsYXNzPSdtb2QnPiIuJHVybC4iPC9zcGFuPiIuJG1vZC4iXG4iOwogICAgICAgICAgICAgICAgICAgICAgICAgICAJCQl9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAJCQkJJGFycmF5IC49ICIkbGlua1xuIjsKICAgICAgICAgICAgICAgICAgICAgICAJCQkJfQogICAgICAgICAgICAgICAgICAgICAJCQl9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAJCQlpZiAoJGlmcmFtZSAhPT0gdHJ1ZSkgeyAKICAgICAgICAgICAgICAgICAgICAgICAgIAkJCQkkYXJyYXkgLj0gJHRlc3QuJGltZ2xpbmsuIjxhIGhyZWY9XCIiLiRsaW5rLiJcIiIuJHppZWwuIj4iLiR0aXRlbC4iPC9hPiAiLiRsaXN0X2h4X2VuZC4kdHJlZmZfYW56LiRyZXN0LiJcbiI7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQl9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgIAkJCQkJJGFycmF5IC49ICIkbGlua1xuIjsKICAgICAgICAgICAgICAgICAgICAgICAgIAkJCX0KICAgICAgICAgICAgICAgICAgICAgICAgCQl9CgkJCQkJCSRmb3VuZCArKzsKCQkJCQl9CgoKCSAgICAgICAgICAgICAgIAkJCS8vJGZvdW5kICsrOwoKCQkJCQkJfQoJCQkJCX0KCQkJCX0KCQkJfQoJCS8vIH0KCX0KCX0KCX0KCQoJQGNsb3NlZGlyKCR2ZXJ6KTsKCgl9CmVjaG8gJzwvcD4nOwppZiAoJHNlYXJjaCA9PSAiwqdmb3VuZCIpIHtlY2hvICcmIzgzO3UmIzk5O2gmIzExNTtjJiMxMTQ7aSYjMTEyO3QgJiMxNjk7IDImIzQ4OzA1ICYjMTE5O2UmIzk4O2QmIzEwMTtzJiMxMDU7Z24mIzQ2OyYjMTE5ZSYjMTA1O3MmIzExNTtoJiM5NztyJiMxMTY7JiM0NjsmIzEwMDtlJztleGl0O30KCgovLyBMb2dkYXRlaSBzY2hyZWliZW4gdW5kIEJlbmFjaHJpY2h0aWd1bmdzLU1haWwgbWl0IGlwIC0gU3BlcnJlOgoKLy8gaXAgYW5vbnltaXNpZXJlbjoKJHJlbG9hZF9pcCA9ICRfU0VSVkVSWyJSRU1PVEVfQUREUiJdOwokaXBfYXJyYXkgPSBleHBsb2RlKCIuIiwkcmVsb2FkX2lwKTsKJHJlbG9hZF9pcCA9ICRpcF9hcnJheVswXS4iLiIuJGlwX2FycmF5WzFdLiIuIi4kaXBfYXJyYXlbMl0uIi54eHgiOwoKCmZ1bmN0aW9uIHNjaHJlaWJlbigkZGF0ZWksJG1vZGUpewoJZ2xvYmFsICRzZWFyY2gsICRyZWxvYWRfaXA7CgkkZnAgPSBAZm9wZW4oJGRhdGVpLCRtb2RlKTsKCWZ3cml0ZSgkZnAsJHJlbG9hZF9pcC4ifCIudGltZSgpLiJ8Ii4kc2VhcmNoLiJcbiIpOwoJZmNsb3NlKCRmcCk7Cn0KCgpmdW5jdGlvbiBpcF9zcGVycmUoKSB7CglnbG9iYWwgJHNlYXJjaCwgJHJlbG9hZGxpbWl0LCAkaW5zdGFsbGF0aW9uX3BhdGgsJHJlbG9hZF9pcDsKCSRyZWxvYWRsb2dkYXRlaSA9ICRpbnN0YWxsYXRpb25fcGF0aC4nL3JlbG9hZC50eHQnOwoJJGFuemFobGVpbnRyYWVnZSA9IDEwMDsKCSRhdXNnYWJlID0gZmFsc2U7CgoJLy8gUHJ1ZWZlbiwgb2IgcmVsb2FkZGF0ZWkgZXhpc3RpZXJ0ID0+IGFuc29uc3RlbiBFcnN0ZWxsZW4KCglpZighZmlsZV9leGlzdHMoJHJlbG9hZGxvZ2RhdGVpKSkgewoJCSRkYXRlaSA9IGZvcGVuKCRyZWxvYWRsb2dkYXRlaSwidysiKTsKCQlmY2xvc2UoJGRhdGVpKTsKCX0KCgkkZnAgPSBmaWxlKCRyZWxvYWRsb2dkYXRlaSk7Cgkkc2l6ZSA9IHNpemVvZigkZnApOwoJJGF1c2dhYmUgPSBmYWxzZTsKCS8vIERhdGVpIHNjaHJlaWJlbiwgd2VubiBMaXN0ZSB2b2xsOgoJaWYoJHNpemUgPj0gJGFuemFobGVpbnRyYWVnZSl7CgkJc2NocmVpYmVuKCRyZWxvYWRsb2dkYXRlaSwidyIpOwoKCS8vIFBydWVmZW4sIG9iIGVpbmUgSVAgaW4gZGVyIExpc3RlIHN0ZWh0Cgl9IGVsc2UgewoJCWZvciAoJGk9MDskaTwkc2l6ZTskaSsrKSB7CiAgICAgIAkJJHplaWxlID0gZXhwbG9kZSgifCIsJGZwWyRpXSk7CgoKCgoJCQlpZiAoJHplaWxlWzFdID4gdGltZSgpLTMgfHwKCQkJCQkKCQkJJHplaWxlWzBdID09ICRyZWxvYWRfaXAgJiYgJHplaWxlWzFdID4gdGltZSgpLTYgfHwKCQkJJHplaWxlWzBdID09ICRyZWxvYWRfaXAgJiYgdHJpbSgkemVpbGVbMl0pID09ICRzZWFyY2ggJiYgJHplaWxlWzFdID4gKHRpbWUoKS0kcmVsb2FkbGltaXQpKSB7IC8vIGdsZWljaGUgSVAsIHJlbG9hZGxpbWl0IHVuZCBnbGVpY2hlciBTdWNoYmVncmlmZgoJCQkJJGF1c2dhYmUgPSB0cnVlOwogICAgICAJCX0KCQl9CgkJLy8gUHJvdG9rb2xsaWVydCBkaWUgSVAtQWRyZXNzZSAoc2NocmVpYnQpOgoJCXNjaHJlaWJlbigkcmVsb2FkbG9nZGF0ZWksImErIik7Cgl9CgoKCXJldHVybiBAJGF1c2dhYmU7Cn0KCi8vIGpldHp0IExvZ2ZpbGUgdW5kIEJlbmFjaHJpY2h0aWd1bmdzLU1haWwgc2NocmVpYmVuOgoKaWYoaXBfc3BlcnJlKCk9PT1mYWxzZSkgewoKCS8vIEJlbmFjaHJpY2h0aWd1bmdzIE1haWw6CglpZiAoZnVuY3Rpb25fZXhpc3RzKCdtYl9zdHJ0b2xvd2VyJykpewoJCWlmIChtYl9kZXRlY3RfZW5jb2RpbmcoJHNlYXJjaCwgJ1VURi04JywgdHJ1ZSkgIT09IGZhbHNlKSB7IC8vbnVyIHNvIGbDvHIgUEhQIDcKCQkJJHN1Y2hiZWdyaWZmX21haWwgPSBodG1sc3BlY2lhbGNoYXJzKCRzZWFyY2gsIEVOVF9OT1FVT1RFUywgIlVURi04Iik7CgkJCSRzdWNoYmVncmlmZl9sb2cgPSB1dGY4X2RlY29kZSgkc3VjaGJlZ3JpZmZfbWFpbCk7CgkJfSBlbHNlIHsKCQkJJHN1Y2hiZWdyaWZmX21haWwgPSBodG1sc3BlY2lhbGNoYXJzKCRzZWFyY2gsIEVOVF9OT1FVT1RFUywgIklTTy04ODU5LTE1Iik7CgkJCSRzdWNoYmVncmlmZl9sb2cgPSAkc3VjaGJlZ3JpZmZfbWFpbDsJCgkJfSAKCX0gZWxzZSB7CgkJJHN1Y2hiZWdyaWZmX21haWwgPSBodG1sc3BlY2lhbGNoYXJzKCRzZWFyY2gsIEVOVF9OT1FVT1RFUywgIklTTy04ODU5LTE1Iik7CgkJJHN1Y2hiZWdyaWZmX2xvZyA9ICRzdWNoYmVncmlmZl9tYWlsOwoJfQoJCgkkaGVhZGVyID0gJ0Zyb206ICcuJGFkbWluYWRkcmVzcy4nJyAuICJcclxuIiAuJ1gtTWFpbGVyOiBQSFAvJyAuIHBocHZlcnNpb24oKTsKCQoJaWYoJG1haWwgPT0gdHJ1ZSAmJiAkc2VhcmNoICE9ICR2YWx1ZSkgewoJCWlmICghJHNlbmRlcikgeyRzZW5kZXIgPSAiU3VjaHNjcmlwdCI7fQoJCW1haWwoJGFkbWluYWRkcmVzcywiU3VjaGUgYXVmICRzZWl0ZSIsIiRzZW5kZXIgXG5cbkZvbGdlbmRlciBCZWdyaWZmIHd1cmRlIHNvZWJlbiBhdWYgZGVyIFNlaXRlICRzZWl0ZSBnZXN1Y2h0OiBcbiRzdWNoYmVncmlmZl9tYWlsXG5UcmVmZmVyOiAkZm91bmQiLCRoZWFkZXIpOwoJfQoKCS8vIExvZ2ZpbGUgc2NocmVpYmVuOgoJJHRvZGF5ID0gZGF0ZSgiZC5tLlkgSDppICIpOwoJJG5sID0gJHRvZGF5LiRzdWNoYmVncmlmZl9sb2cuIigiLiRmb3VuZC4iKVxuIjsKCSRsaW5lcyA9IGZpbGUoJGluc3RhbGxhdGlvbl9wYXRoLicvc2VhcmNobG9nLnR4dCcpOwoJJGxpbmVzID0gYXJyYXlfdW5pcXVlKCRsaW5lcyk7IC8vIER1cGxpa2F0ZSBsb2VzY2hlbgoKCS8vIFdlbm4gbWVociBhbHMgJG1heG1zZyAoZGVmYXVsdDoxMDApIExvZ2VpbnRyYWVnZSBhZWx0ZXN0ZSBsb2VzY2hlbjoKCS8vICRtYXhtc2cgPSAxMDA7CglpZihjb3VudCgkbGluZXMpID4gJG1heG1zZykgdW5zZXQoJGxpbmVzWzBdKTsKCgkkbmwgPSBpbXBsb2RlKCIiLCAkbGluZXMpLiRubDsKCiAKCSRmcDIgPSBmb3BlbigkaW5zdGFsbGF0aW9uX3BhdGguJy9zZWFyY2hsb2cudHh0JywgJ3diJyk7Cglmd3JpdGUoJGZwMiwgJG5sKTsKCWZjbG9zZSgkZnAyKTsKfQoKCgoJaWYoJGZvdW5kID09ICIwIikJewoJCWVjaG8gJG5vcmVzdWx0OwoJCWlmIChzdHJsZW4oJHNlYXJjaCkgPiAkbGVuZ3RoICYmICR2b3JzY2hsYWcgIT0gIiIpIHsgCgoJCQkkc3luID0gc3RyX3JlcGxhY2UoJyZxdW90OycsJycsJHNlYXJjaCk7CgkJCSRzeW4gPSBzdHJfcmVwbGFjZSgnIicsJycsJHNlYXJjaCk7CgkJCgkJCWlmIChzdHJwb3Moc3RydG9sb3dlcigkZW5jb2RpbmcpLCJ1dGYiKSE9PSBmYWxzZSkgewoJCQkJJHN5biA9IG1iX3N1YnN0cih0cmltKCRzeW4pLDAsJGxlbmd0aCwndXRmLTgnKTsKCQkJfSBlbHNlIHsKCQkJCSRzeW4gPSBzdWJzdHIodHJpbSgkc3luKSwwLCRsZW5ndGgpOwoJCQl9CgoJCQllY2hvICI8cD4kdm9yc2NobGFnIDxhIGhyZWYgPVwiIi4gYmFzZW5hbWUoJF9TRVJWRVJbJ1BIUF9TRUxGJ10pLiI/cT0kc3luJmFtcDtnZWdlbj0mYW1wO2RhdGU9Ii50aW1lKCkuIlwiPiRzeW48L2E+LjwvcD4iOwoJCX0KCX0KCglpZigkZm91bmQgPT0gIjEiICYmICRqdW1wID09IHRydWUgJiYgJF9TRVJWRVJbJ1BIUF9TRUxGJ10gIT0gc3Vic3RyKCRsaW5rLDEpKQl7IC8vZGFzIFN1Y2hzY3JpcHQgc2VsYnN0IGRhcmYgbmljaHQgYW5nZXNwcnVuZ2VuIHdlcmRlbjogRW5kbG9zc2NobGVpZmUKICAJCSRsaW5rID0gc3Vic3RyKCRsaW5rLDEpOwkvL2RlbiBQdW5rdCB2b3IgZGVtIGRpciB3ZWcKCQkkbGluayA9IHN0cl9yZXBsYWNlKCc/cT0nLiRzZWFyY2hsb3csJycsJGxpbmspOwoKCQkkc2VhcmNoID0gc3RyX3JlcGxhY2UoJyZxdW90OycsJyInLCRzZWFyY2gpOyAvLyB3ZWdlbiBzZWFyY2h0ZXJtLmpzCgkJCgkJLy8gZG9wcGVsdGUgc2xhc2ggdm9yIERhdGVpbmFtZW4gdW50ZXJkcnVlY2tlbgoJCSRkaXJuYW1lID0gZGlybmFtZSgkX1NFUlZFUlsnUEhQX1NFTEYnXSk7CgkJaWYoJGRpcm5hbWUgPT0gIi8iKSAkZGlybmFtZSA9ICIiOwoJCS8vIGJhY2tzbGFzaCB2b24gV2luZG93cyBTZXJ2ZXJuIHJhdXM6CgkJJGRpcm5hbWUgPSBzdHJfcmVwbGFjZSgiXFwiLCIiLCRkaXJuYW1lKTsKCgoKCQlpZiAoaXNzZXQoJHF1ZXJ5KSl7CgkJCWhlYWRlcigiTG9jYXRpb246IC8vIi4kX1NFUlZFUlsnSFRUUF9IT1NUJ10uJGRpcm5hbWUuIi8iLiRsaW5rLiImcT0iLiRzZWFyY2gpOwoJCX0gZWxzZSB7CgkJCWhlYWRlcigiTG9jYXRpb246IC8vIi4kX1NFUlZFUlsnSFRUUF9IT1NUJ10uJGRpcm5hbWUuJGxpbmsuIj9xPSIuJHNlYXJjaCk7CgkJfQoJCWV4aXQ7CgoJfQoKCWlmKCRmb3VuZCA+ICIxIikgewogICAgICAgICRuID0gJHBsdXJhbDsgJGUgPSAiZSI7ICRzID0gInMiOwoJfSBlbHNlIHsKICAgIAkkZSA9ICRuID0gJHMgPSAiIjsKCX0KCglpZigkZm91bmQgPj0gIjEiKSB7CgoJCSRhcnJheSA9IGV4cGxvZGUoIlxuIiwgJGFycmF5KTsKCQlpZiAoaXNzZXQoJGFscGhhc29ydCkgJiYgJGFscGhhc29ydCA9PT0gdHJ1ZSkgewoJCQlzb3J0KCRhcnJheSk7CgkJfSBlbHNlIHsKCQkJbmF0c29ydCgkYXJyYXkpOwoJCX0KCQlyZXNldCgkYXJyYXkpOwoJCWlmICghaXNzZXQoJHJldmVyc2Vzb3J0KSkgeyRhcnJheSA9IGFycmF5X3JldmVyc2UoJGFycmF5KTt9CgogICAgICAkaSA9ICRhbnpfZGF0OwoKCiAgICAgIC8vIGFuc3RlbGxlIGRlciB3aGlsZSBlaW4gZm9yIFNjaGxlaWZlLCB3ZW5uIGljaCB3ZWl0ZXJlIFNlaXRlbiBhbnplaWdlbiB3aWxsOgogICAgICAkbmV4dD0wOwogICAgICBpZihpc3NldCgkX0dFVFsibmV4dCJdKSB8fCBpc3NldCgkX1BPU1RbIm5leHQiXSkpIHsKICAgICAgICAgICAgaWYgKGlzc2V0KCRfR0VUWyJuZXh0Il0pICYmICRfR0VUWyJuZXh0Il0gIT0gIiIpICRuZXh0ID0gJF9HRVRbIm5leHQiXTsKICAgICAgICAgICAgaWYgKGlzc2V0KCRfUE9TVFsibmV4dCJdKSAmJiAkX1BPU1RbIm5leHQiXSAhPSAiIikgJG5leHQgPSAkX1BPU1RbIm5leHQiXTsKICAgICAgfQogICAgICAKICAgICAgJG5leHQxPSRuZXh0KzE7CiAgICAgICR3ZWl0ZXI9JG5leHQrJGFuel9kYXQ7CiAgICAgIGZvcigkY291bnQgPSAwICsgJG5leHQ7ICRjb3VudCA8ICRhbnpfZGF0ICsgJG5leHQ7ICRjb3VudCsrKSB7CiAgICAgICAgIGlmICgkaWZyYW1lICE9PSB0cnVlKSB7IAoKCiAgICAgICAgICAgIGlmIChAJGFycmF5WyRjb3VudF0pICRhdXNnYWJlIC49ICI8bGk+Ii4kbGlzdF9oeF9zdGFydC5zdWJzdHIoc3Ryc3RyKCRhcnJheVskY291bnRdLCAnPGEgaHJlZicpLDApLiI8L2xpPlxuIjsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgaWYgKEAkYXJyYXlbJGNvdW50XSkgJGF1c2dhYmUgLj0gIjxpZnJhbWUgY2xhc3M9J3NlYXJjaGlmcmFtZScgc3JjPSciLiRhcnJheVskY291bnRdLiInPjwvaWZyYW1lPlxuIjsKICAgICAgICAgfQoJCiAgICAgIH0KCQoJCglpZiAoIWlzc2V0KCRmb3VuZHR4dDEpKXskZm91bmR0eHQxID0gIklociBTdWNoYmVncmlmZiB3dXJkZSBhdWYgIjt9CglpZiAoIWlzc2V0KCRmb3VuZHR4dDIpKXskZm91bmR0eHQyID0gIlNlaXRlIjt9CglpZiAoIWlzc2V0KCRmb3VuZHR4dDMpKXskZm91bmR0eHQzID0gIiBnZWZ1bmRlbiI7fQoJJGxlZXIgPSAiICI7CglpZiAoJGZvdW5kdHh0MyA9PSIiKSB7JGxlZXIgPSAiIjt9CgoJCWVjaG8gJzxwPicuJGZvdW5kdHh0MS4nPHN0cm9uZz4gJy4kZm91bmQuJyA8L3N0cm9uZz4nLiRmb3VuZHR4dDIuJG4uJGxlZXIuJGZvdW5kdHh0MzsKCiAgICAgIGlmICgkbmV4dCA9PSAwKSB7CiAgICAgICAgICAgIGlmICgkYW56X2RhdCA8ICRmb3VuZCkgewogICAgICAJCQlpZiAoaXNzZXQoJGFuZ2V6ZWlndHR4dCkpewogICAgICAgICAJCQkJZWNobyAkYW5nZXplaWd0dHh0OwogICAgICAJCQl9IGVsc2UgewogICAgICAgICAJCQkJZWNobyAiPGJyIC8+QW5nZXplaWd0IHdlcmRlbiA8c3Ryb25nPiRhbnpfZGF0PC9zdHJvbmc+IEVyZ2Vibmlzc2UgcHJvIFNlaXRlIjsKICAgICAgCQkJfQogICAgICAJCX0KCi8vICAgICAgCQlpZigkdHJlZmZlciAmJiAkZm91bmQgPiAxICYmICRvciA9PT0gZmFsc2UpIHsgCgkgICAgICAJaWYoJHRyZWZmZXIgJiYgJGZvdW5kID4gMSkgeyAKICAgICAgCQkJaWYgKGlzc2V0KCRzb3J0dHh0KSl7CiAgICAgIAkJCQkkc29ydGhpbndlaXMgPSAkc29ydHR4dDsKICAgICAgCQkJfSBlbHNlIHsKICAgICAgCQkJCSRzb3J0aGlud2VpcyA9ICIsIHNvcnRpZXJ0IG5hY2ggW0FuemFobCZuYnNwO2RlciZuYnNwO1RyZWZmZXImbmJzcDtwcm8mbmJzcDtEb2t1bWVudF0iOwogICAgICAJCQl9CiAgICAgIAkJfSAKCQkJZWNobyAiJHNvcnRoaW53ZWlzLiI7CiAgICAgIH0KICAgICAgZWNobyAiPC9wPiI7CgovLyBOZXVlcyBGZW5zdGVyCmlmICgkdGFyZ2V0ID09ICIiICYmICR0YXJnZXR3YWhsID09IHRydWUpIHsKZWNobycKPHNjcmlwdD4KLyogPCFbQ0RBVEFbICovCmlmKGRvY3VtZW50LmNvb2tpZS5pbmRleE9mKFwnc3VjaG9lZmZuZW5cJykgIT09IC0xKXsKICAgYWRkRXZlbnQod2luZG93LCBcJ2xvYWRcJywgbGlua29wZW5lcik7CiAgIGRvY3VtZW50LndyaXRlIChcJzxmb3JtIGFjdGlvbj0iIj48cCBjbGFzcz0ibGlua29wZW5lciI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBjaGVja2VkPSJjaGVja2VkIiBvbmNoYW5nZT0ibGlua2Nvb2tpZSgpIiBvbmNsaWNrPSJsaW5rb3BlbmVyKHRoaXMuY2hlY2tlZCkiIGlkPSJsaW5rc25ld3dpbjEiIC8+IDxsYWJlbCBmb3I9ImxpbmtzbmV3d2luMSI+VHJlZmZlciBpbiBuZXVlbSBGZW5zdGVyICZvdW1sO2ZmbmVuPyA8XC9sYWJlbD48XC9wPjxcL2Zvcm0+XCcpOwp9IGVsc2UgewogICBkb2N1bWVudC53cml0ZSAoXCc8Zm9ybSBhY3Rpb249IiI+PHAgY2xhc3M9ImxpbmtvcGVuZXIiPjxpbnB1dCB0eXBlPSJjaGVja2JveCIgb25jaGFuZ2U9Imxpbmtjb29raWUoKSIgb25jbGljaz0ibGlua29wZW5lcih0aGlzLmNoZWNrZWQpIiBpZD0ibGlua3NuZXd3aW4xIiAvPiA8bGFiZWwgZm9yPSJsaW5rc25ld3dpbjEiPlRyZWZmZXIgaW4gbmV1ZW0gRmVuc3RlciAmb3VtbDtmZm5lbj8gPFwvbGFiZWw+PFwvcD48XC9mb3JtPlwnKTsKfQovKiBdXT4gKi8KPC9zY3JpcHQ+Cic7Cn0KCiAgICAgICAgICAgICRsaXN0X2FydD0idWwiOwogICAgICAgICAgICBpZiAoJG51bV9saXN0KSRsaXN0X2FydD0ib2wgc3RhcnQ9JG5leHQiOwoKICAgICAgICAgICAgLy8gdW0gWE1MIEZlaGxlciAoSFRNTCBUaWR5IFdhcm51bmdlbikgenUgdW50ZXJiaW5kZW46CiAgICAgICAgICAgIC8vIGh0dHA6Ly93d3cudGltcmVldmVzLmRlL25ldS93ZWJkZXNpZ24vd2ViLTIwLnBocAogICAgICAgICAgICAkc3VjaG11c3RlciA9ICcvJig/IShbYS16QS1aXXsyLDd9fCNcZCt8I3hbMC05YS1mQS1GXSspOykvaSc7CiAgICAgICAgICAgICRlcnNldHp1bmcgPSAnJmFtcDsnOwogICAgICAgICAgICAkYXVzZ2FiZSA9IHByZWdfcmVwbGFjZSgkc3VjaG11c3RlciwgJGVyc2V0enVuZywgJGF1c2dhYmUpOwoKICAgICAgICAgICAgaWYgKCRpZnJhbWUgIT09IHRydWUpIHsgCiAgICAgICAgICAgICAgIGlmICgkbnVtX2xpc3QpIHsKICAgICAgICAgICAgICAgICAgZWNobyAiXG48b2wgc3RhcnQ9JyIuJG5leHQxLiInPlxuIi4kYXVzZ2FiZS4iPC9vbD5cbiI7CiAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgIGVjaG8gIlxuPHVsPlxuIi4kYXVzZ2FiZS4iPC91bD5cbiI7CiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgZWNobyAiXG4iLiRhdXNnYWJlLiJcbiI7CiAgICAgICAgICAgIH0KCi8vICAgICAgaWYgKCRuZXh0IDwgKCRmb3VuZCAtICRhbnpfZGF0KSkgewogICAgICAKICAgICAgICAgaWYgKCRtZXRob2QgPT0gIkdFVCIpIHsKICAgICAgICAgICAgLy9uZXh0IHJhdXMsIHdlaWxzIHNvbnN0IHgtbWFsIGFuZ2VoYWVuZ3Qgd2lyZDoKICAgICAgICAgICAgJHF1ZXJ5c3RyaW5nID0gIiI7CiAgICAgICAgICAgIGlmKGlzc2V0KCRfU0VSVkVSWyJRVUVSWV9TVFJJTkciXSkpIHsgCiAgICAgICAgICAgICAgICRxdWVyeXN0cmluZyA9ICRfU0VSVkVSWyJRVUVSWV9TVFJJTkciXTsgCiAgICAgICAgICAgICAgICRmaXJzdHF1ZXJ5ID0gc3RycG9zKCRxdWVyeXN0cmluZywiJm5leHQiKTsKICAgICAgICAgICAgICAgaWYgKCRmaXJzdHF1ZXJ5ICE9PSBmYWxzZSkgeyAKICAgICAgICAgICAgICAgICAgJHF1ZXJ5c3RyaW5nID0gc3Vic3RyKCRxdWVyeXN0cmluZywwLCRmaXJzdHF1ZXJ5KTsgCiAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQoJCQkKCQkJJHByZXZpb3VzID0gJHdlaXRlciAtICgkYW56X2RhdCAqIDIpOyAKCQkJCiAgICAgICAgICAgICRxdWVyeXN0cmluZyA9IHN0cl9yZXBsYWNlKCImIiwiJmFtcDsiLCRxdWVyeXN0cmluZyk7CiAgICAgICAgICAgIAoJCQllY2hvICc8cCBjbGFzcz0id2VpdGVyIj4nOwoJCQkKCQkJaWYgKCRuZXh0ID49ICRhbnpfZGF0KSB7IAoJCQkJZWNobyAnPGEgaHJlZj0iJy5iYXNlbmFtZSgkX1NFUlZFUlsiUEhQX1NFTEYiXSkuJz8nLiRxdWVyeXN0cmluZy4nJmFtcDtuZXh0PScuJHByZXZpb3VzLiciPicuJHp1cnVlY2t0eHQuJzwvYT4nOwoJCQkJLy8gZWNobyAnPHNjcmlwdD5kb2N1bWVudC53cml0ZSAoIjxhIGhyZWY9XCJqYXZhc2NyaXB0Omhpc3RvcnkuYmFjaygpXCI+Jy4kenVydWVja3R4dC4nPC9hPiIpPC9zY3JpcHQ+JzsKCQkJfQoJCQkKCQkJaWYgKCRuZXh0ID49ICRhbnpfZGF0ICYmICRuZXh0IDwgKCRmb3VuZCAtICRhbnpfZGF0KSkgewoJCQkJZWNobyAnIHwgJzsKCQkJCS8vIGVjaG8gJzxzY3JpcHQ+ZG9jdW1lbnQud3JpdGUgKCIgfCAiKTwvc2NyaXB0Pic7CgkJCX0KCQkJCgkJCWlmICgkbmV4dCA8ICgkZm91bmQgLSAkYW56X2RhdCkpIHsKCQkJCWVjaG8gJzxhIGhyZWY9IicuYmFzZW5hbWUoJF9TRVJWRVJbIlBIUF9TRUxGIl0pLic/Jy4kcXVlcnlzdHJpbmcuJyZhbXA7bmV4dD0nLiR3ZWl0ZXIuJyI+Jy4kd2VpdGVydHh0Lic8L2E+JzsKCQkJfQoJCQllY2hvJzwvcD4nOwogICAgICAgICB9Ci8vICAgICAgfQoJfQp9CmVsc2Uge2VjaG8gJG1pbmxlbmd0aDt9Cn0KCmlmKCRmb3VuZCA+PSAiMSIgfHwgIWlzc2V0KCRfR0VUWyJxIl0pICkgewoJJHVsc3RhcnQgPSAiJHNlYXJjaHRpcDA8ZGl2IGlkPSdzdWNodGlwcHMnICBjbGFzcz0na2xhcHBlbicgPlxuPHVsPlxuIjsKfSBlbHNlIHsKCSR1bHN0YXJ0ID0gIiRzZWFyY2h0aXAwPGRpdiBpZD0nc3VjaHRpcHBzJyA+XG48dWw+XG4iOwkKfQoKJHVsZW5kID0gIjwvdWw+XG48L2Rpdj5cbiI7CgppZiAoJHRpcHBzKSB7JHNlYXJjaHRpcCA9ICR1bHN0YXJ0LiRzZWFyY2h0aXAxLiRzZWFyY2h0aXAyLiRzZWFyY2h0aXAzLiRzZWFyY2h0aXAzMS4kc2VhcmNodGlwM29yLiRzZWFyY2h0aXA0LiR1bGVuZDsgfWVsc2UgeyRzZWFyY2h0aXAgPSIiO30KCgplY2hvICRzZWFyY2h0aXA7CgokbXRpbWUgPSBtaWNyb3RpbWUoKTsgJG10aW1lID0gZXhwbG9kZSggJyAnLCAkbXRpbWUpOyAkbXRpbWUgPSAkbXRpbWVbMV0gKyAkbXRpbWVbMF07CiRzdWNoX2VuZGUgPSAkbXRpbWU7CiR0aW1lX2dlc2FtdCA9ICRzdWNoX2VuZGUgLSAkc3VjaF9zdGFydDsKCmVjaG8gIjxkaXYgaWQ9XCJzZWFyY2hmb290ZXJcIj48cD4iOwoKaWYgKGlzc2V0KCRhbnphaGxkYXQpKXsKCSR6ZGF0ID0gJGFuemFobGRhdDsKCX0gZWxzZSB7CgkkemRhdCA9ICJBbnphaGwgZHVyY2hzdWNodGVyIERhdGVpZW46ICI7Cn0KCmlmICgkemFobHplaWcgJiYgJGZvdW5kID4gMCkgZWNobyAkemRhdC4kZHVyY2hzdWNodC4iPGJyIC8+IjsKCmlmICgkZm91bmQgPiAwICkgewoJaWYgKGlzc2V0KCR0aW1ldHh0KSl7CgkJJHRpbWVoaW53ZWlzID0gJHRpbWV0eHQ7Cgl9IGVsc2UgewoJCSR0aW1laGlud2VpcyA9ICJTdWNoZSBhdXNnZWYmdXVtbDtocnQgaW4gIjsKCX0KCglpZigkZGF1ZXIpIHsKCSAgICAgIGVjaG8gIiR0aW1laGlud2VpcyIubnVtYmVyX2Zvcm1hdCgkdGltZV9nZXNhbXQsMiwnLCcsJy4nKS4iICRzdWNoZGF1ZXIgJHZlcnNpb25cbiI7Cgl9IGVsc2UgewoJICAgICAgZWNobyAiXG4kdmVyc2lvblxuIjsKCX0KfSBlbHNlIHsKICAgICAgZWNobyAiXG4kdmVyc2lvblxuIjsKfQplY2hvICI8L3A+PC9kaXY+IjsKZWNobyAkd2R3Owo=";@eval(base64_decode($NCiR0aW1lX29sZCA9IDA7IC8vIGb8ciBkaWUgRm9ydHNjaHJpdHRzYW56ZWlnZQNCiR0aW1lX29sZCA9IDA7IC8vIGb8ciBkaWUgRm9ydHNjaHJpdHRzYW56ZWlnZQ));

?>

Function Calls

None

Variables

None

Stats

MD5 e32a737e7800d9176b92ec3524051971
Eval Count 0
Decode Time 1021 ms