Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@福利吧Ⓜ️@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi56aP5Yip5ZCn4pOC77iPIiwiYXV0aG9yIjoiIiwidXJsIjoiaGlrZXI6Ly9lbXB0eSNmeUFsbCNmeXBhZ2UjaHR0cHM6Ly9mdWxpYmEyMDIxLm5ldCIsInZlcnNpb24iOjEsImNvbF90eXBlIjoibW92aWVfMV92ZXJ0aWNhbF9waWMiLCJjbGFzc19uYW1lIjoiIiwidHlwZSI6Im90aGVyIiwiY2xhc3NfdXJsIjoiIiwiYXJlYV9uYW1lIjoiIiwiYXJlYV91cmwiOiIiLCJzb3J0X25hbWUiOiIiLCJ5ZWFyX25hbWUiOiIiLCJzb3J0X3VybCI6IiIsInllYXJfdXJsIjoiIiwiZmluZF9ydWxlIjoianM6XG4vL+S7peS4i+aYryDliJfooajop6PmnpDop4TliJnvvIhKU++8iVxudmFyIHJlcyA9IHt9O1xudmFyIGl0ZW0gPSBbXTtcblxuLy8gdmFyIHR5cGU9TVlfVVJMLnNwbGl0KCcjJylbMV07XG52YXIgcGFnZT1NWV9VUkwuc3BsaXQoJyMnKVsyXTtcbnZhciBtVXJsPU1ZX1VSTC5zcGxpdCgnIycpWzNdO1xuXG5pZihnZXRNeVZhcignZnVsaWJhLnRpdGxlQ29sb3InKT09XCJcIikgcHV0TXlWYXIoJ2Z1bGliYS50aXRsZUNvbG9yJyxcIiNGQTcyOThcIik7XG5pZihnZXRNeVZhcignZnVsaWJhLmRlc2NDb2xvcicpPT1cIlwiKSBwdXRNeVZhcignZnVsaWJhLmRlc2NDb2xvcicsXCIjNzA4MDkwXCIpO1xuXG5pZihnZXRNeVZhcignZnVsaWJhLmNhdGVnb3J5TnVtJyk9PVwiXCIpIHB1dE15VmFyKCdmdWxpYmEuY2F0ZWdvcnlOdW0nLCcwJyk7XG5pZihnZXRNeVZhcignZnVsaWJhLnVybCcpPT1cIlwiKSBwdXRNeVZhcignZnVsaWJhLnVybCcsbVVybCk7XG5cbi8v6Ieq5a6a5LmJ6aKc6ImyXG5jb25zdCB0aXRsZUNvbG9yPWdldE15VmFyKCdmdWxpYmEudGl0bGVDb2xvcicpO1xuY29uc3QgZGVzY0NvbG9yID0gZ2V0TXlWYXIoJ2Z1bGliYS5kZXNjQ29sb3InKTtcblxuY29uc3QgY2F0ZWdvcnlOdW0gPSBnZXRNeVZhcignZnVsaWJhLmNhdGVnb3J5TnVtJyk7XG5jb25zdCBjbGlja1VybCA9IGdldE15VmFyKCdmdWxpYmEudXJsJyk7XG5cblxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoXCJoaWtlcjovL3BhZ2UvdXNlc1wiKSkucnVsZSk7XG5pZihwYWdlID09PSAnMScpe1xuXG4gICAgdmFyIHRDb2xvciA9IGdldFJhbmdlQ29sb3JzKCk7XG4gICAgdmFyIGRDb2xvciA9IGdldFJhbmdlQ29sb3JzKCk7XG4gICAgdmFyIG1IdG1sID0gcmVxdWVzdChtVXJsLHt9KTtcblxuICAgIHZhciBjYXRlZ29yeU9uZSA9IHBhcnNlRG9tRm9yQXJyYXkobUh0bWwsICcjbWVudS1pdGVtLTIyOTkmJmEnKTtcbiAgICB2YXIgY2F0ZWdvcnlUd28gPSBwYXJzZURvbUZvckFycmF5KG1IdG1sLCAnLml0ZW1zJiZhJyk7XG5cbiAgICB2YXIgY2F0ZWdvcmllcyA9IFtdO1xuICAgIGNhdGVnb3JpZXMucHVzaChnZXRBZGRyZXNzVGFnKG1VcmwsJ+emj+WIqeWQpycpKTtcbiAgICBjYXRlZ29yaWVzLnB1c2guYXBwbHkoY2F0ZWdvcmllcyxjYXRlZ29yeU9uZSk7XG4gICAgY2F0ZWdvcmllcy5wdXNoLmFwcGx5KGNhdGVnb3JpZXMsY2F0ZWdvcnlUd28pO1xuICAgIGNvbnN0IGNhdGVnb3JpZXNBcnJheSA9IGNhdGVnb3JpZXM7XG5cbiAgICBjYXRlZ29yaWVzQXJyYXkuZm9yRWFjaCgoY2F0ZWdvcnksIGluZGV4KSA9PiB7XG4gICAgICAgIGxldCB0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbChjYXRlZ29yeSwnYSYmVGV4dCcpO1xuICAgICAgICBsZXQgdGl0bGVOdW0gPSB0aXRsZS5zcGxpdChcIiBcIilbMV07XG4gICAgICAgIGxldCB1cmwgPSBwYXJzZURvbUZvckh0bWwoY2F0ZWdvcnksJ2EmJmhyZWYnKTtcbiAgICAgICAgaWYoaW5kZXggPT0gMSkgdGl0bGUgPSB0aXRsZS5yZXBsYWNlKFwi56aP5Yip5ZCnXCIsXCLmnIDmlrDnpo/liKlcIik7XG4gICAgICAgIGlmKGluZGV4ID4gOSl7XG4gICAgICAgICAgICB0aXRsZSA9IHRpdGxlLnNwbGl0KFwiIFwiKVswXTtcbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICB0aXRsZU51bSA9IFwiKOKInilcIjtcbiAgICAgICAgfVxuICAgICAgICBpZih1cmwuaW5kZXhPZihcIi9cIikgPT0gMCkgdXJsID0gbVVybCArIHVybDtcbiAgICAgICAgaXRlbS5wdXNoKHtcblxuICAgICAgICAgICAgdGl0bGU6IGluZGV4LnRvU3RyaW5nKCk9PT1nZXRNeVZhcignZnVsaWJhLmNhdGVnb3J5TnVtJyk/J+KAnOKAnOKAneKAnTxiPjxmb250IGNvbG9yPScrdGl0bGVDb2xvcisnPicrdGl0bGUrJzwvZm9udD48L2I+Jysn4oCc4oCc4oCd4oCdPHNtYWxsPjxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9JytcIiNGQTcyOThcIisnPicrdGl0bGVOdW0rJyA8L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPjwvc21hbGw+Jzp0aXRsZSxcbiAgICAgICAgICAgIHVybDogJCh1cmwpLmxhenlSdWxlKChwYXJhbXMpID0+IHtcblxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFwiZnVsaWJhLmNhdGVnb3J5TnVtXCIsIHBhcmFtcy5pbmRleC50b1N0cmluZygpKTtcbiAgICAgICAgICAgICAgICBwdXRNeVZhcignZnVsaWJhLnVybCcscGFyYW1zLnVybCk7XG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2Z1bGliYS50aXRsZUNvbG9yJyxwYXJhbXMudENvbG9yKTtcbiAgICAgICAgICAgICAgICBwdXRNeVZhcignZnVsaWJhLmRlc2NDb2xvcicscGFyYW1zLmRDb2xvcik7XG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiaGlrZXI6Ly9lbXB0eVwiO1xuICAgICAgICAgICAgfSwge2luZGV4OiBpbmRleCx1cmw6IHVybCx0Q29sb3I6IHRDb2xvcixkQ29sb3I6IGRDb2xvcix9KSxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXG4gICAgICAgIH0pO1xuICAgICAgICBpZihpbmRleCA9PSA0IHx8IGluZGV4ID09IDkgfHwgaW5kZXggPT0gMjEpIGl0ZW0ucHVzaCh7Y29sX3R5cGU6XCJibGFua19ibG9ja1wifSk7XG4gICAgfSlcbiAgICBpdGVtLnB1c2goe2NvbF90eXBlOlwiYmxhbmtfYmxvY2tcIn0pO1xufVxuXG5cbnZhciB1bCA9IGNsaWNrVXJsK1wiL3BhZ2UvXCIrcGFnZTtcbnZhciBzdGF0dXMgPSBKU09OLnBhcnNlKGZldGNoKHVsLCB7aGVhZGVyczp7XCJVc2VyLUFnZW50XCI6TU9CSUxFX1VBLFwiUmVmZXJlclwiOnVsfSwgcmVkaXJlY3Q6ZmFsc2UsIHdpdGhIZWFkZXJzOnRydWV9KSk7XG5cbmlmKHN0YXR1cy5zdGF0dXNDb2RlIT09NDA0KXtcbiAgICB2YXIgaHRtbD1mZXRjaCh1bCx7fSk7XG4gICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoXCJoaWtlcjovL3BhZ2Uvb25lXCIpKS5ydWxlKTtcbiAgICBpdGVtLnB1c2guYXBwbHkoaXRlbSxnZXRJdGVtKGh0bWwsZGVzY0NvbG9yKSk7XG59XG5cbnJlcy5kYXRhID0gaXRlbTtcbnNldEhvbWVSZXN1bHQocmVzKTsiLCJzZWFyY2hfdXJsIjoiaGlrZXI6Ly9lbXB0eSNmeXBhZ2UjKiojaHR0cHM6Ly9mdWxpYmEyMDIxLm5ldCIsImdyb3VwIjoi5YW25a6DIiwic2VhcmNoRmluZCI6ImpzOlxuLy/ku6XkuIvmmK8g5YiX6KGo6Kej5p6Q6KeE5YiZ77yISlPvvIlcblxudmFyIHBhZ2U9TVlfVVJMLnNwbGl0KCcjJylbMV07XG52YXIgc2VhcmNobj1NWV9VUkwuc3BsaXQoJyMnKVsyXTtcbnZhciBtVXJsPU1ZX1VSTC5zcGxpdCgnIycpWzNdO1xuXG52YXIgdWwgPSBtVXJsK1wiL3BhZ2UvXCIrIHBhZ2UrXCIvP3M9XCIrc2VhcmNobjtcbnZhciBzdGF0dXMgPSBKU09OLnBhcnNlKGZldGNoKHVsLCB7aGVhZGVyczp7XCJVc2VyLUFnZW50XCI6TU9CSUxFX1VBLFwiUmVmZXJlclwiOnVsfSwgcmVkaXJlY3Q6ZmFsc2UsIHdpdGhIZWFkZXJzOnRydWV9KSk7XG5cbnZhciByZXMgPSB7fTtcbnZhciBpdGVtPVtdO1xuXG5pZihzdGF0dXMuc3RhdHVzQ29kZSE9PTQwNCl7XG4gICAgdmFyIGh0bWw9ZmV0Y2godWwse30pO1xuICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KFwiaGlrZXI6Ly9wYWdlL29uZVwiKSkucnVsZSk7XG4gICAgaXRlbT1nZXRTZWFyY2hJdGVtKGh0bWwpO1xufVxuXG5yZXMuZGF0YSA9IGl0ZW07XG5zZXRIb21lUmVzdWx0KHJlcyk7IiwiZGV0YWlsX2NvbF90eXBlIjoicmljaF90ZXh0IiwiZGV0YWlsX2ZpbmRfcnVsZSI6ImpzOlxudmFyIHJlcz17fTtcbnZhciBkPVtdO1xuXG4vL+ingueci+aWh+eroOaooeW8jyDpu5jorqTmqKHlvI/lm77mloflubbojIIvMCDnnIvlm77mqKHlvI8vMSDnnIHmtYHmqKHlvI8vMiDpmIXor7vmqKHlvI8vM1xuaWYoZ2V0TXlWYXIoJ2Z1bGliYS5zaG93TW9kZScpPT0nJykgcHV0TXlWYXIoJ2Z1bGliYS5zaG93TW9kZScsJzAnKTtcblxuXG4vL+WbvueJh+aYvuekuuaooeW8jyDnvZHpobXlhoXltYzlm77niYcvMCDpu5jorqTmtbfpmJTmmL7npLrlm77niYcvMVxuaWYoZ2V0TXlWYXIoJ2Z1bGliYS52aWV3UGljTW9kZScpPT0nJykgcHV0TXlWYXIoJ2Z1bGliYS52aWV3UGljTW9kZScsJzEnKTtcbmlmKGdldE15VmFyKCdmdWxpYmEub3BlbkNvbW1lbnQnKT09JycpIHB1dE15VmFyKCdmdWxpYmEub3BlbkNvbW1lbnQnLCcwJyk7XG5cbmlmKGdldE15VmFyKCdmdWxpYmEudmlld1BpY01vZGUnKT09JzAnICYmIGdldE15VmFyKCdmdWxpYmEuaGlkZUltZycpPT0nJykgcHV0TXlWYXIoJ2Z1bGliYS5oaWRlSW1nJywnMScpO1xuXG5pZihnZXRNeVZhcignZnVsaWJhLnZpZXdQaWNNb2RlJyk9PScxJyAmJiBnZXRNeVZhcignZnVsaWJhLmJpZ0ltZycpPT0nJykgcHV0TXlWYXIoJ2Z1bGliYS5iaWdJbWcnLCdwaWNfMV9mdWxsJyk7XG5cblxubGV0IGltYWdlVGV4dEFycmF5ID0gWyfwn4yD5Zu+5paH5bm26IyCJywn8J+Rgeeci+WbvuaooeW8jycsJ/Cfk7HnnIHmtYHmqKHlvI8nLCfwn5Oa6ZiF6K+75qih5byPJ107XG5wdXRNeVZhcignZnVsaWJhLmltYWdlVGV4dE1vZGUnLGltYWdlVGV4dEFycmF5W3BhcnNlSW50KGdldE15VmFyKCdmdWxpYmEuc2hvd01vZGUnKSldKTtcblxubGV0IHZpZXdQaWNBcnJheSA9IFt7MDpcIuaYvuekuuWbvueJh/CfjIxcIiwxOlwi6ZqQ6JeP5Zu+54mH8J+Ul1wifSx7IHBpY18xX2Z1bGw6XCLpu5jorqTlpKflm77wn4yIXCIsIHBpY18zOlwi57K+576O5bCP5Zu+4pyoXCJ9XTtcbmlmKGdldE15VmFyKCdmdWxpYmEudmlld1BpY01vZGUnKT09JzEnKSBwdXRNeVZhcignZnVsaWJhLmltZ01vZGUnLHZpZXdQaWNBcnJheVsxXVtnZXRNeVZhcignZnVsaWJhLmJpZ0ltZycpXSk7XG5pZihnZXRNeVZhcignZnVsaWJhLnZpZXdQaWNNb2RlJyk9PScwJykgcHV0TXlWYXIoJ2Z1bGliYS5pbWdNb2RlJyx2aWV3UGljQXJyYXlbMF1bcGFyc2VJbnQoZ2V0TXlWYXIoJ2Z1bGliYS5oaWRlSW1nJykpXSk7XG5cbnZhciBwaWNUeXBlID0gJyc7XG5pZihnZXRNeVZhcignZnVsaWJhLnZpZXdQaWNNb2RlJyk9PScxJykgcGljVHlwZSA9IGBAbGF6eVJ1bGU9LmpzOnB1dE15VmFyKCdmdWxpYmEuYmlnSW1nJyxnZXRNeVZhcignZnVsaWJhLmJpZ0ltZycpIT09J3BpY18zJz8ncGljXzMnOidwaWNfMV9mdWxsJyk7cmVmcmVzaFBhZ2UoKTsndG9hc3Q6Ly/lt7LliIfmjaLlm77niYfnsbvlnosnO1wiPmA7XG5pZihnZXRNeVZhcignZnVsaWJhLnZpZXdQaWNNb2RlJyk9PScwJykgcGljVHlwZSA9IGBAbGF6eVJ1bGU9LmpzOnB1dE15VmFyKCdmdWxpYmEuaGlkZUltZycsZ2V0TXlWYXIoJ2Z1bGliYS5oaWRlSW1nJykhPT0nMCc/JzAnOicxJyk7cmVmcmVzaFBhZ2UoKTsndG9hc3Q6Ly/lt7LliIfmjaLlm77niYfnsbvlnosnO1wiPmA7XG5cbnZhciBjb21tZW50QXJyYXkgPSBbJ+W3suWFs+mXreivhOiuuicsJ+W3suW8gOWQr+ivhOiuuiddO1xucHV0TXlWYXIoJ2Z1bGliYS5vcGVuQ29tbWVudFN0cmluZycsY29tbWVudEFycmF5W3BhcnNlSW50KGdldE15VmFyKCdmdWxpYmEub3BlbkNvbW1lbnQnKSldKVxudmFyIGNvbW1lbnRUeXBlID0gYEBsYXp5UnVsZT0uanM6cHV0TXlWYXIoJ2Z1bGliYS5vcGVuQ29tbWVudCcsZ2V0TXlWYXIoJ2Z1bGliYS5vcGVuQ29tbWVudCcpIT09JzAnPycwJzonMScpO3JlZnJlc2hQYWdlKCk7J3RvYXN0Oi8vJytnZXRNeVZhcignZnVsaWJhLm9wZW5Db21tZW50U3RyaW5nJyk7XCI+YDtcblxuLy8gaWYoZ2V0TXlWYXIoJ2Z1bGliYS5zaG93TW9kZScpPT0nMCcpIHB1dE15VmFyKCdmdWxpYmEuaW1hZ2VUZXh0TW9kZScsJ/CfjIPlm77mloflubbojIInKTtcbi8vIGlmKGdldE15VmFyKCdmdWxpYmEuc2hvd01vZGUnKT09JzEnKSBwdXRNeVZhcignZnVsaWJhLmltYWdlVGV4dE1vZGUnLCfwn5GB55yL5Zu+5qih5byPJyk7XG4vLyBpZihnZXRNeVZhcignZnVsaWJhLnNob3dNb2RlJyk9PScyJykgcHV0TXlWYXIoJ2Z1bGliYS5pbWFnZVRleHRNb2RlJywn8J+MkOecgea1geaooeW8jycpO1xuLy8gaWYoZ2V0TXlWYXIoJ2Z1bGliYS5zaG93TW9kZScpPT0nMycpIHB1dE15VmFyKCdmdWxpYmEuaW1hZ2VUZXh0TW9kZScsJ/Cfk5rpmIXor7vmqKHlvI8nKTtcblxuXG5cbnZhciBnb29kQ29sb3IgPSAnIzQwMDBGRic7XG52YXIgc2l6ZSA9IDE2O1xudmFyIGh0bWw9Z2V0UmVzQ29kZSgpO1xuXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdChcImhpa2VyOi8vcGFnZS9jc3NcIikpLnJ1bGUpO1xuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoXCJoaWtlcjovL3BhZ2Uvdmlld1wiKSkucnVsZSk7XG5cblxuZnVuY3Rpb24gZ2V0QmFpZHVZdW5Db2RlKGNvbnRlbnQpe1xuICAgIGlmKGNvbnRlbnQuaW5jbHVkZXMoJ3Bhbi5iYWlkdS5jb20nKSl7XG4gICAgICAgIGxldCBjb2RlID0gY29udGVudC5zcGxpdCgn5o+Q5Y+W56CB77yaJyk7XG4gICAgICAgIGlmKGNvZGUubGVuZ3RoPjEpIGNvcHkoY29kZVsxXS5zdWJzdHJpbmcoMCw0KSk7XG4gICAgfVxufVxuXG52YXIgbWF4UGFnZSA9IDE7XG50cnkge1xuICAgIG1heFBhZ2UgPSAgcGFyc2VJbnQgKHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwnLmFydGljbGUtcGFnaW5nJiZhJykubGVuZ3RoKzEpO1xufSBjYXRjaCAoZSkgeyB9XG5cblxubGV0IGhlYWRlclRpdGxlID0gZ2V0QmlnVGV4dChnZXRTdHJvbmdUZXh0KHBhcnNlRG9tRm9ySHRtbChodG1sLCAnLmFydGljbGUtdGl0bGUmJlRleHQnKSkpICsgJyAnICsgZ2V0U21hbGxUZXh0KGdldEFkZHJlc3NUYWcoTVlfVVJMLCAnW+afpeeci+WOn+aWh/CfkYBdJykpO1xuXG5sZXQgZ29vZENvdW50ID0gJ/CfkY3wn4+754K5JytwYXJzZURvbUZvckh0bWwoaHRtbCwgJy5hY3Rpb24uYWN0aW9uLWxpa2UmJlRleHQnKTtcbmdvb2RDb3VudCA9ICc8Zm9udCBjb2xvcj1cIicgKyBnb29kQ29sb3IgKyAnXCI+JyArIGdvb2RDb3VudCBcbisgYDxzbWFsbD48c21hbGw+PHN1cD48YSBocmVmPVwiaGlrZXI6Ly9lbXB0eWAgKyBjb21tZW50VHlwZSArIGdldE15VmFyKCdmdWxpYmEub3BlbkNvbW1lbnRTdHJpbmcnKS5zdWJzdHJpbmcoMSwyKSArIFwiPC9hPjwvc3VwPjwvc21hbGw+PC9zbWFsbD48L2ZvbnQ+XCI7XG5cbmxldCBicm93ZXIgPSBgPGJpZz48YSBocmVmPVwiaGlrZXI6Ly9lbXB0eUBsYXp5UnVsZT0uanM6cHV0TXlWYXIoJ2Z1bGliYS5icm93c2VyTGluaycsZ2V0TXlWYXIoJ2Z1bGliYS5icm93c2VyTGluaycpIT09Jyc/Jyc6J3dlYjovLycpO3JlZnJlc2hQYWdlKCk7J3RvYXN0Oi8v5bey5YiH5o2i5rWP6KeI5qih5byPJztcIj5gKyhnZXRNeVZhcignZnVsaWJhLmJyb3dzZXJMaW5rJykhPT0nJz9cIvCfjJBcIjpcIvCfjIZcIikrXCI8L2E+PC9iaWc+XCI7XG5cbi8vdmFyIHN1YlRpbWUgPSBnZXRDb2RlVGV4dChwYXJzZURvbUZvckh0bWwoaHRtbCwnLmFydGljbGUtbWV0YS0tYSYmbGksMCYmVGV4dCcpLnJlcGxhY2UoJ+WPkeW4g+S6jicsJ+aXpeacnzonKSk7XG5cbmxldCBzdWJUeXBlID0gW107XG50cnl7XG4gICAgc3ViVHlwZSA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwnLmFydGljbGUtdGFncyYmYScpO1xufWNhdGNoKGUpe31cbmlmKHN1YlR5cGUubGVuZ3RoPT0wKSBzdWJUeXBlID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCcuYXJ0aWNsZS1tZXRhJiZzcGFuLDEmJmEnKTtcblxuXG5sZXQgdHlwZT1nZXRDb2RlVGV4dCgn8J+Pt++4j+agh+etvjogJyk7XG5mb3IobGV0IGk9MDtpPHN1YlR5cGUubGVuZ3RoO2krKyl7XG4gICAgdHlwZSArPSBnZXRDb2RlVGV4dChwYXJzZURvbUZvckh0bWwoc3ViVHlwZVtpXSwnYSYmVGV4dCcpKTtcbn1cblxubGV0IGNvbW1lbnQ9W107XG50cnl7XG4gICAgY29tbWVudCA9IHBhcnNlRG9tRm9yQXJyYXkoaHRtbCwnI3Bvc3Rjb21tZW50cyYmLmRlcHRoLTEnKTtcbn1jYXRjaChlKXt9XG5cbi8vaWYoaGVhZGVyVGl0bGUuaW5jbHVkZXMoJ+Wls+elnicpIHx8IGhlYWRlclRpdGxlLmluY2x1ZGVzKCflhpnnnJ8nKSB8fCBoZWFkZXJUaXRsZS5pbmNsdWRlcygn5aWX5Zu+JykgfHx0eXBlLmluY2x1ZGVzKCflroXnlLflpbPnpZ4nKSB8fCB0eXBlLmluY2x1ZGVzKCflhpnnnJ/lpZflm74nKSkgcHV0TXlWYXIoJ2ltZycsJ3BpY18zJyk7XG5cbmQucHVzaCh7dGl0bGU6IGhlYWRlclRpdGxlKycmbmJzcDsnICtnb29kQ291bnQrJyZuYnNwOycrYnJvd2VyKyc8YnI+Jyt0eXBlLH0pO1xuZC5wdXNoKHtjb2xfdHlwZTonbGluZSd9KTtcblxuLy8gdmFyIHRpcHMgPSBnZXRDb2xvclRleHQoJ+a4qemmqOaPkOekujrlm77niYfmuIXmmbDluqbovoPpq5jvvIzliqDovb3pgJ/luqblj5blhrPkuo7nvZHpgJ/vvIHvvIHvvIEnLCcjRjQ3OTIwJyk7XG4vL2lmKGdldE15VmFyKCdpbWcnKT09J3BpY18zJykgZC5wdXNoKHt0aXRsZTogdGlwcyx9KTtcblxuXG5kLnB1c2goe2NvbF90eXBlOlwicmljaF90ZXh0XCIsdGl0bGU6XG4gICAgYDxzbWFsbD7lvZPliY08YSBocmVmPVwiaGlrZXI6Ly9lbXB0eUBsYXp5UnVsZT0uanM6cHV0TXlWYXIoJ2Z1bGliYS52aWV3UGljTW9kZScsZ2V0TXlWYXIoJ2Z1bGliYS52aWV3UGljTW9kZScpIT09JzAnPycwJzonMScpO3JlZnJlc2hQYWdlKCk7J3RvYXN0Oi8v5bey5YiH5o2i5Zu+54mH5pi+56S65qih5byPJztcIj5gKyhnZXRNeVZhcignZnVsaWJhLnZpZXdQaWNNb2RlJykhPT0nMCc/XCLmtbfpmJTmqKHlvI9cIjpcIue9kemhteaooeW8j1wiKStcIjwvYT7wn5GIPC9zbWFsbD5cIlxuICAgICtgPHNtYWxsPuS4uu+8mjxhIGhyZWY9XCJoaWtlcjovL2VtcHR5YCtwaWNUeXBlK2dldE15VmFyKCdmdWxpYmEuaW1nTW9kZScpK1wiPC9hPjwvc21hbGw+XCJcbiAgICArJyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOydcbiAgICArYDxzbWFsbD7mqKHlvI/vvJo8YSBocmVmPVwiaGlrZXI6Ly9lbXB0eUBsYXp5UnVsZT0uanM6aWYoZ2V0TXlWYXIoJ2Z1bGliYS5zaG93TW9kZScpPT0nMycpe3B1dE15VmFyKCdmdWxpYmEuc2hvd01vZGUnLCcwJyl9ZWxzZXtwdXRNeVZhcignZnVsaWJhLnNob3dNb2RlJywocGFyc2VJbnQoZ2V0TXlWYXIoJ2Z1bGliYS5zaG93TW9kZScpKSsxKS50b1N0cmluZygpKTt9O3JlZnJlc2hQYWdlKCk7J3RvYXN0Oi8v5bey5YiH5o2i5paH56ug5qih5byPJztcIj5gK2dldE15VmFyKCdmdWxpYmEuaW1hZ2VUZXh0TW9kZScpK1wiPC9hPjwvc21hbGw+XCJcbn0pO1xuXG52YXIgY29udGVudCA9ICcnO1xuZm9yIChsZXQgaSA9IDE7IGkgPD0gbWF4UGFnZTsgaSsrKSB7XG4gICAgaWYoaSA+IDEpIGh0bWwgPSBmZXRjaChNWV9VUkwucmVwbGFjZSgnLmh0bWwnLCAnLmh0bWwvJyArIChpKSkse30pO1xuXG4gICAgbGV0IGNvbnRlbnRaZXJvID0gcGFyc2VEb21Gb3JIdG1sKGh0bWwsICcuYXJ0aWNsZS1jb250ZW50JiZIdG1sJyk7XG4gICAgaWYobWF4UGFnZSA+IDEpeyAgICBcbiAgICAgICAgY29udGVudFplcm8gPSBjb250ZW50WmVyby5zcGxpdCgnPHNwYW4gY2xhc3M9XCJ3cF9rZXl3b3JkbGlua1wiPjxhIGhyZWYnKVswXTtcbiAgICB9XG5cbiAgICBpZihpPjEpe1xuICAgICAgICB0cnl7XG4gICAgICAgICAgICBsZXQgbm90X2NvcHkgPSBwYXJzZURvbUZvckh0bWwoY29udGVudFplcm8sICcuYXJ0aWNsZS11cGRhdGUtdGlwcyYmSHRtbCcpO1xuICAgICAgICAgICAgY29udGVudFplcm8gPSBjb250ZW50WmVyby5yZXBsYWNlKG5vdF9jb3B5LCAnJyk7XG4gICAgICAgIH1jYXRjaChlKXt9XG4gICAgfVxuICAgIGNvbnRlbnQgKz0gY29udGVudFplcm87XG59XG5cbi8vIGdldEJhaWR1WXVuQ29kZShjb250ZW50KTtcblxuXG5jb250ZW50ID0gY29udGVudFxuICAgIC5yZXBsYWNlKC88YnI+L2csICcnKVxuICAgIC5yZXBsYWNlKC9cXG48cD4mbmJzcDs8XFwvcD4vZywnJylcbiAgICAucmVwbGFjZSgvXFxuPHA+PFxcL3A+L2csJycpXG4gICAgLnJlcGxhY2UoLzxwcmU+KFtcXHNcXFNdKj8pPFxcL3ByZT4vZywnJylcbiAgICAucmVwbGFjZSgvPHA+L2csJyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOycpXG4gICAgLnJlcGxhY2UoLzxcXC9wPi9nLCc8YnI+JylcbiAgICAucmVwbGFjZVdpdGhDYWxsYmFjaygvPGEoLio/KSBocmVmPVwiKC4qPylhbGl5dW5kcml2ZSguKj8pXCIoLio/KTxcXC9hPi9nLCAnPGEgZGF0YS12PicsIGFUYWdSZXBsYWNlbWVudDIpO1xuICAgIC8v6Z2e5bi46ICX5pe25ZKM5YaF5a2YXG4gICAgLy8gLnJlcGxhY2VXaXRoQ2FsbGJhY2soLzxpbWcoW1xcc1xcU10qPyk+L2csICcnLCBkZWxldGVJbnZhbGlkSW1nVGFnKTtcblxuaWYoZ2V0TXlWYXIoJ2Z1bGliYS5zaG93TW9kZScpPT0nMicgfHwgZ2V0TXlWYXIoJ2Z1bGliYS5zaG93TW9kZScpPT0nMycpIGNvbnRlbnQgPSBjb250ZW50LnJlcGxhY2UoLzxpbWcoW1xcc1xcU10qPyk+L2csJycpXG4gIC5yZXBsYWNlKC9cXG48cD48c3Ryb25nPjxcXC9zdHJvbmc+PFxcL3A+L2csJycpO1xuXG5pZihnZXRNeVZhcignZnVsaWJhLnZpZXdQaWNNb2RlJyk9PScxJyl7XG4gICAgbGV0IGNvbnRlbnRsaXN0ID0gY29udGVudC5zcGxpdCgnXFxuJyk7XG4gICAgbGV0IGh0bWxMaXN0ID0gJyc7XG4gICAgZm9yKGxldCBqPTA7ajxjb250ZW50bGlzdC5sZW5ndGg7aisrKXtcbiAgICAgICAgbGV0IGltZ2xpc3QgPSBpbWdUYWdHZXRVcmxBcnJheShjb250ZW50bGlzdFtqXSwvPGltZyhbXFxzXFxTXSo/KT4vZyk7XG4gICAgICAgIGxldCBxdW90ZUNvbnRlbnQgPSBjb250ZW50bGlzdFtqXTtcbiAgICAgICAgLy/mlofnq6DlhoXlrrkt566A5Y2V5paH5pysXG4gICAgICAgIHF1b3RlQ29udGVudCA9IHF1b3RlQ29udGVudFxuICAgICAgICAgICAgLnJlcGxhY2UoLzxpbWcoW1xcc1xcU10qPyk+L2csJycpXG4gICAgICAgICAgICAvLyAucmVwbGFjZSgvPChpZnJhbWV8c291cmNlc3x2aWRlbykoW1xcc1xcU10qPyk8XFwvKGlmcmFtZXxzb3VyY2VzfHZpZGVvKT4vZywnJylcbiAgICAgICAgICAgIC5yZXBsYWNlV2l0aENhbGxiYWNrKC88KGlmcmFtZSkoW1xcc1xcU10qPyk8XFwvKGlmcmFtZSk+L2csICc8bGluayBkYXRhLXY+JywgbGlua1RhZ1JlcGxhY2VtZW50MilcbiAgICAgICAgICAgIC5yZXBsYWNlV2l0aENhbGxiYWNrKC88KHNvdXJjZXx2aWRlbykoW1xcc1xcU10qPyk8XFwvKHNvdXJjZXx2aWRlbyk+L2csICc8dmlkZW8gZGF0YS12PicsIHZpZGVvVGFnUmVwbGFjZW1lbnQyKTtcbiAgICAgICAgICAgIC8vIC5yZXBsYWNlKC88cD48XFwvcD4vZywnJyk7XG5cblxuXG4gICAgICAgIGxldCB0ZW1wID0gcGFyc2VEb21Gb3JIdG1sKGdldE5ld1RleHQocXVvdGVDb250ZW50LCdkaXYnKSwgJ1RleHQnKTtcbiAgICAgICAgaWYoZ2V0TXlWYXIoJ2Z1bGliYS5zaG93TW9kZScpPT0nMycpe1xuICAgICAgICAgICAgaWYoIXRlbXAubWF0Y2goL15cXHMqJC8pKSBodG1sTGlzdCArPSAn4peHJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7JyArIHRlbXAgKyAnPGJyPic7XG4gICAgICAgICAgICBpZihqPT1jb250ZW50bGlzdC5sZW5ndGgtMSAmJiBodG1sTGlzdCAhPT0gJycpe1xuICAgICAgICAgICAgICAgIGQucHVzaCh7dGl0bGU6IGh0bWxMaXN0LFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0U2l6ZTogc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IHRydWVcbiAgICAgICAgICAgICAgICB9fSk7XG4gICAgICAgICAgICAgICAgaHRtbExpc3QgPSAnJztcbiAgICAgICAgICAgIH1cbiAgICAgICAgfWVsc2V7XG4gICAgICAgICAgICBpZighdGVtcC5tYXRjaCgvXlxccyokLykgfHwgcXVvdGVDb250ZW50LmluY2x1ZGVzKCdibG9ja3F1b3RlPicpIHx8IChxdW90ZUNvbnRlbnQuaW5jbHVkZXMoJ2Rpdj4nKSAmJiBxdW90ZUNvbnRlbnQubWF0Y2goLzwoZGl2KShbXFxzXFxTXSo/KTxcXC8oZGl2KT4vZykgPT0gbnVsbCkpIGh0bWxMaXN0ICs9IHF1b3RlQ29udGVudDtcbiAgICAgICAgICAgIGlmKGltZ2xpc3QubGVuZ3RoID4gMCB8fCBqPT1jb250ZW50bGlzdC5sZW5ndGgtMSl7XG4gICAgICAgICAgICAgICAgbGV0IHRlbXAgPSBwYXJzZURvbUZvckh0bWwoZ2V0TmV3VGV4dChodG1sTGlzdCwnZGl2JyksICdUZXh0Jyk7XG4gICAgICAgICAgICAgICAgaWYoIXRlbXAubWF0Y2goL15cXHMqJC8pICYmIGdldE15VmFyKCdmdWxpYmEuc2hvd01vZGUnKSE9PScxJykgZC5wdXNoKHt0aXRsZTogaHRtbExpc3QsXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRleHRTaXplOiBzaXplLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgICAgICB9fSk7XG4gICAgICAgICAgICAgICAgaHRtbExpc3QgPSAnJztcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IGltZ2xpc3QubGVuZ3RoOyBrKyspe1xuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xuICAgICAgICAgICAgICAgICAgICAgICAgcGljX3VybDppbWdsaXN0W2tdLFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOmdldE15VmFyKCdmdWxpYmEuYnJvd3NlckxpbmsnKStpbWdsaXN0W2tdLFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6Z2V0TXlWYXIoJ2Z1bGliYS5iaWdJbWcnKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFNpemU6IHNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfSAgIFxuXG4gICAgLy/lpI3mnYLmlofmnKwt55SxSHRtbOagvOW8jy3mm7/mjaLmjonlm77niYctLS3op4bpopHpk77mjqXkuZ/mm7/mjaLmjonnlKjmn6XnnIvop4bpopHmm7/ku6MtLS3nvZHnq5nlnLDlnYDkuI3nlKjmm7/mjaLvvIznm7TmjqXnlKhcbiAgICAvLyBxdW90ZUNvbnRlbnQgPSBnZXROZXdUZXh0KHF1b3RlQ29udGVudCwnZGl2Jyk7XG4gICAgLy8gbGV0IHRlbXAgPSBwYXJzZURvbUZvckh0bWwoZ2V0TmV3VGV4dChxdW90ZUNvbnRlbnQsJ2RpdicpLCAnVGV4dCcpO1xuICAgIC8vIGlmKCFxdW90ZUNvbnRlbnQuaW5jbHVkZXMoJz1cImh0dHAnKSkgcXVvdGVDb250ZW50ID0gdGVtcDtcbiAgICAvLyBpZighdGVtcC5tYXRjaCgvXlxccyokLykpIGQucHVzaCh7dGl0bGU6IHF1b3RlQ29udGVudH0pO1xuXG4gICAgLy/mvKvnlLvmqKHlvI9cbiAgICAvLyB2YXIgcGljcz1bXTtcbiAgICAvL2ZvciAobGV0IGsgPSAwOyBrIDwgaW1nbGlzdC5sZW5ndGg7IGsrKyl7XG4gICAgLy8gICAgIHBpY3MucHVzaChpbWdsaXN0W2tdKTtcbiAgICAvLyB9XG4gICAgLy8gXCJwaWNzOi8vXCIrcGljcy5qb2luKFwiJiZcIik7XG5cbiAgICAvLyBpZihpbWdsaXN0Lmxlbmd0aD09MCkgY29udGludWU7XG4gICAgLy8gZm9yIChsZXQgayA9IDA7IGsgPCBpbWdsaXN0Lmxlbmd0aDsgaysrKXtcbiAgICAvLyAgICAgZC5wdXNoKHtcbiAgICAvLyAgICAgICAgIHBpY191cmw6aW1nbGlzdFtrXSxcbiAgICAvLyAgICAgICAgIHVybDppbWdsaXN0W2tdLFxuICAgIC8vICAgICAgICAgY29sX3R5cGU6Z2V0TXlWYXIoJ2Z1bGliYS5iaWdJbWcnKVxuICAgIC8vICAgICB9KTtcbiAgICAvLyB9XG59ZWxzZXtcbiAgICAvLyBpZihnZXRNeVZhcignZnVsaWJhLnNob3dNb2RlJyk9PScxJykgY29udGVudCA9IEdldEltZ1RhZ0FycmF5KGNvbnRlbnQsLzxpbWcoW1xcc1xcU10qPyk+L2cpO1xuICAgIGlmKGdldE15VmFyKCdmdWxpYmEuc2hvd01vZGUnKT09JzEnKXtcbiAgICAgICAgbGV0IG1hdGNoQXJyYXkgPSBjb250ZW50Lm1hdGNoKC88aW1nKFtcXHNcXFNdKj8pPi9nKTtcbiAgICAgICAgbGV0IGltZ2xpc3QgPSAnJztcbiAgICAgICAgaWYgKG1hdGNoQXJyYXkgIT0gbnVsbCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtYXRjaEFycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IHBpYyA9IG1hdGNoQXJyYXlbaV0gLnJlcGxhY2VXaXRoQ2FsbGJhY2soLzxpbWcoW1xcc1xcU10qPyk+L2csICc8aW1nIGRhdGEtdj4nLCBpbWdUYWdSZXBsYWNlbWVudE9uZSlcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAucmVwbGFjZSgvPHNob3dpbWcvZywgJzxpbWcnKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIGlmKGdldE15VmFyKCdmdWxpYmEuaGlkZUltZycpID09ICcwJykgZC5wdXNoKHt0aXRsZTogcGljLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U2l6ZTogc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfX0pO1xuICAgICAgICAgICAgICAgIGltZ2xpc3QgKz0gcGljO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGlmKGdldE15VmFyKCdmdWxpYmEuaGlkZUltZycpID09ICcxJykgZC5wdXNoKHt0aXRsZTogaW1nbGlzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFNpemU6IHNpemUsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xpY2s6IHRydWVcbiAgICAgICAgICAgICAgICAgICAgICAgIH19KTtcbiAgICB9ZWxzZXtcbiAgICAgICAgY29udGVudCA9IGNvbnRlbnQucmVwbGFjZVdpdGhDYWxsYmFjaygvPGltZyhbXFxzXFxTXSo/KT4vZywgJzxpbWcgZGF0YS12PicsIGltZ1RhZ1JlcGxhY2VtZW50T25lKVxuICAgICAgICAgICAgLnJlcGxhY2UoLzxzaG93aW1nL2csICc8aW1nJylcbiAgICAgICAgICAgIC5yZXBsYWNlV2l0aENhbGxiYWNrKC88KGlmcmFtZSkoW1xcc1xcU10qPyk8XFwvKGlmcmFtZSk+L2csICc8bGluayBkYXRhLXY+JywgbGlua1RhZ1JlcGxhY2VtZW50MilcbiAgICAgICAgICAgIC5yZXBsYWNlV2l0aENhbGxiYWNrKC88KHNvdXJjZXx2aWRlbykoW1xcc1xcU10qPyk8XFwvKHNvdXJjZXx2aWRlbyk+L2csICc8dmlkZW8gZGF0YS12PicsIHZpZGVvVGFnUmVwbGFjZW1lbnQyKTtcblxuICAgICAgICBsZXQgY29udGVudGxpc3QgPSBjb250ZW50LnNwbGl0KCdcXG4nKTtcbiAgICAgICAgbGV0IGh0bWxMaXN0ID0gJyc7XG4gICAgICAgIGZvcihsZXQgaj0wO2o8Y29udGVudGxpc3QubGVuZ3RoO2orKyl7XG4gICAgICAgICAgICBsZXQgcXVvdGVDb250ZW50ID0gY29udGVudGxpc3Rbal07XG5cbiAgICAgICAgICAgIGxldCB0ZW1wID0gcGFyc2VEb21Gb3JIdG1sKGdldE5ld1RleHQocXVvdGVDb250ZW50LCdkaXYnKSwgJ1RleHQnKTtcbiAgICAgICAgICAgIGlmKGdldE15VmFyKCdmdWxpYmEuc2hvd01vZGUnKT09JzMnKXtcbiAgICAgICAgICAgICAgICBpZighdGVtcC5tYXRjaCgvXlxccyokLykpIGh0bWxMaXN0ICs9ICc8cD4mbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsmbmJzcDsnICsgdGVtcCArICc8L3A+JztcbiAgICAgICAgICAgICAgICBpZihqPT1jb250ZW50bGlzdC5sZW5ndGgtMSAmJiBodG1sTGlzdCAhPT0gJycpe1xuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe3RpdGxlOiBodG1sTGlzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U2l6ZTogc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH19KTtcbiAgICAgICAgICAgICAgICAgICAgaHRtbExpc3QgPSAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9ZWxzZXtcbiAgICAgICAgICAgICAgICBpZighdGVtcC5tYXRjaCgvXlxccyokLykgfHwgcXVvdGVDb250ZW50LmluY2x1ZGVzKCdibG9ja3F1b3RlPicpIHx8IChxdW90ZUNvbnRlbnQuaW5jbHVkZXMoJ2Rpdj4nKSAmJiBxdW90ZUNvbnRlbnQubWF0Y2goLzwoZGl2KShbXFxzXFxTXSo/KTxcXC8oZGl2KT4vZykgPT0gbnVsbCkpIGh0bWxMaXN0ICs9IHF1b3RlQ29udGVudDtcblxuICAgICAgICAgICAgICAgIGlmKHF1b3RlQ29udGVudC5tYXRjaCgvPGltZyhbXFxzXFxTXSo/KT4vZykgIT09IG51bGwgfHwgaj09Y29udGVudGxpc3QubGVuZ3RoLTEpe1xuICAgICAgICAgICAgICAgICAgICBpZihnZXRNeVZhcignZnVsaWJhLnNob3dNb2RlJykhPT0nMScgJiYgaHRtbExpc3QgIT09ICcnKSBkLnB1c2goe3RpdGxlOiBodG1sTGlzdCxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U2l6ZTogc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsaWNrOiB0cnVlXG4gICAgICAgICAgICAgICAgICAgIH19KTtcbiAgICAgICAgICAgICAgICAgICAgaHRtbExpc3QgPSAnJztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYocXVvdGVDb250ZW50Lm1hdGNoKC88aW1nKFtcXHNcXFNdKj8pPi9nKSAhPT0gbnVsbCkgZC5wdXNoKHt0aXRsZTogcXVvdGVDb250ZW50LFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0U2l6ZTogc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgY2xpY2s6IHRydWVcbiAgICAgICAgICAgICAgICB9fSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG5cblxuZC5wdXNoKHtjb2xfdHlwZTogJ2xpbmVfYmxhbmsnfSk7XG5sZXQgdGlwcyA9ICfor6Xmlofnq6DmnaXmupDkuo7npo/liKnlkKfvvIzlpoLmgqjllpzmrKLvvIzor7fov5vlhaXnpo/liKnlkKfnvZHpobXniYgnO1xubGV0IHdhcm5pbmcgPSAn5q2k6KeE5YiZ5LuF6ZmQ5a2m5Lmg5L2/55So77yM5aaC5pyJ5LiN5aal77yM6K+35pys5ZCn5Li76IGU57O75oiR5Yig6ZmkJztcblxuLy8gaWYoZ2V0TXlWYXIoJ2Z1bGliYS5zaG93TW9kZScpPT0nMCcgfHwgZ2V0TXlWYXIoJ2Z1bGliYS5zaG93TW9kZScpPT0nMicpe1xuaWYoZ2V0TXlWYXIoJ2Z1bGliYS5vcGVuQ29tbWVudCcpPT0nMCcpe1xuICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KFwiaGlrZXI6Ly9wYWdlL2NvbW1lbnRcIikpLnJ1bGUpO1xuXG4gICAgZC5wdXNoKHt0aXRsZTogR2V0VGlwcyh0aXBzLHdhcm5pbmcpLFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0ZXh0U2l6ZTogc2l6ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGljazogdHJ1ZVxuICAgICAgICAgICAgICAgICAgICAgICAgfX0pO1xuICAgIGQucHVzaCh7Y29sX3R5cGU6ICdsaW5lX2JsYW5rJ30pO1xuXG4gICAgaWYoY29tbWVudC5sZW5ndGggPiAwKXtcbiAgICAgICAgbGV0IGNvbW1lbnROdW0gPSBwYXJzZURvbUZvckh0bWwoaHRtbCwnLmFydGljbGUtbWV0YSYmc3BhbiwyJiZUZXh0JykucmVwbGFjZSgn6K+E6K66Jywn8J+ToueDreivhOaVsCcpO1xuICAgICAgICBjb21tZW50TnVtID0gR2V0SG9tZSgzKStnZXRTdHJvbmdUZXh0KGdldEJpZ1RleHQoY29tbWVudE51bSkpO1xuICAgICAgICBmb3IgKGxldCBsID0gMDsgbCA8IGNvbW1lbnQubGVuZ3RoOyBsKyspe1xuICAgICAgICAgICAgbGV0IGxpc3QgPSBwYXJzZURvbUZvckFycmF5KGNvbW1lbnRbbF0sJy5jb21tZW50Jyk7XG4gICAgICAgICAgICBkLnB1c2goe2NvbF90eXBlOiAnbGluZSd9KTtcblxuICAgICAgICAgICAgZm9yIChsZXQgbSA9IDA7IG0gPCBsaXN0Lmxlbmd0aDsgbSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGZsb29yID0gJyc7IGxldCBtYWluID0gJyc7ICBsZXQgYXV0b3IgPSAnJzsgbGV0IHRpbWUgPSAnJztcbiAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgIGlmKG09PTApIGZsb29yID0gJ/Cfj6InICsgcGFyc2VEb21Gb3JIdG1sKGxpc3RbbV0sJy5jb210LWYmJlRleHQnKS5yZXBsYWNlKCcjJywnJykrJ+alvCc7XG4gICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgICAgICBmbG9vciA9IGwrJ+alvOWxgumUmeivryEhIScrbVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0cnl7XG4gICAgICAgICAgICAgICAgICAgIG1haW4gPSAgcGFyc2VEb21Gb3JIdG1sKGxpc3RbbV0sJy5jb210LW1haW4mJnAmJlRleHQnKTtcbiAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgICAgIG1haW4gPSBsKyflm57lpI3lhoXlrrnplJnor68hISEnK21cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgdHJ5e1xuICAgICAgICAgICAgICAgICAgICBhdXRvciA9ICfwn5GxJyArIHBhcnNlRG9tRm9ySHRtbChsaXN0W21dLCcuY29tdC1hdXRob3ImJlRleHQnKTtcbiAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XG4gICAgICAgICAgICAgICAgICAgIGF1dG9yID0gbCsn5L2c6ICF5ZCN56ew6ZSZ6K+vISEhJyttXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRyeXtcbiAgICAgICAgICAgICAgICAgICAgdGltZSA9ICfwn5WiJyArIHBhcnNlRG9tRm9ySHRtbChsaXN0W21dLCcuY29tdC1tZXRhLS1zcGFuJiZUZXh0JykucmVwbGFjZSgn5Zue5aSNJywnJyk7XG4gICAgICAgICAgICAgICAgfWNhdGNoKGUpe1xuICAgICAgICAgICAgICAgICAgICB0aW1lID0gbCsn5pe26Ze06ZSZ6K+vISEhJyttXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgbGV0IGNvbW1lbnRUZXh0ID0gR2V0Q29tbWVudChtYWluLGF1dG9yLHRpbWUsZmxvb3IpO1xuICAgICAgICAgICAgICAgIGlmKGw9PTAgJiYgbT09MCkgY29tbWVudFRleHQgPSBjb21tZW50TnVtICsnPGJyPjxicj4nKyBjb21tZW50VGV4dDtcblxuICAgICAgICAgICAgICAgIGNvbW1lbnRUZXh0PWNvbW1lbnRUZXh0XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2VXaXRoQ2FsbGJhY2soLyhodHRwOlxcL1xcL3xmdHA6XFwvXFwvfGh0dHBzOlxcL1xcL3wpW1xcd1xcLV9dKyhcXC5bXFx3XFwtX10rKSsoW1xcd1xcLVxcLixAP149JSZhbXA7Oi9+XFwrI10qW1xcd1xcLVxcQD9ePSUmYW1wOy9+XFwrI10pPy9nLCAnPG4gZGF0YS12PicsIG51bGxUYWdSZXBsYWNlbWVudDIpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLnJlcGxhY2VXaXRoQ2FsbGJhY2soLzxhKC4qPykgaHJlZj1cIiguKj8pYWxpeXVuZHJpdmUoLio/KVwiKC4qPyk8XFwvYT4vZywgJzxhIGRhdGEtdj4nLCBhVGFnUmVwbGFjZW1lbnQyKTtcbiAgICAgICAgICAgICAgICBkLnB1c2goe3RpdGxlOiBjb21tZW50VGV4dCxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcbiAgICAgICAgICAgICAgICAgICAgdGV4dFNpemU6IHNpemUsXG4gICAgICAgICAgICAgICAgICAgIGNsaWNrOiB0cnVlXG4gICAgICAgICAgICAgICAgfX0pO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxufVxuXG5yZXMuZGF0YT1kO1xuc2V0SG9tZVJlc3VsdChyZXMpOyIsInNkZXRhaWxfY29sX3R5cGUiOiJtb3ZpZV8xIiwic2RldGFpbF9maW5kX3J1bGUiOiIqIiwidWEiOiJtb2JpbGUiLCJwcmVSdWxlIjoiIiwicGFnZXMiOiJbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIkNTU+agvOW8j1wiLFwicGF0aFwiOlwiY3NzXCIsXCJydWxlXCI6XCJmdW5jdGlvbiBnZXROZXdUZXh0KHRleHQsY3NzKXtcXG4gICByZXR1cm4gJzwnK2NzcysnPicgKyB0ZXh0ICsgJzwvJytjc3MrJz4nO1xcbn1cXG5cXG5mdW5jdGlvbiBnZXRCaWdUZXh0KHRleHQpIHtcXG4gICAgcmV0dXJuICc8YmlnPicgKyB0ZXh0ICsgJzwvYmlnPic7XFxufVxcbmZ1bmN0aW9uIGdldFNtYWxsVGV4dCh0ZXh0KSB7XFxuICAgIHJldHVybiAnPHNtYWxsPicgKyB0ZXh0ICsgJzwvc21hbGw+JztcXG59XFxuZnVuY3Rpb24gZ2V0U3Ryb25nVGV4dCh0ZXh0KSB7XFxuICAgIHJldHVybiAnPHN0cm9uZz4nICsgdGV4dCArICc8L3N0cm9uZz4nO1xcbn1cXG5mdW5jdGlvbiBnZXRUaXRsZVRleHQodGV4dCkge1xcbiAgICByZXR1cm4gZ2V0U3Ryb25nVGV4dCh0ZXh0KTtcXG59XFxuZnVuY3Rpb24gZ2V0Q29sb3JUZXh0KHRleHQsIGNvbG9yKSB7XFxuICAgIHJldHVybiAnPGZvbnQgY29sb3I9XFxcIicgKyBjb2xvciArICdcXFwiPicgKyB0ZXh0ICsgJzwvZm9udD4nO1xcbn1cXG5mdW5jdGlvbiBnZXRHcmV5VGV4dCh0ZXh0KSB7XFxuICAgIHJldHVybiBnZXRDb2xvclRleHQodGV4dCwgJ2dyZXknKTtcXG59XFxuZnVuY3Rpb24gZ2V0QXV0aG9yVGV4dCh0ZXh0KSB7XFxuICAgIHJldHVybiBnZXRDb2xvclRleHQodGV4dCwgdXNlckNvbG9yKTtcXG59XFxuZnVuY3Rpb24gZ2V0Q29kZVRleHQodGV4dCkge1xcbiAgICByZXR1cm4gJzxjb2RlPicgKyB0ZXh0ICsgJzwvY29kZT4nO1xcbn1cXG5mdW5jdGlvbiBnZXRCbG9ja3F1b3RlVGV4dCh0ZXh0KSB7XFxuICAgIHJldHVybiAnPGJsb2NrcXVvdGU+JyArIHRleHQgKyAnPC9ibG9ja3F1b3RlPidcXG59XFxuZnVuY3Rpb24gZ2V0QWRkcmVzc1RhZyh1cmwsIHRleHQpIHtcXG4gICAgcmV0dXJuICc8YSBocmVmPVxcXCInICsgdXJsICsgJ1xcXCI+JyArIHRleHQgKyAnPC9hPidcXG59XFxuZnVuY3Rpb24gZ2V0Q29tbWVudE1ldGEoaHRtbCkge1xcbiAgICByZXR1cm4gZ2V0U21hbGxUZXh0KGh0bWwpO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuinhuWbvuWkhOeQhlwiLFwicGF0aFwiOlwidmlld1wiLFwicnVsZVwiOlwiLy/ojrflj5bph43lrprlkJHlnLDlnYBcXG5mdW5jdGlvbiBnZXRSZWRpcmVjdEFkZHJlc3ModXJsKXtcXG4gICAgbGV0IHVybFJlZGlyZWN0ID0gJyc7XFxuICAgIHRyeXtcXG4gICAgICAgIGxldCB1cmxDb2RlID0gZmV0Y2godXJsLHtyZWRpcmVjdDpmYWxzZSx3aXRoSGVhZGVyczp0cnVlfSk7XFxuICAgICAgICB1cmxSZWRpcmVjdCA9IEpTT04ucGFyc2UodXJsQ29kZSkuaGVhZGVycy5sb2NhdGlvblswXTtcXG4gICAgfWNhdGNoKGUpe31cXG4gICAgcmV0dXJuIHVybFJlZGlyZWN0O1xcbn1cXG5cXG5TdHJpbmcucHJvdG90eXBlLnJlcGxhY2VXaXRoQ2FsbGJhY2sgPSBmdW5jdGlvbiAoc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSwgY2FsbGJhY2spIHtcXG4gICAgbGV0IHJldHVyblZhbHVlID0gdGhpcztcXG4gICAgaWYgKGNhbGxiYWNrICE9IG51bGwpIHtcXG4gICAgICAgIHJldHVyblZhbHVlID0gY2FsbGJhY2sodGhpcywgc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSk7XFxuICAgIH1cXG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xcbn07XFxuXFxuLy/liKDpmaTph43lrprlkJHlm77niYfpk77mjqVcXG5mdW5jdGlvbiBkZWxldGVJbnZhbGlkSW1nVGFnKGNvbnRleHQsIHNlYXJjaFZhbHVlLHJlcGxhY2VWYWx1ZSkge1xcbiAgICBsZXQgbWF0Y2hBcnJheSA9IGNvbnRleHQubWF0Y2goc2VhcmNoVmFsdWUpO1xcbiAgICBsZXQgcmV0dXJuVmFsdWUgPSBjb250ZXh0O1xcbiAgICBpZiAobWF0Y2hBcnJheSAhPSBudWxsKSB7XFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdGNoQXJyYXkubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBsZXQgaXRlbSA9IG1hdGNoQXJyYXlbaV07XFxuICAgICAgICAgICAgLzxpbWcuKj8oZGF0YS1vcmlnaW5hbHxkYXRhLXNyY3xzcmMpPVxcXCIoLio/KVxcXCIoW1xcXFxzXFxcXFNdKj8pPi8udGVzdChpdGVtKTtcXG4gICAgICAgICAgICBsZXQgaW1nVXJsID0gUmVnRXhwLiQyO1xcbiAgICAgICAgICAgIGlmIChpbWdVcmwuaW5kZXhPZihcXFwicGxhY2Vob2xkZXJcXFwiKSA+IC0xKSB7XFxuICAgICAgICAgICAgICAgIC88aW1nLio/KGRhdGEtb3JpZ2luYWwpPVxcXCIoLio/KVxcXCIoW1xcXFxzXFxcXFNdKj8pPi8udGVzdChpdGVtKTtcXG4gICAgICAgICAgICAgICAgaW1nVXJsID0gUmVnRXhwLiQyO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZihpbWdVcmwuaW5kZXhPZihcXFwiLy9cXFwiKT09MCl7aW1nVXJsID0gXFxcImh0dHBzOlxcXCIgKyBpbWdVcmw7fVxcbiAgICAgICAgICAgIGlmIChpbWdVcmwgIT0gJycpIHtcXG4gICAgICAgICAgICAgICAgaWYoZ2V0UmVkaXJlY3RBZGRyZXNzKGltZ1VybCkgIT0gJycpe1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSByZXR1cm5WYWx1ZS5yZXBsYWNlKGl0ZW0scmVwbGFjZVZhbHVlKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XFxufVxcblxcbmZ1bmN0aW9uIEdldEltZ1RhZ0FycmF5U3RyaW5nKGNvbnRleHQsIHNlYXJjaFZhbHVlKSB7XFxuICAgIGxldCBtYXRjaEFycmF5ID0gY29udGV4dC5tYXRjaChzZWFyY2hWYWx1ZSk7XFxuICAgIGxldCByZXR1cm5WYWx1ZSA9ICcnO1xcbiAgICBpZiAobWF0Y2hBcnJheSAhPSBudWxsKSB7XFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdGNoQXJyYXkubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICByZXR1cm5WYWx1ZSArPSBtYXRjaEFycmF5W2ldO1xcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcXG59XFxuXFxuZnVuY3Rpb24gaW1nVGFnR2V0VXJsQXJyYXkoY29udGV4dCwgc2VhcmNoVmFsdWUpIHtcXG4gICAgbGV0IG1hdGNoQXJyYXkgPSBjb250ZXh0Lm1hdGNoKHNlYXJjaFZhbHVlKTtcXG4gICAgbGV0IHJldHVyblZhbHVlID0gW107XFxuICAgIGlmIChtYXRjaEFycmF5ICE9IG51bGwpIHtcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0Y2hBcnJheS5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIGxldCBpdGVtID0gbWF0Y2hBcnJheVtpXTtcXG4gICAgICAgICAgICAvPGltZy4qPyhkYXRhLW9yaWdpbmFsfGRhdGEtc3JjfHNyYyk9XFxcIiguKj8pXFxcIihbXFxcXHNcXFxcU10qPyk+Ly50ZXN0KGl0ZW0pO1xcbiAgICAgICAgICAgIGxldCBpbWdVcmwgPSBSZWdFeHAuJDI7XFxuICAgICAgICAgICAgaWYgKGltZ1VybC5pbmRleE9mKFxcXCJwbGFjZWhvbGRlclxcXCIpID4gLTEpIHtcXG4gICAgICAgICAgICAgICAgLzxpbWcuKj8oZGF0YS1vcmlnaW5hbCk9XFxcIiguKj8pXFxcIihbXFxcXHNcXFxcU10qPyk+Ly50ZXN0KGl0ZW0pO1xcbiAgICAgICAgICAgICAgICBpbWdVcmwgPSBSZWdFeHAuJDI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmKGltZ1VybC5pbmRleE9mKFxcXCIvL1xcXCIpPT0wKXtpbWdVcmwgPSBcXFwiaHR0cHM6XFxcIiArIGltZ1VybDt9XFxuICAgICAgICAgICAgaWYgKGltZ1VybCAhPT0gJycpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUucHVzaChpbWdVcmwpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XFxufVxcblxcblxcbmxldCBpbWdFcnJvciA9ICc8cD48Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+5Zu+54mH5pqC5pe25peg5rOV5pi+56S677yM6Iul6KaB5p+l55yL6K+3PGEgaHJlZj1cXFwiJyArIE1ZX1VSTCArICdcXFwiPuiuv+mXruWOn+aWhzwvYT48L2ZvbnQ+PC9wPic7XFxuZnVuY3Rpb24gaW1nVGFnKGNvbnRleHQsIGltZ1VybCkge1xcbiAgICBsZXQgcmVwbGFjZVN0cmluZyA9IGltZ1VybCA9PT0gJycgPyBpbWdFcnJvciA6ICc8cD48c2hvd2ltZyBzcmM9XFxcIicgKyAoaW1nVXJsICsgJ0BSZWZlcmVyPScgKyBNWV9VUkwpICsgJ1xcXCI+PC9wPic7XFxuICAgIGlmIChnZXRNeVZhcignZnVsaWJhLmhpZGVJbWcnKT09JzEnKSB7XFxuICAgICAgICByZXBsYWNlU3RyaW5nID0gaW1nVXJsID09PSAnJyA/IGltZ0Vycm9yIDogJzxwPjxhIGhyZWY9XFxcIicgKyBpbWdVcmwgKyAnXFxcIj5b54K55Ye75p+l55yL5aSn5Zu+XTwvYT48L3A+JztcXG4gICAgfVxcbiAgICByZXR1cm4gY29udGV4dC5yZXBsYWNlKC88aW1nIGRhdGEtdj4vZywgcmVwbGFjZVN0cmluZyk7XFxufVxcbmZ1bmN0aW9uIGltZ1RhZ09uZShjb250ZXh0LCBpbWdVcmwpIHtcXG4gICAgbGV0IHJlcGxhY2VTdHJpbmcgPSBpbWdVcmwgPT09ICcnID8gaW1nRXJyb3IgOiAnXFxcXG48cD48c2hvd2ltZyBzcmM9XFxcIicgKyAoaW1nVXJsICsgJ0BSZWZlcmVyPScgKyBNWV9VUkwpICsgJ1xcXCI+PC9wPic7XFxuICAgIGlmIChnZXRNeVZhcignZnVsaWJhLmhpZGVJbWcnKT09JzEnKSB7XFxuICAgICAgICByZXBsYWNlU3RyaW5nID0gaW1nVXJsID09PSAnJyA/IGltZ0Vycm9yIDogJzxwPjxhIGhyZWY9XFxcIicgKyBpbWdVcmwgKyAnXFxcIj5b54K55Ye75p+l55yL5aSn5Zu+XTwvYT4mbmJzcDsmbmJzcDsmbmJzcDs8YSBocmVmPVxcXCJ3ZWI6Ly8nICsgaW1nVXJsICsgJ1xcXCI+W+eCueWHu+afpeeci+mTvuaOpV08L2E+PC9wPic7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNvbnRleHQucmVwbGFjZSgvPGltZyBkYXRhLXY+L2csIHJlcGxhY2VTdHJpbmcpO1xcbn1cXG5mdW5jdGlvbiBpbWdUYWdSZXBsYWNlbWVudDIoY29udGV4dCwgc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSkge1xcbiAgICBsZXQgbWF0Y2hBcnJheSA9IGNvbnRleHQubWF0Y2goc2VhcmNoVmFsdWUpO1xcbiAgICBsZXQgcmV0dXJuVmFsdWUgPSBjb250ZXh0O1xcbiAgICBpZiAobWF0Y2hBcnJheSAhPSBudWxsKSB7XFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdGNoQXJyYXkubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBsZXQgaXRlbSA9IG1hdGNoQXJyYXlbaV07XFxuICAgICAgICAgICAgLzxpbWcuKj8oZGF0YS1vcmlnaW5hbHxkYXRhLXNyY3xzcmMpPVxcXCIoLio/KVxcXCIoW1xcXFxzXFxcXFNdKj8pPi8udGVzdChpdGVtKTtcXG4gICAgICAgICAgICBsZXQgaW1nVXJsID0gUmVnRXhwLiQyO1xcbiAgICAgICAgICAgIGlmIChpbWdVcmwuaW5kZXhPZihcXFwicGxhY2Vob2xkZXJcXFwiKSA+IC0xKSB7XFxuICAgICAgICAgICAgICAgIC88aW1nLio/KGRhdGEtb3JpZ2luYWwpPVxcXCIoLio/KVxcXCIoW1xcXFxzXFxcXFNdKj8pPi8udGVzdChpdGVtKTtcXG4gICAgICAgICAgICAgICAgaW1nVXJsID0gUmVnRXhwLiQyO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZihpbWdVcmwuaW5kZXhPZihcXFwiLy9cXFwiKT09MCl7aW1nVXJsID0gXFxcImh0dHBzOlxcXCIgKyBpbWdVcmw7fVxcbiAgICAgICAgICAgIGlmIChpbWdVcmwgIT09ICcnKSB7XFxuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gcmV0dXJuVmFsdWUucmVwbGFjZShpdGVtLCByZXBsYWNlVmFsdWUpO1xcbiAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IGltZ1RhZyhyZXR1cm5WYWx1ZSwgaW1nVXJsKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xcbn1cXG5mdW5jdGlvbiBpbWdUYWdSZXBsYWNlbWVudE9uZShjb250ZXh0LCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XFxuICAgIGxldCBtYXRjaEFycmF5ID0gY29udGV4dC5tYXRjaChzZWFyY2hWYWx1ZSk7XFxuICAgIGxldCByZXR1cm5WYWx1ZSA9IGNvbnRleHQ7XFxuICAgIGlmIChtYXRjaEFycmF5ICE9IG51bGwpIHtcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0Y2hBcnJheS5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIGxldCBpdGVtID0gbWF0Y2hBcnJheVtpXTtcXG4gICAgICAgICAgICAvPGltZy4qPyhkYXRhLW9yaWdpbmFsfGRhdGEtc3JjfHNyYyk9XFxcIiguKj8pXFxcIihbXFxcXHNcXFxcU10qPyk+Ly50ZXN0KGl0ZW0pO1xcbiAgICAgICAgICAgIGxldCBpbWdVcmwgPSBSZWdFeHAuJDI7XFxuICAgICAgICAgICAgaWYgKGltZ1VybC5pbmRleE9mKFxcXCJwbGFjZWhvbGRlclxcXCIpID4gLTEpIHtcXG4gICAgICAgICAgICAgICAgLzxpbWcuKj8oZGF0YS1vcmlnaW5hbCk9XFxcIiguKj8pXFxcIihbXFxcXHNcXFxcU10qPyk+Ly50ZXN0KGl0ZW0pO1xcbiAgICAgICAgICAgICAgICBpbWdVcmwgPSBSZWdFeHAuJDI7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmKGltZ1VybC5pbmRleE9mKFxcXCIvL1xcXCIpPT0wKXtpbWdVcmwgPSBcXFwiaHR0cHM6XFxcIiArIGltZ1VybDt9XFxuICAgICAgICAgICAgaWYgKGltZ1VybCAhPT0gJycpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSByZXR1cm5WYWx1ZS5yZXBsYWNlKGl0ZW0sIHJlcGxhY2VWYWx1ZSk7XFxuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gaW1nVGFnT25lKHJldHVyblZhbHVlLCBpbWdVcmwpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XFxufVxcblxcbmxldCB2aWRlb0Vycm9yID0gJzxwPjxmb250IGNvbG9yPVxcXCJncmV5XFxcIj7op4bpopHmmoLml7bml6Dms5XmmL7npLrvvIzoi6XopoHmn6XnnIvor7c8YSBocmVmPVxcXCInICsgTVlfVVJMICsgJ1xcXCI+6K6/6Zeu5Y6f5paHPC9hPjwvZm9udD48L3A+JztcXG5mdW5jdGlvbiB2aWRlb1RhZyhjb250ZXh0LCB2aWRlb1VybCkge1xcbiAgICBsZXQgcmVwbGFjZVN0cmluZyA9IHZpZGVvVXJsID09PSAnJyA/IHZpZGVvRXJyb3IgOiAnPHA+PGEgaHJlZj1cXFwiJyArICh2aWRlb1VybCkgKyAnXFxcIj5b54K55Ye75p+l55yL6KeG6aKRXTwvYT48L3A+JztcXG4gICAgaWYgKGdldE15VmFyKCdmdWxpYmEuaGlkZUltZycpPT0nMScpIHtcXG4gICAgICAgIHJlcGxhY2VTdHJpbmcgPSB2aWRlb1VybCA9PT0gJycgPyB2aWRlb0Vycm9yIDogJzxwPjxhIGhyZWY9XFxcIicgKyB2aWRlb1VybCArICdcXFwiPlvngrnlh7vmn6XnnIvop4bpopFdPC9hPjwvcD4nO1xcbiAgICB9XFxuICAgIHJldHVybiBjb250ZXh0LnJlcGxhY2UoLzx2aWRlbyBkYXRhLXY+L2csIHJlcGxhY2VTdHJpbmcpO1xcbn1cXG5mdW5jdGlvbiB2aWRlb1RhZ1JlcGxhY2VtZW50Mihjb250ZXh0LCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XFxuICAgIGxldCBtYXRjaEFycmF5ID0gY29udGV4dC5tYXRjaChzZWFyY2hWYWx1ZSk7XFxuICAgIGxldCByZXR1cm5WYWx1ZSA9IGNvbnRleHQ7XFxuICAgIGlmIChtYXRjaEFycmF5ICE9IG51bGwpIHtcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0Y2hBcnJheS5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIGxldCBpdGVtID0gbWF0Y2hBcnJheVtpXTtcXG4gICAgICAgICAgICAvPChzb3VyY2V8dmlkZW8pLio/KGRhdGEtb3JpZ2luYWx8ZGF0YS1zcmN8c3JjKT1cXFwiKC4qPylcXFwiKFtcXFxcc1xcXFxTXSo/KT4vLnRlc3QoaXRlbSk7XFxuICAgICAgICAgICAgbGV0IHZpZGVvVXJsID0gUmVnRXhwLiQzO1xcbiAgICAgICAgICAgIGlmKHZpZGVvVXJsLmluZGV4T2YoXFxcIi8vXFxcIik9PTApe3ZpZGVvVXJsID0gXFxcImh0dHBzOlxcXCIgKyB2aWRlb1VybDt9XFxuICAgICAgICAgICAgaWYodmlkZW9VcmwuaW5jbHVkZXMoXFxcInpoYWluYW5taVxcXCIpKSBjb250aW51ZTtcXG4gICAgICAgICAgICBpZiAodmlkZW9VcmwgIT09ICcnKSB7XFxuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gcmV0dXJuVmFsdWUucmVwbGFjZShpdGVtLCByZXBsYWNlVmFsdWUpO1xcbiAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHZpZGVvVGFnKHJldHVyblZhbHVlLCB2aWRlb1VybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcXG59XFxuXFxubGV0IGxpbmtFcnJvciA9ICc8cD48Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+6ZO+5o6l5pqC5pe25peg5rOV5pi+56S677yM6Iul6KaB5p+l55yL6K+3PGEgaHJlZj1cXFwiJyArIE1ZX1VSTCArICdcXFwiPuiuv+mXruWOn+aWhzwvYT48L2ZvbnQ+PC9wPic7XFxuZnVuY3Rpb24gbGlua1RhZyhjb250ZXh0LCBsaW5rVXJsKSB7XFxuICAgIGxldCByZXBsYWNlU3RyaW5nID0gbGlua1VybCA9PT0gJycgPyBsaW5rRXJyb3IgOiAnPHA+PGEgaHJlZj1cXFwiJyArIChsaW5rVXJsKSArICdcXFwiPlvngrnlh7vmn6XnnIvpk77mjqVdPC9hPjwvcD4nO1xcbiAgICBpZiAoZ2V0TXlWYXIoJ2Z1bGliYS5oaWRlSW1nJyk9PScxJykge1xcbiAgICAgICAgcmVwbGFjZVN0cmluZyA9IGxpbmtVcmwgPT09ICcnID8gbGlua0Vycm9yIDogJzxwPjxhIGhyZWY9XFxcIicgKyBsaW5rVXJsICsgJ1xcXCI+W+eCueWHu+afpeeci+mTvuaOpV08L2E+PC9wPic7XFxuICAgIH1cXG4gICAgcmV0dXJuIGNvbnRleHQucmVwbGFjZSgvPGxpbmsgZGF0YS12Pi9nLCByZXBsYWNlU3RyaW5nKTtcXG59XFxuZnVuY3Rpb24gbGlua1RhZ1JlcGxhY2VtZW50Mihjb250ZXh0LCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XFxuICAgIGxldCBtYXRjaEFycmF5ID0gY29udGV4dC5tYXRjaChzZWFyY2hWYWx1ZSk7XFxuICAgIGxldCByZXR1cm5WYWx1ZSA9IGNvbnRleHQ7XFxuICAgIGlmIChtYXRjaEFycmF5ICE9IG51bGwpIHtcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0Y2hBcnJheS5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIGxldCBpdGVtID0gbWF0Y2hBcnJheVtpXTtcXG4gICAgICAgICAgICAvPChpZnJhbWUpLio/KGRhdGEtb3JpZ2luYWx8ZGF0YS1zcmN8c3JjKT1cXFwiKC4qPylcXFwiKFtcXFxcc1xcXFxTXSo/KT4vLnRlc3QoaXRlbSk7XFxuICAgICAgICAgICAgbGV0IGxpbmtVcmwgPSBSZWdFeHAuJDM7XFxuICAgICAgICAgICAgaWYobGlua1VybC5pbmRleE9mKFxcXCIvL1xcXCIpPT0wKXtsaW5rVXJsID0gXFxcImh0dHBzOlxcXCIgKyBsaW5rVXJsO31cXG4gICAgICAgICAgICBpZiAobGlua1VybCAhPT0gJycpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSByZXR1cm5WYWx1ZS5yZXBsYWNlKGl0ZW0sIHJlcGxhY2VWYWx1ZSk7XFxuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gbGlua1RhZyhyZXR1cm5WYWx1ZSwgbGlua1VybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHJldHVybiByZXR1cm5WYWx1ZTtcXG59XFxuXFxuZnVuY3Rpb24gbnVsbFRhZ1JlcGxhY2VtZW50Mihjb250ZXh0LCBzZWFyY2hWYWx1ZSwgcmVwbGFjZVZhbHVlKSB7XFxuICAgIGxldCBtYXRjaEFycmF5ID0gY29udGV4dC5tYXRjaChzZWFyY2hWYWx1ZSk7XFxuICAgIGxldCByZXR1cm5WYWx1ZSA9IGNvbnRleHQ7XFxuICAgIC8vIHNldEVycm9yKG1hdGNoQXJyYXkpXFxuICAgIGlmIChtYXRjaEFycmF5ICE9IG51bGwpIHtcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbWF0Y2hBcnJheS5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIGxldCBpdGVtID0gbWF0Y2hBcnJheVtpXTtcXG4gICAgICAgICAgICBsZXQgbGlua1VybCA9IG1hdGNoQXJyYXlbaV07XFxuICAgICAgICAgICAgaWYobGlua1VybC5pbmRleE9mKFxcXCIvL1xcXCIpPT0wKXtsaW5rVXJsID0gXFxcImh0dHBzOlxcXCIgKyBsaW5rVXJsO31cXG4gICAgICAgICAgICBpZiAobGlua1VybCAhPT0gJycpIHtcXG4gICAgICAgICAgICAgICAgcmVwbGFjZVZhbHVlID0gJzxhIGhyZWY9XFxcIicrbGlua1VybCsnXFxcIj4nK2xpbmtVcmwrJzwvYT4nXFxuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gcmV0dXJuVmFsdWUucmVwbGFjZShpdGVtLCByZXBsYWNlVmFsdWUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XFxufVxcblxcbmZ1bmN0aW9uIGFUYWdSZXBsYWNlbWVudDIoY29udGV4dCwgc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSkge1xcbiAgICBsZXQgbWF0Y2hBcnJheSA9IGNvbnRleHQubWF0Y2goc2VhcmNoVmFsdWUpO1xcbiAgICBsZXQgcmV0dXJuVmFsdWUgPSBjb250ZXh0O1xcbiAgICBpZiAobWF0Y2hBcnJheSAhPSBudWxsKSB7XFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdGNoQXJyYXkubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBsZXQgaXRlbSA9IG1hdGNoQXJyYXlbaV07XFxuICAgICAgICAgICAgLzxhKC4qPykgaHJlZj1cXFwiKC4qPylcXFwiKC4qPyk8XFxcXC9hPi8udGVzdChpdGVtKTtcXG4gICAgICAgICAgICBsZXQgbGlua1VybCA9IFJlZ0V4cC4kMjtcXG4gICAgICAgICAgICBpZihsaW5rVXJsLmluZGV4T2YoXFxcIi8vXFxcIik9PTApe2xpbmtVcmwgPSBcXFwiaHR0cHM6XFxcIiArIGxpbmtVcmw7fVxcbiAgICAgICAgICAgIGlmIChsaW5rVXJsICE9PSAnJykge1xcbiAgICAgICAgICAgICAgICByZXBsYWNlVmFsdWUgPSAnPGEgaHJlZj1cXFwiaGlrZXI6Ly9wYWdlL2RldGFpbD9ydWxlPeS6keebmOaxh+W9sSZ1cmw9JytsaW5rVXJsKyc/P2Z5cGFnZVxcXCI+JytsaW5rVXJsKyc8L2E+J1xcbiAgICAgICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHJldHVyblZhbHVlLnJlcGxhY2UoaXRlbSwgcmVwbGFjZVZhbHVlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xcbn1cXG5cXG5mdW5jdGlvbiBjc3NUYWdSZXBsYWNlbWVudDIoY29udGV4dCwgc2VhcmNoVmFsdWUsIHJlcGxhY2VWYWx1ZSkge1xcbiAgICBsZXQgbWF0Y2hBcnJheSA9IGNvbnRleHQubWF0Y2goc2VhcmNoVmFsdWUpO1xcbiAgICBsZXQgcmV0dXJuVmFsdWUgPSBjb250ZXh0O1xcbiAgICBpZiAobWF0Y2hBcnJheSAhPSBudWxsKSB7XFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IG1hdGNoQXJyYXkubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICBsZXQgaXRlbSA9IG1hdGNoQXJyYXlbaV07XFxuICAgICAgICAgICAgLzwoZGl2fHB8c3Ryb25nKT4uKj88XFxcXC8oZGl2fHB8c3Ryb25nKT4vLnRlc3QoaXRlbSk7XFxuICAgICAgICAgICAgbGV0IGNzcyA9IFJlZ0V4cC4kMjtcXG4gICAgICAgICAgICBpZiAoY3NzLm1hdGNoKC9eXFxcXHMqJC8pKSB7XFxuICAgICAgICAgICAgICAgIHJldHVyblZhbHVlID0gcmV0dXJuVmFsdWUucmVwbGFjZShpdGVtLCByZXBsYWNlVmFsdWUpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gcmV0dXJuVmFsdWU7XFxufVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6K+E6K665pa55rOVXCIsXCJwYXRoXCI6XCJjb21tZW50XCIsXCJydWxlXCI6XCJcXG5mdW5jdGlvbiBHZXRIb21lKG51bSl7XFxuICAgIGxldCByZXRyYWN0ID0gJyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyZuYnNwOyc7XFxuICAgIGZvcihsZXQgaT0xO2k8bnVtO2krKykgcmV0cmFjdCArPSAnJm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7Jm5ic3A7JztcXG4gICAgcmV0dXJuICc8c3Bhbj4nK3JldHJhY3QrJzwvc3Bhbj4nO1xcbn1cXG5cXG5mdW5jdGlvbiBHZXRDb21tZW50KG1haW4sYXV0b3IsdGltZSxmbG9vcil7XFxuXFxuICAgIGxldCBmb250U3R5bGUgPSAnPGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPjxzcGFuIGNsYXNzPVxcXCJub3JtYWwtZm9udCBncmF5LWZvbnQgYWxpZ24tYmFzZWxpbmVcXFwiPiZuYnNwOyZuYnNwOycrdGltZSsnICZuYnNwOzwvc3Bhbj48L2ZvbnQ+JztcXG4gICAgbGV0IGJ1dHRvbkRhdGEgPSBnZXRDb2xvclRleHQoYXV0b3IsJyMyOTc5RkYnKStmb250U3R5bGUrZ2V0Q29sb3JUZXh0KGZsb29yLCcjMjk3OWFhJyk7XFxuICAgIGxldCBjb21tZW50ID0gJyc7XFxuXFxuICAgIGlmKGZsb29yPT0nJyl7XFxuICAgICAgICBjb21tZW50ID1HZXRIb21lKDEpK21haW4rZ2V0TmV3VGV4dCgnPGJyPicrR2V0SG9tZSgxKStidXR0b25EYXRhLCdzbWFsbCcpO1xcbiAgICB9ZWxzZXtcXG4gICAgICAgIGNvbW1lbnQgPSBtYWluK2dldE5ld1RleHQoJzxicj4nKyBidXR0b25EYXRhLCdzbWFsbCcpO1xcbiAgICB9XFxuICAgIHJldHVybiBjb21tZW50O1xcbn1cXG5cXG5mdW5jdGlvbiBHZXRUaXBzKHRpcHMsd2FybmluZyl7XFxuICAgIGxldCB0aXBzU3R5bGUgPSAnPHNtYWxsPjxzcGFuIGNsYXNzPVxcXCJub3JtYWwtZm9udCBncmF5LWZvbnQgYWxpZ24tYmFzZWxpbmVcXFwiPiZuYnNwOycrdGlwcysnICZuYnNwOzwvc3Bhbj48L3NtYWxsPic7XFxuICAgIGxldCB3YXJuaW5nU3R5bGUgPSAnPHNtYWxsPjxmb250IGNvbG9yPVxcXCJncmV5XFxcIj48c3BhbiBjbGFzcz1cXFwibm9ybWFsLWZvbnQgZ3JheS1mb250IGFsaWduLWJhc2VsaW5lXFxcIj4mbmJzcDsnK3dhcm5pbmcrJyAmbmJzcDs8L3NwYW4+PC9mb250Pjwvc21hbGw+JztcXG4gICAgcmV0dXJuIHRpcHNTdHlsZSsnPGJyPicrd2FybmluZ1N0eWxlO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuino+aekOaQnOe0olwiLFwicGF0aFwiOlwib25lXCIsXCJydWxlXCI6XCJmdW5jdGlvbiBnZXRJdGVtKGh0bWwsY29sb3JzKXtcXG4gICAgdmFyIGxpc3QgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICdib2R5JiZhcnRpY2xlJyk7Ly8gICAgICAg44CQ5YiX6KGo44CRXFxuICAgIHZhciBpdGVtPVtdO1xcbiAgICBmb3IgKHZhciBpIGluIGxpc3QpIHtcXG4gICAgICAgIGxldCB0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbChsaXN0W2ldLCAnaDImJlRleHQnKTtcXG4gICAgICAgIGxldCBwaWMgPSBcXFwiaHR0cHM6Ly9pbWcwLmJhaWR1LmNvbS9pdC91PTE0MjA3MTk1NTYsMjUwOTkyNTQ4NiZmbT0yNiZmbXQ9YXV0byZncD0wLmpwZ1xcXCI7XFxuICAgICAgICB0cnl7XFxuICAgICAgICAgICAgcGljID0gcGFyc2VEb21Gb3JIdG1sKGxpc3RbaV0sICdpbWcmJmRhdGEtc3JjJyk7XFxuICAgICAgICB9Y2F0Y2goZSl7fVxcbiAgICAgICAgbGV0IGNvbW1lbnROdW0gPSAnMCc7XFxuICAgICAgICB0cnl7XFxuICAgICAgICAgICAgY29tbWVudE51bSA9IHBhcnNlRG9tRm9ySHRtbChsaXN0W2ldLCAnLnBjJiZUZXh0Jykuc3BsaXQoXFxcIihcXFwiKVsxXS5zcGxpdChcXFwiKVxcXCIpWzBdO1xcbiAgICAgICAgfWNhdGNoKGUpe31cXG5cXG4gICAgICAgIGxldCB0aW1lID0gXFxcIvCflafml6XmnJ86IFxcXCIgKyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9JysgY29sb3JzICsgJz4nICsgcGFyc2VEb21Gb3JIdG1sKGxpc3RbaV0sICcubWV0YSYmdGltZSYmVGV4dCcpICsnIDwvZm9udD48L2I+JztcXG4gICAgICAgIGxldCBsaWtlID0gXFxcIvCfkpzngrnotZ46IFxcXCIgKyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9JysgY29sb3JzICsgJz4nICsgcGFyc2VEb21Gb3JIdG1sKGxpc3RbaV0sICcucG9zdC1saWtlJiZzcGFuJiZUZXh0JykgKycgPC9mb250PjwvYj4nO1xcbiAgICAgICAgbGV0IGNvbW1lbnQgPSAgXFxcIiAg8J+SrOivhOiuujogXFxcIiArICfigJzigJzigJ3igJ08Yj48Zm9udCBjb2xvcj0nKyBjb2xvcnMgKyAnPicgKyBjb21tZW50TnVtICsnIDwvZm9udD48L2I+JztcXG5cXG4gICAgICAgIGxldCB0YWJzPVxcXCJcXFxcblxcXFxuXFxcIjtcXG5cXG4gICAgICAgIGl0ZW0ucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6dGl0bGUsLy/jgJDmoIfpopjjgJFcXG4gICAgICAgICAgICBwaWNfdXJsOiBwaWMsIC8v5Zu+54mHXFxuICAgICAgICAgICAgZGVzYzogdGltZSt0YWJzK2xpa2UrY29tbWVudCwvL+OAkOaPj+i/sOOAkVxcbiAgICAgICAgICAgIHVybDogcGFyc2VEb20obGlzdFtpXSwgJ2gyJiZhJiZocmVmJykgKycjZnVsbFRoZW1lIyNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSMnLC8v44CQ6ZO+5o6l44CRXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICByZXR1cm4gaXRlbTtcXG59XFxuXFxuZnVuY3Rpb24gZ2V0U2VhcmNoSXRlbShodG1sKXtcXG4gICAgdmFyIGxpc3QgPSBwYXJzZURvbUZvckFycmF5KGh0bWwsICdib2R5JiZhcnRpY2xlJyk7Ly8gICAgICAg44CQ5YiX6KGo44CRXFxuICAgIHZhciBpdGVtPVtdO1xcbiAgICBmb3IgKHZhciBpIGluIGxpc3QpIHtcXG4gICAgICAgIGxldCB0aXRsZSA9IHBhcnNlRG9tRm9ySHRtbChsaXN0W2ldLCAnaDImJlRleHQnKTtcXG4gICAgICAgIGxldCBwaWMgPSBcXFwiaHR0cHM6Ly9pbWcwLmJhaWR1LmNvbS9pdC91PTE0MjA3MTk1NTYsMjUwOTkyNTQ4NiZmbT0yNiZmbXQ9YXV0byZncD0wLmpwZ1xcXCI7XFxuICAgICAgICB0cnl7XFxuICAgICAgICAgICAgcGljID0gcGFyc2VEb21Gb3JIdG1sKGxpc3RbaV0sICdpbWcmJmRhdGEtc3JjJyk7XFxuICAgICAgICB9Y2F0Y2goZSl7fVxcbiAgICAgICAgbGV0IGNvbW1lbnROdW0gPSAnMCc7XFxuICAgICAgICB0cnl7XFxuICAgICAgICAgICAgY29tbWVudE51bSA9IHBhcnNlRG9tRm9ySHRtbChsaXN0W2ldLCAnLnBjJiZUZXh0Jykuc3BsaXQoXFxcIihcXFwiKVsxXS5zcGxpdChcXFwiKVxcXCIpWzBdO1xcbiAgICAgICAgfWNhdGNoKGUpe31cXG5cXG4gICAgICAgIC8vIGxldCB0aW1lID0gXFxcIvCflac6XFxcIiAgKyBwYXJzZURvbUZvckh0bWwobGlzdFtpXSwgJy5tZXRhJiZ0aW1lJiZUZXh0Jyk7XFxuICAgICAgICBsZXQgbGlrZSA9IFxcXCLwn5KcOiBcXFwiICsgcGFyc2VEb21Gb3JIdG1sKGxpc3RbaV0sICcucG9zdC1saWtlJiZzcGFuJiZUZXh0Jyk7XFxuICAgICAgICBsZXQgY29tbWVudCA9ICBcXFwi8J+SrDogXFxcIiArIGNvbW1lbnROdW07XFxuXFxuICAgICAgICBsZXQgdGFicz1cXFwiICAgXFxcIjtcXG4gICAgICAgIFxcbiAgICAgICAgaXRlbS5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTp0aXRsZSwvL+OAkOagh+mimOOAkVxcbiAgICAgICAgICAgIHBpY191cmw6IHBpYywgLy/lm77niYdcXG4gICAgICAgICAgICBkZXNjOiBsaWtlK3RhYnMrY29tbWVudCwvL+OAkOaPj+i/sOOAkVxcbiAgICAgICAgICAgIHVybDogcGFyc2VEb20obGlzdFtpXSwgJ2gyJiZhJiZocmVmJykgKycjZnVsbFRoZW1lIyNub1JlY29yZEhpc3RvcnkjI25vSGlzdG9yeSMnLC8v44CQ6ZO+5o6l44CRXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICByZXR1cm4gaXRlbTtcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLmlrnms5XkupHpm4ZcIixcInBhdGhcIjpcInVzZXNcIixcInJ1bGVcIjpcImZ1bmN0aW9uIGdldEFkZHJlc3NUYWcodXJsLCB0ZXh0KSB7XFxuICAgIHJldHVybiAnPGEgaHJlZj1cXFwiJyArIHVybCArICdcXFwiPicgKyB0ZXh0ICsgJzwvYT4nXFxufVxcblxcbmZ1bmN0aW9uIGdldFJhbmdlQ29sb3JzKCl7XFxuICAgIC8v6aKc6ImyIOS7o+eggeadpeiHqlJ45aSn5L2sXFxuICAgIGxldCBDb2xvcnM9W1xcXCI0XFxcIixcXFwiNVxcXCIsXFxcIjBcXFwiLFxcXCIxXFxcIixcXFwiQVxcXCIsXFxcIjNcXFwiLFxcXCI4XFxcIixcXFwiOVxcXCIsXFxcIkJcXFwiLFxcXCJDXFxcIixcXFwiRFxcXCIsXFxcIkVcXFwiLFxcXCI2XFxcIixcXFwiN1xcXCIsXFxcIkZcXFwiXTtcXG4gICAgbGV0IENvbG9yID0gXFxcIiNcXFwiO1xcbiAgICBmb3IgKGxldCBpPTA7aTw2O2krKyl7XFxuICAgICAgICBsZXQgbnVtPU1hdGguY2VpbCgoTWF0aC5yYW5kb20oKSoxNSkpLTE7XFxuICAgICAgICBDb2xvcis9Q29sb3JzW251bV07XFxuICAgIH1cXG4gICAgcmV0dXJuIENvbG9yO1xcbn1cXG5cXG5mdW5jdGlvbiBnZXRCYWlkdVl1bkNvZGUoY29udGVudCl7XFxuICAgIGlmKGNvbnRlbnQuaW5jbHVkZXMoXFxcInBhbi5iYWlkdS5jb21cXFwiKSl7XFxuICAgICAgICB2YXIgY29kZSA9IGNvbnRlbnQuc3BsaXQoXFxcIuaPkOWPluegge+8mlxcXCIpO1xcbiAgICAgICAgaWYoY29kZS5sZW5ndGg+MSkgY29weShjb2RlWzFdLnN1YnN0cmluZygwLDQpKTtcXG4gICAgfVxcbn1cIn1dIiwiaWNvbiI6Imh0dHBzOi8vcC5zc2wucWhpbWcuY29tL3QwMTEyN2I3ZGVjMWYxMDAwNzQuanBnIn0=
Add Comment
Please, Sign In to add comment