Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@MyFieldᴰⁿ@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoiTXlGaWVsZOG0sOKBvyIsImF1dGhvciI6IuaWreW/tSbpgZPplb/prZTmlLkiLCJ1cmwiOiJoaWtlcjovL2VtcHR5IiwidmVyc2lvbiI6Mzc1LCJjb2xfdHlwZSI6InRleHRfY2VudGVyXzEiLCJjbGFzc19uYW1lIjoiIiwiY2xhc3NfdXJsIjoiIiwiYXJlYV9uYW1lIjoiIiwiYXJlYV91cmwiOiIiLCJzb3J0X25hbWUiOiIiLCJ5ZWFyX25hbWUiOiIiLCJzb3J0X3VybCI6IiIsInllYXJfdXJsIjoiIiwiZmluZF9ydWxlIjoianM6XG4gICAgY29uc3Qge2RlbW9EYXRhLGRlZmF1bHRTZXRzLGZsb29yc30gPSAkLnJlcXVpcmUoXCJoaWtlcjovL3BhZ2UvZGVtb0RhdGE/cnVsZT1NeUZpZWxk4bSw4oG/XCIpO1xuY29uc3Qge2dldE9uZSx1bmlxdWUyLGR1cGxpY2F0ZXN9ID0gJC5yZXF1aXJlKFwiaGlrZXI6Ly9wYWdlL3V0aWxzP3J1bGU9TXlGaWVsZOG0sOKBv1wiKTtcbmxldCBzalRlc3QgPVtdO2ZvcihsZXQgaSBpbiBkZW1vRGF0YSl7c2pUZXN0PXNqVGVzdC5jb25jYXQoZGVtb0RhdGFbaV0pfVxudGhpcy5kID0gW107XG5jb25zdCBqeEl0ZW0gPSAkLnJlcXVpcmUoXCJoaWtlcjovL3BhZ2UvanhJdGVtP3J1bGU9TXlGaWVsZOG0sOKBv1wiKTtcbnZhciBSb3V0ZSA9ICQucmVxdWlyZShcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb9cIik7XG5ldmFsKGdldEl0ZW0oJ215RnVuY3Rpb24nKSk7XG4vLyBtelBvcHVwKCk7XG52YXIganhPbGRWID0gZ2V0VmFyKCdqeE9sZFYnKTtcbnZhciBqeE5ld1YgPSBnZXRWYXIoJ2p4TmV3VicpO1xudmFyIHZlcnNpb25UaXBzID0gcGFyc2VGbG9hdChqeE5ld1YpID4gcGFyc2VGbG9hdChqeE9sZFYpID8gJ+KAmOKAmOacieaWsOeJiOacrDogdicgKyBqeE5ld1YgKyAnXFxu5YWI5pu05paw5bCP56iL5bqP54S25ZCO54K55Ye75LiL5pa55oyJ6ZKu5ouJ5Y+W6Iez5pys5Zyw4oCZ4oCZJyA6ICd2JytqeE9sZFY7XG5kLnB1c2goe1xuICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGJpZz48c3BhbiBzdHlsZT1cImNvbG9yOiMwQzAwMDBcIj7mlq3mj5Ig6YGT6ZW/6a2U5pS5JyxcbiAgICBkZXNjOiB2ZXJzaW9uVGlwcyxcbiAgICB1cmw6IFJvdXRlLnN6UGFyc2UsXG4gICAgLy91cmw6ICd0b2FzdDovL+i/meaYr+agh+mimCcsXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xufSk7XG5cbmZ1bmN0aW9uIGN6R3VpZGUoKSB7XG4gICAgcmV0dXJuICQoKS5ydWxlKChrKSA9PiB7XG4gICAgICAgIHNldFJlc3VsdChbe1xuICAgICAgICAgICAgdGl0bGU6IGV2YWwoSlNPTi5wYXJzZShmZXRjaChcImhpa2VyOi8vcGFnZS9HdWlkZT9ydWxlPU15RmllbGThtLDigb9cIikpKS5ydWxlLFxuICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnXG4gICAgICAgIH1dKTtcbiAgICB9KVxufVxuYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpID0+IHtcbiAgICAvL2NsZWFyVmFyKFwicGFyc2VVcmwudXJsXCIpO1xuICAgIGNsZWFySXRlbShcImNsYXNzXCIpO1xufSkpO1xuZC5wdXNoKHtcbiAgICB0aXRsZTon5byA5aeL6Kej5p6QJyxcbiAgICBjb2xfdHlwZTogJ2lucHV0JyxcbiAgICBkZXNjOiBcIuivt+i+k+ino+aekOWcsOWdgFwiLFxuICAgIHVybDokLnRvU3RyaW5nKCgpPT57XG4gICAgICAgIGxldCB1cmwgPSBnZXRWYXIoXCJwYXJzZVVybC51cmxcIiwgXCJcIikudHJpbSgpO1xuICAgICAgICBpZiAoIS9eaHR0cC8udGVzdCh1cmwpKSB7XG4gICAgICAgICAgICByZXR1cm4gXCJ0b2FzdDovL+i/mOayoeaciei+k+WFpemTvuaOpeWTplwiO1xuICAgICAgICB9XG4gICAgICAgIGxldCBqeCA9IGdldEl0ZW0oXCJzZWxlY3RlZFwiLCBcIlwiKTtcbiAgICAgICAgaWYoangmJmp4Lmxlbmd0aD4yJiYhanguc3RhcnRzV2l0aCgnaHR0cCcpKXtcbiAgICAgICAgICAgIGp4ID0gJyc7Ly/mlq3mj5Lpq5jnuqfmlrnms5Xnm7TmjqXmuIXnqbrop6PmnpDpk77mjqXlkI7pnaLosIPnlKjmoIfpopjlkI3lrZdcbiAgICAgICAgfVxuICAgICAgICBsZXQgcGxheVVybCA9IGp4ICsgdXJsO1xuICAgICAgICBsb2cocGxheVVybCk7XG4gICAgICAgIGlmKCEvXmh0dHAvLnRlc3QocGxheVVybCkpe1xuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+eci+i1t+adpeaSreaUvuWcsOWdgOS8vOS5juS4jeWvueWKsj9cXG4nK3BsYXlVcmxcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gJCgpLmxhenlSdWxlKChwbGF5VXJsLHVybCk9PntcbiAgICAgICAgICAgIGxldCB0aXRsZSA9IGdldEl0ZW0oXCJzZWxlY3RlZDBcIiwgXCImJlwiKS5zcGxpdChcIiYmXCIpWzBdLnJlcGxhY2UoL/CfkYkvZywnJyk7XG4gICAgICAgICAgICBpZihnZXRJdGVtKCdkbi50ZXN0X21vZGUnKT09PSfmlq3mj5InJiZ0aXRsZSE9PSfkuI3pgIknKXtcbiAgICAgICAgICAgICAgICBldmFsKFwidmFyIGNvbmZpZyA9XCIgKyBmZXRjaChcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uXCIpKTtcbiAgICAgICAgICAgICAgICBldmFsKGZldGNoKGNvbmZpZy5jaikpO1xuICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IGdldEl0ZW0oXCJzZWxlY3RlZDBcIiwgXCImJlwiKS5zcGxpdChcIiYmXCIpWzBdLnJlcGxhY2UoL/CfkYkvZywnJykucmVwbGFjZSgv5LiN6YCJL2csJycpO1xuICAgICAgICAgICAgICAgIGxvZygn5byA5aeL6LCD55So5pat5o+S5rWL6K+VLG15RmlsZWTotoXml7bkuLo6JytnZXRJdGVtKCdkbi50aW1lb3V0JywnNTAwMCcpKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKHVybCx0aXRsZSxwYXJzZUludChnZXRJdGVtKCdkbi50aW1lb3V0JywnNTAwMCcpKSk7XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBjb25zdCB7bGF6eVBhcnNlfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2dsb2JhbFBhcnNlP3J1bGU96YGT6ZW/5LuT5bqTUHJvJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGxhenlQYXJzZShwbGF5VXJsLHBhcnNlSW50KGdldEl0ZW0oJ2RuLnRpbWVvdXQnLCc1MDAwJykpKXx8J3RvYXN0Oi8v6Kej5p6Q5aSx6LSlLOWFt+S9k+eci+aXpeW/lydcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSxwbGF5VXJsLHVybClcbiAgICB9KSxcbiAgICBleHRyYToge1xuICAgICAgICBibG9ja1J1bGVzOiBbJ2JhaWR1LioucG5nJywgJy5qcGcnLCcubXAzJywnLm1wNCcsJy5tM3U4JywnLmZsdicsJy5hdmknLCcuM2dwJywnLm1wZWcnLCcud212JywnLm1vdicsJy5ybXZiJywnLmdpZicsJy5qcGcnLCcuanBlZycsJy5wbmcnLCcuaWNvJywnLnN2ZyddLFxuICAgICAgICB0aXRsZVZpc2libGU6IHRydWUsXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0VmFyKCdwYXJzZVVybC51cmwnLCAnJykgfHwgXCJcIixcbiAgICAgICAgb25DaGFuZ2U6ICdwdXRWYXIoXCJwYXJzZVVybC51cmxcIixpbnB1dCknXG4gICAgfVxufSk7XG5sZXQgc2VsX3RpdGxlID0gWydR56WeJywn5pat5o+SJ10ubWFwKChpdCkgPT4ge1xuICAgIGxldCB0ZXN0X21vZGUgPSBnZXRJdGVtKCdkbi50ZXN0X21vZGUnLCdR56WeJyk7XG4gICAgcmV0dXJuIGl0PT09dGVzdF9tb2RlPyfwn5GJJytpdDppdDtcbn0pO1xuXG5kLnB1c2goe1xuICAgIHRpdGxlOifwn5KrJytnZXRJdGVtKCdkbi50ZXN0X21vZGUnLCdR56WeJyksXG4gICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxuICAgIHVybDokKHNlbF90aXRsZSwyKS5zZWxlY3QoKCk9PntcbiAgICAgICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKC/wn5GJL2csJycpO1xuICAgICAgICBzZXRJdGVtKCdkbi50ZXN0X21vZGUnLGlucHV0KTtcbiAgICAgICAgLy8gc2V0SXRlbShcInNlbGVjdGVkXCIsIHVybCk7XG4gICAgICAgIHNldEl0ZW0oXCJzZWxlY3RlZFwiLCBcIlwiKTsgLy8g6YeN572u6Kej5p6Q5aS0XG4gICAgICAgIHNldEl0ZW0oXCJzZWxlY3RlZDBcIiwgXCLkuI3pgIkmJlwiKTsgLy/liIfmjaLmqKHlvI/muIXnqbrpgInkuK3nmoTop6PmnpBcbiAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LliIfmjaLmqKHlvI/kuLo6JytpbnB1dFxuICAgIH0pXG59KTtcblxubGV0IHRpdGxlQXJyID0gW10sIHVybEFyciA9IFtdO1xudmFyIGpzb249e3RpdGxlOltdLGNvZGVzOnt9fTtcbmlmKGdldEl0ZW0oJ2RuLnRlc3RfbW9kZScsJ1HnpZ4nKT09PSdR56WeJyl7XG4gICAgbGV0IHBhcnNlVXJsVGV4dCA9IHJlcXVlc3QoXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFwiKTtcbiAgICBsZXQgcGFyc2VVcmxBcnJheSA9IHBhcnNlVXJsVGV4dC5zcGxpdCgvXFxuLyk7XG4gICAgcGFyc2VVcmxBcnJheS5mb3JFYWNoKChpdCkgPT4ge1xuICAgICAgICBpdCA9IGl0LnNwbGl0KFwiJiZcIik7XG4gICAgICAgIHRpdGxlQXJyLnB1c2goaXRbMF0pO1xuICAgICAgICB1cmxBcnIucHVzaChpdFsxXSk7XG4gICAgfSk7XG59XG5lbHNlIGlmKGdldEl0ZW0oJ2RuLnRlc3RfbW9kZScsJ1HnpZ4nKT09PSfmlq3mj5InKXtcbiAgICBsZXQgc2V0RmlsZSA9IHJlcXVlc3QoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJyk7XG4gICAgdHJ5IHtcbiAgICAgICAgZXZhbCgnanNvbj0nK3NldEZpbGUpO1xuICAgIH1jYXRjaCAoZSkge1xuICAgICAgICBsb2coJ0pzb27op6PmnpDlj5HnlJ/kuobplJnor686JytlLm1lc3NhZ2UpO1xuICAgIH1cbiAgICB0aXRsZUFyciA9IGpzb24udGl0bGU7XG4gICAgdGl0bGVBcnIuZm9yRWFjaCgoaXQpID0+IHtcbiAgICAgICAgdXJsQXJyLnB1c2goanNvbi5jb2Rlc1tpdF0pO1xuICAgIH0pO1xuICAgIC8vJC5zdHJpbmdpZnkoanNvbilcbn1cblxuZC5wdXNoKHtcbiAgICB0aXRsZTp0aXRsZUFyci5sZW5ndGgrJycsXG4gICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxuICAgIHVybDokKGdldEl0ZW0oJ2RuLnRlc3RfbW9kZScsJ1HnpZ4nKSsn5YWx6K6h6Kej5p6Q5pWw6YePOicrdGl0bGVBcnIubGVuZ3RoKyfkuKpcXG7mmK/lkKbpmo/mnLrmnaXkuKrlnLDlnYDov5vooYzmtYvor5U/JykuY29uZmlybSgoc2pUZXN0LGdldE9uZSk9PntcbiAgICAgICAgcHV0VmFyKCdwYXJzZVVybC51cmwnLCBnZXRPbmUoc2pUZXN0KSk7XG4gICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5Zyw5Z2A5bey57uZ5L2g5LqGJ1xuICAgIH0sc2pUZXN0LGdldE9uZSlcbn0pO1xuXG5sZXQgcmVhbFRpdGxlcyA9IHRpdGxlQXJyO1xudGl0bGVBcnIgPSBbJ+S4jemAiSddLmNvbmNhdCh0aXRsZUFycik7XG50aXRsZUFyciA9IHRpdGxlQXJyLm1hcCgoaXQpID0+IHtcbiAgICBsZXQgdGl0bGUgPSBnZXRJdGVtKFwic2VsZWN0ZWQwXCIsIFwiJiZcIikuc3BsaXQoXCImJlwiKVswXTtcbiAgICByZXR1cm4gaXQ9PT10aXRsZT8n8J+RiScraXQ6aXQ7XG59KTtcbmQucHVzaCh7XG4gICAgdGl0bGU6ICfimKLvuI8nK2dldEl0ZW0oXCJzZWxlY3RlZDBcIiwgXCImJlwiKS5zcGxpdChcIiYmXCIpWzBdLFxuICAgIHVybDogJCh0aXRsZUFyciwgMykuc2VsZWN0KChyZWFsVGl0bGVzLHVybEFycikgPT4ge1xuICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoL/CfkYkvZywnJyk7XG4gICAgICAgIGlmKGlucHV0PT09J+S4jemAiScpe1xuICAgICAgICAgICAgc2V0SXRlbShcInNlbGVjdGVkXCIsICcnKTtcbiAgICAgICAgICAgIHNldEl0ZW0oXCJzZWxlY3RlZDBcIiwgaW5wdXQgKyBcIiYmXCIgKyAnJyk7XG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XG4gICAgICAgICAgICByZXR1cm4gXCJ0b2FzdDovL+W3suWPlua2iOino+aekOWPoyznm7TmjqXov5vooYznm7Tpk77op6PmnpBcIjtcbiAgICAgICAgfVxuICAgICAgICBsZXQgaSA9IHJlYWxUaXRsZXMuaW5kZXhPZihpbnB1dCk7XG4gICAgICAgIGxldCB1cmwgPSB1cmxBcnJbaV07XG4gICAgICAgIGxvZyhcIlxcbuabtOaUueaOpeWPoz4gXCIgKyB1cmwpO1xuICAgICAgICBpZih0eXBlb2YodXJsKSE9PSdzdHJpbmcnKXtcbiAgICAgICAgICAgIGxvZygkLnRvU3RyaW5nKHVybCkpO1xuICAgICAgICAgICAgc2V0SXRlbShcInNlbGVjdGVkXCIsICQudG9TdHJpbmcodXJsKSk7XG4gICAgICAgICAgICAvLyByZXR1cm4gJ3RvYXN0Oi8v5pqC5LiN5pSv5oyB5pat5o+SZnVuY3Rpb27ns7vliJfnmoTpq5jnuqfop6PmnpDmtYvor5UnXG4gICAgICAgIH1lbHNle1xuICAgICAgICAgICAgc2V0SXRlbShcInNlbGVjdGVkXCIsIHVybCk7XG4gICAgICAgIH1cbiAgICAgICAgc2V0SXRlbShcInNlbGVjdGVkMFwiLCBpbnB1dCArIFwiJiZcIiArIHVybCk7XG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcbiAgICAgICAgcmV0dXJuIFwidG9hc3Q6Ly/liIfmjaLop6PmnpDlj6PkuLo6XCIraW5wdXQ7XG4gICAgfSwgcmVhbFRpdGxlcyx1cmxBcnIpLFxuICAgIGNvbF90eXBlOiBcInNjcm9sbF9idXR0b25cIlxufSk7XG5kLnB1c2goe1xuICAgIHRpdGxlOifwn42A5Li76aKYJyxcbiAgICB1cmw6IFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPeS4u+mimCNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcIixcbiAgICBjb2xfdHlwZTogXCJzY3JvbGxfYnV0dG9uXCJcbn0pO1xuZC5wdXNoKHtcbiAgICB0aXRsZTon8J+NgOino+aekCcsXG4gICAgdXJsOiBcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3op6PmnpAjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXCIsXG4gICAgY29sX3R5cGU6IFwic2Nyb2xsX2J1dHRvblwiXG59KTtcblxuZC5wdXNoKHtcbiAgICB0aXRsZTon8J+VkicrZ2V0SXRlbSgnZG4udGltZW91dCcsJzUwMDAnKSxcbiAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXG4gICAgdXJsOiQoZ2V0SXRlbSgnZG4udGltZW91dCcsJzUwMDAnKSwn6K+36L6T5YWl6Kej5p6Q6LaF5pe25q+r56eSJykuaW5wdXQoKCk9PntcbiAgICAgICAgaWYoIXBhcnNlSW50KGlucHV0KSl7XG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6LaF5pe26K6+572u6ZSZ6K+v77yM5ouS57ud5L+d5a2YJ1xuICAgICAgICB9XG4gICAgICAgIHNldEl0ZW0oJ2RuLnRpbWVvdXQnLGlucHV0fHwnNTAwMCcpO1xuICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suiuvue9ruino+aekOi2heaXtuavq+enkjonK2dldEl0ZW0oJ2RuLnRpbWVvdXQnLCc1MDAwJyk7XG4gICAgfSksXG59KTtcbmQucHVzaCh7XG4gICAgdGl0bGU6J/Cfk7Llr7zlh7pUWFQnLFxuICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcbiAgICB1cmw6JCgn56Gu6K6k5a+85Ye65pys5Zyw5piO5paH5LiU5aSN5Yi25LqR5Ymq5YiH5p2/P1xcbuWPr+WujOe+juWvvOWHuuWQjeensOWcsOWdgOeahOmAmueUqOinhOWImSzlr7lmdW5jdGlvbuexu+WFvOWuueaaguaXtuS4jeaYr+W+iOWlvScpLmNvbmZpcm0oKHRpdGxlQXJyLHVybEFycik9PntcbiAgICAgICAgbGV0IG1vZGUgPSBnZXRJdGVtKCdkbi50ZXN0X21vZGUnLCdR56WeJyk7XG4gICAgICAgIGlmKG1vZGU9PT0n5pat5o+SJ3x8bW9kZT09PSdR56WeJyl7XG4gICAgICAgICAgICBsZXQganhDb2RlID0gW107XG4gICAgICAgICAgICB0aXRsZUFyci5mb3JFYWNoKChpdCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmKCEv5LiN6YCJLy50ZXN0KGl0KSl7XG4gICAgICAgICAgICAgICAgICAgIGxldCBpID0gdGl0bGVBcnIuaW5kZXhPZihpdCk7XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gdXJsQXJyW2ktMV07XG4gICAgICAgICAgICAgICAgICAgIGxldCBvdXRDb2RlID0gKHR5cGVvZihjb2RlKT09PSdzdHJpbmcnfHx0eXBlb2YoY29kZSk9PT0ndW5kZWZpbmVkJyk/Y29kZTpiYXNlNjRFbmNvZGUoY29kZS50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IG91dFRpdGxlID0gaXQucmVwbGFjZSgv8J+RiS9nLCcnKTtcbiAgICAgICAgICAgICAgICAgICAgaWYob3V0VGl0bGUuc3RhcnRzV2l0aCgnaHR0cCcpJiYodHlwZW9mKG91dENvZGUpPT09J3VuZGVmaW5lZCd8fCFvdXRDb2RlKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICBqeENvZGUucHVzaChvdXRUaXRsZSsnLCcrb3V0VGl0bGUpO1xuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICAgICAgICAgIGp4Q29kZS5wdXNoKG91dFRpdGxlKycsJytvdXRDb2RlfHwnJylcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgbGV0IG91dFRleHQgPSBqeENvZGUuam9pbignXFxuJyk7XG4gICAgICAgICAgICBsZXQgb3V0UGF0aCA9ICdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2VPdXRfJyttb2RlKycudHh0JztcbiAgICAgICAgICAgIHdyaXRlRmlsZShvdXRQYXRoLG91dFRleHQpO1xuICAgICAgICAgICAgbGV0IHBhc3RlcyA9IGdldFBhc3RlcygpO1xuICAgICAgICAgICAgbGV0IGltcG9ydFVybCA9IHNoYXJlUGFzdGUoYmFzZTY0RW5jb2RlKG91dFRleHQpLHBhc3Rlc1sxXSk7XG4gICAgICAgICAgICBsZXQgaW1wb3J0Q29kZSA9ICfprZTmlq3op6PmnpDlr7zlhaXlj6Pku6TCpcKlJytpbXBvcnRVcmw7XG4gICAgICAgICAgICBjb3B5KGltcG9ydENvZGUpO1xuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWh+S7tuW3suWvvOWHuuWIsDonK291dFBhdGgrJ1xcbuivt+iHquihjOmAmui/h01U566h55CG5Zmo5p+l55yLJ1xuICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/miJHkuI3muIXmpZrkvaDopoHlgZrku4DkuYg/XFxuJyttb2RlO1xuICAgICAgICB9XG4gICAgfSx0aXRsZUFycix1cmxBcnIpLFxufSk7XG5kLnB1c2goe1xuICAgIHRpdGxlOifwn5Ol5a+85YWlVFhUJyxcbiAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXG4gICAgdXJsOiQoKS5ydWxlKCgpPT57XG4gICAgICAgIGxldCBkID0gW107XG4gICAgICAgIGQucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTon5a+85YWl6K+05piOJyxcbiAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0XzEnLFxuICAgICAgICAgICAgZGVzYzon5pSv5oyB5q2k5o+S5Lu25a+85Ye65qC85byP55qE5paH5pys6L+b6KGM5a+85YWl44CCXFxu5qC85byPMTog5ZCN56ewLOWcsOWdgCDkuIDooYzkuIDkuKrop6PmnpBcXG7moLzlvI8yOuS6keWJquWIh+advyDprZTmlq3op6PmnpDlr7zlhaXlj6Pku6TCpcKl5Ymq5YiH5p2/5Zyw5Z2AJyxcbiAgICAgICAgICAgIHVybDonaGlrZXI6Ly9lbXB0eSdcbiAgICAgICAgfSk7XG4gICAgICAgIGQucHVzaCh7XG4gICAgICAgICAgICBkZXNjOiBcInR4dOaWh+acrOino+aekOinhOWImSzkuIDooYzkuIDkuKpcIixcbiAgICAgICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxuICAgICAgICAgICAgdGl0bGU6J+ino+aekOaWh+acrCcsXG4gICAgICAgICAgICBleHRyYToge1xuICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXG4gICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoJ2RuLmltcG9ydF90ZXh0JywgJycpLFxuICAgICAgICAgICAgICAgIHR5cGU6IFwidGV4dGFyZWFcIixcbiAgICAgICAgICAgICAgICBoZWlnaHQ6LTEsXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U6ICdwdXRWYXIoXCJkbi5pbXBvcnRfdGV4dFwiLGlucHV0KSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIGQucHVzaCh7XG4gICAgICAgICAgICB0aXRsZTon8J+TpeWvvOWFpScsXG4gICAgICAgICAgICBjb2xfdHlwZTondGV4dF9jZW50ZXJfMScsXG4gICAgICAgICAgICB1cmw6JCgn56Gu5a6a57yW6L6R5aW95LqG5ZCXP+atpOaTjeS9nOWwhuimhuebluacrOWcsOW3suacieeahOiusOW9le+8jOW7uuiuruWkh+S7veWQjueUqOepuuaWh+S7tuWvvOWFpScpLmNvbmZpcm0oKCk9PntcbiAgICAgICAgICAgICAgICBjb25zdCB7ZGVmYXVsdFNldHN9ID0gJC5yZXF1aXJlKFwiaGlrZXI6Ly9wYWdlL2RlbW9EYXRhP3J1bGU9TXlGaWVsZOG0sOKBv1wiKTtcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VSb3V0ZSA9ICdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbic7XG4gICAgICAgICAgICAgICAgbGV0IGpzQ29kZSA9IGZldGNoKHBhcnNlUm91dGUpfHxKU09OLnN0cmluZ2lmeSh7dGl0bGU6W10sY29kZXM6e30sc2V0dGluZ3M6ZGVmYXVsdFNldHN9KTtcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGpzQ29kZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lj5HnlJ/plJnor686XFxuJytlLm1lc3NhZ2VcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgbGV0IHRvSW1wb3J0ID0gZ2V0VmFyKFwiZG4uaW1wb3J0X3RleHRcIik7XG4gICAgICAgICAgICAgICAgaWYoL+mtlOaWreino+aekOWvvOWFpeWPo+S7pMKlwqUvLnRlc3QodG9JbXBvcnQpJiZ0b0ltcG9ydC5zcGxpdCgnwqXCpScpLmxlbmd0aD4xKXtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IHRvSW1wb3J0LnNwbGl0KCfCpcKlJylbMV07XG4gICAgICAgICAgICAgICAgICAgIGlmKCEvXmh0dHAvLnRlc3QodXJsKSl7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5Ymq5YiH5p2/5Zyw5Z2A5pyJ6K+vLOWvvOWFpeWksei0pSdcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB0b0ltcG9ydCA9IHBhcnNlUGFzdGUodXJsKTtcbiAgICAgICAgICAgICAgICAgICAgdG9JbXBvcnQgPSBiYXNlNjREZWNvZGUodG9JbXBvcnQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBsZXQgamlleGkgPSB0b0ltcG9ydC5zcGxpdCgnXFxuJyk7XG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlVGl0bGUgPSBbXTtcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VDb2RlID0ge307XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSBpbiBqaWV4aSkge1xuICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGU9amlleGlbaV0uc3BsaXQoJywnKVswXTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGU9amlleGlbaV0uc3BsaXQoJywnKVsxXTtcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcbiAgICAgICAgICAgICAgICAgICAgaWYoIShjb2RlLnJlcGxhY2UoL1tcXHNdL2csJycpLnN0YXJ0c1dpdGgoJ2h0dHAnKSkpe1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKHRpdGxlKyfkuLrlh73mlbDop6PmnpAnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGNvZGUucmVwbGFjZSgvW1xcc10vZywnJykubGVuZ3RoPjIwKXsvL+inhuS4umZ1bmN0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZSA9IGV2YWwoYmFzZTY0RGVjb2RlKGNvZGUpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKGNvZGUpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1jYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gZS5tZXNzYWdlO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPWNvZGU7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGxldCBzY09iamVjdCA9IFtcIkNpdHlJUFwiLCBcInBjVUFcIiwgXCJjYWNoZU0zdThcIiwgXCJkZWZhdWx0UGFyc2VXZWJcIixcIm1hb3NzXCIsIFwiTExRXCJdO1xuICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUgPSBwYXJzZVRpdGxlP3BhcnNlVGl0bGUuZmlsdGVyKGl0PT4hc2NPYmplY3QuaW5jbHVkZXMoaXQpKTpbXTtcbiAgICAgICAgICAgICAgICB2YXIgbmV3UGFyc2VUaXRsZSA9IGpzb24udGl0bGUuY29uY2F0KHBhcnNlVGl0bGUpO1xuICAgICAgICAgICAgICAgIGpzb24udGl0bGUgPSBBcnJheS5mcm9tKG5ldyBTZXQobmV3UGFyc2VUaXRsZSkpO1xuICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oanNvbi5jb2RlcywgcGFyc2VDb2RlKTtcbiAgICAgICAgICAgICAgICBsZXQgbmV3RmlsZSA9ICQuc3RyaW5naWZ5KGpzb24pOyAvL0pTT04ucGFyc2XkvJrmiqXplJlcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgbmV3RmlsZSk7XG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LmiJDlip/lr7zlhaUnK2ppZXhpLmxlbmd0aCsn5p2h6Kej5p6QJztcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICAgZXh0cmE6e1xuICAgICAgICAgICAgICAgIGxpbmVWaXNpYmxlOnRydWVcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHNldFJlc3VsdChkKTtcbiAgICB9KSxcbn0pO1xuZC5wdXNoKHtcbiAgICB0aXRsZTon4piv77iP5p+l6YeN5aSE55CGJyxcbiAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXG4gICAgdXJsOiQoKS5sYXp5UnVsZSgodW5pcXVlMixkdXBsaWNhdGVzLGZsb29ycyk9PntcbiAgICAgICAgbGV0IHBhcnNlUm91dGUgPSAnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nO1xuICAgICAgICBsZXQganNDb2RlID0gZmV0Y2gocGFyc2VSb3V0ZSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGpzQ29kZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKzlnLDpgqPkuKpNeVBhcnNlLmpzb27mlofku7bmnInpl67popgs6L+Z5Liq5Yqf6IO95LiN57uZ5L2g55So5LqGISdcbiAgICAgICAgfVxuICAgICAgICBsZXQgdGl0bGVzID0ganNvbi50aXRsZTtcbiAgICAgICAgbGV0IGNvZGVzID0ganNvbi5jb2RlcztcbiAgICAgICAgbGV0IGtleXM9IE9iamVjdC5rZXlzKGNvZGVzKTtcbiAgICAgICAgbGV0IGtleXNfcmVfY3QgPSBrZXlzLmxlbmd0aCAtIHVuaXF1ZTIoa2V5cykubGVuZ3RoOyAvLyDlkI3np7Dph43lpI1cbiAgICAgICAgbGV0IG5vcm1hbF9saXN0ID0gW107XG4gICAgICAgIGZvcihsZXQgbyBpbiBjb2Rlcyl7XG4gICAgICAgICAgICBpZih0eXBlb2YoY29kZXNbb10pIT09J3VuZGVmaW5lZCcmJnR5cGVvZihjb2Rlc1tvXSkhPT0nZnVuY3Rpb24nKXtcbiAgICAgICAgICAgICAgICBub3JtYWxfbGlzdC5wdXNoKGNvZGVzW29dKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBsZXQgcmVOb3JMaXN0ID0gdW5pcXVlMihub3JtYWxfbGlzdCk7XG4gICAgICAgIGxldCB2YWx1ZV9yZV9jdCA9IG5vcm1hbF9saXN0Lmxlbmd0aCAtIHJlTm9yTGlzdC5sZW5ndGg7IC8v5Luj56CB6YeN5aSNXG4gICAgICAgIGxldCB2YWx1ZXNfcmUgPSBkdXBsaWNhdGVzKG5vcm1hbF9saXN0KTsvL+mHjeWkjeeahOWAvFxuICAgICAgICBsZXQgZnRsaXN0ID0gW107XG4gICAgICAgIGxldCBmbGFncyA9IHt9O1xuICAgICAgICBsZXQgbXlGbG9vcnMgPSBmbG9vcnM7XG4gICAgICAgIGZvcihsZXQgaiBpbiBjb2Rlcyl7Ly/pgY3ljobmiYDmnIlcbiAgICAgICAgICAgIGxldCBvbmUgPSBjb2Rlc1tqXTtcbiAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZihvbmUpICE9PSAnZnVuY3Rpb24nJiZ2YWx1ZXNfcmUuaW5jbHVkZXMob25lKSkge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIChmbGFnc1tvbmVdKSA9PT0gJ3VuZGVmaW5lZCcgfHwgIWZsYWdzW29uZV0pIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v5Y+W5Ye656ys5LiA5Liq5qCH5b+XXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFnc1tvbmVdID0gbXlGbG9vcnNbMF07XG4gICAgICAgICAgICAgICAgICAgICAgICBteUZsb29ycy5zcGxpY2UoMCwgMSk7Ly/liKDpmaTmoIflv5fliJfooajph4znmoTnrKzkuIDkuKrlhYPntKBcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBmdGxpc3QucHVzaCh7a2V5OiBmbGFnc1tvbmVdICsgaiwgdmFsdWU6IG9uZX0pO1xuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGZ0bGlzdC5wdXNoKHtrZXk6IGosIHZhbHVlOiBvbmV9KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9Y2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBsb2coZS5tZXNzYWdlKVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIC8vIGxvZyhKU09OLnN0cmluZ2lmeShmbGFncykpO1xuICAgICAgICBsZXQgbmV3Q29kZXMgPSB7fTtcbiAgICAgICAgZm9yKGxldCBrIGluIGZ0bGlzdCl7XG4gICAgICAgICAgICBuZXdDb2Rlc1tmdGxpc3Rba10ua2V5XSA9IGZ0bGlzdFtrXS52YWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgdGlwcyA9ICfmo4DmtYvliLDlkI3np7DlpI3nlKjpobnnm67mlbA6JytrZXlzX3JlX2N0Kycs5Luj56CB6YeN5aSN6aG555uu5pWw6YePOicrdmFsdWVfcmVfY3QrJ1xcbumcgOimgeS4gOmUruaJk+S4quagh+ivhuWQlz/kuI3mlK/mjIHoh6rliqjliKDpmaQs5omT5qCH5b+X6Ieq6KGM6Kej5YazJztcbiAgICAgICAgcmV0dXJuICQodGlwcykuY29uZmlybSgodmFsdWVfcmVfY3QsanNvbixuZXdDb2RlcyxwYXJzZVJvdXRlKT0+e1xuICAgICAgICAgICAgaWYodmFsdWVfcmVfY3Q8MSl7XG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aXoueEtumDveaYrzDkuKrph43lpI3pobnnm67kuobvvIzlsLHkuI3pnIDopoHmiJHlgZrku4DkuYjkuoYhJ1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZnVuY3Rpb24gY29tcGFyZSgpe1xuICAgICAgICAgICAgICAgIHJldHVybiBmdW5jdGlvbiAoYSwgYil7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHtmbG9vcnN9ID0gJC5yZXF1aXJlKFwiaGlrZXI6Ly9wYWdlL2RlbW9EYXRhP3J1bGU9TXlGaWVsZOG0sOKBv1wiKTtcbiAgICAgICAgICAgICAgICAgICAgbGV0IHggPSBhLnN1YnN0cmluZygwLDEpO1xuICAgICAgICAgICAgICAgICAgICBsZXQgeSA9IGIuc3Vic3RyaW5nKDAsMSk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmbG9vcnMuaW5kZXhPZih5KS1mbG9vcnMuaW5kZXhPZih4KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBqc29uLmNvZGVzID0gbmV3Q29kZXM7XG4gICAgICAgICAgICBsZXQgdGl0bGVzID0gT2JqZWN0LmtleXMobmV3Q29kZXMpO1xuICAgICAgICAgICAgdGl0bGVzID0gdGl0bGVzLnNvcnQoY29tcGFyZSgpKTtcbiAgICAgICAgICAgIGpzb24udGl0bGUgPSB0aXRsZXM7XG4gICAgICAgICAgICB2YXIgbmV3RmlsZSA9ICQuc3RyaW5naWZ5KGpzb24pOyAvL0pTT04ucGFyc2XkvJrmiqXplJlcbiAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCBuZXdGaWxlKTtcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LkuIDplK7miZPkuIrmoIflv5cnO1xuICAgICAgICB9LHZhbHVlX3JlX2N0LGpzb24sbmV3Q29kZXMscGFyc2VSb3V0ZSlcbiAgICB9LHVuaXF1ZTIsZHVwbGljYXRlcyxmbG9vcnMpLFxufSk7XG5kLnB1c2goe1xuICAgIHRpdGxlOlwi8J+UhOmHjee9rkLnq5lVQVwiLFxuICAgIGNvbF90eXBlOiBcInNjcm9sbF9idXR0b25cIixcbiAgICB1cmw6IFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1wiLFxuICAgIGV4dHJhOiB7XG4gICAgICAgIHVhOiBQQ19VQVxuICAgIH1cbn0pO1xuZC5wdXNoKHtcbiAgICB0aXRsZTpcIvCfl5HvuI/mibnph4/liKDpmaRcIixcbiAgICBjb2xfdHlwZTogXCJzY3JvbGxfYnV0dG9uXCIsXG4gICAgdXJsOiAkKCdoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSMnKS5ydWxlKCgpPT57XG4gICAgICAgIGxldCBsb2NhbEh0bWwgPSAnZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvY2FjaGUvcGxzY1BhcnNlLmh0bWwnO1xuICAgICAgICBsZXQgdGVzdGNvZGUgPSBmZXRjaChsb2NhbEh0bWwpO1xuICAgICAgICBpZighdGVzdGNvZGV8fC/mibnph4/liKDpmaTop6PmnpAvLnRlc3QodGVzdGNvZGUpKXtcbiAgICAgICAgICAgIHdyaXRlRmlsZShsb2NhbEh0bWwsZmV0Y2goJ2h0dHA6Ly9oaWtlci5ub2tpYS5wcmVzcy9oaWtlcnVsZS96eXdfZGF0YS8xMCcpKTtcbiAgICAgICAgfVxuICAgICAgICBsZXQgZCA9IFtdO1xuICAgICAgICBkLnB1c2goe3RpdGxlOiBcIuaJuemHj+WIoOmZpOino+aekFwiLCBkZXNjOiBcImF1dG8mJmZsb2F0XCIsIHVybDogXCJmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9jYWNoZS9wbHNjUGFyc2UuaHRtbFwiLCBjb2xfdHlwZTogXCJ4NV93ZWJ2aWV3X3NpbmdsZVwifSk7XG4gICAgICAgIHNldFJlc3VsdChkKTtcbiAgICB9KSxcbn0pO1xubGV0IHdlYl9zZWwgPSAn54ix5aWH6Im6L+S8mOmFty/ohb7orq8v6IqS5p6cL+WTlOWTqeWTlOWTqS/mkJzni5Av6KW/55OcL+mYv+mHjC9QUFRWL+WSquWSlS/kuZDop4YvMTkwNS/po47ooYwnLnNwbGl0KCcvJyk7XG5kLnB1c2goe1xuICAgIHRpdGxlOifigJjigJjigJnigJk8c3BhbiBzdHlsZT1cImNvbG9yOiMwMGQ5ZmZcIj7mnaXkuKrmtYvor5XlnLDlnYAnLFxuICAgIGNvbF90eXBlOiBcInRleHRfMlwiLFxuICAgIHVybDokKHdlYl9zZWwsNCkuc2VsZWN0KChkZW1vRGF0YSxnZXRPbmUpPT57XG4gICAgICAgIGxldCB1cmxzID0gZGVtb0RhdGFbaW5wdXRdO1xuICAgICAgICBsZXQgdXJsID0gZ2V0T25lKHVybHMpfHwnJztcbiAgICAgICAgaWYoIXVybCl7XG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8vJytpbnB1dCsn6L+Z5Liq572R56uZ5pqC5pe25rKh5pyJ5pKt5pS+5L6L5a2QJ1xuICAgICAgICB9XG4gICAgICAgIHB1dFZhcigncGFyc2VVcmwudXJsJywgdXJsKTtcbiAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/nu5nkvaDmib7kuobkuKonK2lucHV0KyfnmoTmkq3mlL7lnLDlnYA6XFxuJyt1cmw7XG4gICAgfSxkZW1vRGF0YSxnZXRPbmUpXG59KTtcbmlmKGdldEl0ZW0oJ2RuLnRlc3RfbW9kZScsJ1HnpZ4nKT09PSdR56WeJyl7XG4gICAgZC5wdXNoKHtcbiAgICAgICAgLy8nI2ZmNzAwMCdcbiAgICAgICAgdGl0bGU6J+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVwiY29sb3I6I2ZmNzAwMFwiPlHnpZ7mj5Lku7bmjqXlj6Porr7nva4nLFxuICAgICAgICAvLyB0aXRsZTogJ+KAnOKAnFHnpZ7mj5Lku7bmjqXlj6Porr7nva7igJ3igJ0nLFxuICAgICAgICB1cmw6IFwiaGlrZXI6Ly9wYWdlL0VkaXRVcmw/cnVsZT1NeUZpZWxk4bSw4oG/XCIsXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8yJ1xuICAgIH0pO1xufWVsc2UgaWYoZ2V0SXRlbSgnZG4udGVzdF9tb2RlJywnUeelnicpPT09J+aWreaPkicpe1xuICAgIGxldCB1cmwgPSByZWFsVGl0bGVzLmxlbmd0aD4wP1wiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPee8lui+kSNub0hpc3RvcnkjXCI6JCgn5Yir6K6+572u5LqG77yM5YWI5ouJ5Luj56CBJykuY29uZmlybSgpXG4gICAgZC5wdXNoKHtcbiAgICAgICAgdGl0bGU6J+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVwiY29sb3I6I2ZmNzAwMFwiPuaWreaPkuaOpeWPo+iuvue9ricsXG4gICAgICAgIHVybDogdXJsLFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMidcbiAgICB9KTtcbn1cbmQucHVzaCh7XG4gICAgdGl0bGU6J+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVwiY29sb3I6I2ZmNzAwMFwiPuWwj+eZveWFs+aAgOaooeW8jzogPC9zcGFuPjxzcGFuIHN0eWxlPVwiY29sb3I6Z3JleVwiPjxzbWFsbD7kuI3mh4LkuI3lrabllaXkuZ/kuI3kvJrvvJ/mi6/mlZHlgrvnmb3nlJznmoTkvaA8L3NtYWxsPjwvc3Bhbj4nLFxuICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9SZWNvcmRIaXN0b3J5IycpLmxhenlSdWxlKCgpPT57XG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3NtYWxsV2hpdGU/cnVsZT1NeUZpZWxk4bSw4oG/J1xuICAgIH0pLFxuICAgIGNvbF90eXBlOiAndGV4dF8xJyxcbn0pO1xuXG5qeEl0ZW0ubHFGaWxlKCk7XG5sZXQgZXh0cmEgPSBkLnNsaWNlKC03LGQubGVuZ3RoKTsgLy/mlq3mj5Lmt7vliqDnmoTlhYPntKBcbmQgPSBkLnNsaWNlKDAsLTcpOyAvLyDoh6rlt7HnmoTlh73mlbBcbmV4dHJhWzBdLnRpdGxlPSfmi4nlj5bliJfooago5LiN5o6o6I2QKSdcbmV4dHJhWzBdLmNvbF90eXBlPSd0ZXh0XzInXG5leHRyYVsxXS50aXRsZT0n5ouJ5Y+W5Luj56CBKOW8uueDiOaOqOiNkCknXG5leHRyYVsxXS5jb2xfdHlwZT0ndGV4dF8yJ1xuZXh0cmFbNF0uY29sX3R5cGU9J3RleHRfY2VudGVyXzEnXG5leHRyYVs0XS51cmw9Y3pHdWlkZSgpO1xuZXh0cmEuc3BsaWNlKDIsMSk7XG5kID0gZC5jb25jYXQoZXh0cmEpO1xuLy8gZC5zcGxpY2UoZC5sZW5ndGgtNSwxKTtcbnNldFJlc3VsdChkKTsiLCJzZWFyY2hfdXJsIjoiIiwiZ3JvdXAiOiLikaDgvoTwn42nIiwic2VhcmNoRmluZCI6IiIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJkZXRhaWxfZmluZF9ydWxlIjoiIiwic2RldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJzZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInVhIjoibW9iaWxlIiwicHJlUnVsZSI6IiIsInBhZ2VzIjoiW3tcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJQYXJzZV9Ebi12dWUuaHRtbFwiLFwicGF0aFwiOlwiUGFyc2VfRG4uaHRtbFwiLFwicnVsZVwiOlwiPCFET0NUWVBFIGh0bWw+XFxuPGh0bWw+XFxuPGhlYWQ+XFxuICAgIDxtZXRhIGNoYXJzZXQ9XFxcInV0Zi04XFxcIj5cXG4gICAgPG1ldGEgbmFtZT1cXFwidmlld3BvcnRcXFwiIGNvbnRlbnQ9XFxcIndpZHRoPWRldmljZS13aWR0aCxpbml0aWFsLXNjYWxlPTEsbWluaW11bS1zY2FsZT0xLG1heGltdW0tc2NhbGU9MSx1c2VyLXNjYWxhYmxlPW5vXFxcIiAvPlxcbiAgICA8dGl0bGU+UGFyc2VfRG5fdnVlPC90aXRsZT5cXG4gICAgPHNjcmlwdD5cXG4gICAgICAgIGNvbnN0IHZ1ZVBhdGggPSAnaGlrZXI6Ly9maWxlcy9ydWxlcy9kekhvdXNlL2pzL3Z1ZS5qcyc7XFxuICAgICAgICBpZih0eXBlb2YoZmJhKT09J3VuZGVmaW5lZCd8fCFmYmEpe1xcbiAgICAgICAgICAgIHZhciBmYmEgPSBmeV9icmlkZ2VfYXBwO1xcbiAgICAgICAgfVxcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBpZih0eXBlb2YocmVxdWVzdCk9PSd1bmRlZmluZWQnfHwhcmVxdWVzdCl7XFxuICAgICAgICAgICAgICAgIGV2YWwoZmJhLmdldEludGVybmFsSnMoKSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIC8vIGZiYS5sb2codnVlUGF0aCk7XFxuICAgICAgICAgICAgaWYoIXJlcXVlc3QodnVlUGF0aCkpe1xcbiAgICAgICAgICAgICAgICBmYmEud3JpdGVGaWxlKHZ1ZVBhdGgscmVxdWVzdCgnaHR0cDovL2hpa2VyLm5va2lhLnByZXNzL2hpa2VydWxlL3J1bGVsaXN0Lmpzb24/aWQ9MTgyMycpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgZXZhbChmYmEuZmV0Y2godnVlUGF0aCkpO1xcbiAgICAgICAgICAgIH1jYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAvLyBjb25zb2xlLmxvZyhlLm1lc3NhZ2UpO1xcbiAgICAgICAgICAgICAgICBmYmEubG9nKGUubWVzc2FnZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIC8vIGZiYS5sb2coJ+WKoOi9vXZ1Zee7hOS7tuWujOavlScpO1xcbiAgICAgICAgfWNhdGNoIChlKSB7XFxuICAgICAgICAgICAgYWxlcnQoZS5tZXNzYWdlKTtcXG4gICAgICAgIH1cXG4gICAgPC9zY3JpcHQ+XFxuICAgIDwhLS0gICAgPHNjcmlwdCBzcmM9XFxcImh0dHBzOi8vdW5wa2cuY29tL3Z1ZUBuZXh0XFxcIj48L3NjcmlwdD4tLT5cXG4gICAgPCEtLSAgICA8c2NyaXB0IHNyYz1cXFwiZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvcnVsZXMvZHpIb3VzZS9qcy92dWUuanNcXFwiPjwvc2NyaXB0Pi0tPlxcbiAgICA8c3R5bGU+XFxuICAgICAgICBib2R5IHtcXG4gICAgICAgICAgICBtYXJnaW46IDAgNXB4IDAgNXB4O1xcbiAgICAgICAgICAgIHBhZGRpbmc6IDAgMHB4IDAgMHB4O1xcbiAgICAgICAgICAgIC8qICAgICAgICAgICAgYmFja2dyb3VuZDogI0Y5RjBEQTsqL1xcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAwO1xcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBcXFwiTWljcm9zb2Z0IFlhSGVpXFxcIixcXFwi5a6L5L2TXFxcIixcXFwiU2Vnb2UgVUlcXFwiLCBcXFwiTHVjaWRhIEdyYW5kZVxcXCIsIEhlbHZldGljYSwgQXJpYWwsc2Fucy1zZXJpZiwgRnJlZVNhbnMsIEFyaW1vO1xcbiAgICAgICAgfVxcbiAgICAgICAgI2FwcHtcXG4gICAgICAgICAgICBtYXJnaW4tdG9wOi0xMHB4O1xcbiAgICAgICAgfVxcbiAgICAgICAgI3RpcHN7XFxuICAgICAgICAgICAgbWFyZ2luLXRvcDotMTBweDtcXG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOjVweDtcXG4gICAgICAgIH1cXG4gICAgICAgIC5mdW5ne1xcbiAgICAgICAgICAgIHRleHQtYWxpZ246Y2VudGVyXFxuICAgICAgICB9XFxuICAgICAgICBkaXYuYm94IHtcXG4gICAgICAgICAgICBtYXJnaW4tdG9wOi0xcHg7XFxuICAgICAgICAgICAgaGVpZ2h0OiA0M3B4O1xcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4O1xcbiAgICAgICAgfVxcbiAgICAgICAgLyrovpPlhaXmoYblsLrlr7gqL1xcbiAgICAgICAgZm9ybSB7XFxuICAgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xcbiAgICAgICAgICAgIHdpZHRoOiAxMDAlO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgaW5wdXQsIGxhYmVsLCBzZWxlY3Qge1xcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcXG4gICAgICAgICAgICBvdXRsaW5lOiBub25lO1xcbiAgICAgICAgfVxcbiAgICAgICAgLyrlrZfkvZPkvY3nva4qL1xcbiAgICAgICAgaW5wdXQge1xcbiAgICAgICAgICAgIHdpZHRoOiA3NyU7XFxuICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogNjZweDtcXG4gICAgICAgICAgICBwYWRkaW5nLXJpZ2h0OiAwcHg7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBsYWJlbCB7XFxuICAgICAgICAgICAgdGV4dC1hbGlnbjpjZW50ZXI7XFxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDQzcHg7XFxuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xcbiAgICAgICAgICAgIHdpZHRoOiA2MHB4O1xcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICAvKuWwj+ahhiovXFxuICAgICAgICAuYmFyIGxhYmVsIHtcXG4gICAgICAgICAgICAvKmJhY2tncm91bmQ6ICNEMDZCNkM7Ki9cXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1cHggNTU1cHggNTU1cHggNXB4O1xcbiAgICAgICAgICAgIHdpZHRoOiA2MHB4O1xcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDtcXG4gICAgICAgICAgICB0b3A6IDA7XFxuICAgICAgICAgICAgbGVmdDogM3B4O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgLyrovpPlhaXmoYbmoLflvI8qL1xcbiAgICAgICAgLmJhciBpbnB1dCB7XFxuICAgICAgICAgICAgLypib3JkZXItcmFkaXVzOiA1cHggNTU1cHggNTU1cHggNXB4O1xcbiAgICAgICAgICAgICAqL1xcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIC8q5YiX6KGoKi9cXG4gICAgICAgIHNlbGVjdCB7XFxuICAgICAgICAgICAgdGV4dC1hbGlnbjpjZW50ZXI7XFxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6NDBweDtcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxuICAgICAgICAgICAgd2lkdGg6IDIwcHg7XFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIC8q5YiX6KGoKi9cXG4gICAgICAgIC5saWViIHNlbGVjdHtcXG4gICAgICAgICAgICAvKmJvcmRlci1yYWRpdXM6IDRweDsqL1xcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDU1NXB4IDVweCA1cHggNTU1cHg7XFxuICAgICAgICAgICAgd2lkdGg6IDgwcHg7XFxuICAgICAgICAgICAgdGV4dC1hbGlnbjpjZW50ZXI7XFxuICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xcbiAgICAgICAgICAgIHRvcDogMDtcXG4gICAgICAgICAgICByaWdodDogMnB4O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgLyrlpLTlg48qL1xcbiAgICAgICAgLnJvdW5kX2ljb257XFxuICAgICAgICAgICAgd2lkdGg6IDQwcHg7XFxuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgICAgIH1cXG4gICAgPC9zdHlsZT5cXG48L2hlYWQ+XFxuPGJvZHk+XFxuPGRpdiBjbGFzcz1cXFwiZnVuZ1xcXCI+XFxuICAgIDxhIHN0eWxlPVxcXCJmbG9hdDpsZWZ0O1xcXCI+XFxuICAgICAgICA8YnV0dG9uICA6c3R5bGU9XFxcIidib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6ICcrdGhlbWVzLmNsb3NlQnRuLmJhY2tncm91bmQrJzt3aWR0aDogODBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAnK3RoZW1lcy5jbG9zZUJ0bi5jb2xvclxcXCIgb25jbGljaz1cXFwiY2FuY2VsKCk7XFxcIj7lhbMg6ZetPC9idXR0b24+XFxuICAgIDwvYT5cXG4gICAgPGEgY2xhc3M9XFxcImJ0biBidG4tcHJpbWFyeVxcXCI+XFxuICAgICAgICA8YnV0dG9uICA6c3R5bGU9XFxcIidib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6ICcrdGhlbWVzLnRpcHNCdG4uYmFja2dyb3VuZCsnO3dpZHRoOiAxMjBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAnK3RoZW1lcy50aXBzQnRuLmNvbG9yXFxcIiBAY2xpY2s9XFxcInNob3dUaXBzPSFzaG93VGlwc1xcXCI+e3tzaG93VGlwcz9cXFwi6ZqQ6JeP5o+Q56S6XFxcIjpcXFwi5pi+56S65o+Q56S6XFxcIn19PC9idXR0b24+XFxuICAgIDwvYT5cXG4gICAgPGEgc3R5bGU9XFxcImZsb2F0OnJpZ2h0XFxcIj5cXG4gICAgICAgIDxidXR0b24gOnN0eWxlPVxcXCInYm9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiAnK3RoZW1lcy5zYXZlQnRuLmJhY2tncm91bmQrJzt3aWR0aDogODBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAnK3RoZW1lcy5zYXZlQnRuLmNvbG9yXFxcIiBvbmNsaWNrPVxcXCJjbGlja21lKCfphY0g572uIOW3siDkv50g5a2YIO+8gScsIDEwMDAsICflvIAnKTtcXFwiPuS/nSDlrZg8L2J1dHRvbj5cXG4gICAgPC9hPlxcblxcbjwvZGl2Plxcbjxicj5cXG48ZGl2IGlkPVxcXCJhcHBcXFwiPlxcbiAgICA8aDYgaWQ9XFxcInRpcHNcXFwiIHYtaHRtbD1cXFwidGlwc1xcXCIgdi1zaG93PVxcXCJzaG93VGlwc1xcXCI+PC9oNj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiYm94IGJhclxcXCIgdi1mb3I9XFxcIm9wdGlvbiBpbiBvcHRpb25zXFxcIj5cXG4gICAgICAgIDxmb3JtPlxcbiAgICAgICAgICAgIDxsYWJlbCB0eXBlPVxcXCJzdWJtaXRcXFwiIDpzdHlsZT1cXFwiJ2JhY2tncm91bmQ6Jyt0aGVtZXMuYmFybGFiZWwuYmFja2dyb3VuZCsnO2NvbG9yOicrdGhlbWVzLmJhcmxhYmVsLmNvbG9yXFxcIj57eyBvcHRpb24ubmFtZSB9fTwvbGFiZWw+XFxuICAgICAgICAgICAgPGlucHV0IDpzdHlsZT1cXFwiJ2JhY2tncm91bmQ6Jyt0aGVtZXMuYmFySW5wdXQuYmFja2dyb3VuZCsnO2JvcmRlcjogM3B4IHNvbGlkICcrdGhlbWVzLmJhcklucHV0LmNvbG9yXFxcIiB0eXBlPVxcXCJ0ZXh0XFxcIiBvbmNsaWNrPVxcXCJyZXNldFNlbGVjdCh0aGlzLmlkKVxcXCIgOnBsYWNlaG9sZGVyPVxcXCJvcHRpb24ucGxhY2Vob2xkZXJ8fHBsYWNlaG9sZGVyXFxcIiB2LW1vZGVsPVxcXCJvcHRpb24udmFsdWVcXFwiIHYtYmluZDppZD1cXFwib3B0aW9uLmlkXFxcIj5cXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJsaWViXFxcIj5cXG4gICAgICAgICAgICAgICAgPHNlbGVjdCA6c3R5bGU9XFxcIidiYWNrZ3JvdW5kOicrdGhlbWVzLnNlbGVjdC5iYWNrZ3JvdW5kKyc7Y29sb3I6Jyt0aGVtZXMuc2VsZWN0LmNvbG9yXFxcIiA6Y2xlYXJhYmxlPVxcXCJ0cnVlXFxcIiBzaXplPVxcXCIyXFxcIiA6aWQ9XFxcIm9wdGlvbi5pZCsnU2VsZWN0J1xcXCIgOm5hbWU9XFxcIm9wdGlvbi5pZFxcXCIgb25jaGFuZ2U9XFxcImdldE9wdGlvbih0aGlzLmlkLHRoaXMubmFtZSlcXFwiICB2LW1vZGVsPVxcXCJvcHRpb24udmFsdWVcXFwiPlxcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2LWlmPVxcXCJvcHRpb24uaWQhPT0ncWp1JyYmb3B0aW9uLmlkIT09J2NqJ1xcXCIgOnZhbHVlPVxcXCJzZWxcXFwiIDprZXk9XFxcImluZGV4XFxcIiB2LWZvcj1cXFwiKHNlbCxpbmRleCkgaW4gbXlTZWxlY3RcXFwiPnt7IHNlbCB9fTwvb3B0aW9uPlxcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2LWVsc2UtaWY9XFxcIm9wdGlvbi5pZD09PSdxanUnXFxcIiA6dmFsdWU9XFxcInNlbFxcXCIgOmtleT1cXFwiaW5kZXhcXFwiIHYtZm9yPVxcXCIoc2VsLGluZGV4KSBpbiBbJ+m7mOiupCddLmNvbmNhdChteVNlbGVjdClcXFwiPnt7IHNlbCB9fTwvb3B0aW9uPlxcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiA6dmFsdWU9XFxcInNlbFxcXCIgOmtleT1cXFwiaW5kZXhcXFwiIHYtZWxzZSB2LWZvcj1cXFwiKHNlbCxpbmRleCkgaW4gY2pTZWxcXFwiPnt7IHNlbCB9fTwvb3B0aW9uPlxcbiAgICAgICAgICAgICAgICA8L3NlbGVjdD5cXG4gICAgICAgICAgICA8L2Rpdj5cXG4gICAgICAgIDwvZm9ybT5cXG4gICAgPC9kaXY+XFxuPC9kaXY+XFxuPGRpdj5cXG4gICAgPGEgdi1mb3I9XFxcInZlciBpbiB2ZXJpbmZvXFxcIiBzdHlsZT1cXFwiZmxvYXQ6bGVmdDttYXJnaW4tdG9wOjFweDttYXJnaW4tcmlnaHQ6IDIwcHhcXFwiIHYtYmluZDppZD0ndmVyLmlkJyBvbmNsaWNrPVxcXCJkb09wdGlvbih0aGlzLmlkKVxcXCI+XFxuICAgICAgICA8aW1nIDpzcmM9XFxcInZlci5hdmF0YXJcXFwiIGNsYXNzPVxcXCJyb3VuZF9pY29uXFxcIiAgYWx0PVxcXCJcXFwiPlxcbiAgICAgICAgPHNwYW4gc3R5bGU9XFxcIm1hcmdpbi1sZWZ0OjEwcHg7bGluZS1oZWlnaHQ6MTBweDtmb250LXNpemU6MTJweDtjb2xvcjogZ3JleTtcXFwiPnt7IHZlci5hdXRob3IgfX08L3NwYW4+XFxuICAgIDwvYT5cXG4gICAgPGEgc3R5bGU9XFxcImZsb2F0OnJpZ2h0O21hcmdpbi10b3A6MTBweDtcXFwiPlxcbiAgICAgICAgPGJ1dHRvbiA6c3R5bGU9XFxcIidib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6Jyt0aGVtZXMuc2F2ZUNsb3NlQnRuLmJhY2tncm91bmQrJzt3aWR0aDogMTYwcHg7aGVpZ2h0OjQwcHg7IGZvbnQtc2l6ZTogMThweDtjb2xvcjogJyt0aGVtZXMuc2F2ZUNsb3NlQnRuLmNvbG9yXFxcIiBvbmNsaWNrPVxcXCJjbGlja21lKCfphY0g572uIOW3siDkv50g5a2YIO+8gScsIDEwMDAsICflhbMnKTtcXFwiPuS/neWtmOW5tuWFs+mXreeVjOmdojwvYnV0dG9uPlxcbiAgICA8L2E+XFxuPC9kaXY+XFxuPHNjcmlwdD5cXG4gICAgbGV0IHRpcHMgPSBg5o+Q56S677yaPGJyPuKRoOazqOaEj+aPkuS7tumAiemhue+8jOayoeacieaJi+WKqOWvvOWFpeaPkuS7tueahOivneS4jeeUqOWKqOWug+OAguWmguiuvue9ruS4jeW9k+S8muWvvOiHtOinhOWImeaXoOazleS9v+eUqO+8jDxicj7op6PlhrPlip7ms5XvvJrop4bnlYzmiZPlvIDmm7TlpJrorr7nva7ihpLmlofku7bnrqHnkIbihpLngrljYWNoZeKGkumVv+aMiU15UGFyc2VTZXQuanNvbuWIoOmZpOaOie+8mzxicj7ikaHlhajlsYDorr7nva7lpoLmnpzpgInmi6nkuobpnZ7pu5jorqTpgqPkuYjlhajpg6jnmoTop6PmnpDkvJrkvb/nlKjov5nkuIDorr7nva7vvIzkuI3mg7Pov5nmoLfnmoTor53or7floavlhaXpu5jorqTvvJs8YnI+4pGi57u/6Imy5L+d5a2Y5oyJ6ZKu5LuF5LuF5L+d5a2Y6YWN572u5LiN5Lya5YWz6Zet6K6+572u6aG16Z2i77yM6YWN572u5ZCO5oOz5L+d5a2Y5bm25YWz6Zet6K6+572u6aG16Z2i55qE6K+d6K+354K56JOd6Imy5oyJ6ZKu77ybPGJyPuKRo+WmguaenOmBh+WIsOS/neWtmOaMiemSrueCueS4jeWKqOaIluiAheaKpemUmeeahOaDheWGte+8jOS7peS4i+i3r+W+hOaMqOedgOWIoOmZpOS4gOmBje+8jOeEtuWQjumHjeaWsOaLieWPluaPkuS7tu+8jOe9kemhteWGjeaJk+W8gOatpOe9kemhtVvkuI3opoHlhYjmi4nku6PnoIFd44CC6K6w5b6X5aSH5Lu9PGJyPlxcbuS4u+aPkuS7tuWtmOaUvui3r+W+hDogL2NhY2hlL1BhcnNlX0RuLmpzPGJyPlxcbue9kemhteiEmuacrOWtmOaUvui3r+W+hDogL2NhY2hlL1BhcnNlX0RuLmh0bWw8YnI+XFxu5pen5pat5o+S6YWN572u6Lev5b6EOi9jYWNoZS9NeVBhcnNlU2V0Lmpzb248YnI+XFxu5paw5pat5o+S6YWN572u6Lev5b6EL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbjxicj5cXG4gICAg4pGk6ZiF6K+75a6M5o+Q56S654K55YWz6Zet5Yqg6L295a6M5pW06K6+572u6aG16Z2i77yM5aaC5Ye66Zeu6aKY5peg5rOV6Ieq6KGM6Kej5Yaz54K55Zu+54mH6L+b5YWl6K665Z2b5ZCR5oiR5Y+N6aaI44CCPGJyPmA7XFxuICAgIGxldCBwbGFjZWhvbGRlcj0n6L6T5YWl6Kej5p6Q5ZCN5oiW6ICFVVJMLi4uLi4uJztcXG4gICAgLy8jYWE5NmRhICNmYzUxODVcXG4gICAgbGV0IHRoZW1lcyA9IHtcXG4gICAgICAgIG5hbWU6J+m7mOiupOS4u+mimCcsXFxuICAgICAgICBjbG9zZUJ0bjp7Y29sb3I6JyNmNmY2ZjYnLGJhY2tncm91bmQ6JyNhYTk2ZGEnfSxcXG4gICAgICAgIHNhdmVCdG46e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjMDY4MDA2J30sXFxuICAgICAgICBzYXZlQ2xvc2VCdG46e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjMDVCRkM1J30sXFxuICAgICAgICB0aXBzQnRuOntjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonIzA1QkZDNSd9LFxcbiAgICAgICAgYmFybGFiZWw6e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjYWE5NmRhJ30sXFxuICAgICAgICBiYXJJbnB1dDp7Y29sb3I6JyNhYTk2ZGEnLGJhY2tncm91bmQ6JyNmZmZmZDInfSxcXG4gICAgICAgIHNlbGVjdDp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyNhYTk2ZGEnfSxcXG4gICAgfTtcXG4gICAgbGV0IHRoZW1lRGVmID0ge1xcXCJuYW1lXFxcIjpcXFwi5pat5b+15Y6f55quXFxcIixcXFwiY2xvc2VCdG5cXFwiOntcXFwiY29sb3JcXFwiOlxcXCIjRjlGMERBXFxcIixcXFwiYmFja2dyb3VuZFxcXCI6XFxcIiNjNTQ2NGFcXFwifSxcXFwic2F2ZUJ0blxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiIzA2ODAwNlxcXCJ9LFxcXCJzYXZlQ2xvc2VCdG5cXFwiOntcXFwiY29sb3JcXFwiOlxcXCIjRjlGMERBXFxcIixcXFwiYmFja2dyb3VuZFxcXCI6XFxcIiMwNUJGQzVcXFwifSxcXFwidGlwc0J0blxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiIzA1QkZDNVxcXCJ9LFxcXCJiYXJsYWJlbFxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiI0QwNkI2Q1xcXCJ9LFxcXCJiYXJJbnB1dFxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNEMDZCNkNcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiI0Y5RjBEQVxcXCJ9LFxcXCJzZWxlY3RcXFwiOntcXFwiY29sb3JcXFwiOlxcXCIjRjlGMERBXFxcIixcXFwiYmFja2dyb3VuZFxcXCI6XFxcIiNEMDZCNkNcXFwifX07XFxuICAgIHZhciB0aGVtZVJvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlUaGVtZS5qc29uXFxcIjtcXG4gICAgaWYoIWZiYS5mZXRjaCh0aGVtZVJvdXRlKSl7XFxuICAgICAgICBmYmEud3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkoe25vd190aGVtZTon6buY6K6k5Li76aKYJyx0aGVtZXM6W3RoZW1lcyx0aGVtZURlZl19KSlcXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgbGV0IG15VGhlbWVzID0gSlNPTi5wYXJzZShmYmEuZmV0Y2godGhlbWVSb3V0ZSkpO1xcbiAgICAgICAgbGV0IG5vd1RoZW1lID0gbXlUaGVtZXMudGhlbWVzLmZpbHRlcihpdD0+aXQubmFtZSA9PT0gbXlUaGVtZXMubm93X3RoZW1lKTtcXG4gICAgICAgIHRoZW1lcyA9IG5vd1RoZW1lP25vd1RoZW1lWzBdOm15VGhlbWVzLnRoZW1lc1swXTtcXG4gICAgfWNhdGNoIChlKSB7fVxcblxcbiAgICAvLyDmlq3lv7XliJ3lp4vljJbpg6jliIZcXG4gICAgY29uc3QgYWxsQXBpPVsnaHR0cHM6Ly90ZXN0LnJvbmd4aW5ndnIuY29tL3Rlc3QvP3VybD0nLCdodHRwOi8vY2FjaGUubGFuZ3VhbmcuaWN1Ojg4L2RpZGkucGhwP3VybD0nXTtcXG4gICAgdmFyIHNldHRpbmdzID0ge1xcbiAgICAgICAgcXk6ICfkvaDniLnnp5HmioAnLFxcbiAgICAgICAgeWs6ICfpoobphbcnLFxcbiAgICAgICAgdHg6ICfojaPogIAnLFxcbiAgICAgICAgbWc6ICfomoLomoHlhYTlvJ8nLFxcbiAgICAgICAgYmw6ICdPS+ino+aekCcsXFxuICAgICAgICBzaDogJ+axn+a5lkQnLFxcbiAgICAgICAgeGc6ICfmsZ/muZZEJyxcXG4gICAgICAgIGFsOiAn5rGf5rmWRCcsXFxuICAgICAgICBwcDogJ+S6uuS6uui/tycsXFxuICAgICAgICBtaTogJzEwODAnLFxcbiAgICAgICAgbGU6ICfov6rlpaXll4XmjqInLFxcbiAgICAgICAgb3RoOiAn6YGT6ZW/5LuT5bqT6YCa5YWNJyxcXG4gICAgICAgIG9uZTogJzEwODAnLFxcbiAgICAgICAgZnVuOiAn6J6N5YW0JyxcXG4gICAgICAgIHFqdTogJ+m7mOiupCcsXFxuICAgICAgICBjajogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnXFxuICAgIH07XFxuICAgIHZhciBvbGRSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXCI7XFxuICAgIHZhciBteVNldCA9IGZiYS5mZXRjaChvbGRSb3V0ZSk7XFxuICAgIHZhciBuZXdSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvblxcXCI7XFxuICAgIGlmKCFmYmEuZmV0Y2gobmV3Um91dGUpKXtcXG4gICAgICAgIGZiYS53cml0ZUZpbGUobmV3Um91dGUsSlNPTi5zdHJpbmdpZnkoe3NldHRpbmdzOnNldHRpbmdzLHRpdGxlOltcXFwieXVuMTcxN1xcXCIsXFxcIuS9oOeIueenkeaKgFxcXCIsXFxcIuiejeWFtFxcXCIsXFxcIuS6uuS6uui/ty3kvJjphbdcXFwiXSxjb2Rlczp7XFxcIuS9oOeIueenkeaKgFxcXCI6XFxcImh0dHA6Ly9jYWNoZS5sYW5ndWFuZy5pY3U6ODgvZGlkaS5waHA/dXJsPVxcXCIsXFxcIuiejeWFtFxcXCI6XFxcImh0dHBzOi8vdGVzdC5yb25neGluZ3ZyLmNvbS90ZXN0Lz91cmw9XFxcIixcXFwi5Lq65Lq66L+3LeS8mOmFt1xcXCI6XFxcImh0dHBzOi8vc3ZpcC5yZW5yZW5taS5jYzoyMjIyL2FwaS8/a2V5PW5uNGo4cnVrUFhTVnpSNzhFOSZ1cmw9XFxcIn19KSlcXG4gICAgfVxcbiAgICB2YXIgbmV3Q29uZmlnID0gZmJhLmZldGNoKG5ld1JvdXRlKTtcXG4gICAgdmFyIG15U2VsZWN0ID0gW107XFxuICAgIGZ1bmN0aW9uIGNvbXBhcmUobGlzdCkge1xcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xcbiAgICAgICAgICAgIHJldHVybiAhbGlzdC5pbmNsdWRlcyhpdClcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBpZihuZXdDb25maWcmJm5ld0NvbmZpZy5sZW5ndGg+MjApe1xcbiAgICAgICAgZXZhbChcXFwibmV3Q29uZmlnID1cXFwiICsgbmV3Q29uZmlnICsgXFxcIjtcXFwiKTtcXG4gICAgICAgIHNldHRpbmdzID0gT2JqZWN0LmFzc2lnbihzZXR0aW5ncyxuZXdDb25maWcuc2V0dGluZ3MpO1xcbiAgICAgICAgdmFyIHljVGl0bGUgPSBbJ2RlZmF1bHRQYXJzZScsICdkZWZhdWx0UGFyc2VXZWInLCdtYW9zcycsICdDaXR5SVAnLCAnY2FjaGVNM3U4JywgJ3BjVUEnLCAncGFyc2VMYycsICdncGFyc2UnLCAnbnBhcnNlJ107XFxuICAgICAgICBteVNlbGVjdCA9IG5ld0NvbmZpZy50aXRsZS5maWx0ZXIoY29tcGFyZSh5Y1RpdGxlKSk7XFxuICAgIH1cXG4gICAgLy9mYmEubG9nKEpTT04uc3RyaW5naWZ5KG15U2VsZWN0KSk7XFxuXFxuICAgIGxldCBvcHRpb25zID0gW1xcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+eIseWlh+iJuicsXFxuICAgICAgICAgICAgaWQ6J3F5JyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5xeSxcXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjon6K6+572u54ix5aWH6Im6J1xcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifkvJjphbcnLFxcbiAgICAgICAgICAgIGlkOid5aycsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MueWtcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon6IW+6K6vJyxcXG4gICAgICAgICAgICBpZDondHgnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnR4XFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+iKkuaenCcsXFxuICAgICAgICAgICAgaWQ6J21nJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5tZ1xcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOiflk5Tlk6nlk5Tlk6knLFxcbiAgICAgICAgICAgIGlkOidibCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MuYmxcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon5pCc54uQJyxcXG4gICAgICAgICAgICBpZDonc2gnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnNoXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+ilv+eTnCcsXFxuICAgICAgICAgICAgaWQ6J3hnJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy54Z1xcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifpmL/ph4wnLFxcbiAgICAgICAgICAgIGlkOidhbCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MuYWxcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTonUFBUVicsXFxuICAgICAgICAgICAgaWQ6J3BwJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5wcFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOiflkqrlkpUnLFxcbiAgICAgICAgICAgIGlkOidtaScsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MubWlcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon5LmQ6KeGJyxcXG4gICAgICAgICAgICBpZDonbGUnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLmxlXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6JzE5MDUnLFxcbiAgICAgICAgICAgIGlkOidvbmUnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLm9uZVxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifpo47ooYwnLFxcbiAgICAgICAgICAgIGlkOidmdW4nLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLmZ1blxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOiflhbbku5YnLFxcbiAgICAgICAgICAgIGlkOidvdGgnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLm90aFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOiflhajlsYAnLFxcbiAgICAgICAgICAgIGlkOidxanUnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnFqdVxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifmj5Lku7YnLFxcbiAgICAgICAgICAgIGlkOidjaicsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MuY2pcXG4gICAgICAgIH0sXFxuICAgIF07XFxuXFxuICAgIGZ1bmN0aW9uIERpZChpZCl7XFxuICAgICAgICByZXR1cm4gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoaWQpO1xcbiAgICB9XFxuICAgIGZ1bmN0aW9uIGdldE9wdGlvbihpZCx0aXRsZSkge1xcbiAgICAgICAgdmFyIG9iaiA9IERpZChpZCk7XFxuICAgICAgICBEaWQodGl0bGUpLnZhbHVlID0gb2JqLm9wdGlvbnNbb2JqLnNlbGVjdGVkSW5kZXhdLnRleHQ7XFxuICAgIH1cXG4gICAgZnVuY3Rpb24gcmVzZXRTZWxlY3QoaWQpe1xcbiAgICAgICAgRGlkKGlkK1xcXCJTZWxlY3RcXFwiKS5vcHRpb25zLnNlbGVjdGVkSW5kZXggPSAtMTtcXG4gICAgfVxcblxcbiAgICAvL+WHveaVsOmDqOWIhlxcblxcbiAgICBmdW5jdGlvbiBUb2FzdChtc2csZHVyYXRpb24pe1xcbiAgICAgICAgZHVyYXRpb249aXNOYU4oZHVyYXRpb24pPzIwMDA6ZHVyYXRpb247XFxuICAgICAgICB2YXIgbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xcbiAgICAgICAgbS5pbm5lckhUTUwgPSBtc2c7XFxuICAgICAgICBtLnN0eWxlLmNzc1RleHQ9XFxcIndpZHRoOjQ1JTsgbWluLXdpZHRoOjE1MHB4OyBiYWNrZ3JvdW5kOiMzMTE7IG9wYWNpdHk6MC42OyBoZWlnaHQ6YXV0bzttaW4taGVpZ2h0OiA0NXB4OyBjb2xvcjojZmZmOyBsaW5lLWhlaWdodDo0NXB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgYm9yZGVyLXJhZGl1czoxMHB4OyBwb3NpdGlvbjpmaXhlZDsgdG9wOjYwJTsgbGVmdDoyNiU7IHotaW5kZXg6OTk5OTk5O1xcXCI7XFxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG0pO1xcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICB2YXIgZCA9IDAuNTtcXG4gICAgICAgICAgICBtLnN0eWxlLndlYmtpdFRyYW5zaXRpb24gPSAnLXdlYmtpdC10cmFuc2Zvcm0gJyArIGQgKyAncyBlYXNlLWluLCBvcGFjaXR5ICcgKyBkICsgJ3MgZWFzZS1pbic7XFxuICAgICAgICAgICAgbS5zdHlsZS5vcGFjaXR5ID0gJzAnO1xcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobSkgfSwgZCAqIDEwMDApO1xcbiAgICAgICAgfSwgZHVyYXRpb24pO1xcbiAgICB9XFxuXFxuICAgIGZ1bmN0aW9uIG9wZW5EblBhZ2UoKXtcXG4gICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBydWxlOiBcXFwiPV5fXj1cXFwiLFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi57yW6L6R6Kej5p6QXFxcIixcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU957yW6L6RI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXCIsXFxuICAgICAgICAgICAgZ3JvdXA6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAvL2ZpbmRSdWxlOiBcXFwianM6dGhpcy5kPVtdOyQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIikuZWRpdCgpO3NldFJlc3VsdChkKTtcXFwiLFxcbiAgICAgICAgICAgIHByZVJ1bGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7fVxcbiAgICAgICAgfSkpO1xcbiAgICB9XFxuICAgIGZ1bmN0aW9uIG9wZW5UaGVtZSgpe1xcbiAgICAgICAgZmJhLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIHJ1bGU6IFxcXCI9Xl9ePVxcXCIsXFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLkuLvpopjnrqHnkIZcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3kuLvpopgjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIixcXG4gICAgICAgICAgICBncm91cDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIHByZVJ1bGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7fVxcbiAgICAgICAgfSkpO1xcbiAgICB9XFxuICAgIGZ1bmN0aW9uIG9wZW5KeE1hbmFnZSgpe1xcbiAgICAgICAgZmJhLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIHJ1bGU6IFxcXCI9Xl9ePVxcXCIsXFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLop6PmnpDphY3nva7nrqHnkIZcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3op6PmnpAjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIixcXG4gICAgICAgICAgICBncm91cDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIHByZVJ1bGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7fVxcbiAgICAgICAgfSkpO1xcbiAgICB9XFxuICAgIGZ1bmN0aW9uIGNhbmNlbCgpe1xcbiAgICAgICAgaWYoIW15U2V0KXtcXG4gICAgICAgICAgICBmYmEud3JpdGVGaWxlKG9sZFJvdXRlLCBKU09OLnN0cmluZ2lmeShzZXR0aW5ncywgbnVsbCwgNCkpO1xcbiAgICAgICAgICAgIGZiYS5yZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIGZiYS5iYWNrKGZhbHNlKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBmdW5jdGlvbiBjbGlja21lKG1zZyxkdXJhdGlvbix0aXRsZSl7XFxuICAgICAgICB0cnl7XFxuICAgICAgICAgICAgZm9yKGxldCBrZXkgaW4gc2V0dGluZ3Mpe1xcbiAgICAgICAgICAgICAgICAvLyBmYmEubG9nKERpZChrZXkpKycnK2tleSk7XFxuICAgICAgICAgICAgICAgIHRyeXtcXG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzW2tleV0gPSBEaWQoa2V5KS52YWx1ZTtcXG4gICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xcbiAgICAgICAgICAgICAgICAgICAgYWxlcnQoXFxcIuacquiOt+WPluWIsOiKgueCuTpcXFwiK2tleStcXFwiXFxcXG5cXFwiK2UubWVzc2FnZSk7XFxuICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYobXlTZWxlY3Qpe1xcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKG5ld0NvbmZpZy5zZXR0aW5ncywgc2V0dGluZ3MpO1xcbiAgICAgICAgICAgICAgICBmYmEud3JpdGVGaWxlKG5ld1JvdXRlLCAkJCQuc3RyaW5naWZ5KG5ld0NvbmZpZykpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBmYmEud3JpdGVGaWxlKG9sZFJvdXRlLCAkJCQuc3RyaW5naWZ5KHNldHRpbmdzKSk7XFxuICAgICAgICAgICAgVG9hc3QobXNnLGR1cmF0aW9uKTtcXG4gICAgICAgICAgICBpZih0aXRsZT09PVxcXCLlhbNcXFwiKXtcXG4gICAgICAgICAgICAgICAgZmJhLmJhY2soKTtcXG4gICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgZmJhLnJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1jYXRjaChlKXtcXG4gICAgICAgICAgICBhbGVydChlLm1lc3NhZ2UpXFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgLy9sZXQgd2lkdGg9d2luZG93LnNjcmVlbi5hdmFpbFdpZHRoO1xcbiAgICAvL2xldCB3aWR0aFB4PXdpZHRoLTM5Mys1MjtcXG4gICAgLy9hbGVydChcXFwi5b2T5YmN5YiG6L6o546HOlxcXCIrd2luZG93LnNjcmVlbi5hdmFpbFdpZHRoK1xcXCIqXFxcIit3aW5kb3cuc2NyZWVuLmhlaWdodCk7XFxuICAgIHZhciB2ZXJpbmZvID0gW3tcXG4gICAgICAgIGlkOidkbicsXFxuICAgICAgICBhdXRob3I6J+aWreW/tScsXFxuICAgICAgICBhdmF0YXI6J2h0dHBzOi8vczMuYXgxeC5jb20vMjAyMS8wMi8yMi95N3diOU8uanBnJyxcXG4gICAgICAgIG9wdGlvbjpvcGVuRG5QYWdlLFxcbiAgICB9LFxcbiAgICB7XFxuICAgICAgICBpZDonZHonLFxcbiAgICAgICAgYXV0aG9yOifpgZPplb8nLFxcbiAgICAgICAgYXZhdGFyOidodHRwOi8vcTEucWxvZ28uY24vZz9iPXFxJm5rPTQzNDg1NzAwNSZzPTY0MCcsXFxuICAgICAgICBvcHRpb246b3BlblRoZW1lXFxuICAgIH0sXFxuICAgIHtcXG4gICAgaWQ6J2xtJyxcXG4gICAgICAgIGF1dGhvcjogJ+iTneiOkycsXFxuICAgICAgICBhdmF0YXI6ICdodHRwOi8vcTEucWxvZ28uY24vZz9iPXFxJm5rPTI1Nzk5NDkzNzgmcz02NDAnLFxcbiAgICAgICAgb3B0aW9uOm9wZW5KeE1hbmFnZVxcbiAgICB9XFxuICAgIF07XFxuXFxuICAgIGZ1bmN0aW9uIGRvT3B0aW9uKG9wdGlvbl9pZCl7XFxuICAgICAgICBsZXQgdmVyID0gdmVyaW5mby5maWx0ZXIoaXQ9Pml0LmlkPT09b3B0aW9uX2lkKVswXTtcXG4gICAgICAgIHZlci5vcHRpb24oKTtcXG4gICAgfVxcblxcbiAgICBjb25zdCBSZW5kZXJIdG1sQXBwID0ge1xcbiAgICAgICAgZGF0YSgpIHtcXG4gICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICAvLyByYXdIdG1sOiAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiByZWRcXFwiPui/memHjOS8muaYvuekuue6ouiJsu+8gTwvc3Bhbj4nLFxcbiAgICAgICAgICAgICAgICBvcHRpb25zOm9wdGlvbnMsXFxuICAgICAgICAgICAgICAgIHZlcmluZm86dmVyaW5mbyxcXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6cGxhY2Vob2xkZXIsXFxuICAgICAgICAgICAgICAgIHRpcHM6dGlwcyxcXG4gICAgICAgICAgICAgICAgdGhlbWVzOnRoZW1lcyxcXG4gICAgICAgICAgICAgICAgbXlTZWxlY3Q6bXlTZWxlY3QsXFxuICAgICAgICAgICAgICAgIC8vIGNqU2VsOlsn6K+36YCJ5oup5o+S5Lu2ICjlj6rkvZznlKhsYXp5UnVsZSknLCdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJywnaGlrZXI6Ly9maWxlcy9ydWxlcy9kekhvdXNlL2pzL3NyY2F1dG8uanMnLCdoaWtlcjovL2ZpbGVzL3J1bGVzL2pzL1BhcnNlLVYyX0RuLmpzJ10sXFxuICAgICAgICAgICAgICAgIGNqU2VsOlsn6K+36YCJ5oup5o+S5Lu2ICjlj6rkvZznlKhsYXp5UnVsZSknLCdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJ10sXFxuICAgICAgICAgICAgICAgIHNldHRpbmdzOnNldHRpbmdzLFxcbiAgICAgICAgICAgICAgICBzaG93VGlwczpmYWxzZSxcXG4gICAgICAgICAgICAgICAgLy93aWR0aFB4OndpZHRoUHhcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LFxcbiAgICAgICAgbWV0aG9kczp7XFxuICAgICAgICAgICAgLy8gY2hhbmdlVmFsOmZ1bmN0aW9uKGV2ZW50KXtcXG4gICAgICAgICAgICAvLyAgICAgZ2V0T3B0aW9uKHRoaXMuaWQsdGhpcy5uYW1lKTtcXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5zZWxPcHRpb24gPSBldmVudC50YXJnZXQudmFsdWU7XFxuICAgICAgICAgICAgLy8gICAgIGFsZXJ0KFxcXCLkvaDpgInkuK3kuoZcXFwiK2V2ZW50LnRhcmdldC52YWx1ZSk7XFxuICAgICAgICAgICAgLy8gfVxcbiAgICAgICAgICAgIGRvT3B0aW9uOmRvT3B0aW9uXFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgdHJ5IHtcXG4gICAgICAgIGNvbnN0IGFwcD1WdWUuY3JlYXRlQXBwKFJlbmRlckh0bWxBcHApO1xcbiAgICAgICAgYXBwLm1vdW50KCdib2R5Jyk7XFxuICAgIH1jYXRjaCAoZSkge1xcbiAgICAgICAgY29uc29sZS5sb2coZS5tZXNzYWdlKVxcbiAgICB9XFxuXFxuPC9zY3JpcHQ+XFxuXFxuPC9ib2R5PlxcbjwvaHRtbD5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIlBhcnNlX0RuLmpzXCIsXCJwYXRoXCI6XCJQYXJzZV9Ebi5qc1wiLFwicnVsZVwiOlwiLy89PT09PT09PT09PT3lhY3ll4XosIPnlKg9PT09PT09PT09PT1cXG4vL++8je+8je+8jT1eX149XFxuXFxudmFyIHZlcnNpb24gPSAzLjQ5O1xcbnZhciB1cGRhdGVEYXRlID0gJzIwMjEvMTAvMjkvMTA6MzUnO1xcbnZhciBfbXlTZXQgPSB7XFxuICAgIHFqdTogJ+m7mOiupCcsXFxuICAgIG90aDon6YGT6ZW/5LuT5bqT6YCa5YWNJyxcXG4gICAgY2pjYWNoZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnLFxcbiAgICB0aGVtZWNhY2hlOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVRoZW1lLmpzb24nLFxcbiAgICBqaWV4aWNhY2hlOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9NeUppZXhpLmpzb24nLFxcbiAgICB4NWNhY2hlOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5odG1sJyxcXG4gICAgb2xkQ29uZmlnOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb24nLFxcbiAgICBja0xpbms6ICdodHRwczovL2NvZGUuYWxpeXVuLmNvbS9BSTk1Ny9IaWtlci9yYXcvbWFzdGVyL3YvJyxcXG4gICAgY2o6ICdodHRwczovL2NvZGUuYWxpeXVuLmNvbS9BSTk1Ny9IaWtlci9yYXcvbWFzdGVyL3YvQ2xvdWRQYXJzZS1WMl9Ebi5qcycsXFxuICAgIHg1VXJsOiAnaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vQUk5NTcvSGlrZXIvcmF3L21hc3Rlci92L1BhcnNlX0RuLmh0bWwnLFxcbiAgICBwYXJzZVJvdXRlOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nLFxcbiAgICB4NVJvdXRlOiAnZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvY2FjaGUvUGFyc2VfRG4uaHRtbCdcXG59O1xcbnZhciBNeVBhcnNlUyA9IHt9O1xcbnZhciBteVNldCA9IF9teVNldDtcXG5pZiAoZmlsZUV4aXN0KF9teVNldC5wYXJzZVJvdXRlKSkge1xcbiAgICBldmFsKCd2YXIgcGFyc2VGaWxlID0nICsgZmV0Y2goX215U2V0LnBhcnNlUm91dGUpKTtcXG4gICAgTXlQYXJzZVMgPSBwYXJzZUZpbGUuY29kZXM7XFxuICAgIG15U2V0ID0gcGFyc2VGaWxlLnNldHRpbmdzO1xcbn1cXG52YXIgcGFyc2VUaXRsZSA9IFtcXG4gICAgXFxcInl1bjE3MTdcXFwiLFxcbiAgICBcXFwiUGFuR3VcXFwiLFxcbiAgICBcXFwiRnVYaW5nXFxcIixcXG4gICAgXFxcImRlZmF1bHRQYXJzZVxcXCIsXFxuICAgIFxcXCLpgZPplb/ku5PlupPpgJrlhY1cXFwiLFxcbiAgICBcXFwiZGVmYXVsdFBhcnNlV2ViXFxcIixcXG4gICAgXFxcIk9L6Kej5p6QXFxcIixcXG4gICAgXFxcIk0zVThUVlxcXCIsXFxuXTtcXG4vL++8je+8je+8jT1eX149XFxuXFxuLy/mjqXlj6Porr7nva4uXFxuXFxudmFyIHNldFVybCA9IFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vUmVjb3JkSGlzdG9yeSNcXFwiO1xcbnZhciBzZXRfc3dpdGNoID0gc2V0VXJsO1xcbnZhciBsYXp5ID0gYGV2YWwoJ3ZhciBjb25maWcgPScgKyBmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKSk7ZXZhbChmZXRjaChjb25maWcuY2opKTtheXRtUGFyc2UoaW5wdXQpYDtcXG5cXG4vL3ZhciBwYXJ3aXggPSBgdmFyIHl1cmw9J2h0dHBzOi8vZGFpbGkubWF5aXhpb25nZGkuY24vP3VybD0nO1JlZmVyZXInOiAnaHR0cHM6Ly93d3cubWF5aXhpb25nZGkuY24veXM/aWQ9JzsnaHR0cHM6Ly9kYWlsaS5tYXlpeGlvbmdkaS5jbi9hcGkucGhwJywgJ1JlZmVyZXInOidodHRwczovL2RhaWxpLm1heWl4aW9uZ2RpLmNuJztcXG4vLyDlhajmsJFodHRwczovL3BjdmlkZW9hbGl5dW4udGlhbnNoYW5ncmVuamlhbi5tZ3R2LmNvbS44OHd1bWEuY29tLz91cmw9XFxuXFxuLy/vvI3vvI3vvI3lpIcg55So77yN77yN77yNXFxuLypcXG4gKiDlvbHop4blt6XlnLrvvJogaHR0cHM6Ly95c2djLmNjL1xcbiAqIOaxn+a5ljogNTU155S15b2xIGh0dHBzOi8vd3d3LjU1NWR5Mi5jb20vcGhvbmUuaHRtbCDvvZwgMTfnnIsgaHR0cDovLzE3a2FueXkuY24vIGh0dHA6Ly9qaGppZXhpLjMwdnIuY24vP3VybD0g772cIGh0dHA6Ly9hcGkubWFpemltYWxsLmNvbS9pbmRleC5waHA/dXJsPVxcbiAqIOaxn+a5ljogaHR0cDovL3d3dy50aWFuc2h1eXVuLm5ldC9pbmRleC5waHAvdm9kL3BsYXkvaWQvNDQ4Mzc3L3NpZC8xL25pZC8xLmh0bWxcXG4gKiDmsZ/muZYyOiBodHRwOi8vOThoeWsuY24vaW5kZXgucGhwL3ZvZC9wbGF5L2lkLzcyODQxL3NpZC8xL25pZC8xLmh0bWxcXG4gKiDkurrkurrov7c6IGh0dHBzOi8vdmlwLnN1c291LnR2L3BsYXllci8/dXJsPSDvvZwgaHR0cHM6Ly93d3cubW9tZG0uY2MvXFxuICpcXG4gKiB3dWlnZW46IGh0dHBzOi8vd3d3LjVpZ2VuLmNvbS9kbXBsYXllci9wbGF5ZXIvP3VybD1cXG4gKiDlubLppa0o5Lq65Lq66L+3KTogaHR0cHM6Ly9qeC56dWkuY20vP3VybD1cXG4gKiBodHRwczovLzIuNjZtb3ZpZS50b3AvcGxheWVyLz91cmw9XFxuICpcXG4gKi9cXG5cXG5cXG52YXIgdG9vbHMgPSB7XFxuICAgIE1ENTogZnVuY3Rpb24oZGF0YSkge1xcbiAgICAgICAgZXZhbChnZXRDcnlwdG9KUygpKTtcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5NRDUoZGF0YSkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleCk7XFxuICAgIH0sXFxuICAgIEFFUzogZnVuY3Rpb24odGV4dCwga2V5LCBpdiwgaXNFbmNyeXB0KSB7XFxuICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcbiAgICAgICAgdmFyIGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGtleSk7XFxuICAgICAgICB2YXIgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShpdik7XFxuICAgICAgICBpZiAoaXNFbmNyeXB0KSB7XFxuICAgICAgICAgICAgcmV0dXJuIENyeXB0b0pTLkFFUy5lbmNyeXB0KHRleHQsIGtleSwge1xcbiAgICAgICAgICAgICAgICBpdjogaXYsXFxuICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXG4gICAgICAgICAgICB9KS50b1N0cmluZygpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5BRVMuZGVjcnlwdCh0ZXh0LCBrZXksIHtcXG4gICAgICAgICAgICBpdjogaXYsXFxuICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxuICAgICAgICB9KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxuICAgIH0sXFxuICAgIC8vYXNjaWlcXG4gICAgbmV4dENoYXJhY3RlcjogZnVuY3Rpb24oYXNjaWlWYWx1ZSwgaykge1xcbiAgICAgICAgdmFyIHMgPSBhc2NpaVZhbHVlO1xcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocyArIGspO1xcbiAgICB9LFxcbiAgICAvL+WHr+aSklxcbiAgICBjYWVzYXJDaXBoZXI6IGZ1bmN0aW9uKHN0cmluZ1ZhbHVlLCBrKSB7XFxuICAgICAgICB2YXIgbmV3U3RyaW5nID0gXFxcIlxcXCI7XFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZ1ZhbHVlLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgbmV3U3RyaW5nICs9IHRoaXMubmV4dENoYXJhY3RlcihzdHJpbmdWYWx1ZVtpXS5jaGFyQ29kZUF0KCksIGspO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIG5ld1N0cmluZztcXG4gICAgfSxcXG4gICAgbm93RGF0ZTogZnVuY3Rpb24oKSB7XFxuICAgICAgICB2YXIgZGF0ZTEgPSBuZXcgRGF0ZSgpO1xcbiAgICAgICAgdmFyIGRhdGVTdHIgPSBcXFwiXFxcIjtcXG4gICAgICAgIGlmIChkYXRlMSkge1xcbiAgICAgICAgICAgIGRhdGVTdHIgPSBkYXRlMS5nZXRGdWxsWWVhcigpO1xcbiAgICAgICAgICAgIHZhciBtb250aCA9IGRhdGUxLmdldE1vbnRoKCkgKyAxO1xcbiAgICAgICAgICAgIHZhciBkYXkgPSBkYXRlMS5nZXREYXRlKCk7XFxuICAgICAgICAgICAgaWYgKG1vbnRoIDwgMTApIHtcXG4gICAgICAgICAgICAgICAgZGF0ZVN0ciArPSBcXFwiLTBcXFwiICsgbW9udGg7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgZGF0ZVN0ciArPSBcXFwiLVxcXCIgKyBtb250aDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGRheSA8IDEwKSB7XFxuICAgICAgICAgICAgICAgIGRhdGVTdHIgKz0gXFxcIi0wXFxcIiArIGRheTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBkYXRlU3RyICs9IFxcXCItXFxcIiArIGRheTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gZGF0ZVN0cjtcXG4gICAgfSxcXG4gICAgdG9KU09OOiBmdW5jdGlvbihqc29uKSB7XFxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoanNvbiwgKGtleSwgdmFsdWUpID0+IHtcXG4gICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlID09ICdmdW5jdGlvbicpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlLnRvU3RyaW5nKCk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIDQpO1xcbiAgICB9LFxcbiAgICB0b1ZOdW06IGZ1bmN0aW9uKGEpIHtcXG4gICAgICAgIHZhciBhID0gYS50b1N0cmluZygpO1xcbiAgICAgICAgdmFyIGMgPSBhLnNwbGl0KCcuJyk7XFxuICAgICAgICB2YXIgbnVtX3BsYWNlID0gW1xcXCJcXFwiLCBcXFwiMFxcXCIsIFxcXCIwMFxcXCIsIFxcXCIwMDBcXFwiLCBcXFwiMDAwMFxcXCJdLFxcbiAgICAgICAgICAgIHIgPSBudW1fcGxhY2UucmV2ZXJzZSgpO1xcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgdmFyIGxlbiA9IGNbaV0ubGVuZ3RoO1xcbiAgICAgICAgICAgIGNbaV0gPSByW2xlbl0gKyBjW2ldO1xcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIHJlcyA9IGMuam9pbignJyk7XFxuICAgICAgICByZXR1cm4gcmVzO1xcbiAgICB9LFxcbiAgICBjcHJWZXJzaW9uOiBmdW5jdGlvbihhLCBiKSB7XFxuICAgICAgICB2YXIgX2EgPSBwYXJzZUludCh0aGlzLnRvVk51bShhKSksXFxuICAgICAgICAgICAgX2IgPSBwYXJzZUludCh0aGlzLnRvVk51bShiKSk7XFxuICAgICAgICBiID0gaXNOYU4oX2IpID8gdmVyc2lvbiA6IGI7XFxuICAgICAgICBpZiAoX2EgPiBfYikge1xcbiAgICAgICAgICAgIHB1dFZhcignanhOZXdWJywgJ+acieaWsOeJiOacrDogJyArIGEpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBjbGVhclZhcignanhOZXdWJyk7XFxuICAgICAgICB9XFxuICAgICAgICBwdXRWYXIoJ2p4T2xkVicsIGIpO1xcbiAgICB9XFxufTtcXG5pZiAoZ2V0VmFyKFxcXCJqeE9sZFZcXFwiLCBcXFwiMFxcXCIpICE9IHZlcnNpb24pIHtcXG4gICAgcHV0VmFyKCdjakNhY2hlJywgX215U2V0LmNqY2FjaGUpO1xcbiAgICBwdXRWYXIoJ3g1Q2FjaGUnLCBfbXlTZXQueDVDYWNoZSk7XFxuICAgIHB1dFZhcignb2xkQ29uZmlnJywgX215U2V0Lm9sZENvbmZpZyk7XFxuICAgIHB1dFZhcigncGFyc2VSb3V0ZScsIF9teVNldC5wYXJzZVJvdXRlKTtcXG4gICAgbGV0IGp4TmV3ViA9IGZldGNoKCdodHRwczovL2dpdGVlLmNvbS9EdWFuLU5pYW4vRG4vcmF3L21hc3Rlci9oaWtlcnZpZXcvUGFyc2VWZXJzaW9uLnR4dCcpLFxcbiAgICAgICAganhPbGRWID0gKGZldGNoKF9teVNldC5jamNhY2hlKS5zcGxpdCgndmVyc2lvbiA9IFxcXCInKVsxXSArICcnKS5zcGxpdCgnXFxcIicpWzBdO1xcbiAgICB0b29scy5jcHJWZXJzaW9uKGp4TmV3ViwganhPbGRWKTtcXG59XFxuXFxudmFyIFBhcnNlUyA9IHt9O1xcbnZhciBvcmlnaW5hbFBhcnNlUyA9IHtcXG4gICAgLy8gdXBkYXRlRGF0ZTogdXBkYXRlRGF0ZSxcXG4gICAgcGFyc2VMYzonaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vQUk5NTcvSGlrZXIvcmF3L21hc3Rlci9wL3BhcnNlTGMuanMnLFxcbiAgICBDaXR5SVA6ICdodHRwOi8vcHYuc29odS5jb20vY2l0eWpzb24nLFxcbiAgICBwY1VBOiAnVXNlci1BZ2VudEBNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wXFxcXO+8m1xcXFzvvJsgV09XNjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS80OS4wLjI2MjMuODcgU2FmYXJpLzUzNy4zNicsXFxuICAgIGNhY2hlTTN1ODogZnVuY3Rpb24odlVybCwgcmVmKSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciBtM3U4ID0gZmV0Y2godlVybCwge30pO1xcbiAgICAgICAgICAgIHdyaXRlRmlsZSgnaGlrZXI6Ly9maWxlcy9jYWNoZS92aWRlb3MubTN1OCcsIG0zdTgpO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge31cXG4gICAgICAgIHJldHVybiAnZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvY2FjaGUvdmlkZW9zLm0zdTgjJztcXG4gICAgfSxcXG4gICAgZGVmYXVsdFBhcnNlOiBmdW5jdGlvbih1cmwsdGltZW91dCkge1xcbiAgICAgICAgcmV0dXJuIFBhcnNlUy5kZWZhdWx0UGFyc2VXZWIodXJsLHRpbWVvdXQpO1xcbiAgICB9LFxcbiAgICBkZWZhdWx0UGFyc2VXZWI6IGZ1bmN0aW9uKHBsYXlVcmwsdGltZW91dCxleHRyYSkge1xcbiAgICAgICAgLy8gbG9nKCfkvKDlhaVkZWZhdWx0UGFyc2VXZWLnmoTotoXml7Y6Jyt0aW1lb3V0KTtcXG4gICAgICAgIHRpbWVvdXQgPSBwYXJzZUludCh0aW1lb3V0KXx8NTAwMDtcXG4gICAgICAgIGV4dHJhID0gZXh0cmF8fHt9O1xcbiAgICAgICAgbGV0IHBsYXlVcmxMaXN0ID0gZXh0cmEucGxheVVybExpc3R8fFtdO1xcbiAgICAgICAgaWYodHlwZW9mKHBsYXlVcmxMaXN0KT09PSdvYmplY3QnJiZwbGF5VXJsTGlzdC5sZW5ndGg+MCl7XFxuICAgICAgICAgICAgcGxheVVybExpc3QudW5zaGlmdChwbGF5VXJsKTtcXG4gICAgICAgICAgICBsZXQgcGxheVVybHM9cGxheVVybExpc3Quc2xpY2UoMCw0KTtcXG4gICAgICAgICAgICBsZXQgbmFtZXM9ZXh0cmEubmFtZUxpc3Quc2xpY2UoMCw0KTtcXG4gICAgICAgICAgICBsb2coJ+W8gOWni+aJuemHj+ino+aekCjlt7Lljrvph40s5Y+q5Y+W5YmNM+S4quWkh+iDju+8jOWKoOmBk+mVv+e+pDo0ODY3MjIzMjjojrflj5bmnIDmlrDprZTmlq3liqjmgIEpOicrbmFtZXMpO1xcbiAgICAgICAgICAgIGNvbnN0IHtMYXp5UGFyc2VGYXN0fSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2dsb2JhbFBhcnNlP3J1bGU96YGT6ZW/5LuT5bqTUHJvJyk7XFxuICAgICAgICAgICAgbGV0IHJldCA9IExhenlQYXJzZUZhc3QocGxheVVybHMsdGltZW91dCx0aW1lb3V0KTtcXG4gICAgICAgICAgICBpZih0eXBlb2YocmV0KT09PSdvYmplY3QnJiZyZXQubGVuZ3RoPjApe1xcbiAgICAgICAgICAgICAgICAvL3JldHVybiByZXRbMF1cXG4gICAgICAgICAgICAgICAgLy9sb2cocmV0KTtcXG4gICAgICAgICAgICAgICAgbGV0IHYgPSBnZXRBcHBWZXJzaW9uKCk7XFxuICAgICAgICAgICAgICAgIGlmKHBhcnNlSW50KHYpPj0yMTk0JiZyZXQubGVuZ3RoPjEpe1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybHMgPSBBcnJheS5mcm9tKG5ldyBTZXQocmV0KSk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaGVhZGVycyA9IHVybHMubWFwKChpdCk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZighLzsvLnRlc3QoaXQpfHxpdC5zcGxpdCgnOycpLmxlbmd0aDwyKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoZWFkID0gaXQuc3BsaXQoJzsnKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIS9ALy50ZXN0KGhlYWQpKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7fVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgPSBoZWFkLnJlcGxhY2UoL3t8fS9nLCcnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZCA9IGhlYWQuc3BsaXQoJyYmJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmogPSB7fTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIGhlYWQpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtleSA9IGhlYWRbaV0uc3BsaXQoJ0AnKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGhlYWRbaV0uc3BsaXQoJ0AnKVsxXS5yZXBsYWNlKC87Lywn77yb77ybJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIHVybHMgPSB1cmxzLm1hcChpdD0+aXQuc3BsaXQoJzsnKVswXSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe3VybHM6dXJscyxoZWFkZXJzOmhlYWRlcnN9KTtcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0WzBdXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHJldFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIGNvbnN0IHtsYXp5UGFyc2V9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZ2xvYmFsUGFyc2U/cnVsZT3pgZPplb/ku5PlupNQcm8nKTtcXG4gICAgICAgICAgICBsZXQgeDVQbGF5PWxhenlQYXJzZShwbGF5VXJsLHRpbWVvdXQpO1xcbiAgICAgICAgICAgIGlmKHR5cGVvZih4NVBsYXkpPT1cXFwidW5kZWZpbmVkXFxcInx8IXg1UGxheSl7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/pgZPplb/ku5PlupPop6PmnpDlpLHotKVcXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGxldCB0aXBzPS94NVJ1bGUvLnRlc3QoeDVQbGF5KT9cXFwieDXlhY3ll4XlvIDlp4tcXFwiOlxcXCLmnoHpgJ/lhY3ll4XmjqLlrozmr5XvvIzlnLDlnYA6XFxcIisoL15odHRwLy50ZXN0KHg1UGxheSk/eDVQbGF5OifpnZ7mraPluLjpk77mjqUnKTtcXG4gICAgICAgICAgICBsb2codGlwcyk7XFxuICAgICAgICAgICAgcmV0dXJuIHg1UGxheTtcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgbWFvc3M6IGZ1bmN0aW9uKGp4dXJsLCByZWYpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIGdldFZpZGVvSW5mbyA9IGZ1bmN0aW9uKHRleHQpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvb2xzLkFFUyh0ZXh0LCBrZXksIGl2KTtcXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgICAgIGlmIChyZWYpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGh0bWwgPSByZXF1ZXN0KGp4dXJsLCB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiByZWZcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdmFyIGh0bWwgPSByZXF1ZXN0KGp4dXJsKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGh0bWwuaW5kZXhPZignJmJ0d2FmPScpICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgIGh0bWwgPSByZXF1ZXN0KGp4dXJsICsgJyZidHdhZicgKyBodG1sLm1hdGNoKC8mYnR3YWYoLio/KVxcXCIvKVsxXSwge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogcmVmXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBpdiA9IGh0bWwuc3BsaXQoJ2J0X3Rva2VuID0gXFxcIicpWzFdLnNwbGl0KCdcXFwiJylbMF07XFxuICAgICAgICAgICAgZXZhbChodG1sLm1hdGNoKC92YXIgY29uZmlnID0ge1tcXFxcc1xcXFxTXSo/fS8pWzBdICsgJycpO1xcbiAgICAgICAgICAgIGlmIChjb25maWcudXJsLnNsaWNlKDAsIDQpICE9ICdodHRwJykge1xcbiAgICAgICAgICAgICAgICBjb25maWcudXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KHRvb2xzLkFFUyhjb25maWcudXJsLCBcXFwiZHZ5WVJRbG5QUkNNZFFTZVxcXCIsIGl2KSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBjb25maWcudXJsO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiAnJztcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgTExROiBmdW5jdGlvbihqeHVybCkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB2YXIgYXBpID0ganh1cmwuc3BsaXQoJz91cmw9JylbMF0gKyBcXFwiYXBpLnBocFxcXCI7XFxuICAgICAgICAgICAgdmFyIGI2NGlkID0gYmFzZTY0RW5jb2RlKGp4dXJsLnNwbGl0KCd1cmw9JylbMV0pO1xcbiAgICAgICAgICAgIHZhciBwYXJzZWlkID0gdG9vbHMuY2Flc2FyQ2lwaGVyKGI2NGlkLCAtMSk7XFxuICAgICAgICAgICAgdmFyIGpzb24gPSBKU09OLnBhcnNlKHJlcXVlc3QoYXBpLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzoganh1cmxcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXFxuICAgICAgICAgICAgICAgIGJvZHk6ICd1cmw9JyArIHBhcnNlaWRcXG4gICAgICAgICAgICB9KSk7XFxuICAgICAgICAgICAgdXJsID0gKGpzb24uY29kZSA9PSAyMDAgPyBiYXNlNjREZWNvZGUodG9vbHMuY2Flc2FyQ2lwaGVyKGpzb24udXJsLCAtMSkpIDogJycpO1xcbiAgICAgICAgICAgIHJldHVybiB1cmw7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgcmV0dXJuICcnO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBQYW5HdTogZnVuY3Rpb24odmlwVXJsLCBkYXRhKSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIC8qdmFyIHJlZiA9ICdodHRwczovL3d3dy5wYW5ndWppZXhpLmNvbS8nO1xcbiAgICAgICAgICAgIHZhciBwYXJzZSA9ICdodHRwczovL3Bhbmd1YXBpLm50cnlqZC5uZXQvamlleGkvP3VybD0nICsgdmlwVXJsO1xcbiAgICAgICAgICAgIHZhciBhcGkgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L2ppZXhpL2FwaS5waHAnO1xcbiAgICAgICAgICAgICovXFxuICAgICAgICAgICAgLy92YXIgcmVmID0gJ2h0dHBzOi8veG15c3R2LmNvbS8nO1xcbiAgICAgICAgICAgIC8vdmFyIHBhcnNlID0gJ2h0dHBzOi8vd3d3Ljk5a3B3LmNvbS9wYW5ndS9pbmRleC5waHA/dXJsPScgKyB0YWlsVXJsO1xcbiAgICAgICAgICAgIC8vdmFyIGFwaSA9ICdodHRwczovL3d3dy45OWtwdy5jb20vcGFuZ3UvYXBpLnBocCc7XFxuICAgICAgICAgICAgdmFyIHBhcnNlID0gJ2h0dHBzOi8vd3d3LnBhbmd1amlleGkuY29tL3Bhbmd1Lz91cmw9JyArIHZpcFVybDtcXG4gICAgICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vcGFuZ3VhcGkubnRyeWpkLm5ldC9wYW5ndTIwMjEvYXBpLnBocCc7XFxuICAgICAgICAgICAgaWYgKGRhdGEpIHtcXG4gICAgICAgICAgICAgICAgcmVmID0gZGF0YVswXTtcXG4gICAgICAgICAgICAgICAgcGFyc2UgPSBkYXRhWzFdO1xcbiAgICAgICAgICAgICAgICBhcGkgPSBkYXRhWzJdO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgVGltZSA9IChNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkgKiAxKS50b1N0cmluZygpO1xcbiAgICAgICAgICAgIHZhciB1cmwgPSBKU09OLnBhcnNlKHJlcXVlc3QoYXBpLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogcGFyc2VcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgYm9keTogJ3VybD0nICsgdmlwVXJsICsgJyZyZWZlcmVyPScgKyBiYXNlNjRFbmNvZGUocGFyc2UpICsgJyZyZWY9MSZ0aW1lPScgKyBUaW1lICsgJyZ0eXBlPSZvdGhlcj0nICsgYmFzZTY0RW5jb2RlKHZpcFVybCkgKyAnJmlvcz0wJyxcXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgICAgICB9KSkudXJsO1xcbiAgICAgICAgICAgIHJldHVybiB1cmw7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgcmV0dXJuICcnO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICB5dW4xNzE3OiBmdW5jdGlvbiAodmlwVXJsKSB7XFxuICAgICAgICB2YXIgaXN5ayA9IHZpcFVybC5pbmRleE9mKCd5b3VrdScpO1xcbiAgICAgICAgdmFyIHJlZiA9IFxcXCJodHRwczovL3d3dy4xNzE3eXVuLmNvbS9qeC90eS5waHA/dXJsPVxcXCIgKyB2aXBVcmw7XFxuICAgICAgICB2YXIgcGFyc2UgPSBcXFwiaHR0cHM6Ly8xNzE3eXVuLmNvbS56aDE4OC5uZXQvMDgyOC8/dXJsPVxcXCIgKyB2aXBVcmw7XFxuICAgICAgICB2YXIgYXBpID0gXFxcImh0dHBzOi8vMTcxN3l1bi5jb20uemgxODgubmV0LzEwMDQvLi5pbmRleC4ucGhwXFxcIjtcXG4gICAgICAgIHJldHVybiBpc3lrID09IC0xID8gdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYsIHBhcnNlLCBhcGldKSA6IHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmICsgJyx2aXA6JywgcGFyc2UgKyAnLHZpcDonLCBhcGldKTtcXG4gICAgfSxcXG4gICAgT0vop6PmnpA6J2h0dHBzOi8vb2tqeC5jYy8/dXJsPScsXFxuICAgIE0zVThUVjonaHR0cHM6Ly9qeC5tM3U4LnR2L2ppZXhpLz91cmw9JyxcXG4gICAg6YGT6ZW/5LuT5bqT6YCa5YWNOmZ1bmN0aW9uICh1cmwsdGltZW91dCl7XFxuICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYih1cmwsdGltZW91dCk7XFxuICAgIH0sXFxuICAgIEZ1WGluZzogZnVuY3Rpb24odmlwVXJsKSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIC8vaWYodmlwVXJsLmluZGV4T2YoJ3YueW91a3UnKSE9LTEpe1xcbiAgICAgICAgICAgIC8vICAgIHZpcFVybCA9IChKU09OLnBhcnNlKHJlcXVlc3QodmlwVXJsLCB7cmVkaXJlY3Q6ZmFsc2UsIHdpdGhIZWFkZXJzOnRydWV9KSkuaGVhZGVycy5sb2NhdGlvbiArICcnKS5yZXBsYWNlKC9cXFxcPy4qLywnJyk7XFxuICAgICAgICAgICAgLy99XFxuICAgICAgICAgICAgdmFyIHJlZiA9ICdodHRwczovL2p4Lnh1ZXR1aWd1YW5nLmNuL2ppZXhpLz91cmw9JyArIHZpcFVybDtcXG4gICAgICAgICAgICB2YXIgcGFyc2UgPSByZWY7XFxuICAgICAgICAgICAgdmFyIGFwaSA9ICdodHRwczovL2p4Lnh1ZXR1aWd1YW5nLmNuL2ppZXhpL2FwaXVfZngucGhwJztcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYsIHBhcnNlLCBhcGldKTtcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgICB9XFxuICAgIH0sXFxufTtcXG5cXG5PYmplY3QuYXNzaWduKFBhcnNlUywgb3JpZ2luYWxQYXJzZVMsIE15UGFyc2VTKTtcXG4vL+imhueblumhuuW6j++8jOesrOS4ieS4quimhuebluesrOS6jOS4queEtuWQjuimhuebluesrOS4gOS4qlxcblxcblxcbmZ1bmN0aW9uIGF5dG1QYXJzZSh2aXBVcmwsc3RyVGl0bGUsdGltZW91dCxwbGF5VXJsKSB7XFxuICAgIC8vIOWPguaVsDE65q2j54mI572R5Z2A5Zyw5Z2AIOWPguaVsDIg5a6a5ZCR6Kej5p6Q5o6l5Y+j5ZCN56ewIOWPguaVsDMgeDXop6PmnpDotoXml7Yg5Y+C5pWwNCDlrozmlbTnmoTmkq3mlL7pk77mjqVcXG4gICAgc3RyVGl0bGUgPSBzdHJUaXRsZXx8Jyc7XFxuICAgIHBsYXlVcmw9cGxheVVybHx8Jyc7XFxuICAgIC8vIGxvZygn5Lyg5YWlYXl0bVBhcnNl55qE6LaF5pe2OicrdGltZW91dCk7XFxuICAgIHRpbWVvdXQgPSBwYXJzZUludCh0aW1lb3V0KXx8NTAwMDtcXG5cXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICAgIGxldCBqeHNSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015SmlleGkuanNvblxcXCI7XFxuICAgIGxldCBNeUppZXhpID0ge307XFxuICAgIGxldCBqaWV4aXMgPSB7fTtcXG4gICAgdHJ5IHtcXG4gICAgICAgIE15SmlleGkgPSBKU09OLnBhcnNlKGZldGNoKGp4c1JvdXRlKSk7XFxuICAgICAgICBqaWV4aXMgPSBNeUppZXhpLmppZXhpcy5maWx0ZXIoaXQ9Pml0Lm5hbWU9PT1NeUppZXhpLm5vdylbMF07XFxuICAgIH1jYXRjaCAoZSkge31cXG4gICAgZnVuY3Rpb24gZ2V0UGxheUp4KGtleSl7XFxuICAgICAgICBsZXQgcGxheVVybExpc3QgPSBbXTsvL+aJuemHj+aSreaUvuWcsOWdgOWIl+ihqFxcbiAgICAgICAgbGV0IG5hbWVMaXN0ID0gW107XFxuICAgICAgICBsZXQganhzID0gamlleGlzW2tleV07IC8vIOmAgueUqOS6jui/meS4que9keermeeahOino+aekOWIl+ihqFxcbiAgICAgICAgaWYoanhzKXtcXG4gICAgICAgICAgICBmb3IobGV0IGkgaW4ganhzKXtcXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIFBhcnNlU1tqeHNbaV1dID09ICdzdHJpbmcnJiZQYXJzZVNbanhzW2ldXS5tYXRjaCgvaHR0cC4qPz0vKSl7XFxuICAgICAgICAgICAgICAgICAgICBwbGF5VXJsTGlzdC5wdXNoKFBhcnNlU1tqeHNbaV1dK3ZpcFVybCk7XFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKGp4c1tpXSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICAvLyByZXR1cm4gcGxheVVybExpc3RcXG4gICAgICAgIHJldHVybiB7cGxheVVybExpc3Q6cGxheVVybExpc3QsbmFtZUxpc3Q6bmFtZUxpc3R9XFxuICAgIH1cXG4gICAgbGV0IGV4dHJhID0ge307XFxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAgICBpZighc3RyVGl0bGUpe1xcbiAgICAgICAgdmFyIGhvc3Q7XFxuICAgICAgICB0cnl7XFxuICAgICAgICAgICAgaG9zdCA9IHZpcFVybC5tYXRjaCgvXFxcXC4oLio/KVxcXFwvLylbMV07XFxuICAgICAgICB9Y2F0Y2goZSl7XFxuICAgICAgICAgICAgaWYoIS9eaHR0cC8udGVzdChwbGF5VXJsKSl7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwi5pat5o+S6LCD55So5aSx6LSl77yBXFxcXG7pnZ7mraPluLjnmoR2aXDmraPniYjlnLDlnYDkuJTmnKror4bliKvljp/nq5nop6PmnpDmkq3mlL7lnLDlnYBcXFwiO1xcbiAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTLumBk+mVv+S7k+W6k+mAmuWFjShwbGF5VXJsLHRpbWVvdXQpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgLy9sb2coaG9zdCk7XFxuICAgICAgICBzd2l0Y2ggKG15U2V0LnFqdSkge1xcbiAgICAgICAgICAgIGNhc2UgXFxcIum7mOiupFxcXCI6XFxuICAgICAgICAgICAgICAgIHN3aXRjaCAoaG9zdCkge1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwicXEuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC50eDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgndHgnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcImlxaXlpLmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQucXk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3F5Jyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJ5b3VrdS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnlrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCd5aycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwiYWxpenlcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmFsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdhbCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwibWd0di5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0Lm1nO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdtZycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwiYmlsaWJpbGkuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5ibDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnYmwnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInNvaHUuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5zaDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnc2gnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcInR2LnNvaHUuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5zaDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnc2gnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIml4aWd1YS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnhnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCd4ZycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwicHB0di5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnBwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdwcCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwibWlndXZpZGVvLmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQubWk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ21pJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJsZS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmxlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdsZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwiMTkwNS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0Lm9uZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnb25lJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJmdW4udHZcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmZ1bjtcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnZnVuJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0Lm90aDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5xanU7XFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgfVxcbiAgICB9ZWxzZXtcXG4gICAgICAgIGxvZygn5q615o+S5omn6KGM5a6a5ZCR6Kej5p6Q57q/6Lev5aS0Oicrc3RyVGl0bGUpO1xcbiAgICAgICAgc3RyID0gc3RyVGl0bGU7XFxuICAgIH1cXG4gICAgbGV0IHdpdGhCYXRjaCA9ICEhKE15SmlleGkuaXNBdXRvICYmIE15SmlleGkuYXV0b01vZGUgPT09ICfpgJ/luqbkvJjlhYgnKTtcXG4gICAgaWYgKHR5cGVvZiBQYXJzZVNbc3RyXSA9PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgICBpZigv6YCa5YWNLy50ZXN0KHN0cikpe1xcbiAgICAgICAgICAgIHJldHVybiBQYXJzZVNbc3RyXSh2aXBVcmwsdGltZW91dCk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgdXJsID0gUGFyc2VTW3N0cl0odmlwVXJsKTtcXG4gICAgICAgIGlmICgvXlxcXFwvLy50ZXN0KHVybCkpIHtcXG4gICAgICAgICAgICB1cmwgPSAnaHR0cHM6JyArIHVybFxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKC89aHR0cC8udGVzdCh1cmwpKSB7XFxuICAgICAgICAgICAgdXJsID0gLyZ1cmw9Ly50ZXN0KHVybCkgPyB1cmwgOiAnaHR0cCcgKyBkZWNvZGVVUklDb21wb25lbnQodXJsLnNwbGl0KCc9aHR0cCcpWzFdKTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8qaWYodXJsLm1hdGNoKC9tZ3R2LmNvbS9nKT09J21ndHYuY29tJyl7XFxuICAgICAgICAgICAgdXJsID0gdXJsICsgJzt7UmVmZXJlckBodHRwczovL3d3dy5tZ3R2LmNvbX0nO1xcbiAgICAgICAgfSBlbHNlICovXFxuICAgICAgICBpZiAoL1xcXFwuZmx2Ly50ZXN0KHVybCkpIHtcXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAnO3tVc2VyLUFnZW50QGFwcCYmUmVmZXJlckAnICsgdmlwVXJsICsgJ30nO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKHVybCA9PT0gJycgfHwgdXJsID09PSB2aXBVcmwpIHtcXG4gICAgICAgICAgICByZXR1cm4gdmlwVXJsO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gdXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXG4gICAgICAgIH1cXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgUGFyc2VTW3N0cl0gPT0gJ3N0cmluZycmJlBhcnNlU1tzdHJdLm1hdGNoKC9odHRwLio/PS8pKSB7XFxuICAgICAgICAvLyBsb2coXFxcIuaWreaPkuW8gOWni+mAmueUqOaJp+ihjOWFjeWXhSBkZWZhdWx0UGFyc2VXZWI6XFxcIit0aW1lb3V0KTtcXG4gICAgICAgIC8vbG9nKFxcXCLpu5jorqR4NVxcXCIrUGFyc2VTLmRlZmF1bHRQYXJzZVdlYik7XFxuICAgICAgICBpZih3aXRoQmF0Y2gpe1xcbiAgICAgICAgICAgIGlmKHR5cGVvZihleHRyYS5wbGF5VXJsTGlzdCk9PT0nb2JqZWN0JyYmZXh0cmEucGxheVVybExpc3QubGVuZ3RoPjApe1xcbiAgICAgICAgICAgICAgICBleHRyYS5wbGF5VXJsTGlzdCA9IGV4dHJhLnBsYXlVcmxMaXN0LmZpbHRlcihpdD0+aXQhPT0oUGFyc2VTW3N0cl18fHN0cikgKyB2aXBVcmwpO1xcbiAgICAgICAgICAgICAgICBsZXQgbmFtZUxpc3QgPSBleHRyYS5uYW1lTGlzdDtcXG4gICAgICAgICAgICAgICAgbmFtZUxpc3QudW5zaGlmdChzdHIpO1xcbiAgICAgICAgICAgICAgICBmdW5jdGlvbiB1bmlxdWUyKGFycmF5KXtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoYXJyYXkpKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBleHRyYS5uYW1lTGlzdD11bmlxdWUyKG5hbWVMaXN0KTtcXG4gICAgICAgICAgICAgICAgZXh0cmEucGxheVVybExpc3QgPSB1bmlxdWUyKGV4dHJhLnBsYXlVcmxMaXN0KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICBleHRyYSA9IHt9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYj9QYXJzZVMuZGVmYXVsdFBhcnNlV2ViKChQYXJzZVNbc3RyXXx8c3RyKSArIHZpcFVybCx0aW1lb3V0LGV4dHJhKTooUGFyc2VTW3N0cl18fHN0cikgKyB2aXBVcmw7XFxuICAgIH0gZWxzZSBpZih0eXBlb2Yoc3RyKT09PSdzdHJpbmcnJiZzdHIubGVuZ3RoPjEmJih0eXBlb2YgUGFyc2VTW3N0cl09PSd1bmRlZmluZWQnfHwhUGFyc2VTW3N0cl0pJiYhL15odHRwLy50ZXN0KHN0cikpe1xcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+ivt+i/m+ihjOaWreaPkumFjee9rizmjqjojZDmi4nlj5bpgZPplb/nsr7pgIkhXFxcXG7mo4DmtYvliLDml6DmlYjnmoTop6PmnpDphY3nva46JytzdHI7XFxuICAgIH1lbHNlIHtcXG4gICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlKHN0ciArIHZpcFVybCx0aW1lb3V0KTtcXG4gICAgfVxcbn1cXG5cXG52YXIgcGxheVBhcnNlID0ge1xcbiAgICBwbGF5ZXJfeHg6IGZ1bmN0aW9uKGp1cmwsIExhYmVsKSB7XFxuICAgICAgICByZXR1cm4gJChqdXJsKS5sYXp5UnVsZSgoaykgPT4ge1xcbiAgICAgICAgICAgIHZhciBqc1VybCA9IEpTT04ucGFyc2UoZmV0Y2goZ2V0VmFyKCdvbGRDb25maWcnKSkpLmNqO1xcbiAgICAgICAgICAgIHZhciBMYWJlbCA9IGs7XFxuICAgICAgICAgICAgdmFyIGZhID0gWydsZXR2JywgJ3BwdHYnLCAncXEnLCAneW91a3UnLCAncWl5aScsICdpcWl5aScsICdtZ3R2JywgJ2JpbGliaWxpJywgJ3NvaHUnLCAnbWlndScsICdtMTkwNScsICd2aXAnXTtcXG4gICAgICAgICAgICB2YXIgaHRtbCA9IHBhcnNlRG9tKHJlcXVlc3QoaW5wdXQpLCBMYWJlbCk7XFxuICAgICAgICAgICAgZXZhbChodG1sLnJlcGxhY2UoL3BsYXllcl8uKj89ey8sICdwZGF0YT17JykpO1xcbiAgICAgICAgICAgIGV2YWwoZmV0Y2goanNVcmwpKTtcXG4gICAgICAgICAgICBpZiAocGRhdGEudXJsLnN1YnN0cigwLCA4KS5tYXRjaCgvSlQuLkpULi4vKSkge1xcbiAgICAgICAgICAgICAgICBwZGF0YS51cmwgPSBiYXNlNjREZWNvZGUocGRhdGEudXJsKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKHBkYXRhLnVybC5zdWJzdHIoMCwgOCkubWF0Y2goLyUuLiUuLi8pKSB7XFxuICAgICAgICAgICAgICAgIHBkYXRhLnVybCA9IHVuZXNjYXBlKHBkYXRhLnVybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChmYS5pbmNsdWRlcyhwZGF0YS5mcm9tKSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKHBkYXRhLnVybCk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBkYXRhLnVybCArICcjaXNWaWRlbz10cnVlIyc7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgTGFiZWwpXFxuICAgIH1cXG59O1xcbmZ1bmN0aW9uIG16UG9wdXAoKSB7XFxuICAgIGlmIChnZXRWYXIoXFxcImlqay10eFxcXCIsIFxcXCJcXFwiKSA9PSBcXFwiMVxcXCIpIHtcXG4gICAgICAgIHNldEl0ZW0oXFxcInRpeGluZ1xcXCIsIFxcXCIxXFxcIilcXG4gICAgICAgIGNsZWFyVmFyKFxcXCJpamstdHhcXFwiKVxcbiAgICB9XFxuICAgIGlmIChnZXRJdGVtKFxcXCJ0aXhpbmdcXFwiLCBcXFwiXFxcIikgPT0gXFxcIlxcXCIpIHtcXG4gICAgICAgIGNvbmZpcm0oe1xcbiAgICAgICAgICAgIHRpdGxlOiAn5YWN6LSj5aOw5piOJyxcXG4gICAgICAgICAgICBjb250ZW50OiAn5pys56iL5bqP5LiN5o+Q5L6b6KeG6aKR6Kej5p6Q5pyN5YqhXFxcXG7miYDmnInlhoXlrrnlnYfku47nlKjmiLfliIbkuqvkuK3mlLbpm4ZcXFxcbuS7heS+m+a1i+ivleWSjOWtpuS5oOS6pOa1gVxcXFxuXFxcXG7noa7lrprljbPorqTlj6/vvIzkuI3lho3mj5DphpInLFxcbiAgICAgICAgICAgIGNvbmZpcm06ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBwdXRWYXIoXFxcImlqay10eFxcXCIsIFxcXCIxXFxcIik7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+eCueWHu+S6huehruiupFxcXCJcXG5cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgfVxcbn1cXG5pZiAoIWdldFZhcihcXFwidGl4aW5nXFxcIikpIHtcXG4gICAgbXpQb3B1cCgpO1xcbiAgICBwdXRWYXIoJ3RpeGluZycsJ29rJyk7XFxufVxcblxcbmZ1bmN0aW9uIHNhdmVCdXR0b24oY29udGVudCxuYW1lKSB7XFxuICAgIG5hbWUgPSBuYW1lfHwnJztcXG4gICAgdmFyIGRhdGEgPSBjb250ZW50LnNwbGl0KCfimIXimIXimIUnKTtcXG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAyKSB7XFxuICAgICAgICB2YXIgX2R0ID0gcGFyc2VQYXN0ZShkYXRhWzBdKTtcXG4gICAgICAgIGNvbnRlbnQgPSBfZHQuc3Vic3RyKDAsIDYpICE9PSAnZXJyb3I6JyA/IF9kdCA6ICcnO1xcbiAgICB9XFxuICAgIGRhdGEgPSBjb250ZW50LnNwbGl0KCfimIUnKTtcXG4gICAgdmFyIHR5cGUgPSBkYXRhWzBdO1xcbiAgICB2YXIgYXJyTGlzdCA9IFtdO1xcbiAgICB2YXIgb2JqQ29kZSA9IHt9O1xcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAyICYmIGRhdGFbMF0gIT09ICfnm7Tpk74nKSB7XFxuICAgICAgICB2YXIgb2JqS2V5ID0gZGF0YVsxXTtcXG4gICAgICAgIHZhciBvYmpWYWx1ZSA9IGRhdGFbMl07XFxuICAgICAgICBpZiAodHlwZSA9PT0gJ015UGFyc2VTJykge1xcbiAgICAgICAgICAgIG9ialZhbHVlID0gYmFzZTY0RGVjb2RlKG9ialZhbHVlKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChvYmpWYWx1ZS5zcGxpdCgnZnVuY3Rpb24nKS5sZW5ndGggPiAxKSB7XFxuICAgICAgICAgICAgZXZhbCgnb2JqVmFsdWU9JyArIG9ialZhbHVlKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGFyckxpc3Quc3BsaWNlKDAsIDAsIG9iaktleSk7IC8v5re75Yqg6aG555uu6Z2e5Yig6ZmkXFxuICAgICAgICBvYmpDb2RlW29iaktleV0gPSBvYmpWYWx1ZTtcXG5cXG4gICAgfSBlbHNlIGlmICh0eXBlID09PSAn55u06ZO+Jykge1xcbiAgICAgICAgYXJyTGlzdCA9IGRhdGE7XFxuICAgICAgICBhcnJMaXN0LnNwbGljZSgwLCAxKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGFyckxpc3QgPSBudWxsO1xcbiAgICB9XFxuICAgIGlmIChhcnJMaXN0ICE9IG51bGwpIHtcXG4gICAgICAgIHZhciBwYXJzZVJvdXRlID0gZ2V0VmFyKCdwYXJzZVJvdXRlJyk7XFxuICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXG4gICAgICAgIEFycmF5LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbih2YWwpIHtcXG4gICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmluZGV4T2YodmFsKTtcXG4gICAgICAgICAgICBpZiAoaW5kZXggPiAtMSkge1xcbiAgICAgICAgICAgICAgICB0aGlzLnNwbGljZShpbmRleCwgMSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfTtcXG4gICAgICAgIGlmKG5hbWUpey8v5Yig6Zmk5ZCN56ew5YiX6KGo5ZKM5Luj56CBXFxuICAgICAgICAgICAganNvbi50aXRsZS5yZW1vdmUobmFtZSk7XFxuICAgICAgICAgICAgZGVsZXRlIGpzb24uY29kZXNbbmFtZV07XFxuICAgICAgICB9XFxuICAgICAgICBhcnJMaXN0ID0gYXJyTGlzdC5jb25jYXQoanNvbi50aXRsZSk7XFxuICAgICAgICBqc29uLnRpdGxlID0gQXJyYXkuZnJvbShuZXcgU2V0KGFyckxpc3QpKTtcXG4gICAgICAgIE9iamVjdC5hc3NpZ24oanNvbi5jb2Rlcywgb2JqQ29kZSk7XFxuICAgICAgICBpZiAodHlwZSA9PT0gJ+a1i+ivlScpIHtcXG4gICAgICAgICAgICBldmFsKCd2YXIgY29uZmlnID0nICsgZmV0Y2goZ2V0VmFyKCdvbGRDb25maWcnKSkpO1xcbiAgICAgICAgICAgIGV2YWwoZmV0Y2goY29uZmlnLmNqKSk7XFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBQYXJzZVNbZGF0YVsxXV0gPT0gXFxcImZ1bmN0aW9uXFxcIikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTW2RhdGFbMV1dKGRhdGFbMl0pO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlV2ViKFBhcnNlU1tkYXRhWzFdXSArIGRhdGFbMl0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5bey5L+d5a2Y5YaF5a65XFxcIjtcXG4gICAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/ml6Dms5Xor4bliKvov5nkuKrlhoXlrrnlkaJcXFwiXFxuICAgIH1cXG59XFxuLy8g5Lul5LiL5Luj56CB5Y2D5LiH5LiN6KaB5pS+5Ye65p2l5ZCm5YiZ5oql6ZSZXFxuaWYgKGdldEl0ZW0oJ3VwZGF0ZURhdGUnKSAhPSB1cGRhdGVEYXRlKSB7XFxuLy8gaWYgKHRydWUpIHtcXG4gICAgLy8g5oqKZnVuY3Rpb27lj5jmiJBzdHJpbmdcXG4gICAgbGV0IGZ1bmN0aW9uQ29kZSA9IHNhdmVCdXR0b24gKyAnOycrbXpQb3B1cDtcXG4gICAgLy8gd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL3Bsc2NQYXJzZS5odG1sJywgZmV0Y2goX215U2V0LmNrTGluayArICdwbHNjUGFyc2UuaHRtbCcpKTtcXG4gICAgc2V0SXRlbSgnbXlGdW5jdGlvbicsIGZ1bmN0aW9uQ29kZSk7XFxuICAgIHNldEl0ZW0oJ3VwZGF0ZURhdGUnLCB1cGRhdGVEYXRlKTtcXG59XFxudmFyIGJqSXRlbSA9IHtcXG4gICAgaGZQbHVnaW46IGZ1bmN0aW9uKHBhcnNlUm91dGUpIHtcXG4gICAgICAgIHJldHVybiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XFxuICAgICAgICAgICAgaWYgKGZpbGVFeGlzdChrKSkge1xcbiAgICAgICAgICAgICAgICB2YXIgY2pjYWNoZSA9IGdldFZhcignY2pDYWNoZScpO1xcbiAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKGspKTtcXG4gICAgICAgICAgICAgICAganNvbi5zZXR0aW5ncy5jaiA9IGNqY2FjaGU7XFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShrLCAkLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgICAgIHZhciBvbGRSb3V0ZSA9IGdldFZhcignb2xkQ29uZmlnJyk7XFxuICAgICAgICAgICAgICAgIHZhciBvbGRDb25maWcgPSBqc29uLnNldHRpbmdzO1xcbiAgICAgICAgICAgICAgICBvbGRDb25maWcuY2ogPSBjamNhY2hlO1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUob2xkUm91dGUsICQuc3RyaW5naWZ5KG9sZENvbmZpZykpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mgaLlpI3miJDlip8nO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/pnIDopoHlhYjmi4nlj5bliJfooagnXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgcGFyc2VSb3V0ZSlcXG4gICAgfSxcXG4gICAgcHVsbENvZGU6IGZ1bmN0aW9uKGspIHtcXG4gICAgICAgIHJldHVybiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XFxuICAgICAgICAgICAgdmFyIHB1bGxNb2RlID0ga1swXTtcXG4gICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGtbMV07XFxuICAgICAgICAgICAgdmFyIHBhcnNlRmlsZSA9IGZldGNoKHBhcnNlUm91dGUpO1xcbiAgICAgICAgICAgIGlmICghcGFyc2VGaWxlKSB7XFxuICAgICAgICAgICAgICAgIHZhciBzZXR0aW5ncyA9IGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpO1xcbiAgICAgICAgICAgICAgICBzZXR0aW5ncyA9ICFzZXR0aW5ncyA/IHt9IDogSlNPTi5wYXJzZShzZXR0aW5ncyk7XFxuICAgICAgICAgICAgICAgIHZhciBqc29uID0ge307XFxuICAgICAgICAgICAgICAgIGpzb24uc2V0dGluZ3MgPSBzZXR0aW5ncztcXG4gICAgICAgICAgICAgICAganNvbi50aXRsZSA9IFtdO1xcbiAgICAgICAgICAgICAgICBqc29uLmNvZGVzID0ge307XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBwYXJzZUZpbGUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIgcGFyc2VUaXRsZSA9IFtdO1xcbiAgICAgICAgICAgIHZhciBwYXJzZUNvZGU9e307XFxuICAgICAgICAgICAgdmFyIGNqTGluayA9IGdldFZhcigncGx1Z2luTGluaycpO1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGlmKC9AYmFzZTY0OlxcXFwvXFxcXC8vLnRlc3QoY2pMaW5rKSl7XFxuICAgICAgICAgICAgICAgICAgICBldmFsKGJhc2U2NERlY29kZShjakxpbmsuc3BsaXQoJ0BiYXNlNjQ6Ly8nKVsxXSkpO1xcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZigv5o+S5Lu25ZCNLy50ZXN0KGNqTGluaykpe1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlYWxMaW5rID0gY2pMaW5rLnNwbGl0KCfmj5Lku7blkI0nKVswXS5yZXBsYWNlKC9bXFxcXHNdL2csJycpO1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKCfop6PmnpDkupHliarliIfmnb86JytyZWFsTGluayk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgeVBhc3RlID0gcGFyc2VQYXN0ZShyZWFsTGluayk7XFxuICAgICAgICAgICAgICAgICAgICBpZigvQGJhc2U2NDpcXFxcL1xcXFwvLy50ZXN0KHlQYXN0ZSkpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoYmFzZTY0RGVjb2RlKHlQYXN0ZS5zcGxpdCgnQGJhc2U2NDovLycpWzFdKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBQYXJzZVM9PT0ndW5kZWZpbmVkJyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ouJ5Y+W5Liq6bih5q+b5o+S5Lu2LOmHjOmdoui/nlBhcnNlU+WvueixoemDveayoeaciSEnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9Y2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+m4oeavm+aPkuS7tuaJp+ihjOaKpemUmTpcXFxcbicrZS5tZXNzYWdlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKrog73or4bliKvkupHliarliIfmnb/kuK3nmoTlhoXlrrk6XFxcXG4nK3lQYXN0ZS5zdWJzdHJpbmcoMCwxMDApO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNqTGluayA9PT0gJ1HnpZ4nKSB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgamlleGkgPSBmZXRjaCgnaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHQnKS5zcGxpdCgnXFxcXG4nKTtcXG4gICAgICAgICAgICAgICAgICAgIGZvciAoaSBpbiBqaWV4aSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZT1qaWV4aVtpXS5zcGxpdCgnJiYnKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZT1qaWV4aVtpXS5zcGxpdCgnJiYnKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlLnB1c2godGl0bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09Y29kZTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvLyB9ZWxzZSBpZigvXiNbYS16QS1aMC05XXsyLDEwfSQvLnRlc3QoY2pMaW5rKSl7Ly/npo/liKnlj6Pku6Qy5YiwMTDkvY1cXG4gICAgICAgICAgICAgICAgZWxzZSBpZigvXiNbXFxcXFNdezIsMTB9JC8udGVzdChjakxpbmspKXsvL+emj+WIqeWPo+S7pDLliLAxMOS9jeS7u+aEj+mdnuepuuWtl+espuS4slxcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qge3Rhc2tDYWxsLCB0YXNrUnVuLHRhc2tSZXF9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdGFza0NhbGw/cnVsZT3pgZPplb/ku5PlupNQcm9cXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vIGxvZygn5byA5aeL5omn6KGM5Lu75Yqh5LuT5bqT6I635Y+W5pat5b+15o+S5Lu256aP5Yip5Y+j5LukJyk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVzdWx0ID0gdGFza0NhbGwoMTcsJ0RuRnVsaScsW2NqTGlua10pO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgcmV0ID0gSlNPTi5wYXJzZShyZXN1bHQucmVzdWx0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2cocmV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXQub3B0PT09J2Vycm9yJyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly8nK3JldC5tc2c7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocmV0Lm9wdD09PSd1cmwnKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBmZXRjaChyZXQucmV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGFyciA9IGh0bWwuaW5jbHVkZXMoJ2h0dHAnKT8gaHRtbDpiYXNlNjREZWNvZGUoaHRtbCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBqaWV4aSA9IGFyci5tYXRjaCgvW1xcXFxTXSo/LC4qP1tcXFxcc10vZyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgaW4gamlleGkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZT1qaWV4aVtpXS5zcGxpdCgnLCcpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGU9amlleGlbaV0uc3BsaXQoJywnKVsxXS5zcGxpdChcXFwiXFxcXG5cXFwiKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZUNvZGVbdGl0bGVdPWNvZGU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihyZXQub3B0PT09J2p4Jyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKC9bXFxcXFNdKj8saHR0cFtcXFxcU10vLnRlc3QocmV0LnJldCkpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gcmV0LnJldC5zcGxpdCgnLCcpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSByZXQucmV0LnNwbGl0KCcsJylbMV0uc3BsaXQoJ1xcXFxuJylbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlLnB1c2godGl0bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb2RlW3RpdGxlXT1jb2RlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZigvXmh0dHAvLnRlc3QocmV0LnJldCkpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gY2pMaW5rLnNwbGl0KCcjJylbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9IHJldC5yZXQuc3BsaXQoJ1xcXFxuJylbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlLnB1c2godGl0bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb2RlW3RpdGxlXT1jb2RlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKrnn6XnmoTnpo/liKk6XFxcXG4nK3JldC5yZXQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihyZXQub3B0PT09J3ZpcEp4Jyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IGNqTGluay5zcGxpdCgnIycpWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9IHJldC5yZXQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvZyhjb2RlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb2RlW3RpdGxlXT0vZnVuY3Rpb24vLnRlc3QoY29kZSk/ZXZhbChjb2RlKTpjb2RlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ku5PlupPpnZ7mnIDmlrDniYjmiJbogIXnpo/liKnnpL7lip/og73lvIDlj5HkuK0nXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKGNqTGluaz09PSfmlq3mj5InKXtcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoZmV0Y2goXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanNcXFwiKSk7XFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlPU9iamVjdC5rZXlzKFBhcnNlUyk7XFxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKC9eaGlrZXI6XFxcXC9cXFxcL3xeZmlsZTpcXFxcL1xcXFwvfF5odHRwfF5cXFxcL3N0b3JhZ2VcXFxcL3xeXFxcXC9zZGNhcmRcXFxcLy8udGVzdChjakxpbmspKXtcXG4gICAgICAgICAgICAgICAgICAgIGlmKC9eXFxcXC9zdG9yYWdlXFxcXC98XlxcXFwvc2RjYXJkXFxcXC8vLnRlc3QoY2pMaW5rKSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2pMaW5rID0gJ2ZpbGU6Ly8nK2NqTGluaztcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoZmV0Y2goY2pMaW5rKSk7XFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlPU9iamVjdC5rZXlzKFBhcnNlUyk7XFxuICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieWPluWPo+S7pOacieivrydcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgbG9nKGUubWVzc2FnZSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBqeEp1ZGdlID0gdHlwZW9mIFBhcnNlUyA9PSAnb2JqZWN0JztcXG4gICAgICAgICAgICB2YXIgbGJKdWRnZSA9IHR5cGVvZihwYXJzZVRpdGxlKSA9PSAnb2JqZWN0JztcXG4gICAgICAgICAgICBpZiAoanhKdWRnZSB8fCBsYkp1ZGdlKSB7XFxuICAgICAgICAgICAgICAgIC8vIGlmIChwdWxsTW9kZSA9PT0gJ+WIl+ihqCcpIHtcXG4gICAgICAgICAgICAgICAgLy8gICAgIGlmICghbGJKdWRnZSkge1xcbiAgICAgICAgICAgICAgICAvLyAgICAgICAgIHBhcnNlVGl0bGUgPSBPYmplY3Qua2V5cyhQYXJzZVMpO1xcbiAgICAgICAgICAgICAgICAvLyAgICAgfVxcbiAgICAgICAgICAgICAgICAvLyAgICAgdmFyIG5ld1BhcnNlVGl0bGUgPSBqc29uLnRpdGxlLmNvbmNhdChwYXJzZVRpdGxlKTtcXG4gICAgICAgICAgICAgICAgLy8gICAgIGpzb24udGl0bGUgPSBBcnJheS5mcm9tKG5ldyBTZXQobmV3UGFyc2VUaXRsZSkpO1xcbiAgICAgICAgICAgICAgICAvLyB9XFxuICAgICAgICAgICAgICAgIC8vIOS4jeeuoeaLieWPluS7o+eggei/mOaYr+WIl+ihqOmDveimgeaKiuWIl+ihqOaLieS6hlxcbiAgICAgICAgICAgICAgICBpZiAoIWxiSnVkZ2UpIHtcXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUgPSBPYmplY3Qua2V5cyhQYXJzZVMpO1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKHBhcnNlVGl0bGUpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHZhciBzY09iamVjdCA9IFtcXFwiQ2l0eUlQXFxcIiwgXFxcInBjVUFcXFwiLCBcXFwiY2FjaGVNM3U4XFxcIiwgXFxcImRlZmF1bHRQYXJzZVxcXCIsXFxcImRlZmF1bHRQYXJzZVdlYlxcXCIsXFxcIm1hb3NzXFxcIiwgXFxcIkxMUVxcXCIsXFxcInBhcnNlTGNcXFwiXTtcXG4gICAgICAgICAgICAgICAgcGFyc2VUaXRsZSA9IHBhcnNlVGl0bGU/cGFyc2VUaXRsZS5maWx0ZXIoaXQ9PiFzY09iamVjdC5pbmNsdWRlcyhpdCkpOltdO1xcbiAgICAgICAgICAgICAgICB2YXIgbmV3UGFyc2VUaXRsZSA9IGpzb24udGl0bGUuY29uY2F0KHBhcnNlVGl0bGUpO1xcbiAgICAgICAgICAgICAgICBqc29uLnRpdGxlID0gQXJyYXkuZnJvbShuZXcgU2V0KG5ld1BhcnNlVGl0bGUpKTtcXG5cXG4gICAgICAgICAgICAgICAgaWYgKHB1bGxNb2RlID09PSAn5Luj56CBJykge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBvcmlnaW5hbFBhcnNlUyA9PSAnb2JqZWN0Jykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgaW4gc2NPYmplY3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG9yaWdpbmFsUGFyc2VTW3NjT2JqZWN0W2ldXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gb3JpZ2luYWxQYXJzZVMgPW9yaWdpbmFsUGFyc2VTLmZpbHRlcihpdD0+IXNjT2JqZWN0LmluY2x1ZGVzKE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGl0KVswXSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oanNvbi5jb2Rlcywgb3JpZ2luYWxQYXJzZVMpO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZih0eXBlb2YoUGFyc2VTKT09XFxcInVuZGVmaW5lZFxcXCIpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGpzb24uY29kZXMsIHBhcnNlQ29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vcmV0dXJuIFxcXCJ0b2FzdDovL+ayoeacieS7o+egge+8jOS4jeWPr+aLieWPllxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihqc29uLmNvZGVzLCBQYXJzZVMpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAvL3ZhciBuZXdGaWxlID0gdG9vbHMudG9KU09OKGpzb24pOy8v6Ieq5a6a5LmJc3RyaW5naWZ55Ye95pWw77yM5bim5pyJ6L2s5LmJ5a2X56ymXFxuICAgICAgICAgICAgICAgIHZhciBuZXdGaWxlID0gJC5zdHJpbmdpZnkoanNvbik7IC8vSlNPTi5wYXJzZeS8muaKpemUmVxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgbmV3RmlsZSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieWPlicgKyBwdWxsTW9kZSArICfmiJDlip8nO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKrojrflj5bliLDlr7nosaEnO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIFtrLCBfbXlTZXQucGFyc2VSb3V0ZV0pXFxuICAgIH0sXFxuICAgIHB1bGxTY3JpcHQ6IGZ1bmN0aW9uKGNqLCB4NSkge1xcbiAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXG4gICAgICAgICAgICB2YXIgY2pGcm9tID0gJ2hpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb8nO1xcbiAgICAgICAgICAgIHZhciB4NUZyb20gPSAnaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmh0bWw/cnVsZT1NeUZpZWxk4bSw4oG/JztcXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICB2YXIgY2pGaWxlID0gSlNPTi5wYXJzZShmZXRjaChjakZyb20pKS5ydWxlO1xcbiAgICAgICAgICAgICAgICB2YXIgeDVGaWxlID0gSlNPTi5wYXJzZShmZXRjaCh4NUZyb20pKS5ydWxlO1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoa1swXSwgY2pGaWxlKTtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGtbMV0sIHg1RmlsZSk7XFxuICAgICAgICAgICAgICAgIGNsZWFyVmFyKCdqeE9sZFYnKTtcXG4gICAgICAgICAgICAgICAgY2xlYXJWYXIoJ2p4TmV3VicpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mi4nlj5bmiJDlip8nO1xcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+acquaIkOWKn+iOt+WPluWGheWuuSc7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgW2NqLCB4NV0pXFxuICAgIH0sXFxuICAgIHhsU2VsZWN0OiBmdW5jdGlvbihiaWFuamksIGxiTGVuZ3RoKSB7XFxuICAgICAgICByZXR1cm4gXFxcInNlbGVjdDovL1xcXCIgKyBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgb3B0aW9uczogWyfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6cmVkXFxcIiB0aXRsZT1cXFwi5Yig6ZmkfHwnICsgYmlhbmppICsgJ1xcXCI+5YigIOmZpCcsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6I0Y1NzQ3NFxcXCIgdGl0bGU9XFxcIumakOiXj3x8JyArIGJpYW5qaSArICdcXFwiPumakCDol48nLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcImNvbG9yOiNGRjgwMDBcXFwiIHRpdGxlPVxcXCLkv67mlLl8fCcgKyBiaWFuamkgKyAnXFxcIj7kv64g5pS5JywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMDk4QUMxXFxcIiB0aXRsZT1cXFwi572u6aG2fHwnICsgYmlhbmppICsgJzAnICsgJ1xcXCI+572uIOmhticsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzA5OEFDMVxcXCIgdGl0bGU9XFxcIuenu+WKqHx8JyArIGJpYW5qaSArICdcXFwiPuenuyDliqgnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcImNvbG9yOiMwOThBQzFcXFwiIHRpdGxlPVxcXCLnva7lupV8fCcgKyBiaWFuamkgKyBsYkxlbmd0aCArICdcXFwiPue9riDlupUnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcImNvbG9yOiMwNEI0MzFcXFwiIHRpdGxlPVxcXCLliIbkuqt8fCcgKyBiaWFuamkgKyAnXFxcIj7lnLDmnb/liIbkuqsnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcImNvbG9yOiMwNEI0MzFcXFwiIHRpdGxlPVxcXCLkupHliIbkuqt8fCcgKyBiaWFuamkgKyAnXFxcIj7kupHmnb/liIbkuqsnXSxcXG4gICAgICAgICAgICBjb2w6ICcyJyxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgIHZhciBwYXJzZVJvdXRlID0gZ2V0VmFyKCdwYXJzZVJvdXRlJyk7XFxuICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcbiAgICAgICAgICAgICAgICB2YXIgbmV3SW5wdXQgPSBwYXJzZURvbUZvckh0bWwoaW5wdXQsICdzcGFuJiZ0aXRsZScpLnNwbGl0KCd8fCcpO1xcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IG5ld0lucHV0WzBdO1xcbiAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IG5ld0lucHV0WzFdO1xcbiAgICAgICAgICAgICAgICB2YXIgbnVtID0gbmV3SW5wdXRbMl07XFxuICAgICAgICAgICAgICAgIHZhciBudW0yID0gbmV3SW5wdXRbM107XFxuICAgICAgICAgICAgICAgIHN3aXRjaCAodHlwZSkge1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwi5Yig6ZmkXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwi5Y2z5bCG5Yig6ZmkOiBcXFwiICsgbmFtZSkuY29uZmlybSgoaykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGtbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW0gPSBrWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uY29kZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlbGV0ZSBqc29uLmNvZGVzW25hbWVdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKG51bSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3suWwhuOAllxcXCIgKyBuYW1lICsgXFxcIuOAl+WIoOmZpFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW25hbWUsIG51bV0pO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwi6ZqQ6JePXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGspID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBrWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0ga1sxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLnRpdGxlLnNwbGljZShudW0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7LlsIbjgJZcXFwiICsgbmFtZSArIFxcXCLjgJfpmpDol49cXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WPr+iDveaYr+S4que9keWdgCwg5oKo5Y+v6YCJ5oup5Yig6ZmkXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtuYW1lLCBudW1dKTtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIuS/ruaUuVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy9pZiAoanNvbi5jb2Rlc1tuYW1lXSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuQ29kZSA9IG5hbWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5OYW1lID0gXFxcIui/meaYr+WQjeensFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uY29kZXNbbmFtZV0pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbkNvZGUgPSBqc29uLmNvZGVzW25hbWVdLnRvU3RyaW5nKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5OYW1lID0gbmFtZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcImhpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5I1xcXCIpLnJ1bGUoKGspID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChnZXRJdGVtKCdteUZ1bmN0aW9uJykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGtbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlID0ga1sxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5L+dIOWtmCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHNhdmVCdXR0b24gKyBcXFwic2F2ZUJ1dHRvbihnZXRWYXIoJ2lucHV0X2VkaXQnKSxuYW1lKTtiYWNrKCk7XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuW7uuiuruaMiem7mOiupOeahOS7o+eggeagvOW8j+S/ruaUueWTplxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0VmFyKCdpbnB1dF9lZGl0JywgaW5wdXQpXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogXFxcIi0xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogJ+S/ruaUueKYhScgKyBuYW1lICsgJ+KYhScgKyBjb2RlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojNkVCODk3XFxcIj7moLzlvI/kuLrvvJrmk43kvZznsbvlnovimIXmoIfpopjimIVmdW5jdGlvbigpe+iHquWumuS5ieWGheWuuX08YnI+6K+35Yu/5aGr5YWl5YW25LuW5qC85byPJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc2F2ZUJ1dHRvbixuYW1lKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSBzYXZlQnV0dG9uKGdldFZhcignaW5wdXRfZWRpdCcpLG5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2soKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5L+d5a2Y5L+u5pS5XFxcXG7or7foh6rooYzmo4DmtYvop6PmnpDmmK/lkKbmnInooqvopobnm5bnmoTlhoXlrrknO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmKHR5cGVvZihjb2RlKT09PSdzdHJpbmcnJiZjb2RlLmxlbmd0aD4yKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmV0dXJuIGNvZGVcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmV0dXJuICd0b2FzdDovL+W3suS/neWtmOS/ruaUuSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgc2F2ZUJ1dHRvbixuYW1lKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfigJjigJjigJnigJk8YmlnPjxiaWc+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiMyOThBMDhcXFwiPuS/nSDlrZgnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIFtuTmFtZSwgbkNvZGVdKSAvL1tuYW1lLCBqc29uLmNvZGVzW25hbWVdLnRvU3RyaW5nKCldKVxcbiAgICAgICAgICAgICAgICAgICAgLyp9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lj6rmnInnvZHlnYDmiJbogIXmoIfpopgsIOS4jeaUr+aMgeS/ruaUuVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0qL1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwi572u6aG2XFxcIjpcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIue9ruW6lVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBqc29uLnRpdGxlLnNwbGljZShudW0sIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKG51bTIsIDAsIGl0ZW1bMF0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwi56e75YqoXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdiaWFuamknLCAn56e75YqoIycgKyBrKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgbnVtKTtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIuWIhuS6q1xcXCI6XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCLkupHliIbkuqtcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzW25hbWVdKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZVRleHQgPSB0eXBlb2YganNvbi5jb2Rlc1tuYW1lXSA9PSAnZnVuY3Rpb24nID8gJC5zdHJpbmdpZnkoanNvbi5jb2Rlc1tuYW1lXSkgOiBqc29uLmNvZGVzW25hbWVdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRleHQgPSAnTXlQYXJzZVPimIUnICsgbmFtZSArICfimIUnICsgYmFzZTY0RW5jb2RlKHBhcnNlVGV4dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlVGV4dCA9ICfnm7Tpk77imIUnICsganNvbi50aXRsZVtudW1dO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSAn5LqR5YiG5LqrJyAmJiBwYXJzZVRleHQuc3Vic3RyKDAsIDgpID09ICdNeVBhcnNlUycpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUZXh0ID0gc2hhcmVQYXN0ZShwYXJzZVRleHQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VUZXh0LnN1YnN0cigwLCA2KSAhPSAnZXJyb3I6JyA/ICdjb3B5Oi8vJyArIHBhcnNlVGV4dCArICdcXFxcbuKYheKYheKYhVxcXFxuJyArICdNeVBhcnNlU++8micgKyBuYW1lIDogJ3RvYXN0Oi8v5YiG5Lqr5aSx6LSlISHkupHliarotLTmnb/lj6/og73mjILkuoYnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnY29weTovLycgKyBwYXJzZVRleHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pqC5LiN5pSv5oyBJztcXG4gICAgICAgICAgICAgICAgfSAvL3N3aXRjaOeahFxcbiAgICAgICAgICAgIH0pIC8vU3RyaW5n55qEXFxuICAgICAgICB9KSAvL3N0cmluZ2lmeeeahFxcbiAgICB9LFxcbiAgICB4alBhcnNlOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIHJldHVybiAkKFxcXCJoaWtlcjovL2VtcHR5I25vSGlzdG9yeSNcXFwiKS5ydWxlKCgpID0+IHtcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcbiAgICAgICAgICAgIGV2YWwoZ2V0SXRlbSgnbXlGdW5jdGlvbicpKTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+S/nSDlrZgnLFxcbiAgICAgICAgICAgICAgICB1cmw6IHNhdmVCdXR0b24gKyBcXFwic2F2ZUJ1dHRvbihpbnB1dCk7YmFjaygpO2NsZWFyVmFyKCdpbnB1dF9hZGQnKVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFwi6L6T5YWl5q2j56Gu5qC85byP5YaF5a65XFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0VmFyKFxcXCJpbnB1dF9hZGRcXFwiLCBpbnB1dCknLFxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXFxcInRleHRhcmVhXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogXFxcIi0xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcignaW5wdXRfYWRkJyksXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxzbWFsbD48c3BhbiBzdHlsZT1cXFwiY29sb3I6IzZFQjg5N1xcXCI+5oyJ5o+P6L+w6K+J5qC85byP6L6T5YWlLCDor7fli7/loavlhaXlhbbku5bmoLzlvI88YnI+5pys5Zyw5Y+j5LukOiDmk43kvZznsbvlnovimIXlkI3np7DimIXku6PnoIE8YnI+5LqR5Y+j5LukOiDpk77mjqXimIXimIXimIXlkI3np7A7IOe6r+e9keWdgDog55u06ZO+4piFdXJsMeKYhXVybDInLFxcbiAgICAgICAgICAgICAgICBkZXNjOiAn4oCY4oCY4oCZ4oCZPGJpZz48YmlnPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMjk4QTA4XFxcIj7kv50g5a2YJyxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCdub0xvYWRpbmcnKS5sYXp5UnVsZSgoc2F2ZUJ1dHRvbikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNhdmVCdXR0b24oZ2V0VmFyKCdpbnB1dF9hZGQnKSk7XFxuICAgICAgICAgICAgICAgIH0sIHNhdmVCdXR0b24pLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgfSlcXG4gICAgfSxcXG4gICAgeWRQYXJzZTogZnVuY3Rpb24oQkptb2RlLCBpKSB7XFxuICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcbiAgICAgICAgICAgIHZhciBBID0ga1swXS5zcGxpdCgnIycpWzFdO1xcbiAgICAgICAgICAgIHZhciBCID0ga1sxXTtcXG4gICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcbiAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcbiAgICAgICAgICAgIHZhciBpdGVtID0ganNvbi50aXRsZS5zcGxpY2UoQSwgMSk7IC8vIDE6IOagh+iusOW8gOWni+S9jee9ru+8jDI6IOWIoOmZpOWIsOWTquS4quS9jee9rlxcbiAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKEIsIDAsIGl0ZW1bMF0pOyAvLyAxOiDlkIzkuIrvvIwyOiAw6KGo56S65LiN5Yig6Zmk77yMMzog5re75Yqg5a+56LGhXFxuICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXG4gICAgICAgICAgICBjbGVhclZhcignYmlhbmppJyk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICB9LCBbQkptb2RlLCBpXSlcXG4gICAgfSxcXG4gICAgcGxzY1BhcnNlOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSMnKS5ydWxlKCgpID0+IHtcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5om56YeP5Yig6Zmk6Kej5p6QJyxcXG4gICAgICAgICAgICAgICAgZGVzYzogJ2F1dG8mJmZsb2F0JyxcXG4gICAgICAgICAgICAgICAgdXJsOiAnZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvY2FjaGUvcGxzY1BhcnNlLmh0bWwnLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJ1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgfSlcXG4gICAgfVxcbn07XFxuXFxuZnVuY3Rpb24gc2V0UGFyc2UoKSB7XFxuICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLnNldFBhcnNlKCk7XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6LCD55So6Lev55SxXCIsXCJwYXRoXCI6XCJSb3V0ZVwiLFwicnVsZVwiOlwianM6XFxuY29uc3QgZCA9IFtdO1xcbmNvbnN0IGRhdGEgPSB7fTtcXG5cXG5kYXRhLm9sZENvbmZpZyA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXCI7XFxuZGF0YS5jalJvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanNcXFwiO1xcbmRhdGEueDVSb3V0ZSA9IFxcXCJmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9jYWNoZS9QYXJzZV9Ebi5odG1sXFxcIjtcXG5cXG5cXG5kYXRhLmp4TGF6eSA9IFxcXCJldmFsKCd2YXIgY29uZmlnID0nICsgZmV0Y2goJ1xcXCIgKyBkYXRhLm9sZENvbmZpZyArIFxcXCInKSk7ZXZhbChmZXRjaChjb25maWcuY2opKTtheXRtUGFyc2UoaW5wdXQpXFxcIjtcXG5cXG5kYXRhLnN6UGFyc2UgPSBcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPeiuvue9riNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSNcXFwiO1xcblxcbmRhdGEuc2V0UGFyc2UgPSBmdW5jdGlvbigpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGRlc2M6ICc3OTUnLFxcbiAgICAgICAgdXJsOiB0aGlzLng1Um91dGUsXFxuICAgICAgICBjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJ1xcbiAgICB9KTtcXG4gICAgdmFyIG9sZFYgPSBnZXRWYXIoJ2p4T2xkVicpO1xcbiAgICB2YXIgbmV3ViA9IGdldFZhcignanhOZXdWJyk7XFxuICAgIHZhciB2ZXJzaW9uVGlwcyA9IHBhcnNlRmxvYXQobmV3VikgPiBwYXJzZUZsb2F0KG9sZFYpID8gJ+KAmOKAmOacieaWsOeJiOacrDogdicgKyBuZXdWIDogJ+KAmOKAmCc7XFxuICAgIHZhciBwaWNzID0gW1xcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnNlb3Z4LmNvbS9pbWcvc2VvdngtMjAtMTAlMjAoOTIpLmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9tb20yMDE4JTIwKDIwNykuanBnJyxcXG4gICAgICAgICdodHRwczovL3R2YTQuc2luYWltZy5jbi9sYXJnZS85YmQ5YjE2N2d5MWZ3cmg1eG9sdGRqMjFoYzB1MHRheC5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vdHZhMS5zaW5haW1nLmNuL2xhcmdlLzAwNUJZcXBnZ3kxZndyZXl1NG5sNmozMWhjMHUwYWhyLmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly9zMy5ibXAub3ZoL2ltZ3MvMjAyMS8xMC9kN2U2MGI5OTA3NDIwOTNkLmpwZWcnLFxcbiAgICAgICAgJ2h0dHBzOi8vczMuYm1wLm92aC9pbWdzLzIwMjEvMTAvOTFhZDZkNjUzOGJmODY4OS5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vdHZhMS5zaW5haW1nLmNuL2xhcmdlLzAwNUJZcXBnZ3kxZndyZXNsNXBtbGozMWhjMHhjd2thLmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly90dmEzLnNpbmFpbWcuY24vbGFyZ2UvMDA1QllxcGdneTFmd3JnamRrNzRvajMxaGMwdTBkcW4uanBnJyxcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL21vbTIwMTglMjAoMzIwKS5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnNlb3Z4LmNvbS9pbWcvbW9tMjAxOCUyMCg4MDMpLmpwZydcXG4gICAgXTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGltZzogcGljc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCldLFxcbiAgICAgICAgdGl0bGU6IHZlcnNpb25UaXBzICsgJ+KAmeKAmTxzbWFsbD48c3BhbiBzdHlsZT1cXFwiY29sb3I6IzZFQjg5N1xcXCI+PGJyPuOAgOOAgOeCueWHu+S4iuaWueWktOWDj+i/m+WFpee8lui+kTxicj7ngrnmraTov5vlhaXorrrlnZvluJblrZDliJfooagnLFxcbiAgICAgICAgZGVzYzogJ+W9k+WJjeeJiOacrDogdicgKyBvbGRWLFxcbiAgICAgICAgdXJsOiAnaHR0cHM6Ly9oYWlrdW9zaGlqaWUuY24vdXNlci8xOTU4JyxcXG4gICAgICAgIGNvbF90eXBlOiAnbW92aWVfMSdcXG4gICAgfSk7XFxuICBzZXRSZXN1bHQoZCk7XFxufVxcblxcbnN3aXRjaCAoZ2V0UGFyYW0oXFxcInR5cGVcXFwiKSkge1xcbiAgICBjYXNlIFxcXCLorr7nva5cXFwiOlxcbiAgICAgICAgZGF0YS5zZXRQYXJzZSgpO1xcbiAgICAgICAgLy9zZXRSZXN1bHQoZCk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSBcXFwi57yW6L6RXFxcIjpcXG4gICAgICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2p4SXRlbT9ydWxlPU15RmllbGThtLDigb9cXFwiKS5qeExpc3QoKTtcXG4gICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgICAgIGJyZWFrO1xcblxcdGNhc2UgXFxcIuS4u+mimFxcXCI6XFxuXFx0ICAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90aGVtZT9ydWxlPU15RmllbGThtLDigb9cXFwiKS50aGVtZUluaXQoKTtcXG4gICAgICAgIGJyZWFrO1xcblxcdGNhc2UgXFxcIuino+aekFxcXCI6XFxuXFx0ICAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9qeE1hbmFnZT9ydWxlPU15RmllbGThtLDigb9cXFwiKS5qeE1hbmFnZSgpO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGRlZmF1bHQ6XFxuICAgICAgICAkLmV4cG9ydHMgPSBkYXRhO1xcbiAgICAgICAgYnJlYWs7XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6Kej5p6Q6aG55Li755WM6Z2iXCIsXCJwYXRoXCI6XCJqeEl0ZW1cIixcInJ1bGVcIjpcInZhciBfMHhvZFI9J2pzamlhbWkuY29tLnY2JyxfMHg0ODU1PVtfMHhvZFIsJ3c3Rkx3N2tpSlE9PScsJ0E4S3ZKQy9EaVE9PScsJ1I4S3R3NUhEcThLU1FjT08nLCd3NS9DZ1Z2Q3JpOUZ3cmw0WEJSV3c2ckNpZz09JywnSVRUQ21jT3d3cDNDcUE9PScsJ0dRaEdZOEtKJywnR01LMVVzSy9WQT09Jywnd3BqQ3ZpUkgnLCdIQU1RU3c0PScsJ0FzS05IRHZEcWc9PScsJ1pjS1J3b1hDa3c9PScsJ3dwL0NtdzUrd29FPScsJ0lNTy9QQW5Eamc9PScsJ3dveG53NUhEbUNZPScsJ3dvTEN0UUJGd29RPScsJ2Q4T29OVy9DbHc9PScsJ2VSSENvU0FpJywnSmNPbWJjT29BTU9zJywnSjhLOHc1VERreHd5QWc9PScsJ3c3WXpBU009Jywnd3FjSndwckNqRlU9JywnZlFMQ3ZTc0onLCdPTU9Cd3B3Vnc2bz0nLCd3NkREcmNPVkRjT3UnLCdOc0tFRlRURHJnPT0nLCdWTU92UDhLN0tnPT0nLCdPQTVVUXNLcicsJ1A4SzJ3NDNEa1E9PScsJ0kzUERtOEtBJywnR2NLUk5oWER2Zz09JywndzRQQ2wyNXF3Nk09JywnUHNPNWI4T0xHQT09JywnSzJyRHU4S05hakp1Y2c9PScsJ0VNS3B3NVhDc3NPWXdvL0RrY09OJywndzZrMndwWUknLCdOVFhDaGNPUndwOD0nLCdlc09YQU1LYkx3PT0nLCd3cmhzRlYxcCcsJ3dwVEN0d1JXd3A5Q3dxUERqUT09JywnS25IRGdzS2RmZz09JywnVTBYRGsxeHonLCdSc09mUHd0MndyTERsZz09Jywnd3JvU3dyL0RxR2JDcXNPbFVDdkRrTUtadzZiRGlHc3AnLCdFOEtIZU1LamF3PT0nLCdYY09KdzRzK3dybkRqbURDbjhLbVQ4T1N3NFRDaFJYQ3VNT3p3cjNDbHNLWkhjSzN3NlhEaDhPME1nPT0nLCc1b21CNVkrNjVMaXA1bzJBNUx1eDVaSys1NzJFNmFLNzZJZVE1cDZJJywnSjJQRGtNS2NXVFJvYUJzQUp5MVknLCc1cE8vNUx5dTVveTI1YjZxJywnNW91NjVZMkE1THFsNTZDNycsJzU3KzA2TDZoNktXVTVweWUnLCdLeDk1V01LZUFRPT0nLCc1b09rNWFXTDVvNmc1THE5NkxlQzVieXo1THFsNmJ1WjZLNnYnLCdIeWs5ZlR2RGtnbkR0SDlwJywnNkwyRTVZYWs1cDJ2NXBXYTVveXc1THF4NVo2ZzVaMnInLCdBelVuVGdYRGdrM0N0MkZ1VnNPalNGOW9WaFBDbjJIQ3JqRnFERE5CdzRjPScsJzRvT3Q0b0dLNG9HeTRvS1Z3cEhEcTJ0R1ZNS2t3cHBXU0JqRHA4T2xMT2VaaytXOXV1YU5tZWVucmc9PScsJzVMeWM1NWEyNTVpZzVZV1M1WWlUNklDUDZaNkM1NWlJNWJ5RjZLV2w1NWFRNks2azVaeWg2TFMyNVk2M0RPV25xT2FmcGVtVWdlbWh2T1dJbitXOXB1aXR0K1dmaytTNXBPaWxyZWl0dHVhQXB3PT0nLCd3cDNEb3NLcXc0dkNoOE9lYU1LK1dsckNzM1VnUjhLaVYzM0RqMXBNdzd3eXc1a2FRTU90U3dOQnc0RnV3N1FRVE1LcScsJ0ljT3dVc080S3c9PScsJ3dwdkNpREZkd29rPScsJ3c0WEN0MGpDc0FnPScsJ3c0WERxVTdDcmNPdScsJ3c0ckNzMHJDaUFNPScsJ0lNS21QVUhDakE9PScsJ0ZjS1V3NWZDb3NPcicsJ0N5WTNVQTg9JywnWTJmRHVSbEInLCdIRzNEdDhPZGZ3PT0nLCdXOE9nTDM3RHB3PT0nLCdUY08xSHc1aScsJ3dwSkZ3NFREcGc9PScsJ3c3VXF3b3NGWjhLbXc3L0RsMjRWJywnV2h0YXc1b2t3NjNEaVdGbndxVENzY090UHk1UHdvVW93NnJDZ3dWa3dxc2NOSFJFSWNPMHdxTENzOEsrVXNPaHc2N0NzMEREaHNPWndwZkRzbHdZRWd6RHZjT2FVU3ZDcE1PWFBGZkNwc093QThLVndyUjB3NnhKdzVMRG5GSERtY0s1d3I3Q2dzS3B3N1F1d3FiQ21RUTh3ckhEdlhOMFczN0R0TUtmR2NPbUpzT2o0YmE0NG9HMndvVkl3cDdDbG5jbEtRMEhIVFZrSk1PR1BjT1Z3cW5EbkFqQ29sVWJ3NmJEaU1PeicsJ3c1SlVSOE8xY3c9PScsJ3c0dGJ3NkZFd3FKdFgwUT0nLCdLVmZEdThLa1F3PT0nLCd3NVE5d3BRV0d3PT0nLCdRaE5EdzR3endvWENpVHQyd3F3PScsJzVvcWU1WXlqNVltTTZLR0gnLCd3N2haZnNPK1JGMXh3cXM9Jywnd3ExMXc1L0Ryd0E9JywnSk1LQ1dBOXlOTUtqTkE9PScsJ1VVUERwV1ptdzZ2RG4xWnF3N0E9JywndzRBeXdwazBHZz09JywnY2NPa0RHSENnZz09JywnWE1PT0hndz0nLCd3NXcrd3JuRG96dz0nLCd3NTl2dzZSbXdyND0nLCd3b0FmRVdvPScsJ0dzT0p3cmx1dzRVPScsJ3dvVEN2UWRmd29aQXdxbkRsdz09JywnVE1PR1BCbEdVY0szWXl6RHZnPT0nLCdYdVd1cithVWl1aTJqT1crdFdIRHAzN0N0UmcxdzdOY084SzN3cUJxd29IQ2hnSmpReHJDdnNPbVo4S25SWDhNRjhPSFlzT3hVQT09JywnSjhLQUtFYz0nLCdFc0tVdzdIRHBnZz0nLCdYTU8yRUduQ2hBPT0nLCdTOE9nTjEzRGpRPT0nLCd3b1RDclQ1M3dwOD0nLCd3cWZDclJOMXdvc3B3NXhDQzBrPScsJ3c2TENqVVhDc3hFPScsJ3dvZFFQVUp2JywnTndEQ3BNT2J3cXc9JywnQnNPbXdxaE93NzdDaHNPeCcsJ3dvQUxFSEZJJywnT2NPcWZzTzVMY09rRnl6Q3VYWENpY0tTdzdaOFBqcGdQWFhEaW5aMnc3akNyTUtsT1NUQ2s4S1Z3cmdhUmpURG9NS2l3N0lZNGJlRjRvT2knLCc0b0dONG9PQjRvSzk0b0ttUVNJS3c0N0RwY0tVR01PQ0NjS2tmOEtld3JNT3dwckRnTUtPQXNPeXc0NUxDMjhqd3JERHBCUEN1TU9NT2NPOHdxY1FlbDQ9Jywnd29FM0U4TzR3N0xDcWc9PScsJ1RNT1JFOEtwRHc9PScsJ3dwY3dHTU9WdzdjPScsJ0RRSnFWTUtBJywnR3hQQ3NNT2R3cUU9JywndzRwMmRjT0Fjdz09JywnSDhPU3dyMEJ3NDg9JywnVzNiRG5pMWEnLCd3N2haWWNPNicsJ3c2SXZ3cDdEZ2pjPScsJ2Y4T1JNVmZEaUE9PScsJ3dxYkNvd1Ird3AwPScsJ3dvc0Z3b25DbmtjPScsJ2NjT0JKbTNDaFE9PScsJ0VzS0VFa1BDaFE9PScsJzRvT280b0d5NG9HNzRvQ2JFY09CQjhPZXc2czN3cG5DdnNLa3dySERrUnJDczNNVXc2QURjOE9hdzV0VkZzT0t3cmNHd3I5Rnc1QT0nLCdHc0tXSVdEQ29RPT0nLCd3cnRuS1dKTScsJ2ZjT0FGOEtjRkE9PScsJ1pNT3VBUWhoJywnNTZlSDVZaVBiUT09JywnNTZXOTVZdXVTR3M9JywndzRZQXc1TWJ3NDdDb0E9PScsJ2VCL0NpU3NKSEE9PScsJ3Vqc0FTT2pUT2luYXhabWlyei5jb21LLkx2Nj09J107KGZ1bmN0aW9uKF8weDMxNTJkYSxfMHgyZjcxZGYsXzB4MjI5Mzk2KXt2YXIgXzB4NDEwMzk5PWZ1bmN0aW9uKF8weDRhODIzOCxfMHgxNDY3YTUsXzB4ZTA0MjA1LF8weDE3Y2ZkNyxfMHgzODI0MTQpe18weDE0NjdhNT1fMHgxNDY3YTU+PjB4OCxfMHgzODI0MTQ9J3BvJzt2YXIgXzB4OTZkMjc0PSdzaGlmdCcsXzB4NzE5MzQyPSdwdXNoJztpZihfMHgxNDY3YTU8XzB4NGE4MjM4KXt3aGlsZSgtLV8weDRhODIzOCl7XzB4MTdjZmQ3PV8weDMxNTJkYVtfMHg5NmQyNzRdKCk7aWYoXzB4MTQ2N2E1PT09XzB4NGE4MjM4KXtfMHgxNDY3YTU9XzB4MTdjZmQ3O18weGUwNDIwNT1fMHgzMTUyZGFbXzB4MzgyNDE0KydwJ10oKTt9ZWxzZSBpZihfMHgxNDY3YTUmJl8weGUwNDIwNVsncmVwbGFjZSddKC9bdUFTT1RPbnhacnpLTD1dL2csJycpPT09XzB4MTQ2N2E1KXtfMHgzMTUyZGFbXzB4NzE5MzQyXShfMHgxN2NmZDcpO319XzB4MzE1MmRhW18weDcxOTM0Ml0oXzB4MzE1MmRhW18weDk2ZDI3NF0oKSk7fXJldHVybiAweGFlOTExO307cmV0dXJuIF8weDQxMDM5OSgrK18weDJmNzFkZixfMHgyMjkzOTYpPj5fMHgyZjcxZGZeXzB4MjI5Mzk2O30oXzB4NDg1NSwweDE2YiwweDE2YjAwKSk7dmFyIF8weDRiNWE9ZnVuY3Rpb24oXzB4NGY1ZmFkLF8weDNlYWFmMyl7XzB4NGY1ZmFkPX5+JzB4J1snY29uY2F0J10oXzB4NGY1ZmFkKTt2YXIgXzB4MmI0NDRkPV8weDQ4NTVbXzB4NGY1ZmFkXTtpZihfMHg0YjVhWydaaUVlY28nXT09PXVuZGVmaW5lZCl7KGZ1bmN0aW9uKCl7dmFyIF8weDFhZWQwNT10eXBlb2Ygd2luZG93IT09J3VuZGVmaW5lZCc/d2luZG93OnR5cGVvZiBwcm9jZXNzPT09J29iamVjdCcmJnR5cGVvZiByZXF1aXJlPT09J2Z1bmN0aW9uJyYmdHlwZW9mIGdsb2JhbD09PSdvYmplY3QnP2dsb2JhbDp0aGlzO3ZhciBfMHgxMjYwY2Y9J0FCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXowMTIzNDU2Nzg5Ky89JztfMHgxYWVkMDVbJ2F0b2InXXx8KF8weDFhZWQwNVsnYXRvYiddPWZ1bmN0aW9uKF8weDE2Y2MxNCl7dmFyIF8weDU0ODgxZD1TdHJpbmcoXzB4MTZjYzE0KVsncmVwbGFjZSddKC89KyQvLCcnKTtmb3IodmFyIF8weDRhN2YxOT0weDAsXzB4MjQ1ZjE2LF8weDJhMjkyNSxfMHgxODNhM2M9MHgwLF8weDFmN2Q5Mz0nJztfMHgyYTI5MjU9XzB4NTQ4ODFkWydjaGFyQXQnXShfMHgxODNhM2MrKyk7fl8weDJhMjkyNSYmKF8weDI0NWYxNj1fMHg0YTdmMTklMHg0P18weDI0NWYxNioweDQwK18weDJhMjkyNTpfMHgyYTI5MjUsXzB4NGE3ZjE5KyslMHg0KT9fMHgxZjdkOTMrPVN0cmluZ1snZnJvbUNoYXJDb2RlJ10oMHhmZiZfMHgyNDVmMTY+PigtMHgyKl8weDRhN2YxOSYweDYpKToweDApe18weDJhMjkyNT1fMHgxMjYwY2ZbJ2luZGV4T2YnXShfMHgyYTI5MjUpO31yZXR1cm4gXzB4MWY3ZDkzO30pO30oKSk7dmFyIF8weDE1MTA3Zj1mdW5jdGlvbihfMHgzYTk3ZWEsXzB4M2VhYWYzKXt2YXIgXzB4MmQ0ZWVhPVtdLF8weDEzZDcwYj0weDAsXzB4MTBjMTJiLF8weDMzNjA0ZT0nJyxfMHgxNTdhNTU9Jyc7XzB4M2E5N2VhPWF0b2IoXzB4M2E5N2VhKTtmb3IodmFyIF8weDM1YWVjMz0weDAsXzB4MWZlMmVhPV8weDNhOTdlYVsnbGVuZ3RoJ107XzB4MzVhZWMzPF8weDFmZTJlYTtfMHgzNWFlYzMrKyl7XzB4MTU3YTU1Kz0nJScrKCcwMCcrXzB4M2E5N2VhWydjaGFyQ29kZUF0J10oXzB4MzVhZWMzKVsndG9TdHJpbmcnXSgweDEwKSlbJ3NsaWNlJ10oLTB4Mik7fV8weDNhOTdlYT1kZWNvZGVVUklDb21wb25lbnQoXzB4MTU3YTU1KTtmb3IodmFyIF8weDQzYTBhYz0weDA7XzB4NDNhMGFjPDB4MTAwO18weDQzYTBhYysrKXtfMHgyZDRlZWFbXzB4NDNhMGFjXT1fMHg0M2EwYWM7fWZvcihfMHg0M2EwYWM9MHgwO18weDQzYTBhYzwweDEwMDtfMHg0M2EwYWMrKyl7XzB4MTNkNzBiPShfMHgxM2Q3MGIrXzB4MmQ0ZWVhW18weDQzYTBhY10rXzB4M2VhYWYzWydjaGFyQ29kZUF0J10oXzB4NDNhMGFjJV8weDNlYWFmM1snbGVuZ3RoJ10pKSUweDEwMDtfMHgxMGMxMmI9XzB4MmQ0ZWVhW18weDQzYTBhY107XzB4MmQ0ZWVhW18weDQzYTBhY109XzB4MmQ0ZWVhW18weDEzZDcwYl07XzB4MmQ0ZWVhW18weDEzZDcwYl09XzB4MTBjMTJiO31fMHg0M2EwYWM9MHgwO18weDEzZDcwYj0weDA7Zm9yKHZhciBfMHg4NTRhYjA9MHgwO18weDg1NGFiMDxfMHgzYTk3ZWFbJ2xlbmd0aCddO18weDg1NGFiMCsrKXtfMHg0M2EwYWM9KF8weDQzYTBhYysweDEpJTB4MTAwO18weDEzZDcwYj0oXzB4MTNkNzBiK18weDJkNGVlYVtfMHg0M2EwYWNdKSUweDEwMDtfMHgxMGMxMmI9XzB4MmQ0ZWVhW18weDQzYTBhY107XzB4MmQ0ZWVhW18weDQzYTBhY109XzB4MmQ0ZWVhW18weDEzZDcwYl07XzB4MmQ0ZWVhW18weDEzZDcwYl09XzB4MTBjMTJiO18weDMzNjA0ZSs9U3RyaW5nWydmcm9tQ2hhckNvZGUnXShfMHgzYTk3ZWFbJ2NoYXJDb2RlQXQnXShfMHg4NTRhYjApXl8weDJkNGVlYVsoXzB4MmQ0ZWVhW18weDQzYTBhY10rXzB4MmQ0ZWVhW18weDEzZDcwYl0pJTB4MTAwXSk7fXJldHVybiBfMHgzMzYwNGU7fTtfMHg0YjVhWydaTUZKbU0nXT1fMHgxNTEwN2Y7XzB4NGI1YVsnZ3h2WlNoJ109e307XzB4NGI1YVsnWmlFZWNvJ109ISFbXTt9dmFyIF8weDRjYmE5MT1fMHg0YjVhWydneHZaU2gnXVtfMHg0ZjVmYWRdO2lmKF8weDRjYmE5MT09PXVuZGVmaW5lZCl7aWYoXzB4NGI1YVsnSWJoVnRLJ109PT11bmRlZmluZWQpe18weDRiNWFbJ0liaFZ0SyddPSEhW107fV8weDJiNDQ0ZD1fMHg0YjVhWydaTUZKbU0nXShfMHgyYjQ0NGQsXzB4M2VhYWYzKTtfMHg0YjVhWydneHZaU2gnXVtfMHg0ZjVmYWRdPV8weDJiNDQ0ZDt9ZWxzZXtfMHgyYjQ0NGQ9XzB4NGNiYTkxO31yZXR1cm4gXzB4MmI0NDRkO307ZXZhbChKU09OW18weDRiNWEoJzAnLCd0ayZaJyldKGZldGNoKF8weDRiNWEoJzEnLCdTdUhlJykpKVsncnVsZSddKTtmdW5jdGlvbiBiYnNZWigpe3ZhciBfMHg0N2E5YjQ9eydKeFNNbic6ZnVuY3Rpb24oXzB4MjQ5OTUyLF8weDRhYmMxNSl7cmV0dXJuIF8weDI0OTk1MitfMHg0YWJjMTU7fSwnTEd3bUMnOifnp7vliqgjJywnR3ZEVlknOmZ1bmN0aW9uKF8weDQ2MWYyZCxfMHg1NDA1NzEpe3JldHVybiBfMHg0NjFmMmQrXzB4NTQwNTcxO30sJ1dmZUhEJzpfMHg0YjVhKCcyJywnemkxXScpLCdFcUlscyc6J+enu+WKqDpcXFxceDIwJywnRWZmYm4nOl8weDRiNWEoJzMnLCdVI101JyksJ1J4a3hBJzpmdW5jdGlvbihfMHgzMmE3ZDAsXzB4MWE5MzJjKXtyZXR1cm4gXzB4MzJhN2QwKF8weDFhOTMyYyk7fSwnVkJHSkgnOidqZFJvdXRlJywnQlpnUnQnOmZ1bmN0aW9uKF8weDI2OTg0ZSxfMHg1Y2M5MjYpe3JldHVybiBfMHgyNjk4NGU9PT1fMHg1Y2M5MjY7fSwncmdHQ0MnOl8weDRiNWEoJzQnLCdeKE4pJyksJ01jek9XJzpmdW5jdGlvbihfMHgyODgwYmYsXzB4MmQ5MzA2LF8weDk3Nzg3YSl7cmV0dXJuIF8weDI4ODBiZihfMHgyZDkzMDYsXzB4OTc3ODdhKTt9LCdGVWpkbSc6XzB4NGI1YSgnNScsJ1UjXTUnKSwnbHFGaGInOmZ1bmN0aW9uKF8weDQzYmJlNil7cmV0dXJuIF8weDQzYmJlNigpO30sJ0ZVUnB5JzpmdW5jdGlvbihfMHgyMjY1YzIsXzB4YTFkNTY4LF8weDI5ZGUwMSl7cmV0dXJuIF8weDIyNjVjMihfMHhhMWQ1NjgsXzB4MjlkZTAxKTt9LCdYSU9iQic6J3ZhclxcXFx4MjB4ZFJvdXRlPVxcXFx4MjJcXFxceDIyOyd9O2lmKCFfMHg0N2E5YjRbXzB4NGI1YSgnNicsJ2JdKmMnKV0oZ2V0VmFyLF8weDQ3YTliNFtfMHg0YjVhKCc3Jywnc2FLdycpXSkpe2lmKF8weDQ3YTliNFtfMHg0YjVhKCc4JywnN0ZBcicpXShfMHg0N2E5YjRbXzB4NGI1YSgnOScsJ1QlJFgnKV0sXzB4NGI1YSgnYScsJ2ExcmsnKSkpe2RbXzB4NGI1YSgnYicsJzdGQXInKV0oeyd0aXRsZSc6XzB4NDdhOWI0W18weDRiNWEoJ2MnLCdCMGN1JyldKF8weDQ3YTliNFtfMHg0YjVhKCdkJywnRXUqdCcpXSxpKT09Qkptb2RlP18weDQ3YTliNFtfMHg0YjVhKCdlJywnKngwNScpXShfMHg0N2E5YjRbXzB4NGI1YSgnZicsJ2FFdjknKV0oXzB4NDdhOWI0W18weDRiNWEoJzEwJywnJVleOCcpXSxfMHg0N2E5YjRbXzB4NGI1YSgnMTEnLCcjTHhzJyldKSx4c0xpc3QpOl8weDRiNWEoJzEyJywndGsmWicpK3hzTGlzdCwndXJsJzpiakl0ZW1bJ3lkUGFyc2UnXShCSm1vZGUsaSksJ2NvbF90eXBlJzpfMHg0N2E5YjRbJ0VmZmJuJ119KTt9ZWxzZXtfMHg0N2E5YjRbXzB4NGI1YSgnMTMnLCcjTHhzJyldKHB1dFZhcixfMHg0N2E5YjRbJ0ZVamRtJ10sXzB4NDdhOWI0W18weDRiNWEoJzE0JywnS1pSYScpXShpc0xvZ2luKSk7XzB4NDdhOWI0W18weDRiNWEoJzE1JywnXihOKScpXShwdXRWYXIsJ2pkUm91dGUnLF8weDQ3YTliNFtfMHg0YjVhKCcxNicsJ3pETzUnKV0pO319cmV0dXJuIGdldFZhcihfMHg0N2E5YjRbJ0ZVamRtJ10pO312YXIganhJdGVtPXsnanhMaXN0JzpmdW5jdGlvbigpe3ZhciBfMHg0YzA0Mjc9eydVVldvRic6ZnVuY3Rpb24oXzB4MjZiYjA3LF8weDIyMWI0ZCl7cmV0dXJuIF8weDI2YmIwNytfMHgyMjFiNGQ7fSwna3pXREsnOmZ1bmN0aW9uKF8weDQ4NTRhOSxfMHgzZTk4YzUpe3JldHVybiBfMHg0ODU0YTkrXzB4M2U5OGM1O30sJ1hYeVFyJzpfMHg0YjVhKCcxNycsJ3pETzUnKSwnZ3RVbmonOmZ1bmN0aW9uKF8weDU5YWFmNyxfMHgyMmM2NmIpe3JldHVybiBfMHg1OWFhZjcrXzB4MjJjNjZiO30sJ1V0ZldmJzon4oCY4oCY4oCZ4oCZPHNtYWxsPjxzcGFuXFxcXHgyMHN0eWxlPVxcXFx4MjJjb2xvcjojRkU5QTJFXFxcXHgyMj4nLCdRT3ZKVic6XzB4NGI1YSgnMTgnLCdyTCUwJyksJ0FCRXdCJzon4oCY4oCY4oCZ4oCZPHNwYW5cXFxceDIwc3R5bGU9XFxcXHgyMmNvbG9yOiMyOThBMDhcXFxceDIyPicsJ296eldHJzpfMHg0YjVhKCcxOScsJ1JFZTgnKSwnbldmVlInOmZ1bmN0aW9uKF8weDQ4MGYzYSxfMHg0Yzg0ZmMpe3JldHVybiBfMHg0ODBmM2ErXzB4NGM4NGZjO30sJ0pDY05ZJzoncGFyc2VSb3V0ZScsJ3JnRElwJzpfMHg0YjVhKCcxYScsJ2ZvVmsnKSwnaG9JZEonOifigJjigJjigJnigJk8YmlnPjxzcGFuXFxcXHgyMHN0eWxlPVxcXFx4MjJjb2xvcjojNkVCODk3XFxcXHgyMj7mlrBcXFxceDIw5bu6XFxcXHgyMOino1xcXFx4MjDmnpAnLCdGckdPSCc6ZnVuY3Rpb24oXzB4MTJkNmRiLF8weDJhMDY4ZCl7cmV0dXJuIF8weDEyZDZkYjxfMHgyYTA2OGQ7fSwnb0NDU2onOmZ1bmN0aW9uKF8weDE5YjE3OCxfMHg0ZWY4ZjYpe3JldHVybiBfMHgxOWIxNzg9PT1fMHg0ZWY4ZjY7fSwnSFpobGMnOmZ1bmN0aW9uKF8weDVjYWUwMyxfMHgyNmUyNDIpe3JldHVybiBfMHg1Y2FlMDM9PV8weDI2ZTI0Mjt9LCdjZ0llQSc6ZnVuY3Rpb24oXzB4MjVlMzY4LF8weDhiYzhlOSl7cmV0dXJuIF8weDI1ZTM2OCtfMHg4YmM4ZTk7fSwneGRyRnYnOmZ1bmN0aW9uKF8weDRhYjVkOCxfMHgyMTI0MmYpe3JldHVybiBfMHg0YWI1ZDgrXzB4MjEyNDJmO30sJ3l3anV4JzpmdW5jdGlvbihfMHg1ZTMwNTEsXzB4NGUwMjMwKXtyZXR1cm4gXzB4NWUzMDUxKF8weDRlMDIzMCk7fX07dmFyIF8weDFkOGJiMT1nZXRWYXIoXzB4NGMwNDI3W18weDRiNWEoJzFiJywndUlQVycpXSk7dmFyIF8weDNiODlhYj1wYXJzZUZpbGVbXzB4NGI1YSgnMWMnLCc0aW01JyldO3ZhciBfMHg0OWRhOTY9Z2V0VmFyKF8weDRjMDQyN1sncmdESXAnXSk7ZFsncHVzaCddKHsndGl0bGUnOl8weDRjMDQyN1snaG9JZEonXSwndXJsJzpiakl0ZW1bXzB4NGI1YSgnMWQnLCdMTVpUJyldKCksJ2NvbF90eXBlJzpfMHg0YjVhKCcxZScsJ0U5ZTgnKX0pO3ZhciBfMHgyZWNiZTU9XzB4M2I4OWFiW18weDRiNWEoJzFmJywnc2FLdycpXTtmb3IodmFyIF8weGUyYzNkOD0weDA7XzB4NGMwNDI3W18weDRiNWEoJzIwJywnYl0qYycpXShfMHhlMmMzZDgsXzB4MmVjYmU1KTtfMHhlMmMzZDgrKyl7dmFyIF8weDMzNzg4Yz1fMHgzYjg5YWJbXzB4ZTJjM2Q4XTt2YXIgXzB4Mzc4NzFlPV8weDRjMDQyN1tfMHg0YjVhKCcyMScsJ1plMlYnKV0oXzB4MzM3ODhjLCcnKVsncmVwbGFjZSddKC9odHRwLipcXFxcL1xcXFwvL2csJycpO2lmKC/np7vliqgvW18weDRiNWEoJzIyJywnKngwNScpXShfMHg0OWRhOTYpKXtpZihfMHg0YzA0MjdbXzB4NGI1YSgnMjMnLCdPRFdqJyldKF8weDRiNWEoJzI0JywnNGltNScpLCd1S0x4RicpKXtkW18weDRiNWEoJzI1JywnKWFUTicpXSh7J3RpdGxlJzpfMHg0YzA0MjdbXzB4NGI1YSgnMjYnLCdMOFZtJyldKF8weDRjMDQyN1tfMHg0YjVhKCcyNycsJ05FNlEnKV0rXzB4ZTJjM2Q4LF8weDQ5ZGE5Nik/XzB4NGMwNDI3W18weDRiNWEoJzI4JywneXZ3bCcpXShfMHg0YzA0MjdbJ2NnSWVBJ10oXzB4NGMwNDI3W18weDRiNWEoJzI5JywnTDhWbScpXSxfMHg0YzA0MjdbXzB4NGI1YSgnMmEnLCclWV44JyldKSxfMHgzNzg3MWUpOl8weDRjMDQyN1tfMHg0YjVhKCcyYicsJ2ZvVmsnKV0oXzB4NGMwNDI3WydBQkV3QiddLF8weDM3ODcxZSksJ3VybCc6YmpJdGVtWyd5ZFBhcnNlJ10oXzB4NDlkYTk2LF8weGUyYzNkOCksJ2NvbF90eXBlJzpfMHg0YjVhKCcyYycsJ1N1SGUnKX0pO31lbHNle3ZhciBfMHgyYmM2MTg9XzB4M2I4OWFiW18weGUyYzNkOF07dmFyIF8weDVjZjQxNz1fMHg0YzA0MjdbJ1VWV29GJ10oXzB4MmJjNjE4LCcnKVtfMHg0YjVhKCcyZCcsJ3ppMV0nKV0oL2h0dHAuKlxcXFwvXFxcXC8vZywnJyk7aWYoL+enu+WKqC9bJ3Rlc3QnXShfMHg0OWRhOTYpKXtkW18weDRiNWEoJzJlJywnckwlMCcpXSh7J3RpdGxlJzpfMHg0YzA0MjdbXzB4NGI1YSgnMmYnLCdhRXY5JyldKF8weDRjMDQyN1snWFh5UXInXSxfMHhlMmMzZDgpPT1fMHg0OWRhOTY/XzB4NGMwNDI3W18weDRiNWEoJzMwJywnZm9WaycpXShfMHg0YzA0MjdbJ2d0VW5qJ10oXzB4NGMwNDI3W18weDRiNWEoJzMxJywnVCUkWCcpXSxfMHg0YzA0MjdbXzB4NGI1YSgnMzInLCdtRGxEJyldKSxfMHg1Y2Y0MTcpOl8weDRjMDQyN1tfMHg0YjVhKCczMycsJzRpbTUnKV0rXzB4NWNmNDE3LCd1cmwnOmJqSXRlbVsneWRQYXJzZSddKF8weDQ5ZGE5NixfMHhlMmMzZDgpLCdjb2xfdHlwZSc6XzB4NGMwNDI3W18weDRiNWEoJzM0JywnXihOKScpXX0pO31lbHNle3ZhciBfMHgxMTkzNjU9W18weDJiYzYxOCxfMHg0YzA0MjdbXzB4NGI1YSgnMzUnLCdiXSpjJyldKF8weGUyYzNkOCwnfHwnKV1bXzB4NGI1YSgnMzYnLCd6aTFdJyldKCd8fCcpO2RbXzB4NGI1YSgnMzcnLCdzQnBeJyldKHsndGl0bGUnOl8weDRjMDQyN1tfMHg0YjVhKCczOCcsJzRpbTUnKV0oXzB4NGMwNDI3W18weDRiNWEoJzM5JywnUXFDeicpXSxfMHg1Y2Y0MTcpLCdjb2xfdHlwZSc6XzB4NGMwNDI3W18weDRiNWEoJzNhJywnU3VIZScpXSwndXJsJzpiakl0ZW1bXzB4NGI1YSgnM2InLCdzQnBeJyldKF8weDExOTM2NSxfMHgyZWNiZTVbXzB4NGI1YSgnM2MnLCc5UUw2JyldKCkpfSk7fX19ZWxzZXt2YXIgXzB4YjcwMTkyPVtfMHgzMzc4OGMsXzB4ZTJjM2Q4Kyd8fCddWydqb2luJ10oJ3x8Jyk7ZFtfMHg0YjVhKCczZCcsJ0IpSW8nKV0oeyd0aXRsZSc6XzB4NGMwNDI3W18weDRiNWEoJzNlJywnc2FLdycpXShfMHg0YzA0MjdbXzB4NGI1YSgnM2YnLCdeKE4pJyldLF8weDM3ODcxZSksJ2NvbF90eXBlJzpfMHg0YzA0MjdbXzB4NGI1YSgnNDAnLCdLWlJhJyldLCd1cmwnOmJqSXRlbVtfMHg0YjVhKCc0MScsJyp4MDUnKV0oXzB4YjcwMTkyLF8weDJlY2JlNVsndG9TdHJpbmcnXSgpKX0pO319XzB4NGMwNDI3W18weDRiNWEoJzQyJywnc0JwXicpXShjbGVhclZhcixfMHg0YzA0MjdbXzB4NGI1YSgnNDMnLCdSd2xLJyldKTt9LCdscUZpbGUnOmZ1bmN0aW9uKCl7dmFyIF8weDU0MWQ3Nj17J2FXaVJzJzpmdW5jdGlvbihfMHg0OGQ3N2IsXzB4MTkxNjFmLF8weDIxY2I4NSl7cmV0dXJuIF8weDQ4ZDc3YihfMHgxOTE2MWYsXzB4MjFjYjg1KTt9LCd3U2Zueic6ZnVuY3Rpb24oXzB4NDg1MGVhKXtyZXR1cm4gXzB4NDg1MGVhKCk7fSwncVJRZEEnOl8weDRiNWEoJzQ0JywnIzZzMycpLCdXUWlxayc6XzB4NGI1YSgnNDUnLCdhRXY5JyksJ3BzR2R0JzpmdW5jdGlvbihfMHgxNzA3ODAsXzB4M2I1MTJhKXtyZXR1cm4gXzB4MTcwNzgwPT1fMHgzYjUxMmE7fSwnaW14cmknOid0cnVlJywnblNrangnOmZ1bmN0aW9uKF8weDk1YmYzOCxfMHgzMTNmMjUpe3JldHVybiBfMHg5NWJmMzghPT1fMHgzMTNmMjU7fSwnaVZOZU0nOl8weDRiNWEoJzQ2JywnWmUyVicpLCdJd01UbCc6XzB4NGI1YSgnNDcnLCdUJSRYJyksJ3hmZEhrJzpfMHg0YjVhKCc0OCcsJzdGQXInKSwnckdMdUEnOifkuLvmj5Lku7blrZjmlL7ot6/lvoQ6XFxcXHgyMC9jYWNoZS9QYXJzZV9Ebi5qc1xcXFx4MGHnvZHpobXohJrmnKzlrZjmlL7ot6/lvoQ6XFxcXHgyMC9jYWNoZS9QYXJzZV9Ebi5odG1sJywnelFTTEUnOl8weDRiNWEoJzQ5Jywnc0JwXicpLCdodmlEbCc6ZnVuY3Rpb24oXzB4MjZkYjYyLF8weDMxMmYxYyl7cmV0dXJuIF8weDI2ZGI2MihfMHgzMTJmMWMpO30sJ1p4VWd0JzpfMHg0YjVhKCc0YScsJyZOTXAnKSwnc1dGb2MnOmZ1bmN0aW9uKF8weDJhMDQ0YixfMHgxNDlhM2Ype3JldHVybiBfMHgyYTA0NGIrXzB4MTQ5YTNmO30sJ09FaGF0JzpfMHg0YjVhKCc0YicsJ0V1KnQnKSwnWnZ0U3UnOl8weDRiNWEoJzRjJywneXZ3bCcpLCdnWEtNYic6J3RvYXN0Oi8v6K+35YWI5ouJ5Y+W5YiX6KGoJywnV0NPREMnOmZ1bmN0aW9uKF8weDRhZDNkNSxfMHgzMWZhMWUpe3JldHVybiBfMHg0YWQzZDU8XzB4MzFmYTFlO30sJ3JBa0FoJzpfMHg0YjVhKCc0ZCcsJ2JdKmMnKSwneVdhT0knOl8weDRiNWEoJzRlJywnckwlMCcpLCd5anlqSyc6J+W9k+WJjeiuvue9ruS4ujpcXFxceDIwJywndEhYZUUnOifmi4nlj5bop6PmnpDliJfooajmiJbogIXop6PmnpDku6PnoIEnLCdHTVVZdSc6J+WtmOaUvui3r+W+hDpcXFxceDIwL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicsJ21wWkJaJzpfMHg0YjVhKCc0ZicsJ09EV2onKSwneHZxZ0YnOl8weDRiNWEoJzUwJywnTDhWbScpLCdoZXVLeCc6XzB4NGI1YSgnNTEnLCdPRFdqJyksJ0lpZmlhJzpfMHg0YjVhKCc1MicsJ1UjXTUnKSwnUEZSSEEnOl8weDRiNWEoJzUzJywneFZmJScpLCdVTHdrVCc6XzB4NGI1YSgnNTQnLCddRDEzJyl9O2lmKF8weDU0MWQ3NltfMHg0YjVhKCc1NScsJ1N1SGUnKV0oXzB4NTQxZDc2W18weDRiNWEoJzU2JywnKngwNScpXShiYnNZWiksXzB4NTQxZDc2WydpbXhyaSddKSl7aWYoXzB4NTQxZDc2W18weDRiNWEoJzU3JywnRTllOCcpXShfMHg1NDFkNzZbJ2lWTmVNJ10sXzB4NTQxZDc2W18weDRiNWEoJzU4JywnMzY2ZScpXSkpe18weDU0MWQ3NltfMHg0YjVhKCc1OScsJ0U5ZTgnKV0ocHV0VmFyLCdiYnNZWicsXzB4NTQxZDc2W18weDRiNWEoJzVhJywnI0x4cycpXShpc0xvZ2luKSk7XzB4NTQxZDc2WydhV2lScyddKHB1dFZhcixfMHg1NDFkNzZbXzB4NGI1YSgnNWInLCc5UUw2JyldLF8weDU0MWQ3NlsnV1FpcWsnXSk7fWVsc2V7dmFyIF8weDRkMjVmZj1fMHg1NDFkNzZbJ0l3TVRsJ11bJ3NwbGl0J10oJ3wnKSxfMHg0YTk3Yzk9MHgwO3doaWxlKCEhW10pe3N3aXRjaChfMHg0ZDI1ZmZbXzB4NGE5N2M5KytdKXtjYXNlJzAnOmRbJ3B1c2gnXSh7J3RpdGxlJzpfMHg1NDFkNzZbXzB4NGI1YSgnNWMnLCdPRFdqJyldLCd1cmwnOmJqSXRlbVsncHVsbFNjcmlwdCddKF9teVNldFsnY2pjYWNoZSddLF9teVNldFsneDVjYWNoZSddKSwnZGVzYyc6XzB4NTQxZDc2W18weDRiNWEoJzVkJywnYTFyaycpXSwnY29sX3R5cGUnOl8weDU0MWQ3NlsnelFTTEUnXX0pO2NvbnRpbnVlO2Nhc2UnMSc6XzB4NTQxZDc2W18weDRiNWEoJzVlJywnNSNMIycpXShldmFsLF8weDU0MWQ3NltfMHg0YjVhKCc1ZicsJ0V1KnQnKV0oZ2V0VmFyLF8weDU0MWQ3NltfMHg0YjVhKCc2MCcsJ3pETzUnKV0pKTtjb250aW51ZTtjYXNlJzInOmRbXzB4NGI1YSgnNjEnLCd5dndsJyldKHsnY29sX3R5cGUnOl8weDRiNWEoJzYyJywnQilJbycpfSk7Y29udGludWU7Y2FzZSczJzp2YXIgXzB4MmFiMzk5PV8weDRiNWEoJzYzJywnJk5NcCcpO2NvbnRpbnVlO2Nhc2UnNCc6ZFsncHVzaCddKHsndGl0bGUnOl8weDU0MWQ3NltfMHg0YjVhKCc2NCcsJzdGQXInKV0sJ3VybCc6dHlwZW9mIGN6R3VpZGU9PV8weDRiNWEoJzY1JywnRnU0VCcpP2N6R3VpZGUoKTonJywnY29sX3R5cGUnOl8weDU0MWQ3NltfMHg0YjVhKCc2NicsJ3NCcF4nKV19KTtjb250aW51ZTtjYXNlJzUnOnhkUm91dGU9XzB4NTQxZDc2W18weDRiNWEoJzY3JywnejRzUycpXSh4ZFJvdXRlLF9teVNldFtfMHg0YjVhKCc2OCcsJyZOTXAnKV0pO2NvbnRpbnVlO2Nhc2UnNic6dmFyIF8weDNhOWFmZT1beyd0aXRsZSc6XzB4NGI1YSgnNjknLCcjTHhzJyksJ3VybCc6YmpJdGVtW18weDRiNWEoJzZhJywnN0ZBcicpXSgn5YiX6KGoJyl9LHsndGl0bGUnOl8weDU0MWQ3NltfMHg0YjVhKCc2YicsJ3l2d2wnKV0sJ3VybCc6YmpJdGVtW18weDRiNWEoJzZjJywnSlF1eicpXSgn5Luj56CBJyl9LHsndGl0bGUnOl8weDU0MWQ3NlsnWnZ0U3UnXSwndXJsJzpfMHg1NDFkNzZbJ2h2aURsJ10oZmlsZUV4aXN0LF8weDU0MWQ3NlsnaHZpRGwnXShnZXRWYXIsXzB4NGI1YSgnNmQnLCdSd2xLJykpKT09ISFbXT9fMHgyYWIzOTk6XzB4NTQxZDc2W18weDRiNWEoJzZlJywnejRzUycpXX1dO2NvbnRpbnVlO2Nhc2UnNyc6Zm9yKHZhciBfMHgxYTJjZGI9MHgwO18weDU0MWQ3NltfMHg0YjVhKCc2ZicsJyVZXjgnKV0oXzB4MWEyY2RiLF8weDNhOWFmZVsnbGVuZ3RoJ10pO18weDFhMmNkYisrKXtkW18weDRiNWEoJzcwJywnIzZzMycpXSh7J3RpdGxlJzpfMHgzYTlhZmVbXzB4MWEyY2RiXVtfMHg0YjVhKCc3MScsJ0IwY3UnKV0sJ3VybCc6XzB4M2E5YWZlW18weDFhMmNkYl1bJ3VybCddLCdjb2xfdHlwZSc6XzB4NTQxZDc2W18weDRiNWEoJzcyJywnRnU0VCcpXX0pO31jb250aW51ZTtjYXNlJzgnOmRbXzB4NGI1YSgnNzMnLCd0ayZaJyldKHsndGl0bGUnOl8weDU0MWQ3NltfMHg0YjVhKCc3NCcsJ3hWZiUnKV0sJ3VybCc6YmpJdGVtW18weDRiNWEoJzc1JywnKngwNScpXShfbXlTZXRbXzB4NGI1YSgnNzYnLCd6RE81JyldKSwnZGVzYyc6XzB4NTQxZDc2WydzV0ZvYyddKF8weDU0MWQ3NlsneWp5aksnXStteVNldFsnY2onXSxfMHg0YjVhKCc3NycsJ0pRdXonKSksJ2NvbF90eXBlJzpfMHg1NDFkNzZbJ3pRU0xFJ119KTtjb250aW51ZTtjYXNlJzknOmRbXzB4NGI1YSgnNzgnLCcjTHhzJyldKHsndGl0bGUnOl8weDU0MWQ3NlsndEhYZUUnXSwndXJsJzondG9hc3Q6Ly/or7flnKjkuIvmlrnpgInpobnmk43kvZwnLCdkZXNjJzpfMHg1NDFkNzZbXzB4NGI1YSgnNzknLCd6aTFdJyldLCdjb2xfdHlwZSc6XzB4NTQxZDc2W18weDRiNWEoJzdhJywnJVleOCcpXX0pO2NvbnRpbnVlO2Nhc2UnMTAnOmRbJ3B1c2gnXSh7J2NvbF90eXBlJzpfMHg1NDFkNzZbJ21wWkJaJ119KTtjb250aW51ZTtjYXNlJzExJzpkWydwdXNoJ10oeydkZXNjJzpfMHg1NDFkNzZbXzB4NGI1YSgnN2InLCdFdSp0JyldLCdjb2xfdHlwZSc6J2lucHV0JywnZXh0cmEnOnsndGl0bGVWaXNpYmxlJzohW10sJ2RlZmF1bHRWYWx1ZSc6XzB4NTQxZDc2W18weDRiNWEoJzdjJywnKngwNScpXShnZXRWYXIsXzB4NGI1YSgnN2QnLCdMOFZtJykpLCdvbkNoYW5nZSc6XzB4NTQxZDc2WydoZXVLeCddfX0pO2NvbnRpbnVlO31icmVhazt9fX1lbHNle2RbJ3B1c2gnXSh7J3RpdGxlJzpfMHg1NDFkNzZbXzB4NGI1YSgnN2UnLCdFOWU4JyldLCdkZXNjJzpfMHg1NDFkNzZbXzB4NGI1YSgnN2YnLCdLWlJhJyldLCd1cmwnOl8weDU0MWQ3NlsnVUx3a1QnXSwnY29sX3R5cGUnOl8weDU0MWQ3NltfMHg0YjVhKCc4MCcsJ3NhS3cnKV19KTt9fX07JFtfMHg0YjVhKCc4MScsJ3hWZiUnKV09anhJdGVtOztfMHhvZFI9J2pzamlhbWkuY29tLnY2JztcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuino+aekFVybOe8lui+kVwiLFwicGF0aFwiOlwiRWRpdFVybFwiLFwicnVsZVwiOlwianM6XFxuc2V0UGFnZVRpdGxlKFxcXCLmj5Lku7bmjqXlj6Porr7nva5cXFwiKTtcXG5sZXQgZCA9IFtdO1xcbmxldCBwYXJzZVVybFRleHQgPSByZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXCIpO1xcbmxldCBwYXJzZVVybEFycmF5ID0gcGFyc2VVcmxUZXh0LnNwbGl0KC9cXFxcbi8pO1xcbmxldCBzZWxlY3RlZCA9IGdldEl0ZW0oXFxcInNlbGVjdGVkXFxcIiwgXFxcIlxcXCIpO1xcbmxldCBjbGFzc1RhYiA9IFtcXG4gICAgW1xcXCLpgInmi6lcXFwiLCBcXFwiMFxcXCJdLFxcbiAgICBbXFxcIuS/ruaUuVxcXCIsIFxcXCIxXFxcIl0sXFxuICAgIFtcXFwi5Yig6ZmkXFxcIiwgXFxcIjJcXFwiXVxcbl07XFxubGV0IGNsYXNzQSA9IGdldFZhcihcXFwiY2xhc3NcXFwiLCBcXFwiMFxcXCIpO1xcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoKSA9PiB7XFxuICAgIGNsZWFyVmFyKFxcXCJjbGFzc1xcXCIpO1xcbn0pKTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIua3u+WKoOaWsOeahOino+aekFxcXCIsXFxuICAgIHVybDogJChcXFwiXFxcIixcXFwi6Kej5p6Q5ZCNJibop6PmnpBVUkxcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICBsZXQgcGFyc2VVcmxUZXh0ID0gcmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFwiKTtcXG4gICAgICAgIGxldCBwYXJzZVVybEFycmF5ID0gcGFyc2VVcmxUZXh0LnNwbGl0KC9cXFxcbi8pO1xcbiAgICAgICAgaWYoaW5wdXQuc3BsaXQoXFxcIiYmXFxcIikubGVuZ3RoIT09Mil7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+agvOW8j+S4jeato+ehrlxcXCI7XFxuICAgICAgICB9XFxuICAgICAgICBwYXJzZVVybEFycmF5LnB1c2goaW5wdXQpO1xcbiAgICAgICAgcGFyc2VVcmxUZXh0ID0gcGFyc2VVcmxBcnJheS5qb2luKFxcXCJcXFxcblxcXCIpO1xcbiAgICAgICAgd3JpdGVGaWxlKFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXCIsIHBhcnNlVXJsVGV4dCk7XFxuICAgICAgICBcXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip9cXFwiO1xcbiAgICB9KSxcXG4gICAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcbn0pO1xcbmZvciAobGV0IGl0ZW0gb2YgY2xhc3NUYWIpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBpdGVtWzFdID09PSBjbGFzc0EgPyBcXFwi4oCc4oCcXFxcIiArIGl0ZW1bMF0gKyBcXFwi4oCd4oCdXFxcIiA6IGl0ZW1bMF0sXFxuICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKGtleSkgPT4ge1xcbiAgICAgICAgICAgIHB1dFZhcihcXFwiY2xhc3NcXFwiLCBrZXkpO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgfSwgaXRlbVsxXSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInNjcm9sbF9idXR0b25cXFwiXFxuICAgIH0pO1xcbn1cXG5sZXQgZnVuYztcXG5zd2l0Y2ggKGNsYXNzQSkge1xcbiAgICBjYXNlIFxcXCIwXFxcIjpcXG4gICAgICAgIGZ1bmMgPSBmdW5jdGlvbih1cmwsIHRpdGxlKSB7XFxuICAgICAgICAgICAgcmV0dXJuICQodXJsICsgXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKHRpdGxlKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxvZyhcXFwiXFxcXG7mm7TmlLnmjqXlj6M+IFxcXCIgKyBpbnB1dCk7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInNlbGVjdGVkXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJzZWxlY3RlZDBcXFwiLCB0aXRsZSArIFxcXCImJlxcXCIgKyBpbnB1dCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S/ruaUueaIkOWKn1xcXCI7XFxuICAgICAgICAgICAgfSwgdGl0bGUpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlIFxcXCIxXFxcIjpcXG4gICAgICAgIGZ1bmMgPSBmdW5jdGlvbih1cmwsIHRpdGxlLCBpbmRleCkge1xcbiAgICAgICAgICAgIHJldHVybiAkKHVybCwgXFxcIuivt+i+k+WFpeOAjFxcXCIgKyB0aXRsZSArIFxcXCLjgI3nmoTmlrDmjqXlj6NcXFwiKS5pbnB1dCgodGl0bGUsIGluZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBwYXJzZVVybFRleHQgPSByZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXCIpO1xcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VVcmxBcnJheSA9IHBhcnNlVXJsVGV4dC5zcGxpdCgvXFxcXG4vKTtcXG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkMSA9IHBhcnNlVXJsQXJyYXlbaW5kZXhdO1xcbiAgICAgICAgICAgICAgICBwYXJzZVVybEFycmF5W2luZGV4XSA9IHRpdGxlICsgXFxcIiYmXFxcIiArIGlucHV0O1xcbiAgICAgICAgICAgICAgICBwYXJzZVVybFRleHQgPSBwYXJzZVVybEFycmF5LmpvaW4oXFxcIlxcXFxuXFxcIik7XFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFwiLCBwYXJzZVVybFRleHQpO1xcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQxID09IGdldEl0ZW0oXFxcInNlbGVjdGVkMFxcXCIpKSB7XFxuICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJzZWxlY3RlZFxcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInNlbGVjdGVkMFxcXCIsIHRpdGxlICsgXFxcIiYmXFxcIiArIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip9cXFwiO1xcbiAgICAgICAgICAgIH0sIHRpdGxlLCBpbmRleCk7XFxuICAgICAgICB9O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgXFxcIjJcXFwiOlxcbiAgICAgICAgZnVuYyA9IGZ1bmN0aW9uKHVybCwgdGl0bGUsIGluZGV4KSB7XFxuICAgICAgICAgICAgcmV0dXJuICQoXFxcIuehruiupOWIoOmZpOOAjFxcXCIgKyB0aXRsZSArIFxcXCLjgI3vvJ9cXFwiKS5jb25maXJtKCh0aXRsZSwgaW5kZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlVXJsVGV4dCA9IHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcIik7XFxuICAgICAgICAgICAgICAgIGxldCBwYXJzZVVybEFycmF5ID0gcGFyc2VVcmxUZXh0LnNwbGl0KC9cXFxcbi8pO1xcbiAgICAgICAgICAgICAgICBsZXQgc2VsZWN0ZWQxID0gcGFyc2VVcmxBcnJheVtpbmRleF07XFxuICAgICAgICAgICAgICAgIHBhcnNlVXJsQXJyYXkuc3BsaWNlKGluZGV4LCAxKTtcXG4gICAgICAgICAgICAgICAgcGFyc2VVcmxUZXh0ID0gcGFyc2VVcmxBcnJheS5qb2luKFxcXCJcXFxcblxcXCIpO1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcIiwgcGFyc2VVcmxUZXh0KTtcXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkMSA9PSBnZXRJdGVtKFxcXCJzZWxlY3RlZDBcXFwiKSkge1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKHBhcnNlVXJsQXJyYXlbMF0pIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJzZWxlY3RlZFxcXCIsIHBhcnNlVXJsQXJyYXlbMF0uc3BsaXQoXFxcIiYmXFxcIilbMV0gfHwgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcInNlbGVjdGVkMFxcXCIsIHBhcnNlVXJsQXJyYXlbMF0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJzZWxlY3RlZFxcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXCJzZWxlY3RlZDBcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5L+u5pS55oiQ5YqfXFxcIjtcXG4gICAgICAgICAgICB9LCB0aXRsZSwgaW5kZXgpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIGJyZWFrO1xcblxcbn1cXG5mb3IgKGxldCBpIGluIHBhcnNlVXJsQXJyYXkpIHtcXG4gICAgbGV0IGl0ZW0gPSBwYXJzZVVybEFycmF5W2ldLnNwbGl0KFxcXCImJlxcXCIpO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHNlbGVjdGVkID09IGl0ZW1bMV0gPyBcXFwi4oCY4oCYXFxcIiArIGl0ZW1bMF0gKyBcXFwi4oCZ4oCZXFxcIiA6IGl0ZW1bMF0sXFxuICAgICAgICB1cmw6IGZ1bmMoaXRlbVsxXSwgaXRlbVswXSwgaSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfM1xcXCJcXG4gICAgfSk7XFxufVxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS4u+mimOeuoeeQhlwiLFwicGF0aFwiOlwidGhlbWVcIixcInJ1bGVcIjpcImpzOlxcbiAgICBmdW5jdGlvbiB0aGVtZUluaXQoKXtcXG4gICAgICAgIGNvbnN0IHtjb2xvcixzbWFsbH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS91dGlsaXk/cnVsZT3pgZPplb/ku5PlupNQcm9cXFwiKTtcXG4gICAgICAgIGxldCBkID0gW107XFxuICAgICAgICBsZXQgb3B0aW9ucyA9IFsn6YCJ5oupJywn5L+u5pS5Jywn5Yig6ZmkJywn5a+85Ye6J107XFxuXFxuICAgICAgICBmb3IodmFyIGkgaW4gb3B0aW9ucyl7XFxuICAgICAgICAgICAgbGV0IG9wdGlvbiA9IG9wdGlvbnNbaV07XFxuICAgICAgICAgICAgbGV0IGZsYWcgPSBnZXRWYXIoJ3RoZW1lLmRuX29wdGlvbicsJ+aWsOWinicpPT09b3B0aW9uPyfwn5GJJzonJztcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTpmbGFnK29wdGlvbixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICB1cmw6JChvcHRpb24pLmxhenlSdWxlKCgpPT57XFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ3RoZW1lLmRuX29wdGlvbicsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suiuvue9ruaTjeS9nOexu+Wei+S4ujonK2lucHV0O1xcbiAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGxldCB0aGVtZVJvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlUaGVtZS5qc29uXFxcIjtcXG4gICAgICAgIGxldCBteVRoZW1lcyA9IHt9O1xcbiAgICAgICAgbGV0IHRoZW1lcyA9IHt9O1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBteVRoZW1lcyA9IEpTT04ucGFyc2UoZmV0Y2godGhlbWVSb3V0ZSkpO1xcbiAgICAgICAgICAgIHRoZW1lcyA9IG15VGhlbWVzLnRoZW1lc1tteVRoZW1lcy5ub3dfdGhlbWVdO1xcbiAgICAgICAgfWNhdGNoIChlKSB7fVxcblxcblxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTon5a+85YWlJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgdXJsOiQoJycsJ+ivt+i+k+WFpeWvvOWFpeWPo+S7pCcpLmlucHV0KChteVRoZW1lcyx0aGVtZVJvdXRlKT0+e1xcbiAgICAgICAgICAgICAgICBpZigvXuaWreaPkuS4u+mimEAuKj9AaHR0cC8udGVzdChpbnB1dCkpe1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5hbWUgPSBpbnB1dC5zcGxpdCgnQCcpWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IGlucHV0LnNwbGl0KCdAJylbMl07XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgn56Gu5a6a6KaB5a+85YWl5pat5o+S5Li76aKYLScrbmFtZSsnIOWQlz8nKS5jb25maXJtKChuYW1lLHVybCxteVRoZW1lcyx0aGVtZVJvdXRlKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gcGFyc2VQYXN0ZSh1cmwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoYXNUaGVtZSA9IG15VGhlbWVzLnRoZW1lcy5maWx0ZXIoaXQ9Pml0Lm5hbWU9PT1uYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihoYXNUaGVtZSYmaGFzVGhlbWUubGVuZ3RoPjApe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaWQgPSBudWxsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGogaW4gbXlUaGVtZXMudGhlbWVzKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKG15VGhlbWVzLnRoZW1lc1tqXS5uYW1lID09PSBuYW1lKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGo7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWlkKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ntKLlvJXplJnor6/ml6Dms5Xopobnm5blr7zlhaU6XFxcXG4nK2lkXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKCfopobnm5blr7zlhaXkuLvpophpZDonK2lkKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUaGVtZXMudGhlbWVzW2lkXSA9IE9iamVjdC5hc3NpZ24oSlNPTi5wYXJzZShiYXNlNjREZWNvZGUoY29udGVudCkpLHsnbmFtZSc6bmFtZX0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRoZW1lcy50aGVtZXMucHVzaChPYmplY3QuYXNzaWduKEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKGNvbnRlbnQpKSx7J25hbWUnOm5hbWV9KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvZyhteVRoZW1lcyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkobXlUaGVtZXMpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5oiQ5Yqf5a+85YWl5Li76aKYOlxcXFxuJytuYW1lXFxuICAgICAgICAgICAgICAgICAgICB9LG5hbWUsdXJsLG15VGhlbWVzLHRoZW1lUm91dGUpO1xcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ml6Dms5Xor4bliKvnmoTlr7zlhaXlj6Pku6Q6XFxcXG4nK2lucHV0O1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSxteVRoZW1lcyx0aGVtZVJvdXRlKSxcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTon5paw5aKeJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgdXJsOiQoKS5ydWxlKChteVRoZW1lcyx0aGVtZVJvdXRlKT0+e1xcbiAgICAgICAgICAgICAgICBsZXQgZD1bXTtcXG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpPT57XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfkuLvpopjlkI3np7AnLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuaWreaPki3ok53ojpPkuLvpophcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogXFxcInB1dFZhcigndGhlbWUubmV3X2FkZF9uYW1lJyxpbnB1dClcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogdHJ1ZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcigndGhlbWUubmV3X2FkZF9uYW1lJywgJycpXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdfYWRkX25hbWUgPSBnZXRWYXIoJ3RoZW1lLm5ld19hZGRfbmFtZScsICcnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g6L6T5YWl55qE5pivOicrbmV3X2FkZF9uYW1lO1xcbiAgICAgICAgICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIlxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLku6PnoIFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdpbnB1dCcsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoJ3RoZW1lLm5ld19hZGRfY29kZScsICcnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDotMSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogJ3B1dFZhcihcXFwidGhlbWUubmV3X2FkZF9jb2RlXFxcIixpbnB1dCknXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6J+S/neWtmCcsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTondGV4dF9jZW50ZXJfMScsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6JCgpLmxhenlSdWxlKChteVRoZW1lcyx0aGVtZVJvdXRlKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gZ2V0VmFyKCd0aGVtZS5uZXdfYWRkX2NvZGUnLCAnJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5hbWUgPSBnZXRWYXIoJ3RoZW1lLm5ld19hZGRfbmFtZScsICcnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZighbmFtZSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kvaDov5jmsqHloavlhpnkuLvpopjlkI3np7DlkaInXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdUaGVtZSA9IHt9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1RoZW1lID0gSlNPTi5wYXJzZShjb2RlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9Y2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mUmeivr+eahOS4u+mimGpzb27moLzlvI86XFxcXG4nK2UubWVzc2FnZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihuZXdUaGVtZSx7J25hbWUnOm5hbWV9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBteVRoZW1lcy50aGVtZXMucHVzaChuZXdUaGVtZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkobXlUaGVtZXMpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5paw5aKe5pat5o+S5Li76aKYOicrbmFtZVxcbiAgICAgICAgICAgICAgICAgICAgfSxteVRoZW1lcyx0aGVtZVJvdXRlKVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgICAgIH0sbXlUaGVtZXMsdGhlbWVSb3V0ZSksXFxuICAgICAgICB9KTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6bXlUaGVtZXMudGhlbWVzPyfkuLvpopjliJfooag65YWx6K6hOicrY29sb3IobXlUaGVtZXMudGhlbWVzLmxlbmd0aCwnI2ZmNzAwMCcpKyfkuKrkuLvpopgnOlxcXCLnrKzkuIDmrKHliqDovb3vvIzngrnmraTov5vljrvliJ3lp4vljJbkuLvpopjliJfooahcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcbiAgICAgICAgICAgIHVybDonaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPeiuvue9riNub0hpc3RvcnkjJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOlxcXCLmgaLlpI3lh7rljoLorr7nva5cXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0X2NlbnRlcl8xJyxcXG4gICAgICAgICAgICB1cmw6JChcXFwi5aaC5p6c5L2g55qE5Li76aKY5rKh5rOV5q2j5bi455So5LqG77yM5q2k5pa55rOV5Y+v5Lul5pWR56CW77yM56Gu6K6k5oGi5aSNP1xcXCIpLmNvbmZpcm0oKCk9PntcXG4gICAgICAgICAgICAgICAgbGV0IHRoZW1lcyA9IHtuYW1lOifpu5jorqTkuLvpopgnLGNsb3NlQnRuOntjb2xvcjonI2Y2ZjZmNicsYmFja2dyb3VuZDonI2FhOTZkYSd9LHNhdmVCdG46e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjMDY4MDA2J30sc2F2ZUNsb3NlQnRuOntjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonIzA1QkZDNSd9LHRpcHNCdG46e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjMDVCRkM1J30sYmFybGFiZWw6e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjYWE5NmRhJ30sYmFySW5wdXQ6e2NvbG9yOicjYWE5NmRhJyxiYWNrZ3JvdW5kOicjZmZmZmQyJ30sc2VsZWN0Ontjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonI2FhOTZkYSd9LH07XFxuICAgICAgICAgICAgICAgIGxldCB0aGVtZURlZiA9IHtcXFwibmFtZVxcXCI6XFxcIuaWreW/teWOn+earlxcXCIsXFxcImNsb3NlQnRuXFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjYzU0NjRhXFxcIn0sXFxcInNhdmVCdG5cXFwiOntcXFwiY29sb3JcXFwiOlxcXCIjRjlGMERBXFxcIixcXFwiYmFja2dyb3VuZFxcXCI6XFxcIiMwNjgwMDZcXFwifSxcXFwic2F2ZUNsb3NlQnRuXFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjMDVCRkM1XFxcIn0sXFxcInRpcHNCdG5cXFwiOntcXFwiY29sb3JcXFwiOlxcXCIjRjlGMERBXFxcIixcXFwiYmFja2dyb3VuZFxcXCI6XFxcIiMwNUJGQzVcXFwifSxcXFwiYmFybGFiZWxcXFwiOntcXFwiY29sb3JcXFwiOlxcXCIjRjlGMERBXFxcIixcXFwiYmFja2dyb3VuZFxcXCI6XFxcIiNEMDZCNkNcXFwifSxcXFwiYmFySW5wdXRcXFwiOntcXFwiY29sb3JcXFwiOlxcXCIjRDA2QjZDXFxcIixcXFwiYmFja2dyb3VuZFxcXCI6XFxcIiNGOUYwREFcXFwifSxcXFwic2VsZWN0XFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjRDA2QjZDXFxcIn19O1xcbiAgICAgICAgICAgICAgICBsZXQgdGhlbWVSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015VGhlbWUuanNvblxcXCI7XFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLEpTT04uc3RyaW5naWZ5KHtub3dfdGhlbWU6J+m7mOiupOS4u+mimCcsdGhlbWVzOlt0aGVtZXMsdGhlbWVEZWZdfSkpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWreaPkuS4u+mimOW3sumHjee9ruS4uuWHuuWOguiuvue9ridcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSk7XFxuICAgICAgICBmb3IodmFyIGkgaW4gbXlUaGVtZXMudGhlbWVzKXtcXG4gICAgICAgICAgICBsZXQgbm93VGhlbSA9IG15VGhlbWVzLnRoZW1lc1tpXTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTpteVRoZW1lcy5ub3dfdGhlbWU9PT1ub3dUaGVtLm5hbWU/J/CfkYknK25vd1RoZW0ubmFtZTpub3dUaGVtLm5hbWUsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOidmbGV4X2J1dHRvbicsXFxuICAgICAgICAgICAgICAgIHVybDokKCkubGF6eVJ1bGUoKG15dGhlbWUsbXlUaGVtZXMsaSx0aGVtZVJvdXRlKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IG9wdGlvbiA9IGdldFZhcigndGhlbWUuZG5fb3B0aW9uJywn5paw5aKeJyk7XFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5a+85Ye6JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG15dGhlbWVDb2RlID0gYmFzZTY0RW5jb2RlKEpTT04uc3RyaW5naWZ5KG15dGhlbWUpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IHNoYXJlUGFzdGUobXl0aGVtZUNvZGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9ICfmlq3mj5LkuLvpophAJytteXRoZW1lLm5hbWUrJ0AnK3VybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29weShjb2RlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWvvOWHuuS4uuS6keWPo+S7pOW5tuWkjeWItuWIsOWJquWIh+advydcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICfkv67mlLknOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChKU09OLnN0cmluZ2lmeShteXRoZW1lKSkuaW5wdXQoKG15dGhlbWUsbXlUaGVtZXMsaSx0aGVtZVJvdXRlKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobXl0aGVtZS5uYW1lPT09bXlUaGVtZXMubm93X3RoZW1lKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5q2k5Li76aKY5b2T5YmN5q2j5Zyo5L2/55So5Lit77yM5LiN5YWB6K645L+u5pS5ISdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VGhlbWVzLnRoZW1lc1tpXT1KU09OLnBhcnNlKGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLEpTT04uc3RyaW5naWZ5KG15VGhlbWVzKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv67mlLknXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sbXl0aGVtZSxteVRoZW1lcyxpLHRoZW1lUm91dGUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5Yig6ZmkJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ+ehruiupOWIoOmZpOS4u+mimDonK215dGhlbWUubmFtZSsnPycpLmNvbmZpcm0oKG15dGhlbWUsbXlUaGVtZXMsaSx0aGVtZVJvdXRlKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobXl0aGVtZS5uYW1lPT09bXlUaGVtZXMubm93X3RoZW1lKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5q2k5Li76aKY5b2T5YmN5q2j5Zyo5L2/55So5Lit77yM5LiN5YWB6K645Yig6ZmkISdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VGhlbWVzLnRoZW1lcy5zcGxpY2UoaSwxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLEpTT04uc3RyaW5naWZ5KG15VGhlbWVzKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LliKDpmaQnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sbXl0aGVtZSxteVRoZW1lcyxpLHRoZW1lUm91dGUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUaGVtZXMubm93X3RoZW1lPW15dGhlbWUubmFtZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkobXlUaGVtZXMpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kvaDpgInmi6nkuoYnK215dGhlbWUubmFtZSsn5L2c5Li66buY6K6k5Li76aKYJztcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSxub3dUaGVtLG15VGhlbWVzLGksdGhlbWVSb3V0ZSksXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgIH1cXG4kLmV4cG9ydHMudGhlbWVJbml0PXRoZW1lSW5pdDtcIn0se1wibmFtZVwiOlwi5pON5L2c5oyH5byVXCIsXCJwYXRoXCI6XCJHdWlkZVwiLFwicnVsZVwiOlwiPGh0bWw+XFxuPGhlYWQ+XFxuICAgIDxtZXRhIGNoYXJzZXQ9XFxcIlVURi04XFxcIj5cXG48L2hlYWQ+XFxuPGJvZHk+XFxuPHN0cm9uZz4gPGJpZz7mi4nlj5bnr4c8L2JpZz4gPC9zdHJvbmc+XFxuPGJyIC8+IOaTjeS9nOmhuuW6j++8mlxcbjxiciAvPiAxLuabtOaWsOmBk+mVv+S7k+W6k1Byb+WIsDc254mI5pysXFxuPGJyIC8+IDIu5ouJ5Y+W5Li75o+S5Lu25ZKM572R6aG16ISa5pysXFxuPGJyIC8+IDMu5o6o6I2Q55u05o6l5ouJ5Y+W5Luj56CBPHM+5ouJ5Y+W5YiX6KGo4oaS5ouJ5Y+W5Luj56CBPC9zPlxcbjxiciAvPlxcbjxiciAvPlxcbjxzdHJvbmc+PGJpZz7lj6Pku6Tnr4c8L2JpZz48L3N0cm9uZz5cXG48YnIgLz7pppbpobXovpPlhaXmoYbmlK/mjIHvvJpcXG48YnIgLz4xLuWIhuS6q+WHuuadpeeahOWQjOezu+WIl+aPkuS7tuS6keWJqui0tOadv+WPo+S7pFxcbjxiciAvPjIu5pyq5Yqg5a+G55qE5ZCM57O75YiX5o+S5Lu25Zyw5Z2ALOaUr+aMgeacrOWcsOaWh+S7tuWmguS7peS4i+agvOW8j+W8gOWktOeahDpmaWxlOi8vLGhpa2VyOi8vLC9zdG9yYWdlXFxuPGJyIC8+My5R56WeXFxuPGJyIC8+NC7mlq3mj5JcXG48YnIgLz41LiPpgZPplb/nsr7pgIlcXG48YnIgLz42LiNi56uZXFxuPGJyIC8+Ny4j5YCN6ZmGXFxuPGJyIC8+XFxuPGJyIC8+XFxuPHN0cm9uZz48YmlnPue8lui+keevhzwvYmlnPjwvc3Ryb25nPlxcbjxiciAvPumakOiXj+WKn+iDvemcgOefpe+8mlxcbjxiciAvPumakOiXj+WKn+iDveaYr+S7juWIl+ihqOS4iuWIoOmZpOagh+mimO+8jOaVheaXoOWkjeeOsOWKn+iDvVxcbjxiciAvPueci+WHhuS6hu+8jOS4jeeUqOeahOaJjeeCuemakOiXj1xcbjxiciAvPuimgeWkjeeOsOeahOivneWOu+S/ruaUueaWsOeahE15UGFyc2UuanNvbu+8jOWcqHRpdGxl55qE5pWw57uE6YKj5oyJ5qC85byP5re75Yqg5qCH6aKYXFxuPGJyIC8+XFxuPGJyIC8+XFxuPHN0cm9uZz48YmlnPuWujOe7kzwvYmlnPjxiciAvPjwvc3Ryb25nPlxcbjxwPnYzLjQ5LOWwj+eZveacgOWQjueahOWAlOW8uizlsI/nmb3lhbPmgIDmqKHlvI88L3A+XFxuPHA+5LiA6ZSu5a6e546w6YWN572u5a6M5q+V5Y2z5Y+v6YCa6L+H5pSv5oyB6a2U5pat55qE5bCP56iL5bqP55yL6KeG6aKR77yM5Zue5b2S55m95auW6KeG6aKR6L+Z5Liq6ZyA5rGC5pys6LqrPC9wPlxcbjxwPuaOqOiNkOS9v+eUqOmdkuixhixhcHDlvbHop4YuZHA8L3A+XFxuPHA+6a2U5patKOaWreaPkumBk+mVv+mtlOaUueeJiCnlt7LlvIPlnZHot5Hot6/vvIzmhJ/osKLljp/kvZzogIXmlq3lv7XnmoTmj5Lku7bop6PmnpDlj4rmnKzlsI/nqIvluo/moLjlv4Pku6PnoIE8L3A+XFxuPC9ib2R5PlxcbjwvaHRtbD5cIn0se1wibmFtZVwiOlwi5rWL6K+V5pWw5o2uXCIsXCJwYXRoXCI6XCJkZW1vRGF0YVwiLFwicnVsZVwiOlwianM6XFxubGV0IGRlbW9EYXRhID0ge1xcbiAgICDniLHlpYfoibo6WydodHRwczovL3d3dy5pcWl5aS5jb20vdl8xenA3cWdoMjNrZy5odG1sJywnaHR0cHM6Ly93d3cuaXFpeWkuY29tL3ZfMmJjOHRrOHI2dWcuaHRtbCddLFxcbiAgICDkvJjphbc6WydodHRwczovL3YueW91a3UuY29tL3Zfc2hvdy9pZF9YTlRFNE5UZ3hNVFkyTUE9PS5odG1sJywnaHR0cHM6Ly92LnlvdWt1LmNvbS92X3Nob3cvaWRfWE5URTVPRFl4TWpBek5nPT0uaHRtbCddLFxcbiAgICDohb7orq86WydodHRwczovL3YucXEuY29tL3gvY292ZXIvbTQ0MWUzcmpxOWt3cHNjL3AwMDQwZ2ltNGZ6Lmh0bWwnLCdodHRwczovL3YucXEuY29tL3gvY292ZXIvbXpjMDAyMDB4aDkzMTN2L3owMDM5dGJobzdxLmh0bWwnXSxcXG4gICAg6IqS5p6cOlsnaHR0cHM6Ly93d3cubWd0di5jb20vYi8zNzIwNjEvMTIxOTM1NTguaHRtbCcsJ2h0dHBzOi8vd3d3Lm1ndHYuY29tL2IvMzYzMjg2LzE0Mjk1ODIzLmh0bWwnXSxcXG4gICAg5ZOU5ZOp5ZOU5ZOpOlsnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL2Jhbmd1bWkvcGxheS9lcDM4MTIxNycsJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9iYW5ndW1pL3BsYXkvZXA0MDgxMjMnXSxcXG4gICAg5pCc54uQOlsnaHR0cHM6Ly9maWxtLnNvaHUuY29tL2FsYnVtLzk0NTc1ODQuaHRtbCcsJ2h0dHBzOi8vZmlsbS5zb2h1LmNvbS9hbGJ1bS85MTgyNjQ2Lmh0bWwnXSxcXG4gICAg6KW/55OcOlsnaHR0cHM6Ly93d3cuaXhpZ3VhLmNvbS82NTUxMzMyMTI1NjU0NjQ3MzEwJywnaHR0cHM6Ly93d3cuaXhpZ3VhLmNvbS82Njk5MzU2NzkyOTA1Nzk0MDU1J10sXFxuICAgIOmYv+mHjDpbJyddLFxcbiAgICBQUFRWOlsnaHR0cDovL3YucHB0di5jb20vc2hvdy9USW5kV3NJb21OWTV0eDguaHRtbCcsJ2h0dHA6Ly92LnBwdHYuY29tL3Nob3cvU0NRNXRoNkU5REtWRTNzLmh0bWwnXSxcXG4gICAg5ZKq5ZKVOlsnaHR0cHM6Ly93d3cubWlndXZpZGVvLmNvbS9tZ3Mvd2Vic2l0ZS9wcmQvZGV0YWlsLmh0bWw/Y2lkPTYzMzUxMTc0MycsJ2h0dHBzOi8vd3d3Lm1pZ3V2aWRlby5jb20vbWdzL3dlYnNpdGUvcHJkL2RldGFpbC5odG1sP2NpZD03MTYyNzAzMTknXSxcXG4gICAg5LmQ6KeGOlsnaHR0cDovL3d3dy5sZS5jb20vcHR2L3ZwbGF5Lzc1ODQzMDU5Lmh0bWwnLCdodHRwOi8vd3d3LmxlLmNvbS9wdHYvdnBsYXkvMjQyMjA5MDEuaHRtbCN2aWQ9MjQyMjA5MDEnXSxcXG4gICAgMTkwNTpbJ2h0dHBzOi8vdmlwLjE5MDUuY29tL3BsYXkvODc1NzQwLnNodG1sJywnaHR0cHM6Ly93d3cuMTkwNS5jb20vdm9kL3BsYXkvODgwNjQxLnNodG1sJ10sXFxuICAgIOmjjuihjDpbJ2h0dHA6Ly93d3cuZnVuLnR2L3ZwbGF5L2ctMzA0MTQzJywnaHR0cDovL3d3dy5mdW4udHYvdnBsYXkvZy0xMDA4OTYzLyddLFxcbn1cXG5cXG5sZXQgZGVmYXVsdFNldHMgPSAge1xcbiAgICAgICAgcXk6ICfkvaDniLnnp5HmioAnLFxcbiAgICAgICAgeWs6ICfpoobphbcnLFxcbiAgICAgICAgdHg6ICfojaPogIAnLFxcbiAgICAgICAgbWc6ICfomoLomoHlhYTlvJ8nLFxcbiAgICAgICAgYmw6ICdPS+ino+aekCcsXFxuICAgICAgICBzaDogJ+axn+a5lkQnLFxcbiAgICAgICAgeGc6ICfmsZ/muZZEJyxcXG4gICAgICAgIGFsOiAn5rGf5rmWRCcsXFxuICAgICAgICBwcDogJ+S6uuS6uui/tycsXFxuICAgICAgICBtaTogJzEwODAnLFxcbiAgICAgICAgbGU6ICfov6rlpaXll4XmjqInLFxcbiAgICAgICAgb3RoOiAn6YGT6ZW/5LuT5bqT6YCa5YWNJyxcXG4gICAgICAgIGZ1bjogJ+iejeWFtCcsXFxuICAgICAgICBvbmU6JzEwODAnLFxcbiAgICAgICAgcWp1OiAn6buY6K6kJyxcXG4gICAgICAgIGNqOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcydcXG4gICAgfTtcXG5cXG5sZXQgZmxvb3JzID0gJ+KRoOKRoeKRouKRo+KRpOKRpeKRpuKRp+KRqOKRqe+8ke+8ku+8k++8lO+8le+8lu+8l++8mO+8me+8kOKSiOKSieKSiuKSi+KSjOKSjeKSjuKSj+KSkCcuc3BsaXQoJycpO1xcbmxldCBlbW9qaXMgPSAnI++4j+KDo3wq77iP4oOjfDDvuI/ig6N8Me+4j+KDo3wy77iP4oOjfDPvuI/ig6N8NO+4j+KDo3w177iP4oOjfDbvuI/ig6N8N++4j+KDo3w477iP4oOjfDnvuI/ig6N88J+FsO+4j3zwn4Wx77iPfPCfjYd88J+NiHzwn42JfPCfjYp88J+Ni3zwn42MfPCfjY188J+Njnzwn42PfPCfjZB88J+NkXzwn42SfPCfjZN88J+NhXzwn42GfPCfjL188J+NhHzwn4ywfPCfjZ588J+Nlnzwn42XfPCfjZR88J+Nn3zwn42VfPCfjbN88J+Nsnzwn42xfPCfjZh88J+NmXzwn42afPCfjZt88J+NnHzwn42dfPCfjaB88J+Nonzwn42jfPCfjaR88J+NpXzwn42hfPCfjaZ88J+Np3zwn42ofPCfjal88J+Nqnzwn46CfPCfjbB88J+Nq3zwn42sfPCfja188J+Nrnzwn42vfPCfjbx84piVfPCfjbV88J+Ntnzwn423fPCfjbh88J+NuXzwn426fPCfjbt88J+NtCcuc3BsaXQoJ3wnKTtcXG5mbG9vcnMgPSBmbG9vcnMuY29uY2F0KGVtb2ppcyk7XFxuJC5leHBvcnRzLmRlbW9EYXRhID0gZGVtb0RhdGE7XFxuJC5leHBvcnRzLmRlZmF1bHRTZXRzID0gZGVmYXVsdFNldHM7XFxuJC5leHBvcnRzLmZsb29ycyA9IGZsb29ycztcIn0se1wibmFtZVwiOlwi5bel5YW357G7XCIsXCJwYXRoXCI6XCJ1dGlsc1wiLFwicnVsZVwiOlwianM6XFxuLy/pmo/mnLrku47liJfooajmir3lj5bkuIDkuKrlhYPntKBcXG5mdW5jdGlvbiBnZXRPbmUoaXRzKSB7cmV0dXJuICBpdHNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKml0cy5sZW5ndGgpXTt9XFxuLy/ljrvph43vvIhFUzYgU2V077yJXFxuZnVuY3Rpb24gdW5pcXVlMihhcnJheSl7XFxuICAgIHJldHVybiBBcnJheS5mcm9tKG5ldyBTZXQoYXJyYXkpKTtcXG59XFxuLy/ojrflj5bliJfooajkuK3ph43lpI3pg73lgLxcXG5mdW5jdGlvbiBkdXBsaWNhdGVzKGFycikge1xcbiAgICBsZXQgcmVzPWFyci5maWx0ZXIoKHgsayk9PntcXG4gICAgICAgIGxldCBhPWsqMSsxO1xcbiAgICAgICAgbGV0IGluZGV4PWFyci5pbmRleE9mKHgsYSk7XFxuICAgICAgICBpZihpbmRleD4tMSl7XFxuICAgICAgICAgICAgcmV0dXJuIHg7XFxuICAgICAgICB9XFxuICAgIH0pXFxuICAgIGxldCByZT1uZXcgU2V0KHJlcyk7XFxuICAgIHJldHVybiBBcnJheS5mcm9tKHJlKTtcXG59XFxuJC5leHBvcnRzLmdldE9uZSA9IGdldE9uZTtcXG4kLmV4cG9ydHMudW5pcXVlMiA9IHVuaXF1ZTI7XFxuJC5leHBvcnRzLmR1cGxpY2F0ZXMgPSBkdXBsaWNhdGVzO1wifSx7XCJuYW1lXCI6XCLop6PmnpDnrqHnkIZcIixcInBhdGhcIjpcImp4TWFuYWdlXCIsXCJydWxlXCI6XCJqczpcXG5mdW5jdGlvbiBqeE1hbmFnZSgpe1xcbiAgICBjb25zdCB7Y29sb3Isc21hbGx9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5P3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcIik7XFxuICAgIGxldCBkID0gW107XFxuICAgIGxldCBvcHRpb25zID0gWyfpgInmi6knLCfkv67mlLknLCfliKDpmaQnLCflr7zlh7onXTtcXG5cXG4gICAgZm9yKGxldCBpIGluIG9wdGlvbnMpe1xcbiAgICAgICAgbGV0IG9wdGlvbiA9IG9wdGlvbnNbaV07XFxuICAgICAgICBsZXQgZmxhZyA9IGdldFZhcignZG4uanhtX29wdGlvbicsJ+mAieaLqScpPT09b3B0aW9uPyfwn5GJJzonJztcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ZmxhZytvcHRpb24sXFxuICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChvcHRpb24pPT57XFxuICAgICAgICAgICAgICAgIHB1dFZhcignZG4uanhtX29wdGlvbicsIG9wdGlvbik7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgIH0sb3B0aW9uKSxcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuICAgIGxldCBqeHNSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015SmlleGkuanNvblxcXCI7XFxuICAgIGxldCBNeUppZXhpID0ge2ppZXhpczpbXX07XFxuICAgIGxldCBqaWV4aXMgPSB7fTtcXG4gICAgdHJ5IHtcXG4gICAgICAgIE15SmlleGkgPSBKU09OLnBhcnNlKGZldGNoKGp4c1JvdXRlKSk7XFxuICAgICAgICBqaWV4aXMgPSBNeUppZXhpLmppZXhpcy5maWx0ZXIoaXQ9Pml0Lm5hbWU9PT1NeUppZXhpLm5vdylbMF07XFxuICAgIH1jYXRjaCAoZSkge31cXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiflr7zlhaUnLFxcbiAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgdXJsOiQoJycsJ+ivt+i+k+WFpeWvvOWFpeWPo+S7pCcpLmlucHV0KChNeUppZXhpLGp4c1JvdXRlKT0+e1xcbiAgICAgICAgICAgIGlmKC9e6a2U5pat6Kej5p6Q6YWN572uQC4qP0BodHRwLy50ZXN0KGlucHV0KSl7XFxuICAgICAgICAgICAgICAgIGxldCBuYW1lID0gaW5wdXQuc3BsaXQoJ0AnKVsxXTtcXG4gICAgICAgICAgICAgICAgbGV0IHVybCA9IGlucHV0LnNwbGl0KCdAJylbMl07XFxuICAgICAgICAgICAgICAgIHJldHVybiAkKCfnoa7lrpropoHlr7zlhaXmlq3mj5Lop6PmnpDphY3nva4tJytuYW1lKycg5ZCXPycpLmNvbmZpcm0oKG5hbWUsdXJsLE15SmlleGksanhzUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICBsZXQgY29udGVudCA9IHBhcnNlUGFzdGUodXJsKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBoYXNJdCA9IE15SmlleGkuamlleGlzLmZpbHRlcihpdD0+aXQubmFtZT09PW5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYoaGFzSXQmJmhhc0l0Lmxlbmd0aD4wKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaWQgPSBudWxsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaiBpbiBNeUppZXhpLmppZXhpcyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKE15SmlleGkuamlleGlzW2pdLm5hbWUgPT09IG5hbWUpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBqO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWlkKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+e0ouW8lemUmeivr+aXoOazleimhuebluWvvOWFpTpcXFxcbicraWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKCfopobnm5blr7zlhaXkuLvpophpZDonK2lkKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpc1tpZF0gPSBPYmplY3QuYXNzaWduKEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKGNvbnRlbnQpKSx7J25hbWUnOm5hbWV9KTtcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzLnB1c2goT2JqZWN0LmFzc2lnbihKU09OLnBhcnNlKGJhc2U2NERlY29kZShjb250ZW50KSkseyduYW1lJzpuYW1lfSkpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suaIkOWKn+WvvOWFpeino+aekOmFjee9rjpcXFxcbicrbmFtZVxcbiAgICAgICAgICAgICAgICB9LG5hbWUsdXJsLE15SmlleGksanhzUm91dGUpO1xcbiAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5peg5rOV6K+G5Yir55qE5a+85YWl5Y+j5LukOlxcXFxuJytpbnB1dDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LE15SmlleGksanhzUm91dGUpLFxcbiAgICB9KTtcXG5cXG4gICAgbGV0IGlzQXV0byA9IE15SmlleGkuaXNBdXRvO1xcbiAgICBsZXQgYXV0b01vZGUgPSBNeUppZXhpLmF1dG9Nb2RlO1xcbiAgICBsZXQgdGlwcyA9ICfop6PmnpDphY3nva7liJfooag65YWx6K6hOicrY29sb3IoTXlKaWV4aS5qaWV4aXMubGVuZ3RoLCcjZmY3MDAwJykrJ+S4qumFjee9rizoh6rliqjmoaPlvIDlhbM6Jytjb2xvcihpc0F1dG8/J+W8gCc6J+WFsycsJyNmZjcwMDAnKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOk15SmlleGkuamlleGlzJiZNeUppZXhpLmppZXhpcy5sZW5ndGg+MD90aXBzOlxcXCLnrKzkuIDmrKHliqDovb3vvIzngrnmraTov5vljrvliJ3lp4vljJbop6PmnpDliJfooahcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6J3RleHRfMScsXFxuICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoTXlKaWV4aSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICBpZihNeUppZXhpLmppZXhpcyYmTXlKaWV4aS5qaWV4aXMubGVuZ3RoPjApe1xcbiAgICAgICAgICAgICAgICBNeUppZXhpLmlzQXV0byA9ICFNeUppZXhpLmlzQXV0bztcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgIGxldCB0aXBzID0gTXlKaWV4aS5pc0F1dG8/J+W8gCc6J+WFsyc7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lorr7nva7oh6rliqjmoaPmqKHlvI/kuLo6Jyt0aXBzXFxuICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgIGxldCBpbml0U2V0ID0geydub3cnOlxcXCLpgZPplb/mjqjojZBcXFwiLCdqaWV4aXMnOlt7bmFtZTon6YGT6ZW/5o6o6I2QJyxxeTpbJ+S9oOeIueenkeaKgCddLHlrOlsn6aKG6YW3J10sdHg6WyfojaPogIAnXSxtZzpbJ+iaguiageWFhOW8nyddLGJsOlsnT0vop6PmnpAnXSxzaDpbJ+axn+a5lkQnXSx4ZzpbJ+axn+a5lkQnXSxhbDpbJ+axn+a5lkQnXSxwcDpbJ+S6uuS6uui/tyddLG1pOlsnMTA4MCddLGxlOlsn6L+q5aWl5ZeF5o6iJ10sZnVuOlsn6J6N5YW0J10sb25lOlsnMTA4MCddfV19O1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoaW5pdFNldCkpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWreaPkuino+aekOmFjee9ruW3suWIneWni+WMlidcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LE15SmlleGksanhzUm91dGUpXFxuICAgIH0pO1xcbiAgICBsZXQgYXV0b01vZGVUaXBzID0gYXV0b01vZGU9PT0n6YCf5bqm5LyY5YWIJz8n6YCf5bqm5LyY5YWIJzon6aG65bqP5LyY5YWIJztcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOnNtYWxsKFxcXCLlpIfog47lrqDlubjmlrnmoYg6XFxcIikrY29sb3IoYXV0b01vZGVUaXBzLCcjZmY3MDAwJyksXFxuICAgICAgICBjb2xfdHlwZTondGV4dF8yJyxcXG4gICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChNeUppZXhpLGp4c1JvdXRlKT0+e1xcbiAgICAgICAgICAgIE15SmlleGkuYXV0b01vZGUgPSBNeUppZXhpLmF1dG9Nb2RlPT09J+mAn+W6puS8mOWFiCc/J+mhuuW6j+S8mOWFiCc6J+mAn+W6puS8mOWFiCc7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6K6+572u5aSH6IOO5a6g5bm45pa55qGI5Li6OicrTXlKaWV4aS5hdXRvTW9kZVxcbiAgICAgICAgfSxNeUppZXhpLGp4c1JvdXRlKVxcbiAgICB9KTtcXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOmNvbG9yKFxcXCLmgaLlpI3lh7rljoLorr7nva5cXFwiLCcjZmY3MDAwJyksXFxuICAgICAgICBjb2xfdHlwZTondGV4dF8yJyxcXG4gICAgICAgIHVybDokKFxcXCLlpoLmnpzkvaDnmoTop6PmnpDnrqHnkIbml6Dms5XmraPluLjnlKjkuobvvIzmraTmlrnms5Xlj6/ku6XmlZHnoJbvvIznoa7orqTmgaLlpI0/XFxcIikuY29uZmlybSgoanhzUm91dGUpPT57XFxuICAgICAgICAgICAgbGV0IGluaXRTZXQgPSB7J25vdyc6XFxcIumBk+mVv+aOqOiNkFxcXCIsJ2ppZXhpcyc6W3tuYW1lOifpgZPplb/mjqjojZAnLHF5Olsn5L2g54i556eR5oqAJ10seWs6WyfpoobphbcnXSx0eDpbJ+iNo+iAgCddLG1nOlsn6JqC6JqB5YWE5byfJ10sYmw6WydPS+ino+aekCddLHNoOlsn5rGf5rmWRCddLHhnOlsn5rGf5rmWRCddLGFsOlsn5rGf5rmWRCddLHBwOlsn5Lq65Lq66L+3J10sbWk6WycxMDgwJ10sbGU6Wyfov6rlpaXll4XmjqInXSxmdW46Wyfono3lhbQnXSxvbmU6WycxMDgwJ10sfV19O1xcbiAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShpbml0U2V0KSk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWreaPkuino+aekOmFjee9ruW3sumHjee9ruS4uuWHuuWOguiuvue9ridcXG4gICAgICAgIH0sanhzUm91dGUpXFxuICAgIH0pO1xcblxcbiAgICBmb3IobGV0IGkgaW4gTXlKaWV4aS5qaWV4aXMpe1xcbiAgICAgICAgbGV0IG5vd0p4ID0gTXlKaWV4aS5qaWV4aXNbaV07XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOk15SmlleGkubm93PT09bm93SngubmFtZT8n8J+RiScrbm93SngubmFtZTpub3dKeC5uYW1lLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidmbGV4X2J1dHRvbicsXFxuICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgICBub3dKeDpub3dKeCxcXG4gICAgICAgICAgICAgICAgTXlKaWV4aTpNeUppZXhpLFxcbiAgICAgICAgICAgICAgICBqeHNSb3V0ZTpqeHNSb3V0ZVxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG5vd0p4LE15SmlleGksaSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgbGV0IG9wdGlvbiA9IGdldFZhcignZG4uanhtX29wdGlvbicsJ+mAieaLqScpO1xcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbil7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlICflr7zlh7onOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBub3dKeENvZGUgPSBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkobm93SngpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gc2hhcmVQYXN0ZShub3dKeENvZGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gJ+mtlOaWreino+aekOmFjee9rkAnK25vd0p4Lm5hbWUrJ0AnK3VybDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb3B5KGNvZGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Llr7zlh7rkuLrkupHlj6Pku6TlubblpI3liLbliLDliarliIfmnb8nXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfkv67mlLknOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIGlmKG5vd0p4Lm5hbWU9PT1NeUppZXhpLm5vdyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiAndG9hc3Q6Ly/mraTop6PmnpDphY3nva7lvZPliY3mraPlnKjkvb/nlKjkuK3vvIzkuI3lhYHorrjkv67mlLkhJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBlbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9qeEVkaXQ/cnVsZT1NeUZpZWxk4bSw4oG/J1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9qeEVkaXQ/cnVsZT1NeUZpZWxk4bSw4oG/J1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn5Yig6ZmkJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgn56Gu6K6k5Yig6Zmk6Kej5p6Q6YWN572uOicrbm93SngubmFtZSsnPycpLmNvbmZpcm0oKG5vd0p4LE15SmlleGksaSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobm93SngubmFtZT09PU15SmlleGkubm93KXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mraTop6PmnpDphY3nva7lvZPliY3mraPlnKjkvb/nlKjkuK3vvIzkuI3lhYHorrjliKDpmaQhJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzLnNwbGljZShpLDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWIoOmZpCdcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LG5vd0p4LE15SmlleGksaSxqeHNSb3V0ZSlcXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5ub3c9bm93SngubmFtZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kvaDpgInmi6nkuoYnK25vd0p4Lm5hbWUrJ+S9nOS4uuW9k+WJjeino+aekOmFjee9ric7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LG5vd0p4LE15SmlleGksaSxqeHNSb3V0ZSksXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBzZXRSZXN1bHQoZCk7XFxufVxcbiQuZXhwb3J0cy5qeE1hbmFnZT1qeE1hbmFnZTtcIn0se1wibmFtZVwiOlwi6Kej5p6Q57yW6L6RXCIsXCJwYXRoXCI6XCJqeEVkaXRcIixcInJ1bGVcIjpcImpzOlxcbmxldCB7bm93SngsTXlKaWV4aSxqeHNSb3V0ZX0gPSBNWV9QQVJBTVM7XFxubGV0IG5vd0p4VCA9IEpTT04ucGFyc2UoZ2V0VmFyKCdkbi5ub3dKeCcpfHwne30nKTtcXG5ub3dKeCA9IG5vd0p4VC5uYW1lP25vd0p4VDpub3dKeDtcXG5hZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCk9PntcXG4gICAgY2xlYXJWYXIoXFxcImRuLmp4X3RpdGxlc1xcXCIpO1xcbiAgICBjbGVhclZhcihcXFwiZG4ubm93SnhcXFwiKTtcXG4gICAgY2xlYXJWYXIoXFxcImRuLmp4bV9uYW1lXFxcIik7XFxufSkpO1xcbmxldCBpZCA9IG51bGw7XFxuZm9yKGxldCBqIGluIE15SmlleGkuamlleGlzKXtcXG4gICAgaWYoTXlKaWV4aS5qaWV4aXNbal0ubmFtZSA9PT0gbm93SngubmFtZSl7XFxuICAgICAgICBpZCA9IGo7XFxuICAgICAgICBicmVhaztcXG4gICAgfVxcbn1cXG5sZXQgZCA9IFtdO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn6YWN572u5ZCN56ewJyxcXG4gICAgZGVzYzogXFxcIuino+aekOmFjee9ruWQjeensCzlpoLpgZPplb/mjqjojZBcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgb25DaGFuZ2U6IFxcXCJwdXRWYXIoJ2RuLmp4bV9uYW1lJyxpbnB1dClcXFwiLFxcbiAgICAgICAgdGl0bGVWaXNpYmxlOiB0cnVlLFxcbiAgICAgICAgZGVmYXVsdFZhbHVlOmdldFZhcignZG4uanhtX25hbWUnLCcnKXx8bm93SngubmFtZVxcbiAgICB9LFxcbiAgICBjb2xfdHlwZTonaW5wdXQnXFxufSk7XFxuLy8gbGV0IG9wdGlvbnMgPSBbJ+mAieaLqScsJ+aWsOWinicsJ+WIoOmZpCcsJ+aJuemHj+WIoOmZpCcsJ+enu+WKqCddO1xcbmxldCBvcHRpb25zID0gWyfmlrDlop4nLCfliKDpmaQnLCfnp7vliqgnXTtcXG5cXG5mb3IobGV0IGkgaW4gb3B0aW9ucyl7XFxuICAgIGxldCBvcHRpb24gPSBvcHRpb25zW2ldO1xcbiAgICBsZXQgZmxhZyA9IGdldFZhcignZG4uanhtX3dyaXRlTW9kZScsJ+aWsOWinicpPT09b3B0aW9uPyfwn5GJJzonJztcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOmZsYWcrb3B0aW9uLFxcbiAgICAgICAgLy8gY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgY29sX3R5cGU6J2ZsZXhfYnV0dG9uJyxcXG4gICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChvcHRpb24pPT57XFxuICAgICAgICAgICAgcHV0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywgb3B0aW9uKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgfSxvcHRpb24pLFxcbiAgICB9KTtcXG59XFxuZC5wdXNoKHtcXG4gICAgY29sX3R5cGU6J2xpbmUnXFxufSk7XFxuLy/ojrflj5bmlq3mj5LliJfooahcXG5pZighZ2V0VmFyKFxcXCJkbi5qeF90aXRsZXNcXFwiKSl7XFxuICAgIGxldCB0aXRsZUFyciA9IFtdLCB1cmxBcnIgPSBbXTtcXG4gICAgdmFyIGpzb249e3RpdGxlOltdLGNvZGVzOnt9fTtcXG4gICAgbGV0IHNldEZpbGUgPSByZXF1ZXN0KCdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicpO1xcbiAgICB0cnkge1xcbiAgICAgICAgZXZhbCgnanNvbj0nK3NldEZpbGUpO1xcbiAgICB9Y2F0Y2ggKGUpIHtcXG4gICAgICAgIGxvZygnSnNvbuino+aekOWPkeeUn+S6humUmeivrzonK2UubWVzc2FnZSk7XFxuICAgIH1cXG4gICAgdGl0bGVBcnIgPSBqc29uLnRpdGxlO1xcbiAgICB0aXRsZUFyci5mb3JFYWNoKChpdCkgPT4ge1xcbiAgICAgICAgdXJsQXJyLnB1c2goanNvbi5jb2Rlc1tpdF0pO1xcbiAgICB9KTtcXG4gICAgcHV0VmFyKCdkbi5qeF90aXRsZXMnLEpTT04uc3RyaW5naWZ5KHRpdGxlQXJyKSk7XFxufVxcblxcbmxldCB0aXRsZXMgPSBKU09OLnBhcnNlKGdldFZhcignZG4uanhfdGl0bGVzJyl8fCdbXScpO1xcbmxldCB0aXRsZURpYyA9IHtcXG4gICAgYWw6J+mYv+mHjCcsYmw6J+WTlOWTqeWTlOWTqScsZnVuOifpo47ooYwnLGxlOifkuZDop4YnLG1nOifoipLmnpwnLG1pOiflkqrlkpUnLHBwOidQUFRWJyxxeTon54ix5aWH6Im6JyxzaDon5pCc54uQJyxcXG4gICAgdHg6J+iFvuiurycseGc6J+ilv+eTnCcseWs6J+S8mOmFtycsb25lOicxOTA1J1xcbn1cXG5cXG4vLy0tLS0tLS0tLS0tLS0tLS0tXFxubGV0IGpkcyA9IE9iamVjdC5rZXlzKG5vd0p4KS5maWx0ZXIoaXQ9Pml0IT09J25hbWUnJiZpdCE9PSdvdGgnKTtcXG5mb3IobGV0IGogaW4gamRzKXtcXG4gICAgbGV0IGp4cyA9IG5vd0p4W2pkc1tqXV18fFtdO1xcbiAgICBsZXQgdGl0bGUgPSBqZHNbal07XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTp0aXRsZURpY1t0aXRsZV18fHRpdGxlLFxcbiAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHRpdGxlcyx0aXRsZSxqeHMsanhzUm91dGUsTXlKaWV4aSxub3dKeCk9PntcXG4gICAgICAgICAgICBpZihnZXRWYXIoJ2RuLmp4bV93cml0ZU1vZGUnLCfmlrDlop4nKT09PSfmlrDlop4nKXtcXG4gICAgICAgICAgICAgICAgbGV0IHNlbF90aXRsZSA9IHRpdGxlcy5maWx0ZXIoaXQ9PiFqeHMuaW5jbHVkZXMoaXQpKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoc2VsX3RpdGxlLDMpLnNlbGVjdCgoTXlKaWV4aSxqeHMsbm93SngsdGl0bGUsanhzUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaWQgPSBudWxsO1xcbiAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBqIGluIE15SmlleGkuamlleGlzKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihNeUppZXhpLmppZXhpc1tqXS5uYW1lID09PSBub3dKeC5uYW1lKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQgPSBqO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBpZighaWQpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ntKLlvJXplJnor6/ml6Dms5Xkv53lrZg6XFxcXG4nK2lkXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBqeHMucHVzaChpbnB1dCk7XFxuICAgICAgICAgICAgICAgICAgICBsb2coanhzKTtcXG4gICAgICAgICAgICAgICAgICAgIG5vd0p4W3RpdGxlXSA9IGp4cztcXG4gICAgICAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzW2lkXSA9IG5vd0p4O1xcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdkbi5ub3dKeCcsSlNPTi5zdHJpbmdpZnkobm93SngpKTtcXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgfSxNeUppZXhpLGp4cyxub3dKeCx0aXRsZSxqeHNSb3V0ZSk7XFxuICAgICAgICAgICAgfWVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSx0aXRsZXMsdGl0bGUsanhzLGp4c1JvdXRlLE15SmlleGksbm93SngpXFxuICAgIH0pO1xcbiAgICBmb3IobGV0IGsgaW4ganhzKXtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6anhzW2tdLFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodGl0bGVzLHRpdGxlLGp4cyxqeHNSb3V0ZSxNeUppZXhpLG5vd0p4LG5qeCxpZCxrLG1heCk9PntcXG4gICAgICAgICAgICAgICAgc3dpdGNoIChnZXRWYXIoJ2RuLmp4bV93cml0ZU1vZGUnLCfmlrDlop4nKSl7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfliKDpmaQnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIEFycmF5LnByb3RvdHlwZS5yZW1vdmUgPSBmdW5jdGlvbih2YWwpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGluZGV4ID0gdGhpcy5pbmRleE9mKHZhbCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnNwbGljZShpbmRleCwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGp4cy5yZW1vdmUobmp4KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBub3dKeFt0aXRsZV0gPSBqeHM7XFxuICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdID0gbm93Sng7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdkbi5ub3dKeCcsSlNPTi5zdHJpbmdpZnkobm93SngpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+enu+WKqCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoaywn56e75Yqo5Yiw57Si5byV5aSa5bCRPycpLmlucHV0KChrLG1heCxqeHMsbm93SngsTXlKaWV4aSxpZCx0aXRsZSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb24gTW92ZShhcnIsIGZyb21JbmRleCwgdG9JbmRleCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGVsZW1lbnQgPSBhcnJbZnJvbUluZGV4XTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoZnJvbUluZGV4LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UodG9JbmRleCwgMCwgZWxlbWVudCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocGFyc2VJbnQoaW5wdXQpPT09ayl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ZWl5Lmf5rKh5YGaJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihwYXJzZUludChpbnB1dCk+bWF4LTF8fHBhcnNlSW50KGlucHV0KTwtMSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g5pyA5aSn56e75Yqo6IyD5Zu0MC0nK3BhcnNlSW50KG1heC0xKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsZXQgbmV3QXIgPSBqeHMuc3BsaWNlKGssIDEpOyAvLyDliKDmjolcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ganhzLnVuc2hpZnQobmV3QXJbMF0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNb3ZlKGp4cyxrLHBhcnNlSW50KGlucHV0KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vd0p4W3RpdGxlXSA9IGp4cztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdID0gbm93Sng7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dFZhcignZG4ubm93SngnLEpTT04uc3RyaW5naWZ5KG5vd0p4KSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxrLG1heCxqeHMsbm93SngsTXlKaWV4aSxpZCx0aXRsZSxqeHNSb3V0ZSlcXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+atpOWFg+e0oOS4jeaUr+aMgei/m+ihjDonK2dldFZhcignZG4uanhtX3dyaXRlTW9kZScsJ+aWsOWinicpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LHRpdGxlcyx0aXRsZSxqeHMsanhzUm91dGUsTXlKaWV4aSxub3dKeCxqeHNba10saWQsayxqeHMubGVuZ3RoKVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOidsaW5lJ1xcbiAgICB9KVxcbn1cXG5cXG5kLnB1c2goe1xcbiAgIHRpdGxlOifkv53lrZgnLFxcbiAgIGNvbF90eXBlOid0ZXh0X2NlbnRlcl8xJyxcXG4gICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoTXlKaWV4aSxpZCxqeHNSb3V0ZSk9PntcXG4gICAgICAgaWYoZ2V0VmFyKCdkbi5qeG1fbmFtZScsJycpIT09TXlKaWV4aS5qaWV4aXNbaWRdLm5hbWUpe1xcbiAgICAgICAgICAgaWZIYXMgPSBNeUppZXhpLmppZXhpcy5maWx0ZXIoaXQ9Pml0Lm5hbWU9PT1nZXRWYXIoJ2RuLmp4bV9uYW1lJywnJykpLmxlbmd0aD4wO1xcbiAgICAgICAgICAgaWYoaWZIYXMpe1xcbiAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lvoXkv67mlLnnmoTlkI3np7Dph43lpI0s5LiN5YWB6K645L+d5a2YJ1xcbiAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdLm5hbWUgPSAgZ2V0VmFyKCdkbi5qeG1fbmFtZScsJycpO1xcbiAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICB9XFxuICAgICAgIH1cXG4gICAgICAgYmFjayh0cnVlKTtcXG4gICAgICAgcmV0dXJuICd0b2FzdDovL+W3suS/neWtmCdcXG4gICB9LE15SmlleGksaWQsanhzUm91dGUpXFxufSk7XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJuYW1lXCI6XCLlsI/nmb3mqKHlvI9cIixcInBhdGhcIjpcInNtYWxsV2hpdGVcIixcInJ1bGVcIjpcImpzOlxcbnNldFBhZ2VUaXRsZSgn6YGT6ZW/57uZ5bCP55m955qE5YWz54ixJyk7XFxuY29uc3Qge2NvbG9yLCBzbWFsbCxhcGl9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5P3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcIik7XFxubGV0IGZpbGVSb290ID0gYXBpLmhvc3QrJy9oaWtlcnVsZS96eXdfZGF0YS8nO1xcbi8vIGxvZyhmaWxlUm9vdCk7XFxubGV0IGQgPSBbXTtcXG52YXIgdGhlbWVSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015VGhlbWUuanNvblxcXCI7XFxudmFyIHRoZW1lT25saW5lID0gZmlsZVJvb3QrJzExJztcXG52YXIgb2xkUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFwiO1xcbnZhciBvbGRPbmxpbmUgPSBmaWxlUm9vdCsnMTInO1xcbnZhciBuZXdSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvblxcXCI7XFxudmFyIG5ld09ubGluZSA9IGZpbGVSb290KycxMyc7XFxudmFyIGp4c1JvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlKaWV4aS5qc29uXFxcIjtcXG52YXIganhPbmxpbmUgPSBmaWxlUm9vdCsnMTQnO1xcbnZhciBjamNhY2hlID0gJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnO1xcbnZhciB4NWNhY2hlID0gJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uaHRtbCc7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6c21hbGwoJ+S9oOWlvSzlsI/nmb0s5Y2z5L2/5ZWl5Lmf5LiN5LyaLOS5n+WPr+S7peeci+aYjueZveS4i+mdoueahOWtl+WQpz8nKSxcXG4gICAgZGVzYzon5aaC5p6c6L+Y5piv5LiN5LyaLOivt+WIoOS7peawuOayuyzlkYrovp7kuI3osKInLFxcbiAgICBjb2xfdHlwZTondGV4dF8xJyxcXG4gICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCk9PntcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/mja7or7TkvaDkuI3mnI3msJQs5LiN5om/6K6k6Ieq5bex5piv5bCP55m9P1xcXFxu54K55oiR5Y+q5piv5Li65LqG5a6j5rOE5LiA5LiL5L2g55qE5oSk5oCSP+WVpeS5n+WIq+ivtOS6hizkuIvljrvmkJ4hJ1xcbiAgICB9KVxcbn0pO1xcbmQucHVzaCh7XFxuICAgdGl0bGU6c21hbGwoJ+WNlemhueino+aekOmAieaLqeeVjOmdouS4u+mimOaYr+S7gOS5iD8nKStjb2xvcign5LiN55+l6YGTLOadpeS4gOS7vemBk+mVv+eahCcsJyM1RkI4NzgnKSxcXG4gICAgZGVzYzon6Ieq5Yqo5ouJ5Y+W6YGT6ZW/55qE5Li76aKY6YWN572u5Lul5Y+K572R6aG15o+S5Lu25ZKM6Z2Z5oCB6aG16Z2iJyxcXG4gICBjb2xfdHlwZTondGV4dF8xJyxcXG4gICB1cmw6JCgn56Gu6K6k5ZCXP+WmguaenOS9oOS4jeaYr+Wwj+eZve+8jOaAu+ivpeS8muaPkOWJjeWkh+S7veiHquW3seS4u+mimOeahOWQpyFcXFxcbicrdGhlbWVSb3V0ZSkuY29uZmlybSgoY2pjYWNoZSx4NWNhY2hlLHRoZW1lUm91dGUsdGhlbWVPbmxpbmUpPT57XFxuICAgICAgIGxldCB0aGVtZUNvZGUgPSBmZXRjaCh0aGVtZU9ubGluZSk7XFxuICAgICAgIGlmKCEvbm93X3RoZW1lLy50ZXN0KHRoZW1lQ29kZSkpe1xcbiAgICAgICAgICAgbG9nKHRoZW1lQ29kZSk7XFxuICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxuICAgICAgIH1cXG4gICAgICAgbGV0IGNqRnJvbSA9IFxcXCJoaWtlcjovL3BhZ2UvUGFyc2VfRG4uanM/cnVsZT1NeUZpZWxk4bSw4oG/XFxcIjtcXG4gICAgICAgbGV0IHg1RnJvbSA9IFxcXCJoaWtlcjovL3BhZ2UvUGFyc2VfRG4uaHRtbD9ydWxlPU15RmllbGThtLDigb9cXFwiO1xcbiAgICAgICB0cnkge1xcbiAgICAgICAgICAgbGV0IGNqRmlsZSA9IEpTT04ucGFyc2UoZmV0Y2goY2pGcm9tKSkucnVsZTtcXG4gICAgICAgICAgIGxldCB4NUZpbGUgPSBKU09OLnBhcnNlKGZldGNoKHg1RnJvbSkpLnJ1bGU7XFxuICAgICAgICAgICB3cml0ZUZpbGUoY2pjYWNoZSwgY2pGaWxlKTtcXG4gICAgICAgICAgIHdyaXRlRmlsZSh4NWNhY2hlLCB4NUZpbGUpO1xcbiAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsIHRoZW1lQ29kZSk7XFxuICAgICAgICAgICBjbGVhclZhcihcXFwianhPbGRWXFxcIik7XFxuICAgICAgICAgICBjbGVhclZhcihcXFwianhOZXdWXFxcIik7XFxuICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5Li76aKY5bey5oiQ5Yqf5bqU55SoJ1xcbiAgICAgICB9XFxuICAgICAgIGNhdGNoKGUpe1xcbiAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S4u+mimOW6lOeUqOWksei0pVxcXFxu5pyq5pyf5pyb55qE6ZSZ6K+vOicrZS5tZXNzYWdlO1xcbiAgICAgICB9XFxuICAgfSxjamNhY2hlLHg1Y2FjaGUsdGhlbWVSb3V0ZSx0aGVtZU9ubGluZSlcXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTpzbWFsbCgn5pat5o+S6Kej5p6Q5Y+K6buY6K6k5YiX6KGo5piv5LuA5LmIPycpK2NvbG9yKCfkuI3nn6XpgZMs5p2l5LiA5Lu96YGT6ZW/55qEJywnIzVGQjg3OCcpLFxcbiAgICBkZXNjOifoh6rliqjmi4nlj5bpgZPplb/lnKjnlKjnmoTkuKTkuKpNeVBhcnNlLmpzb27mlofku7YnLFxcbiAgICBjb2xfdHlwZTondGV4dF8xJyxcXG4gICAgdXJsOiQoJ+ehruiupOWQlz/lpoLmnpzkvaDkuI3mmK/lsI/nmb3vvIzmgLvor6XkvJrmj5DliY3lpIfku73oh6rlt7HnmoTphY3nva7mlofku7blkKchXFxcXG4nK29sZFJvdXRlKydcXFxcbicrbmV3Um91dGUpLmNvbmZpcm0oKG9sZFJvdXRlLG9sZE9ubGluZSxuZXdSb3V0ZSxuZXdPbmxpbmUpPT57XFxuICAgICAgICBsZXQgb2xkQ29kZSA9IGZldGNoKG9sZE9ubGluZSk7XFxuICAgICAgICBsZXQgbmV3Q29kZSA9IGZldGNoKG5ld09ubGluZSk7XFxuICAgICAgICBpZighL1BhcnNlX0RuXFxcXC5qcy8udGVzdChvbGRDb2RlKXx8IS9QYXJzZV9EblxcXFwuanMvLnRlc3QobmV3Q29kZSkpe1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXG4gICAgICAgIH1cXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKG9sZFJvdXRlLCBvbGRDb2RlKTtcXG4gICAgICAgICAgICB3cml0ZUZpbGUobmV3Um91dGUsIG5ld0NvZGUpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5Lop6PmnpDphY3nva7lj4rpu5jorqTliJfooajlt7Lnu4/phY3nva7miJDlip8nXFxuICAgICAgICB9XFxuICAgICAgICBjYXRjaChlKXtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6YWN572u5bqU55So5aSx6LSlXFxcXG7mnKrmnJ/mnJvnmoTplJnor686JytlLm1lc3NhZ2U7XFxuICAgICAgICB9XFxuICAgIH0sb2xkUm91dGUsb2xkT25saW5lLG5ld1JvdXRlLG5ld09ubGluZSlcXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTpzbWFsbCgn5pat5o+S6Kej5p6Q6Ieq5Yqo5qGj5qih5byP5piv5LuA5LmIPycpK2NvbG9yKCfkuI3nn6XpgZMs5p2l5LiA5Lu96YGT6ZW/55qEJywnIzVGQjg3OCcpLFxcbiAgICBkZXNjOifoh6rliqjmi4nlj5bpgZPplb/lnKjnlKjnmoRNeUppZXhpLmpzb27mlofku7YnLFxcbiAgICBjb2xfdHlwZTondGV4dF8xJyxcXG4gICAgdXJsOiQoJ+ehruiupOWQlz/lpoLmnpzkvaDkuI3mmK/lsI/nmb3vvIzmgLvor6XkvJrmj5DliY3lpIfku73oh6rlt7HnmoToh6rliqjmoaPmlrnmoYjlkKchXFxcXG4nK2p4c1JvdXRlKS5jb25maXJtKChqeHNSb3V0ZSxqeE9ubGluZSk9PntcXG4gICAgICAgIGxldCBqeENvZGUgPSBmZXRjaChqeE9ubGluZSk7XFxuICAgICAgICBpZighL2ppZXhpcy8udGVzdChqeENvZGUpKXtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxuICAgICAgICB9XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSwganhDb2RlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S6Kej5p6Q6YWN572u5Y+K6buY6K6k5YiX6KGo5bey57uP6YWN572u5oiQ5YqfJ1xcbiAgICAgICAgfVxcbiAgICAgICAgY2F0Y2goZSl7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+iHquWKqOaho+W6lOeUqOWksei0pVxcXFxu5pyq5pyf5pyb55qE6ZSZ6K+vOicrZS5tZXNzYWdlO1xcbiAgICAgICAgfVxcbiAgICB9LGp4c1JvdXRlLGp4T25saW5lKVxcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOnNtYWxsKCfnnJ/nmoTllaXkuZ/kuI3kvJrkuoYs6L+Y5oeS5b6X5LiA5Liq5Liq54K5PycpK2NvbG9yKCfkuI3nn6XpgZMs5p2l5LiA5Lu96YGT6ZW/55qEJywnIzVGQjg3OCcpLFxcbiAgICBkZXNjOifoh6rliqjmi4nlj5bpgZPplb/lnKjnlKjnmoTkuIrov7DmiYDmnInmlofku7ZcXFxcbuS4gOmUruaQnuWujOebtOaOpeWOu+aUr+aMgeaWreaPkueahOWwj+eoi+W6j+eci+inhumikeWwseihjOWVpicsXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcbiAgICB1cmw6JCgn5L+u5LuZ5rOV5Yqb5peg6L65Jywn56Gu6K6k5ZCXP+WmguaenOS9oOS4jeaYr+Wwj+eZve+8jOaAu+ivpeS8muaPkOWJjeWkh+S7veiHquW3seeahOS4iui/sOaJgOacieaWh+S7tuWQpyFcXFxcbuivt+i+k+WFpemBk+mVv+S/ruS7meazleWKm+aXoOi+ueadpeehruiupOaJp+ihjOatpOaTjeS9nCcpLmlucHV0KChjamNhY2hlLHg1Y2FjaGUsdGhlbWVSb3V0ZSxvbGRSb3V0ZSxuZXdSb3V0ZSxqeHNSb3V0ZSx0aGVtZU9ubGluZSxvbGRPbmxpbmUsbmV3T25saW5lLGp4T25saW5lKT0+e1xcbiAgICAgICAgaWYoaW5wdXQhPT0n6YGT6ZW/5L+u5LuZ5rOV5Yqb5peg6L65Jyl7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+acrOasoeWPlua2iOaJp+ihjCdcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCB0aGVtZUNvZGUgPSBmZXRjaCh0aGVtZU9ubGluZSk7XFxuICAgICAgICBpZighL25vd190aGVtZS8udGVzdCh0aGVtZUNvZGUpKXtcXG4gICAgICAgICAgICBsb2coJ3RoZW1lQ29kZTonK3RoZW1lQ29kZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieS4u+mimOWksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcbiAgICAgICAgfVxcbiAgICAgICAgbGV0IGNqRnJvbSA9IFxcXCJoaWtlcjovL3BhZ2UvUGFyc2VfRG4uanM/cnVsZT1NeUZpZWxk4bSw4oG/XFxcIjtcXG4gICAgICAgIGxldCB4NUZyb20gPSBcXFwiaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmh0bWw/cnVsZT1NeUZpZWxk4bSw4oG/XFxcIjtcXG4gICAgICAgIGxldCBjakZpbGUgPSBKU09OLnBhcnNlKGZldGNoKGNqRnJvbSkpLnJ1bGU7XFxuICAgICAgICBsZXQgeDVGaWxlID0gSlNPTi5wYXJzZShmZXRjaCh4NUZyb20pKS5ydWxlO1xcbiAgICAgICAgbGV0IG9sZENvZGUgPSBmZXRjaChvbGRPbmxpbmUpO1xcbiAgICAgICAgbGV0IG5ld0NvZGUgPSBmZXRjaChuZXdPbmxpbmUpO1xcbiAgICAgICAgaWYoIS9QYXJzZV9EblxcXFwuanMvLnRlc3Qob2xkQ29kZSl8fCEvUGFyc2VfRG5cXFxcLmpzLy50ZXN0KG5ld0NvZGUpKXtcXG4gICAgICAgICAgICAvLyBsb2coJ29sZENvZGU6JytvbGRDb2RlKTtcXG4gICAgICAgICAgICAvLyBsb2coJ25ld0NvZGU6JytuZXdDb2RlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxuICAgICAgICB9XFxuICAgICAgICBsZXQganhDb2RlID0gZmV0Y2goanhPbmxpbmUpO1xcbiAgICAgICAgaWYoIS9qaWV4aXMvLnRlc3QoanhDb2RlKSl7XFxuICAgICAgICAgICAgLy8gbG9nKCdqeENvZGU6JytqeENvZGUpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXG4gICAgICAgIH1cXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKGNqY2FjaGUsIGNqRmlsZSk7IC8vIOaLieaPkuS7tlxcbiAgICAgICAgICAgIHdyaXRlRmlsZSh4NWNhY2hlLCB4NUZpbGUpOyAvL+aLiee9kemhteaWh+S7tlxcbiAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLCB0aGVtZUNvZGUpOyAvL+aLieS4u+mimOaWh+S7tlxcbiAgICAgICAgICAgIGNsZWFyVmFyKFxcXCJqeE9sZFZcXFwiKTtcXG4gICAgICAgICAgICBjbGVhclZhcihcXFwianhOZXdWXFxcIik7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKG9sZFJvdXRlLCBvbGRDb2RlKTsgLy/mi4nmlq3mj5Lpu5jorqTpgInmi6nnlYzpnaLnmoTphY3nva5cXG4gICAgICAgICAgICB3cml0ZUZpbGUobmV3Um91dGUsIG5ld0NvZGUpOyAvL+aLieaWreaPkuWGheeahOino+aekFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSwganhDb2RlKTsgLy8g5ouJ6Ieq5Yqo5qGj5paH5Lu2XFxuICAgICAgICAgICAgYmFjayh0cnVlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S6Kej5p6Q6YWN572u5Y+K6buY6K6k5YiX6KGo5bey57uP6YWN572u5oiQ5YqfJ1xcbiAgICAgICAgfVxcbiAgICAgICAgY2F0Y2goZSl7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S4gOmUruaooeW8j+W6lOeUqOWksei0pVxcXFxu5pyq5pyf5pyb55qE6ZSZ6K+vOicrZS5tZXNzYWdlO1xcbiAgICAgICAgfVxcbiAgICB9LGNqY2FjaGUseDVjYWNoZSx0aGVtZVJvdXRlLG9sZFJvdXRlLG5ld1JvdXRlLGp4c1JvdXRlLHRoZW1lT25saW5lLG9sZE9ubGluZSxuZXdPbmxpbmUsanhPbmxpbmUpXFxufSk7XFxubGV0IGRlc2NJbmZvID0gJ+S4u+mimOaWh+S7tjonK3RoZW1lUm91dGUrJ1xcXFxu5Li755WM6Z2i6YWN572uOicrb2xkUm91dGUrJ1xcXFxu5auW5Yiw55qE6Kej5p6QOicrbmV3Um91dGUrJ1xcXFxu6Ieq5Yqo5qGj6Kej5p6QOicranhzUm91dGU7XFxuZGVzY0luZm8rPSdcXFxcbuS4u+aPkuS7tjonK2NqY2FjaGUrJ1xcXFxu5Li76YWN572u6YCJ5oup55WM6Z2i5paH5Lu2OicreDVjYWNoZTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTon5paH5Lu25o+P6L+wOlxcXFxuJytkZXNjSW5mbyxcXG4gICAgY29sX3R5cGU6J2xvbmdfdGV4dCcsXFxuICAgIGV4dHJhOnt0ZXh0U2l6ZTogMTMsbGluZVZpc2libGU6ZmFsc2V9XFxufSk7XFxuc2V0UmVzdWx0KGQpO1wifV0iLCJpY29uIjoiaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL21vdmllLzQuc3ZnIn0=
Add Comment
Please, Sign In to add comment