Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥断插接口设置@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIlBhcnNlX0RuLXZ1ZS5odG1sXCIsXCJwYXRoXCI6XCJQYXJzZV9Ebi5odG1sXCIsXCJydWxlXCI6XCI8IURPQ1RZUEUgaHRtbD5cXG48aHRtbD5cXG48aGVhZD5cXG4gICAgPG1ldGEgY2hhcnNldD1cXFwidXRmLThcXFwiPlxcbiAgICA8bWV0YSBuYW1lPVxcXCJ2aWV3cG9ydFxcXCIgY29udGVudD1cXFwid2lkdGg9ZGV2aWNlLXdpZHRoLGluaXRpYWwtc2NhbGU9MSxtaW5pbXVtLXNjYWxlPTEsbWF4aW11bS1zY2FsZT0xLHVzZXItc2NhbGFibGU9bm9cXFwiIC8+XFxuICAgIDx0aXRsZT5QYXJzZV9Ebl92dWU8L3RpdGxlPlxcbiAgICA8c2NyaXB0PlxcbiAgICAgICAgY29uc3QgdnVlUGF0aCA9ICdoaWtlcjovL2ZpbGVzL3J1bGVzL2R6SG91c2UvanMvdnVlLmpzJztcXG4gICAgICAgIGlmKHR5cGVvZihmYmEpPT0ndW5kZWZpbmVkJ3x8IWZiYSl7XFxuICAgICAgICAgICAgdmFyIGZiYSA9IGZ5X2JyaWRnZV9hcHA7XFxuICAgICAgICB9XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIGlmKHR5cGVvZihyZXF1ZXN0KT09J3VuZGVmaW5lZCd8fCFyZXF1ZXN0KXtcXG4gICAgICAgICAgICAgICAgZXZhbChmYmEuZ2V0SW50ZXJuYWxKcygpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy8gZmJhLmxvZyh2dWVQYXRoKTtcXG4gICAgICAgICAgICBpZighcmVxdWVzdCh2dWVQYXRoKSl7XFxuICAgICAgICAgICAgICAgIGZiYS53cml0ZUZpbGUodnVlUGF0aCxyZXF1ZXN0KCdodHRwOi8vaGlrZXIubm9raWEucHJlc3MvaGlrZXJ1bGUvcnVsZWxpc3QuanNvbj9pZD0xODIzJykpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICBldmFsKGZiYS5mZXRjaCh2dWVQYXRoKSk7XFxuICAgICAgICAgICAgfWNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGUubWVzc2FnZSk7XFxuICAgICAgICAgICAgICAgIGZiYS5sb2coZS5tZXNzYWdlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy8gZmJhLmxvZygn5Yqg6L29dnVl57uE5Lu25a6M5q+VJyk7XFxuICAgICAgICB9Y2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICBhbGVydChlLm1lc3NhZ2UpO1xcbiAgICAgICAgfVxcbiAgICA8L3NjcmlwdD5cXG4gICAgPCEtLSAgICA8c2NyaXB0IHNyYz1cXFwiaHR0cHM6Ly91bnBrZy5jb20vdnVlQG5leHRcXFwiPjwvc2NyaXB0Pi0tPlxcbiAgICA8IS0tICAgIDxzY3JpcHQgc3JjPVxcXCJmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9ydWxlcy9kekhvdXNlL2pzL3Z1ZS5qc1xcXCI+PC9zY3JpcHQ+LS0+XFxuICAgIDxzdHlsZT5cXG4gICAgICAgIGJvZHkge1xcbiAgICAgICAgICAgIG1hcmdpbjogMCA1cHggMCA1cHg7XFxuICAgICAgICAgICAgcGFkZGluZzogMCAwcHggMCAwcHg7XFxuICAgICAgICAgICAgLyogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRjlGMERBOyovXFxuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDA7XFxuICAgICAgICAgICAgZm9udC1mYW1pbHk6IFxcXCJNaWNyb3NvZnQgWWFIZWlcXFwiLFxcXCLlrovkvZNcXFwiLFxcXCJTZWdvZSBVSVxcXCIsIFxcXCJMdWNpZGEgR3JhbmRlXFxcIiwgSGVsdmV0aWNhLCBBcmlhbCxzYW5zLXNlcmlmLCBGcmVlU2FucywgQXJpbW87XFxuICAgICAgICB9XFxuICAgICAgICAjYXBwe1xcbiAgICAgICAgICAgIG1hcmdpbi10b3A6LTEwcHg7XFxuICAgICAgICB9XFxuICAgICAgICAjdGlwc3tcXG4gICAgICAgICAgICBtYXJnaW4tdG9wOi0xMHB4O1xcbiAgICAgICAgICAgIG1hcmdpbi1ib3R0b206NXB4O1xcbiAgICAgICAgfVxcbiAgICAgICAgLmZ1bmd7XFxuICAgICAgICAgICAgdGV4dC1hbGlnbjpjZW50ZXJcXG4gICAgICAgIH1cXG4gICAgICAgIGRpdi5ib3gge1xcbiAgICAgICAgICAgIG1hcmdpbi10b3A6LTFweDtcXG4gICAgICAgICAgICBoZWlnaHQ6IDQzcHg7XFxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XFxuICAgICAgICB9XFxuICAgICAgICAvKui+k+WFpeahhuWwuuWvuCovXFxuICAgICAgICBmb3JtIHtcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgICAgICAgICAgd2lkdGg6IDEwMCU7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpbnB1dCwgbGFiZWwsIHNlbGVjdCB7XFxuICAgICAgICAgICAgYm9yZGVyOiBub25lO1xcbiAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7XFxuICAgICAgICB9XFxuICAgICAgICAvKuWtl+S9k+S9jee9riovXFxuICAgICAgICBpbnB1dCB7XFxuICAgICAgICAgICAgd2lkdGg6IDc3JTtcXG4gICAgICAgICAgICBoZWlnaHQ6IDMycHg7XFxuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiA2NnB4O1xcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDBweDtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGxhYmVsIHtcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjtcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogNDNweDtcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxuICAgICAgICAgICAgd2lkdGg6IDYwcHg7XFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIC8q5bCP5qGGKi9cXG4gICAgICAgIC5iYXIgbGFiZWwge1xcbiAgICAgICAgICAgIC8qYmFja2dyb3VuZDogI0QwNkI2QzsqL1xcbiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDVweCA1NTVweCA1NTVweCA1cHg7XFxuICAgICAgICAgICAgd2lkdGg6IDYwcHg7XFxuICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xcbiAgICAgICAgICAgIHRvcDogMDtcXG4gICAgICAgICAgICBsZWZ0OiAzcHg7XFxuICAgICAgICB9XFxuXFxuICAgICAgICAvKui+k+WFpeahhuagt+W8jyovXFxuICAgICAgICAuYmFyIGlucHV0IHtcXG4gICAgICAgICAgICAvKmJvcmRlci1yYWRpdXM6IDVweCA1NTVweCA1NTVweCA1cHg7XFxuICAgICAgICAgICAgICovXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgLyrliJfooagqL1xcbiAgICAgICAgc2VsZWN0IHtcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjtcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDo0MHB4O1xcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcXG4gICAgICAgICAgICB3aWR0aDogMjBweDtcXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgLyrliJfooagqL1xcbiAgICAgICAgLmxpZWIgc2VsZWN0e1xcbiAgICAgICAgICAgIC8qYm9yZGVyLXJhZGl1czogNHB4OyovXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTU1cHggNXB4IDVweCA1NTVweDtcXG4gICAgICAgICAgICB3aWR0aDogODBweDtcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjtcXG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XFxuICAgICAgICAgICAgdG9wOiAwO1xcbiAgICAgICAgICAgIHJpZ2h0OiAycHg7XFxuICAgICAgICB9XFxuXFxuICAgICAgICAvKuWktOWDjyovXFxuICAgICAgICAucm91bmRfaWNvbntcXG4gICAgICAgICAgICB3aWR0aDogNDBweDtcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxuICAgICAgICAgICAgZGlzcGxheTogZmxleDtcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7XFxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXG4gICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjtcXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICAgICAgfVxcbiAgICA8L3N0eWxlPlxcbjwvaGVhZD5cXG48Ym9keT5cXG48ZGl2IGNsYXNzPVxcXCJmdW5nXFxcIj5cXG4gICAgPGEgc3R5bGU9XFxcImZsb2F0OmxlZnQ7XFxcIj5cXG4gICAgICAgIDxidXR0b24gIDpzdHlsZT1cXFwiJ2JvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogJyt0aGVtZXMuY2xvc2VCdG4uYmFja2dyb3VuZCsnO3dpZHRoOiA4MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICcrdGhlbWVzLmNsb3NlQnRuLmNvbG9yXFxcIiBvbmNsaWNrPVxcXCJjYW5jZWwoKTtcXFwiPuWFsyDpl608L2J1dHRvbj5cXG4gICAgPC9hPlxcbiAgICA8YSBjbGFzcz1cXFwiYnRuIGJ0bi1wcmltYXJ5XFxcIj5cXG48IS0tICAgICAgICA8YnV0dG9uICA6c3R5bGU9XFxcIidib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6ICcrdGhlbWVzLnRpcHNCdG4uYmFja2dyb3VuZCsnO3dpZHRoOiAxMjBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAnK3RoZW1lcy50aXBzQnRuLmNvbG9yXFxcIiBAY2xpY2s9XFxcInNob3dUaXBzPSFzaG93VGlwc1xcXCI+e3tzaG93VGlwcz9cXFwi6ZqQ6JeP5o+Q56S6XFxcIjpcXFwi5pi+56S65o+Q56S6XFxcIn19PC9idXR0b24+LS0+XFxuICAgICAgICA8YnV0dG9uICA6c3R5bGU9XFxcIidib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6ICcrdGhlbWVzLnRpcHNCdG4uYmFja2dyb3VuZCsnO3dpZHRoOiAxMjBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAnK3RoZW1lcy50aXBzQnRuLmNvbG9yXFxcIiBAY2xpY2s9XFxcInNob3dUaXBzPSFzaG93VGlwc1xcXCIgdi10ZXh0PVxcXCJzaG93VGlwcz8n6ZqQ6JeP5o+Q56S6Jzon5pi+56S65o+Q56S6J1xcXCI+PC9idXR0b24+XFxuICAgIDwvYT5cXG4gICAgPGEgc3R5bGU9XFxcImZsb2F0OnJpZ2h0XFxcIj5cXG4gICAgICAgIDxidXR0b24gOnN0eWxlPVxcXCInYm9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiAnK3RoZW1lcy5zYXZlQnRuLmJhY2tncm91bmQrJzt3aWR0aDogODBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAnK3RoZW1lcy5zYXZlQnRuLmNvbG9yXFxcIiBvbmNsaWNrPVxcXCJjbGlja21lKCfphY0g572uIOW3siDkv50g5a2YIO+8gScsIDEwMDAsICflvIAnKTtcXFwiPuS/nSDlrZg8L2J1dHRvbj5cXG4gICAgPC9hPlxcblxcbjwvZGl2Plxcbjxicj5cXG48ZGl2IGlkPVxcXCJhcHBcXFwiPlxcbiAgICA8aDYgaWQ9XFxcInRpcHNcXFwiIHYtaHRtbD1cXFwidGlwc1xcXCIgdi1zaG93PVxcXCJzaG93VGlwc1xcXCI+PC9oNj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiYm94IGJhclxcXCIgdi1mb3I9XFxcIm9wdGlvbiBpbiBvcHRpb25zXFxcIj5cXG4gICAgICAgIDxmb3JtPlxcbjwhLS0gICAgICAgICAgICA8bGFiZWwgdHlwZT1cXFwic3VibWl0XFxcIiA6c3R5bGU9XFxcIidiYWNrZ3JvdW5kOicrdGhlbWVzLmJhcmxhYmVsLmJhY2tncm91bmQrJztjb2xvcjonK3RoZW1lcy5iYXJsYWJlbC5jb2xvclxcXCI+e3sgb3B0aW9uLm5hbWUgfX08L2xhYmVsPi0tPlxcbiAgICAgICAgICAgIDxsYWJlbCB0eXBlPVxcXCJzdWJtaXRcXFwiIDpzdHlsZT1cXFwiJ2JhY2tncm91bmQ6Jyt0aGVtZXMuYmFybGFiZWwuYmFja2dyb3VuZCsnO2NvbG9yOicrdGhlbWVzLmJhcmxhYmVsLmNvbG9yXFxcIiB2LXRleHQ9XFxcIm9wdGlvbi5uYW1lXFxcIj48L2xhYmVsPlxcbiAgICAgICAgICAgIDxpbnB1dCA6c3R5bGU9XFxcIidiYWNrZ3JvdW5kOicrdGhlbWVzLmJhcklucHV0LmJhY2tncm91bmQrJztib3JkZXI6IDNweCBzb2xpZCAnK3RoZW1lcy5iYXJJbnB1dC5jb2xvclxcXCIgdHlwZT1cXFwidGV4dFxcXCIgb25jbGljaz1cXFwicmVzZXRTZWxlY3QodGhpcy5pZClcXFwiIDpwbGFjZWhvbGRlcj1cXFwib3B0aW9uLnBsYWNlaG9sZGVyfHxwbGFjZWhvbGRlclxcXCIgdi1tb2RlbD1cXFwib3B0aW9uLnZhbHVlXFxcIiB2LWJpbmQ6aWQ9XFxcIm9wdGlvbi5pZFxcXCI+XFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFwibGllYlxcXCI+XFxuICAgICAgICAgICAgICAgIDxzZWxlY3QgOnN0eWxlPVxcXCInYmFja2dyb3VuZDonK3RoZW1lcy5zZWxlY3QuYmFja2dyb3VuZCsnO2NvbG9yOicrdGhlbWVzLnNlbGVjdC5jb2xvclxcXCIgOmNsZWFyYWJsZT1cXFwidHJ1ZVxcXCIgc2l6ZT1cXFwiMlxcXCIgOmlkPVxcXCJvcHRpb24uaWQrJ1NlbGVjdCdcXFwiIDpuYW1lPVxcXCJvcHRpb24uaWRcXFwiIG9uY2hhbmdlPVxcXCJnZXRPcHRpb24odGhpcy5pZCx0aGlzLm5hbWUpXFxcIiAgdi1tb2RlbD1cXFwib3B0aW9uLnZhbHVlXFxcIj5cXG48IS0tICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHYtaWY9XFxcIm9wdGlvbi5pZCE9PSdxanUnJiZvcHRpb24uaWQhPT0nY2onXFxcIiA6dmFsdWU9XFxcInNlbFxcXCIgOmtleT1cXFwiaW5kZXhcXFwiIHYtZm9yPVxcXCIoc2VsLGluZGV4KSBpbiBteVNlbGVjdFxcXCI+e3sgc2VsIH19PC9vcHRpb24+LS0+XFxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHYtaWY9XFxcIm9wdGlvbi5pZCE9PSdxanUnJiZvcHRpb24uaWQhPT0nY2onXFxcIiA6dmFsdWU9XFxcInNlbFxcXCIgOmtleT1cXFwiaW5kZXhcXFwiIHYtZm9yPVxcXCIoc2VsLGluZGV4KSBpbiBteVNlbGVjdFxcXCIgdi10ZXh0PVxcXCJzZWxcXFwiPjwvb3B0aW9uPlxcbjwhLS0gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdi1lbHNlLWlmPVxcXCJvcHRpb24uaWQ9PT0ncWp1J1xcXCIgOnZhbHVlPVxcXCJzZWxcXFwiIDprZXk9XFxcImluZGV4XFxcIiB2LWZvcj1cXFwiKHNlbCxpbmRleCkgaW4gWyfpu5jorqQnXS5jb25jYXQobXlTZWxlY3QpXFxcIj57eyBzZWwgfX08L29wdGlvbj4tLT5cXG4gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdi1lbHNlLWlmPVxcXCJvcHRpb24uaWQ9PT0ncWp1J1xcXCIgOnZhbHVlPVxcXCJzZWxcXFwiIDprZXk9XFxcImluZGV4XFxcIiB2LWZvcj1cXFwiKHNlbCxpbmRleCkgaW4gWyfpu5jorqQnXS5jb25jYXQobXlTZWxlY3QpXFxcIiB2LXRleHQ9XFxcInNlbFxcXCI+PC9vcHRpb24+XFxuPCEtLSAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiA6dmFsdWU9XFxcInNlbFxcXCIgOmtleT1cXFwiaW5kZXhcXFwiIHYtZWxzZSB2LWZvcj1cXFwiKHNlbCxpbmRleCkgaW4gY2pTZWxcXFwiPnt7IHNlbCB9fTwvb3B0aW9uPi0tPlxcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiA6dmFsdWU9XFxcInNlbFxcXCIgOmtleT1cXFwiaW5kZXhcXFwiIHYtZWxzZSB2LWZvcj1cXFwiKHNlbCxpbmRleCkgaW4gY2pTZWxcXFwiIHYtdGV4dD1cXFwic2VsXFxcIj48L29wdGlvbj5cXG4gICAgICAgICAgICAgICAgPC9zZWxlY3Q+XFxuICAgICAgICAgICAgPC9kaXY+XFxuICAgICAgICA8L2Zvcm0+XFxuICAgIDwvZGl2PlxcbjwvZGl2PlxcbjxkaXY+XFxuICAgIDxhIHYtZm9yPVxcXCJ2ZXIgaW4gdmVyaW5mb1xcXCIgc3R5bGU9XFxcImZsb2F0OmxlZnQ7bWFyZ2luLXRvcDoxcHg7bWFyZ2luLXJpZ2h0OiAyMHB4XFxcIiB2LWJpbmQ6aWQ9J3Zlci5pZCcgb25jbGljaz1cXFwiZG9PcHRpb24odGhpcy5pZClcXFwiPlxcbiAgICAgICAgPGltZyA6c3JjPVxcXCJ2ZXIuYXZhdGFyXFxcIiBjbGFzcz1cXFwicm91bmRfaWNvblxcXCIgIGFsdD1cXFwiXFxcIj5cXG48IS0tICAgICAgICA8c3BhbiBzdHlsZT1cXFwibWFyZ2luLWxlZnQ6MTBweDtsaW5lLWhlaWdodDoxMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiBncmV5O1xcXCI+e3sgdmVyLmF1dGhvciB9fTwvc3Bhbj4tLT5cXG4gICAgICAgIDxzcGFuIHN0eWxlPVxcXCJtYXJnaW4tbGVmdDoxMHB4O2xpbmUtaGVpZ2h0OjEwcHg7Zm9udC1zaXplOjEycHg7Y29sb3I6IGdyZXk7XFxcIiB2LXRleHQ9XFxcInZlci5hdXRob3JcXFwiPjwvc3Bhbj5cXG4gICAgPC9hPlxcbiAgICA8YSBzdHlsZT1cXFwiZmxvYXQ6cmlnaHQ7bWFyZ2luLXRvcDoxMHB4O1xcXCI+XFxuICAgICAgICA8YnV0dG9uIDpzdHlsZT1cXFwiJ2JvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDonK3RoZW1lcy5zYXZlQ2xvc2VCdG4uYmFja2dyb3VuZCsnO3dpZHRoOiAxNjBweDtoZWlnaHQ6NDBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAnK3RoZW1lcy5zYXZlQ2xvc2VCdG4uY29sb3JcXFwiIG9uY2xpY2s9XFxcImNsaWNrbWUoJ+mFjSDnva4g5beyIOS/nSDlrZgg77yBJywgMTAwMCwgJ+WFsycpO1xcXCI+5L+d5a2Y5bm25YWz6Zet55WM6Z2iPC9idXR0b24+XFxuICAgIDwvYT5cXG48L2Rpdj5cXG48c2NyaXB0PlxcbiAgICBsZXQgdGlwcyA9IGDmj5DnpLrvvJo8YnI+4pGg5rOo5oSP5o+S5Lu26YCJ6aG577yM5rKh5pyJ5omL5Yqo5a+85YWl5o+S5Lu255qE6K+d5LiN55So5Yqo5a6D44CC5aaC6K6+572u5LiN5b2T5Lya5a+86Ie06KeE5YiZ5peg5rOV5L2/55So77yMPGJyPuino+WGs+WKnuazle+8muinhueVjOaJk+W8gOabtOWkmuiuvue9ruKGkuaWh+S7tueuoeeQhuKGkueCuWNhY2hl4oaS6ZW/5oyJTXlQYXJzZVNldC5qc29u5Yig6Zmk5o6J77ybPGJyPuKRoeWFqOWxgOiuvue9ruWmguaenOmAieaLqeS6humdnum7mOiupOmCo+S5iOWFqOmDqOeahOino+aekOS8muS9v+eUqOi/meS4gOiuvue9ru+8jOS4jeaDs+i/meagt+eahOivneivt+Whq+WFpem7mOiupO+8mzxicj7ikaLnu7/oibLkv53lrZjmjInpkq7ku4Xku4Xkv53lrZjphY3nva7kuI3kvJrlhbPpl63orr7nva7pobXpnaLvvIzphY3nva7lkI7mg7Pkv53lrZjlubblhbPpl63orr7nva7pobXpnaLnmoTor53or7fngrnok53oibLmjInpkq7vvJs8YnI+4pGj5aaC5p6c6YGH5Yiw5L+d5a2Y5oyJ6ZKu54K55LiN5Yqo5oiW6ICF5oql6ZSZ55qE5oOF5Ya177yM5Lul5LiL6Lev5b6E5oyo552A5Yig6Zmk5LiA6YGN77yM54S25ZCO6YeN5paw5ouJ5Y+W5o+S5Lu277yM572R6aG15YaN5omT5byA5q2k572R6aG1W+S4jeimgeWFiOaLieS7o+eggV3jgILorrDlvpflpIfku708YnI+XFxu5Li75o+S5Lu25a2Y5pS+6Lev5b6EOiAvY2FjaGUvUGFyc2VfRG4uanM8YnI+XFxu572R6aG16ISa5pys5a2Y5pS+6Lev5b6EOiAvY2FjaGUvUGFyc2VfRG4uaHRtbDxicj5cXG7ml6fmlq3mj5LphY3nva7ot6/lvoQ6L2NhY2hlL015UGFyc2VTZXQuanNvbjxicj5cXG7mlrDmlq3mj5LphY3nva7ot6/lvoQvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uPGJyPlxcbuS4u+mimOaWh+S7tjovY2FjaGUvTXlUaGVtZS5qc29uPGJyPlxcbuS4u+mimOaWh+S7tjovY2FjaGUvTXlUaGVtZS5qc29uPGJyPlxcbuiHquWKqOaho+ino+aekDovY2FjaGUvTXlKaWV4aS5qc29uPGJyPlxcbiAgICDikaTpmIXor7vlrozmj5DnpLrngrnlhbPpl63liqDovb3lrozmlbTorr7nva7pobXpnaLvvIzlpoLlh7rpl67popjml6Dms5Xoh6rooYzop6PlhrPngrnlm77niYfov5vlhaXorrrlnZvlkJHmiJHlj43ppojjgII8YnI+YDtcXG4gICAgbGV0IHBsYWNlaG9sZGVyPSfovpPlhaXop6PmnpDlkI3miJbogIVVUkwuLi4uLi4nO1xcbiAgICAvLyNhYTk2ZGEgI2ZjNTE4NVxcbiAgICBsZXQgdGhlbWVzID0ge1xcbiAgICAgICAgbmFtZTon6buY6K6k5Li76aKYJyxcXG4gICAgICAgIGNsb3NlQnRuOntjb2xvcjonI2Y2ZjZmNicsYmFja2dyb3VuZDonI2FhOTZkYSd9LFxcbiAgICAgICAgc2F2ZUJ0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNjgwMDYnfSxcXG4gICAgICAgIHNhdmVDbG9zZUJ0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNUJGQzUnfSxcXG4gICAgICAgIHRpcHNCdG46e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjMDVCRkM1J30sXFxuICAgICAgICBiYXJsYWJlbDp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyNhYTk2ZGEnfSxcXG4gICAgICAgIGJhcklucHV0Ontjb2xvcjonI2FhOTZkYScsYmFja2dyb3VuZDonI2ZmZmZkMid9LFxcbiAgICAgICAgc2VsZWN0Ontjb2xvcjonI0Y5RjBEQScsYmFja2dyb3VuZDonI2FhOTZkYSd9LFxcbiAgICB9O1xcbiAgICBsZXQgdGhlbWVEZWYgPSB7XFxcIm5hbWVcXFwiOlxcXCLmlq3lv7Xljp/nmq5cXFwiLFxcXCJjbG9zZUJ0blxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiI2M1NDY0YVxcXCJ9LFxcXCJzYXZlQnRuXFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjMDY4MDA2XFxcIn0sXFxcInNhdmVDbG9zZUJ0blxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiIzA1QkZDNVxcXCJ9LFxcXCJ0aXBzQnRuXFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjMDVCRkM1XFxcIn0sXFxcImJhcmxhYmVsXFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0Y5RjBEQVxcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjRDA2QjZDXFxcIn0sXFxcImJhcklucHV0XFxcIjp7XFxcImNvbG9yXFxcIjpcXFwiI0QwNkI2Q1xcXCIsXFxcImJhY2tncm91bmRcXFwiOlxcXCIjRjlGMERBXFxcIn0sXFxcInNlbGVjdFxcXCI6e1xcXCJjb2xvclxcXCI6XFxcIiNGOUYwREFcXFwiLFxcXCJiYWNrZ3JvdW5kXFxcIjpcXFwiI0QwNkI2Q1xcXCJ9fTtcXG4gICAgdmFyIHRoZW1lUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVRoZW1lLmpzb25cXFwiO1xcbiAgICBpZighZmJhLmZldGNoKHRoZW1lUm91dGUpKXtcXG4gICAgICAgIGZiYS53cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeSh7bm93X3RoZW1lOifpu5jorqTkuLvpopgnLHRoZW1lczpbdGhlbWVzLHRoZW1lRGVmXX0pKVxcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICBsZXQgbXlUaGVtZXMgPSBKU09OLnBhcnNlKGZiYS5mZXRjaCh0aGVtZVJvdXRlKSk7XFxuICAgICAgICBsZXQgbm93VGhlbWUgPSBteVRoZW1lcy50aGVtZXMuZmlsdGVyKGl0PT5pdC5uYW1lID09PSBteVRoZW1lcy5ub3dfdGhlbWUpO1xcbiAgICAgICAgdGhlbWVzID0gbm93VGhlbWU/bm93VGhlbWVbMF06bXlUaGVtZXMudGhlbWVzWzBdO1xcbiAgICB9Y2F0Y2ggKGUpIHt9XFxuXFxuICAgIC8vIOaWreW/teWIneWni+WMlumDqOWIhlxcbiAgICBjb25zdCBhbGxBcGk9WydodHRwczovL3Rlc3Qucm9uZ3hpbmd2ci5jb20vdGVzdC8/dXJsPScsJ2h0dHA6Ly9jYWNoZS5sYW5ndWFuZy5pY3U6ODgvZGlkaS5waHA/dXJsPSddO1xcbiAgICB2YXIgc2V0dGluZ3MgPSB7XFxuICAgICAgICBxeTogJ+S4h+iDveino+aekOKSvycsXFxuICAgICAgICB5azogJ+S4h+iDveino+aekOKSvycsXFxuICAgICAgICB0eDogJ+S4h+iDveino+aekOKSvycsXFxuICAgICAgICBtZzogJ+S4h+iDveino+aekOKSvycsXFxuICAgICAgICBibDogJ+S4h+iDveino+aekOKSvycsXFxuICAgICAgICBzaDogJ+S4h+iDveino+aekOKSvycsXFxuICAgICAgICB4ZzogJ+S4h+iDveino+aekOKSvycsXFxuICAgICAgICAvLyBhbDogJ+S4h+iDveino+aekOKSvycsXFxuICAgICAgICBwcDogJ+S4h+iDveino+aekOKSvycsXFxuICAgICAgICBtaTogJ+S4h+iDveino+aekOKSvycsXFxuICAgICAgICBsZTogJ+S4h+iDveino+aekOKSvycsXFxuICAgICAgICBsdDogJ+S4h+iDveino+aekOKSvycsLy/pvpnohb5cXG4gICAgICAgIHJyOifkuIfog73op6PmnpDikr8nLC8v5Lq65Lq66L+3XFxuICAgICAgICB3ZDon5LiH6IO96Kej5p6Q4pK/JywvL+S6lOavkuS6kVxcbiAgICAgICAgb3RoOiAn6YGT6ZW/5LuT5bqT6YCa5YWNJyxcXG4gICAgICAgIG9uZTogJzEwODAnLFxcbiAgICAgICAgZnVuOiAn6J6N5YW0JyxcXG4gICAgICAgIHFqdTogJ+m7mOiupCcsXFxuICAgICAgICBjajogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnXFxuICAgIH07XFxuICAgIHZhciBvbGRSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXCI7XFxuICAgIHZhciBteVNldCA9IGZiYS5mZXRjaChvbGRSb3V0ZSk7XFxuICAgIHZhciBuZXdSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvblxcXCI7XFxuICAgIGlmKCFmYmEuZmV0Y2gobmV3Um91dGUpKXtcXG4gICAgICAgIGZiYS53cml0ZUZpbGUobmV3Um91dGUsSlNPTi5zdHJpbmdpZnkoe3NldHRpbmdzOnNldHRpbmdzLHRpdGxlOltcXFwieXVuMTcxN1xcXCIsXFxcIuS9oOeIueenkeaKgFxcXCIsXFxcIuiejeWFtFxcXCIsXFxcIuS6uuS6uui/ty3kvJjphbdcXFwiXSxjb2Rlczp7XFxcIuS9oOeIueenkeaKgFxcXCI6XFxcImh0dHA6Ly9jYWNoZS5sYW5ndWFuZy5pY3U6ODgvZGlkaS5waHA/dXJsPVxcXCIsXFxcIuiejeWFtFxcXCI6XFxcImh0dHBzOi8vdGVzdC5yb25neGluZ3ZyLmNvbS90ZXN0Lz91cmw9XFxcIixcXFwi5Lq65Lq66L+3LeS8mOmFt1xcXCI6XFxcImh0dHBzOi8vc3ZpcC5yZW5yZW5taS5jYzoyMjIyL2FwaS8/a2V5PW5uNGo4cnVrUFhTVnpSNzhFOSZ1cmw9XFxcIn19KSlcXG4gICAgfVxcbiAgICB2YXIgbmV3Q29uZmlnID0gZmJhLmZldGNoKG5ld1JvdXRlKTtcXG4gICAgdmFyIG15U2VsZWN0ID0gW107XFxuICAgIGZ1bmN0aW9uIGNvbXBhcmUobGlzdCkge1xcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xcbiAgICAgICAgICAgIHJldHVybiAhbGlzdC5pbmNsdWRlcyhpdClcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBpZihuZXdDb25maWcmJm5ld0NvbmZpZy5sZW5ndGg+MjApe1xcbiAgICAgICAgZXZhbChcXFwibmV3Q29uZmlnID1cXFwiICsgbmV3Q29uZmlnICsgXFxcIjtcXFwiKTtcXG4gICAgICAgIGxldCBuZXdLZXlzID0gT2JqZWN0LmtleXMobmV3Q29uZmlnLnNldHRpbmdzKTtcXG4gICAgICAgIGxldCBub3dLZXlzID0gT2JqZWN0LmtleXMoc2V0dGluZ3MpO1xcbiAgICAgICAgZm9yKGxldCBpIGluIG5ld0tleXMpey8v5riF6Zmk5aSa5L2Z55qE6IqC54K5XFxuICAgICAgICAgICAgaWYoIW5vd0tleXMuaW5jbHVkZXMobmV3S2V5c1tpXSkpe1xcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3Q29uZmlnLnNldHRpbmdzW25ld0tleXNbaV1dXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHNldHRpbmdzLG5ld0NvbmZpZy5zZXR0aW5ncyk7XFxuICAgICAgICB2YXIgeWNUaXRsZSA9IFsnZGVmYXVsdFBhcnNlJywgJ2RlZmF1bHRQYXJzZVdlYicsJ21hb3NzJywgJ0NpdHlJUCcsICdjYWNoZU0zdTgnLCAncGNVQScsICdwYXJzZUxjJywgJ2dwYXJzZScsICducGFyc2UnXTtcXG4gICAgICAgIG15U2VsZWN0ID0gbmV3Q29uZmlnLnRpdGxlLmZpbHRlcihjb21wYXJlKHljVGl0bGUpKTtcXG4gICAgICAgIC8vIG15U2VsZWN0ID0gbXlTZWxlY3QubWFwKChpdCk9PntcXG4gICAgICAgIC8vICAgICBsZXQgZmxhZyA9ICfik4onO1xcbiAgICAgICAgLy8gICAgIGlmKHR5cGVvZihuZXdDb25maWcuY29kZXNbaXRdKT09PSdmdW5jdGlvbicpe1xcbiAgICAgICAgLy8gICAgICAgICBmbGFnID0gJ+KSvyc7XFxuICAgICAgICAvLyAgICAgfWVsc2UgaWYodHlwZW9mKG5ld0NvbmZpZy5jb2Rlc1tpdF0pPT09J3VuZGVmaW5lZCcpe1xcbiAgICAgICAgLy8gICAgICAgICBmbGFnID0gJyc7XFxuICAgICAgICAvLyAgICAgfVxcbiAgICAgICAgLy8gICAgIHJldHVybiBmbGFnK2l0XFxuICAgICAgICAvLyB9KTtcXG4gICAgfVxcbiAgICAvL2ZiYS5sb2coSlNPTi5zdHJpbmdpZnkobXlTZWxlY3QpKTtcXG5cXG4gICAgbGV0IG9wdGlvbnMgPSBbXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon54ix5aWH6Im6JyxcXG4gICAgICAgICAgICBpZDoncXknLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnF5LFxcbiAgICAgICAgICAgIHBsYWNlaG9sZGVyOiforr7nva7niLHlpYfoibonXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+S8mOmFtycsXFxuICAgICAgICAgICAgaWQ6J3lrJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy55a1xcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifohb7orq8nLFxcbiAgICAgICAgICAgIGlkOid0eCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MudHhcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon6IqS5p6cJyxcXG4gICAgICAgICAgICBpZDonbWcnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLm1nXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+WTlOWTqeWTlOWTqScsXFxuICAgICAgICAgICAgaWQ6J2JsJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5ibFxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifmkJzni5AnLFxcbiAgICAgICAgICAgIGlkOidzaCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Muc2hcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon6KW/55OcJyxcXG4gICAgICAgICAgICBpZDoneGcnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnhnXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J1BQVFYnLFxcbiAgICAgICAgICAgIGlkOidwcCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MucHBcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon5ZKq5ZKVJyxcXG4gICAgICAgICAgICBpZDonbWknLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLm1pXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+S5kOinhicsXFxuICAgICAgICAgICAgaWQ6J2xlJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5sZVxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOicxOTA1JyxcXG4gICAgICAgICAgICBpZDonb25lJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5vbmVcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon6aOO6KGMJyxcXG4gICAgICAgICAgICBpZDonZnVuJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5mdW5cXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon6b6Z6IW+JyxcXG4gICAgICAgICAgICBpZDonbHQnLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLmx0XFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIG5hbWU6J+S6uuS6uui/tycsXFxuICAgICAgICAgICAgaWQ6J3JyJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5yclxcbiAgICAgICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBuYW1lOifkupTmr5InLFxcbiAgICAgICAgICAgIGlkOid3ZCcsXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Mud2RcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon5YW25LuWJyxcXG4gICAgICAgICAgICBpZDonb3RoJyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5vdGhcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon5YWo5bGAJyxcXG4gICAgICAgICAgICBpZDoncWp1JyxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5xanVcXG4gICAgICAgIH0sXFxuICAgICAgICB7XFxuICAgICAgICAgICAgbmFtZTon5o+S5Lu2JyxcXG4gICAgICAgICAgICBpZDonY2onLFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLmNqXFxuICAgICAgICB9LFxcbiAgICBdO1xcblxcbiAgICBmdW5jdGlvbiBEaWQoaWQpe1xcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcXG4gICAgfVxcbiAgICBmdW5jdGlvbiBnZXRPcHRpb24oaWQsdGl0bGUpIHtcXG4gICAgICAgIHZhciBvYmogPSBEaWQoaWQpO1xcbiAgICAgICAgRGlkKHRpdGxlKS52YWx1ZSA9IG9iai5vcHRpb25zW29iai5zZWxlY3RlZEluZGV4XS50ZXh0O1xcbiAgICAgICAgLy8gRGlkKHRpdGxlKS52YWx1ZSA9IG9iai5vcHRpb25zW29iai5zZWxlY3RlZEluZGV4XS50ZXh0LnJlcGxhY2UoL+KTinzikr8vZywnJyk7XFxuICAgIH1cXG4gICAgZnVuY3Rpb24gcmVzZXRTZWxlY3QoaWQpe1xcbiAgICAgICAgRGlkKGlkK1xcXCJTZWxlY3RcXFwiKS5vcHRpb25zLnNlbGVjdGVkSW5kZXggPSAtMTtcXG4gICAgfVxcblxcbiAgICAvL+WHveaVsOmDqOWIhlxcblxcbiAgICBmdW5jdGlvbiBUb2FzdChtc2csZHVyYXRpb24pe1xcbiAgICAgICAgZHVyYXRpb249aXNOYU4oZHVyYXRpb24pPzIwMDA6ZHVyYXRpb247XFxuICAgICAgICB2YXIgbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xcbiAgICAgICAgbS5pbm5lckhUTUwgPSBtc2c7XFxuICAgICAgICBtLnN0eWxlLmNzc1RleHQ9XFxcIndpZHRoOjQ1JTsgbWluLXdpZHRoOjE1MHB4OyBiYWNrZ3JvdW5kOiMzMTE7IG9wYWNpdHk6MC42OyBoZWlnaHQ6YXV0bzttaW4taGVpZ2h0OiA0NXB4OyBjb2xvcjojZmZmOyBsaW5lLWhlaWdodDo0NXB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgYm9yZGVyLXJhZGl1czoxMHB4OyBwb3NpdGlvbjpmaXhlZDsgdG9wOjYwJTsgbGVmdDoyNiU7IHotaW5kZXg6OTk5OTk5O1xcXCI7XFxuICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKG0pO1xcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcXG4gICAgICAgICAgICB2YXIgZCA9IDAuNTtcXG4gICAgICAgICAgICBtLnN0eWxlLndlYmtpdFRyYW5zaXRpb24gPSAnLXdlYmtpdC10cmFuc2Zvcm0gJyArIGQgKyAncyBlYXNlLWluLCBvcGFjaXR5ICcgKyBkICsgJ3MgZWFzZS1pbic7XFxuICAgICAgICAgICAgbS5zdHlsZS5vcGFjaXR5ID0gJzAnO1xcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobSkgfSwgZCAqIDEwMDApO1xcbiAgICAgICAgfSwgZHVyYXRpb24pO1xcbiAgICB9XFxuXFxuICAgIGZ1bmN0aW9uIG9wZW5EblBhZ2UoKXtcXG4gICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBydWxlOiBcXFwiPV5fXj1cXFwiLFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi57yW6L6R6Kej5p6QXFxcIixcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU957yW6L6RI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXCIsXFxuICAgICAgICAgICAgZ3JvdXA6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAvL2ZpbmRSdWxlOiBcXFwianM6dGhpcy5kPVtdOyQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIikuZWRpdCgpO3NldFJlc3VsdChkKTtcXFwiLFxcbiAgICAgICAgICAgIHByZVJ1bGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7fVxcbiAgICAgICAgfSkpO1xcbiAgICB9XFxuICAgIGZ1bmN0aW9uIG9wZW5UaGVtZSgpe1xcbiAgICAgICAgZmJhLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIHJ1bGU6IFxcXCI9Xl9ePVxcXCIsXFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLkuLvpopjnrqHnkIZcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3kuLvpopgjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIixcXG4gICAgICAgICAgICBncm91cDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIHByZVJ1bGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7fVxcbiAgICAgICAgfSkpO1xcbiAgICB9XFxuICAgIGZ1bmN0aW9uIG9wZW5KeE1hbmFnZSgpe1xcbiAgICAgICAgZmJhLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIHJ1bGU6IFxcXCI9Xl9ePVxcXCIsXFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLop6PmnpDphY3nva7nrqHnkIZcXFwiLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3op6PmnpAjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcIixcXG4gICAgICAgICAgICBncm91cDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIHByZVJ1bGU6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7fVxcbiAgICAgICAgfSkpO1xcbiAgICB9XFxuICAgIGZ1bmN0aW9uIGNhbmNlbCgpe1xcbiAgICAgICAgaWYoIW15U2V0KXtcXG4gICAgICAgICAgICBmYmEud3JpdGVGaWxlKG9sZFJvdXRlLCBKU09OLnN0cmluZ2lmeShzZXR0aW5ncywgbnVsbCwgNCkpO1xcbiAgICAgICAgICAgIGZiYS5yZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIGZiYS5iYWNrKGZhbHNlKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBmdW5jdGlvbiBjbGlja21lKG1zZyxkdXJhdGlvbix0aXRsZSl7XFxuICAgICAgICB0cnl7XFxuICAgICAgICAgICAgZm9yKGxldCBrZXkgaW4gc2V0dGluZ3Mpe1xcbiAgICAgICAgICAgICAgICAvLyBmYmEubG9nKERpZChrZXkpKycnK2tleSk7XFxuICAgICAgICAgICAgICAgIHRyeXtcXG4gICAgICAgICAgICAgICAgICAgIC8vc2V0dGluZ3Nba2V5XSA9IERpZChrZXkpLnZhbHVlLnJlcGxhY2UoL+KTinzikr8vZywnJyk7XFxuICAgICAgICAgICAgICAgICAgICBzZXR0aW5nc1trZXldID0gRGlkKGtleSkudmFsdWU7XFxuICAgICAgICAgICAgICAgIH1jYXRjaChlKXtcXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KFxcXCLmnKrojrflj5bliLDoioLngrk6XFxcIitrZXkrXFxcIlxcXFxuXFxcIitlLm1lc3NhZ2UpO1xcbiAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmKG15U2VsZWN0KXtcXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihuZXdDb25maWcuc2V0dGluZ3MsIHNldHRpbmdzKTtcXG4gICAgICAgICAgICAgICAgZmJhLndyaXRlRmlsZShuZXdSb3V0ZSwgJCQkLnN0cmluZ2lmeShuZXdDb25maWcpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgZmJhLndyaXRlRmlsZShvbGRSb3V0ZSwgJCQkLnN0cmluZ2lmeShzZXR0aW5ncykpO1xcbiAgICAgICAgICAgIFRvYXN0KG1zZyxkdXJhdGlvbik7XFxuICAgICAgICAgICAgaWYodGl0bGU9PT1cXFwi5YWzXFxcIil7XFxuICAgICAgICAgICAgICAgIGZiYS5iYWNrKCk7XFxuICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgIGZiYS5yZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9Y2F0Y2goZSl7XFxuICAgICAgICAgICAgYWxlcnQoZS5tZXNzYWdlKVxcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIC8vbGV0IHdpZHRoPXdpbmRvdy5zY3JlZW4uYXZhaWxXaWR0aDtcXG4gICAgLy9sZXQgd2lkdGhQeD13aWR0aC0zOTMrNTI7XFxuICAgIC8vYWxlcnQoXFxcIuW9k+WJjeWIhui+qOeOhzpcXFwiK3dpbmRvdy5zY3JlZW4uYXZhaWxXaWR0aCtcXFwiKlxcXCIrd2luZG93LnNjcmVlbi5oZWlnaHQpO1xcbiAgICB2YXIgdmVyaW5mbyA9IFt7XFxuICAgICAgICBpZDonZG4nLFxcbiAgICAgICAgYXV0aG9yOifmlq3lv7UnLFxcbiAgICAgICAgYXZhdGFyOidodHRwczovL3MzLmF4MXguY29tLzIwMjEvMDIvMjIveTd3YjlPLmpwZycsXFxuICAgICAgICBvcHRpb246b3BlbkRuUGFnZSxcXG4gICAgfSxcXG4gICAgICAgIHtcXG4gICAgICAgICAgICBpZDonZHonLFxcbiAgICAgICAgICAgIGF1dGhvcjon6YGT6ZW/JyxcXG4gICAgICAgICAgICBhdmF0YXI6J2h0dHA6Ly9xMS5xbG9nby5jbi9nP2I9cXEmbms9NDM0ODU3MDA1JnM9NjQwJyxcXG4gICAgICAgICAgICBvcHRpb246b3BlblRoZW1lXFxuICAgICAgICB9LFxcbiAgICAgICAge1xcbiAgICAgICAgICAgIGlkOidsbScsXFxuICAgICAgICAgICAgYXV0aG9yOiAn6JOd6I6TJyxcXG4gICAgICAgICAgICBhdmF0YXI6ICdodHRwOi8vcTEucWxvZ28uY24vZz9iPXFxJm5rPTI1Nzk5NDkzNzgmcz02NDAnLFxcbiAgICAgICAgICAgIG9wdGlvbjpvcGVuSnhNYW5hZ2VcXG4gICAgICAgIH1cXG4gICAgXTtcXG5cXG4gICAgZnVuY3Rpb24gZG9PcHRpb24ob3B0aW9uX2lkKXtcXG4gICAgICAgIGxldCB2ZXIgPSB2ZXJpbmZvLmZpbHRlcihpdD0+aXQuaWQ9PT1vcHRpb25faWQpWzBdO1xcbiAgICAgICAgdmVyLm9wdGlvbigpO1xcbiAgICB9XFxuXFxuICAgIGNvbnN0IFJlbmRlckh0bWxBcHAgPSB7XFxuICAgICAgICBkYXRhKCkge1xcbiAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgIC8vIHJhd0h0bWw6ICc8c3BhbiBzdHlsZT1cXFwiY29sb3I6IHJlZFxcXCI+6L+Z6YeM5Lya5pi+56S657qi6Imy77yBPC9zcGFuPicsXFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6b3B0aW9ucyxcXG4gICAgICAgICAgICAgICAgdmVyaW5mbzp2ZXJpbmZvLFxcbiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcjpwbGFjZWhvbGRlcixcXG4gICAgICAgICAgICAgICAgdGlwczp0aXBzLFxcbiAgICAgICAgICAgICAgICB0aGVtZXM6dGhlbWVzLFxcbiAgICAgICAgICAgICAgICBteVNlbGVjdDpteVNlbGVjdCxcXG4gICAgICAgICAgICAgICAgLy8gY2pTZWw6Wyfor7fpgInmi6nmj5Lku7YgKOWPquS9nOeUqGxhenlSdWxlKScsJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnLCdoaWtlcjovL2ZpbGVzL3J1bGVzL2R6SG91c2UvanMvc3JjYXV0by5qcycsJ2hpa2VyOi8vZmlsZXMvcnVsZXMvanMvUGFyc2UtVjJfRG4uanMnXSxcXG4gICAgICAgICAgICAgICAgY2pTZWw6Wyfor7fpgInmi6nmj5Lku7YgKOWPquS9nOeUqGxhenlSdWxlKScsJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnLCdoaWtlcjovL2ZpbGVzL3J1bGVzL2R6SG91c2UvanMvc3JjYXV0by5qcyddLFxcbiAgICAgICAgICAgICAgICBzZXR0aW5nczpzZXR0aW5ncyxcXG4gICAgICAgICAgICAgICAgc2hvd1RpcHM6ZmFsc2UsXFxuICAgICAgICAgICAgICAgIC8vd2lkdGhQeDp3aWR0aFB4XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSxcXG4gICAgICAgIG1ldGhvZHM6e1xcbiAgICAgICAgICAgIC8vIGNoYW5nZVZhbDpmdW5jdGlvbihldmVudCl7XFxuICAgICAgICAgICAgLy8gICAgIGdldE9wdGlvbih0aGlzLmlkLHRoaXMubmFtZSk7XFxuICAgICAgICAgICAgLy8gICAgIHRoaXMuc2VsT3B0aW9uID0gZXZlbnQudGFyZ2V0LnZhbHVlO1xcbiAgICAgICAgICAgIC8vICAgICBhbGVydChcXFwi5L2g6YCJ5Lit5LqGXFxcIitldmVudC50YXJnZXQudmFsdWUpO1xcbiAgICAgICAgICAgIC8vIH1cXG4gICAgICAgICAgICBkb09wdGlvbjpkb09wdGlvblxcbiAgICAgICAgfVxcbiAgICB9XFxuICAgIHRyeSB7XFxuICAgICAgICBjb25zdCBhcHA9VnVlLmNyZWF0ZUFwcChSZW5kZXJIdG1sQXBwKTtcXG4gICAgICAgIGFwcC5tb3VudCgnYm9keScpO1xcbiAgICB9Y2F0Y2ggKGUpIHtcXG4gICAgICAgIGNvbnNvbGUubG9nKGUubWVzc2FnZSlcXG4gICAgfVxcblxcbjwvc2NyaXB0PlxcblxcbjwvYm9keT5cXG48L2h0bWw+XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJQYXJzZV9Ebi5qc1wiLFwicGF0aFwiOlwiUGFyc2VfRG4uanNcIixcInJ1bGVcIjpcIi8vPT09PT09PT09PT095YWN5ZeF6LCD55SoPT09PT09PT09PT09XFxuLy/vvI3vvI3vvI09Xl9ePVxcblxcbnZhciB2ZXJzaW9uID0gXFxcIjMuNDkyMjA1MDlcXFwiOy8vMDUwOVxcblxcbnZhciB1cGRhdGVEYXRlID0gJzIwMjIvMDUvMDkvIDEwOjMwJztcXG52YXIgX215U2V0ID0ge1xcbiAgICBxanU6ICfpu5jorqQnLFxcbiAgICBvdGg6J+mBk+mVv+S7k+W6k+mAmuWFjScsXFxuICAgIGNqY2FjaGU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJyxcXG4gICAgdGhlbWVjYWNoZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvTXlUaGVtZS5qc29uJyxcXG4gICAgamlleGljYWNoZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvTXlKaWV4aS5qc29uJyxcXG4gICAgeDVjYWNoZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uaHRtbCcsXFxuICAgIG9sZENvbmZpZzogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uJyxcXG4gICAgY2tMaW5rOiAnaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vQUk5NTcvSGlrZXIvcmF3L21hc3Rlci92LycsXFxuICAgIC8vIGNqOiAnaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vQUk5NTcvSGlrZXIvcmF3L21hc3Rlci92L0Nsb3VkUGFyc2UtVjJfRG4uanMnLFxcbiAgICBjajogJ2h0dHBzOi8vaGpkaG54LmNvZGluZy5uZXQvcC9oaWtlci9kL2RyL2dpdC9yYXcvbWFzdGVyL2pzL1BhcnNlX0RuLmpzJyxcXG4gICAgLy8geDVVcmw6ICdodHRwczovL2NvZGUuYWxpeXVuLmNvbS9BSTk1Ny9IaWtlci9yYXcvbWFzdGVyL3YvUGFyc2VfRG4uaHRtbCcsXFxuICAgIHg1VXJsOiAnaHR0cDovL2RyLm5va2lhLnByZXNzL2h0bWwvUGFyc2VfRG4tdnVlLmh0bWwnLFxcbiAgICBwYXJzZVJvdXRlOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nLFxcbiAgICAvLyB4NVJvdXRlOiAnZmlsZTovLy9zdG9yYWdlL2VtdWxhdGVkLzAvQW5kcm9pZC9kYXRhL2NvbS5leGFtcGxlLmhpa2Vydmlldy9maWxlcy9Eb2N1bWVudHMvY2FjaGUvUGFyc2VfRG4uaHRtbCdcXG4gICAgeDVSb3V0ZTogZ2V0UGF0aCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5odG1sJyksXFxuICAgIGJhdGNoUm91dGU6Z2V0UGF0aCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9wbHNjUGFyc2UuaHRtbCcpXFxuXFxufTtcXG52YXIgTXlQYXJzZVMgPSB7fTtcXG52YXIgbXlTZXQgPSBfbXlTZXQ7XFxuaWYgKGZpbGVFeGlzdChfbXlTZXQucGFyc2VSb3V0ZSkpIHtcXG4gICAgZXZhbCgndmFyIHBhcnNlRmlsZSA9JyArIGZldGNoKF9teVNldC5wYXJzZVJvdXRlKSk7XFxuICAgIE15UGFyc2VTID0gcGFyc2VGaWxlLmNvZGVzO1xcbiAgICBteVNldCA9IHBhcnNlRmlsZS5zZXR0aW5ncztcXG59XFxudmFyIHBhcnNlVGl0bGUgPSBbXFxuICAgIFxcXCJ5dW4xNzE3XFxcIixcXG4gICAgXFxcIlBhbkd1XFxcIixcXG4gICAgXFxcIkZ1WGluZ1xcXCIsXFxuICAgIFxcXCJpc1ZpZGVvXFxcIixcXG4gICAgXFxcImRlZmF1bHRQYXJzZVxcXCIsXFxuICAgIFxcXCLpgZPplb/ku5PlupPpgJrlhY1cXFwiLFxcbiAgICBcXFwiZGVmYXVsdFBhcnNlV2ViXFxcIixcXG4gICAgXFxcIk9L6Kej5p6QXFxcIixcXG4gICAgXFxcIk0zVThUVlxcXCIsXFxuXTtcXG4vL++8je+8je+8jT1eX149XFxuXFxuLy/mjqXlj6Porr7nva4uXFxuXFxudmFyIHNldFVybCA9IFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vUmVjb3JkSGlzdG9yeSNcXFwiO1xcbnZhciBzZXRfc3dpdGNoID0gc2V0VXJsO1xcbnZhciBsYXp5ID0gYGV2YWwoJ3ZhciBjb25maWdfZHAgPScgKyBmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKSk7ZXZhbChmZXRjaChjb25maWdfZHAuY2opKTtheXRtUGFyc2UoaW5wdXQpYDtcXG5cXG4vL3ZhciBwYXJ3aXggPSBgdmFyIHl1cmw9J2h0dHBzOi8vZGFpbGkubWF5aXhpb25nZGkuY24vP3VybD0nO1JlZmVyZXInOiAnaHR0cHM6Ly93d3cubWF5aXhpb25nZGkuY24veXM/aWQ9JzsnaHR0cHM6Ly9kYWlsaS5tYXlpeGlvbmdkaS5jbi9hcGkucGhwJywgJ1JlZmVyZXInOidodHRwczovL2RhaWxpLm1heWl4aW9uZ2RpLmNuJztcXG4vLyDlhajmsJFodHRwczovL3BjdmlkZW9hbGl5dW4udGlhbnNoYW5ncmVuamlhbi5tZ3R2LmNvbS44OHd1bWEuY29tLz91cmw9XFxuXFxuLy/vvI3vvI3vvI3lpIcg55So77yN77yN77yNXFxuLypcXG4gKiDlvbHop4blt6XlnLrvvJogaHR0cHM6Ly95c2djLmNjL1xcbiAqIOaxn+a5ljogNTU155S15b2xIGh0dHBzOi8vd3d3LjU1NWR5Mi5jb20vcGhvbmUuaHRtbCDvvZwgMTfnnIsgaHR0cDovLzE3a2FueXkuY24vIGh0dHA6Ly9qaGppZXhpLjMwdnIuY24vP3VybD0g772cIGh0dHA6Ly9hcGkubWFpemltYWxsLmNvbS9pbmRleC5waHA/dXJsPVxcbiAqIOaxn+a5ljogaHR0cDovL3d3dy50aWFuc2h1eXVuLm5ldC9pbmRleC5waHAvdm9kL3BsYXkvaWQvNDQ4Mzc3L3NpZC8xL25pZC8xLmh0bWxcXG4gKiDmsZ/muZYyOiBodHRwOi8vOThoeWsuY24vaW5kZXgucGhwL3ZvZC9wbGF5L2lkLzcyODQxL3NpZC8xL25pZC8xLmh0bWxcXG4gKiDkurrkurrov7c6IGh0dHBzOi8vdmlwLnN1c291LnR2L3BsYXllci8/dXJsPSDvvZwgaHR0cHM6Ly93d3cubW9tZG0uY2MvXFxuICpcXG4gKiB3dWlnZW46IGh0dHBzOi8vd3d3LjVpZ2VuLmNvbS9kbXBsYXllci9wbGF5ZXIvP3VybD1cXG4gKiDlubLppa0o5Lq65Lq66L+3KTogaHR0cHM6Ly9qeC56dWkuY20vP3VybD1cXG4gKiBodHRwczovLzIuNjZtb3ZpZS50b3AvcGxheWVyLz91cmw9XFxuICpcXG4gKi9cXG5cXG5cXG52YXIgdG9vbHMgPSB7XFxuICAgIE1ENTogZnVuY3Rpb24oZGF0YSkge1xcbiAgICAgICAgZXZhbChnZXRDcnlwdG9KUygpKTtcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5NRDUoZGF0YSkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleCk7XFxuICAgIH0sXFxuICAgIEFFUzogZnVuY3Rpb24odGV4dCwga2V5LCBpdiwgaXNFbmNyeXB0KSB7XFxuICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcbiAgICAgICAgdmFyIGtleSA9IENyeXB0b0pTLmVuYy5VdGY4LnBhcnNlKGtleSk7XFxuICAgICAgICB2YXIgaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShpdik7XFxuICAgICAgICBpZiAoaXNFbmNyeXB0KSB7XFxuICAgICAgICAgICAgcmV0dXJuIENyeXB0b0pTLkFFUy5lbmNyeXB0KHRleHQsIGtleSwge1xcbiAgICAgICAgICAgICAgICBpdjogaXYsXFxuICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcbiAgICAgICAgICAgICAgICBwYWRkaW5nOiBDcnlwdG9KUy5wYWQuUGtjczdcXG4gICAgICAgICAgICB9KS50b1N0cmluZygpO1xcbiAgICAgICAgfTtcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5BRVMuZGVjcnlwdCh0ZXh0LCBrZXksIHtcXG4gICAgICAgICAgICBpdjogaXYsXFxuICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxuICAgICAgICB9KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XFxuICAgIH0sXFxuICAgIC8vYXNjaWlcXG4gICAgbmV4dENoYXJhY3RlcjogZnVuY3Rpb24oYXNjaWlWYWx1ZSwgaykge1xcbiAgICAgICAgdmFyIHMgPSBhc2NpaVZhbHVlO1xcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocyArIGspO1xcbiAgICB9LFxcbiAgICAvL+WHr+aSklxcbiAgICBjYWVzYXJDaXBoZXI6IGZ1bmN0aW9uKHN0cmluZ1ZhbHVlLCBrKSB7XFxuICAgICAgICB2YXIgbmV3U3RyaW5nID0gXFxcIlxcXCI7XFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZ1ZhbHVlLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgbmV3U3RyaW5nICs9IHRoaXMubmV4dENoYXJhY3RlcihzdHJpbmdWYWx1ZVtpXS5jaGFyQ29kZUF0KCksIGspO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIG5ld1N0cmluZztcXG4gICAgfSxcXG4gICAgbm93RGF0ZTogZnVuY3Rpb24oKSB7XFxuICAgICAgICB2YXIgZGF0ZTEgPSBuZXcgRGF0ZSgpO1xcbiAgICAgICAgdmFyIGRhdGVTdHIgPSBcXFwiXFxcIjtcXG4gICAgICAgIGlmIChkYXRlMSkge1xcbiAgICAgICAgICAgIGRhdGVTdHIgPSBkYXRlMS5nZXRGdWxsWWVhcigpO1xcbiAgICAgICAgICAgIHZhciBtb250aCA9IGRhdGUxLmdldE1vbnRoKCkgKyAxO1xcbiAgICAgICAgICAgIHZhciBkYXkgPSBkYXRlMS5nZXREYXRlKCk7XFxuICAgICAgICAgICAgaWYgKG1vbnRoIDwgMTApIHtcXG4gICAgICAgICAgICAgICAgZGF0ZVN0ciArPSBcXFwiLTBcXFwiICsgbW9udGg7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgZGF0ZVN0ciArPSBcXFwiLVxcXCIgKyBtb250aDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGRheSA8IDEwKSB7XFxuICAgICAgICAgICAgICAgIGRhdGVTdHIgKz0gXFxcIi0wXFxcIiArIGRheTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBkYXRlU3RyICs9IFxcXCItXFxcIiArIGRheTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gZGF0ZVN0cjtcXG4gICAgfSxcXG4gICAgbm93RGF0ZVN0cjpmdW5jdGlvbiAoKXsgLy8g5Yip55SoJOW3peWFt+iOt+WPluagvOW8j+WMluWQjueahOW9k+WJjeaXtumXtFxcbiAgICAgICAgcmV0dXJuICAkLmRhdGVGb3JtYXQobmV3IERhdGUoKSxcXFwieXl5eS1NTS1kZCBISDptbTpzc1xcXCIpO1xcbiAgICB9LFxcbiAgICB0b0pTT046IGZ1bmN0aW9uKGpzb24pIHtcXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShqc29uLCAoa2V5LCB2YWx1ZSkgPT4ge1xcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWUudG9TdHJpbmcoKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgNCk7XFxuICAgIH0sXFxuICAgIHRvVk51bTogZnVuY3Rpb24oYSkge1xcbiAgICAgICAgdmFyIGEgPSBhLnRvU3RyaW5nKCk7XFxuICAgICAgICB2YXIgYyA9IGEuc3BsaXQoJy4nKTtcXG4gICAgICAgIHZhciBudW1fcGxhY2UgPSBbXFxcIlxcXCIsIFxcXCIwXFxcIiwgXFxcIjAwXFxcIiwgXFxcIjAwMFxcXCIsIFxcXCIwMDAwXFxcIl0sXFxuICAgICAgICAgICAgciA9IG51bV9wbGFjZS5yZXZlcnNlKCk7XFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICB2YXIgbGVuID0gY1tpXS5sZW5ndGg7XFxuICAgICAgICAgICAgY1tpXSA9IHJbbGVuXSArIGNbaV07XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgcmVzID0gYy5qb2luKCcnKTtcXG4gICAgICAgIHJldHVybiByZXM7XFxuICAgIH0sXFxuICAgIGNwclZlcnNpb246IGZ1bmN0aW9uKGEsIGIpIHtcXG4gICAgICAgIHZhciBfYSA9IHBhcnNlSW50KHRoaXMudG9WTnVtKGEpKSxcXG4gICAgICAgICAgICBfYiA9IHBhcnNlSW50KHRoaXMudG9WTnVtKGIpKTtcXG4gICAgICAgIGIgPSBpc05hTihfYikgPyB2ZXJzaW9uIDogYjtcXG4gICAgICAgIGlmIChfYSA+IF9iKSB7XFxuICAgICAgICAgICAgcHV0VmFyKCdqeE5ld1YnLCAn5pyJ5paw54mI5pysOiAnICsgYSk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGNsZWFyVmFyKCdqeE5ld1YnKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHB1dFZhcignanhPbGRWJywgYik7XFxuICAgIH0sXFxuICAgIGF0b2I6ZnVuY3Rpb24gKHN0cil7XFxuICAgICAgICByZXF1aXJlKCdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2pzLWJhc2U2NEAzLjcuMi9iYXNlNjQubWluLmpzJyk7XFxuICAgICAgICByZXR1cm4gQmFzZTY0LmF0b2Ioc3RyKTtcXG4gICAgfSxcXG4gICAgYnRvYTpmdW5jdGlvbiAoc3RyKXtcXG4gICAgICAgIHJlcXVpcmUoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vanMtYmFzZTY0QDMuNy4yL2Jhc2U2NC5taW4uanMnKTtcXG4gICAgICAgIHJldHVybiBCYXNlNjQuYnRvYShzdHIpO1xcbiAgICB9LFxcbiAgICDmsZ/muZY6ZnVuY3Rpb24gKGNvbmZpZ191cmwsIHRlbSwgdG9rZW4pIHtcXG4gICAgICAgIHJlcXVpcmUoJ2h0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vanMtYmFzZTY0QDMuNy4yL2Jhc2U2NC5taW4uanMnKTtcXG4gICAgICAgIHZhciBhdG9iPUJhc2U2NC5hdG9iO1xcbiAgICAgICAgdmFyIGJ0b2E9QmFzZTY0LmJ0b2E7XFxuICAgICAgICB2YXIgY29uZmlnX2EgPSB0ZW0gfHwgXFxcImZmc2lybGxxXFxcIjtcXG4gICAgICAgIHZhciB2aWRlbyA9ICcnO1xcbiAgICAgICAgdmFyIHRlbSA9IFtdO1xcbiAgICAgICAgdmFyIGNvbmZpZ19hcnJ5ID0gW107XFxuICAgICAgICB2YXIgY29uZmlnX2IgPSBjb25maWdfYS5sZW5ndGg7XFxuICAgICAgICBpZiAodG9rZW4gPT0gMHgxKSB7XFxuICAgICAgICAgICAgdmFyIGNvbmZpZ191cmwgPSBhdG9iKGNvbmZpZ191cmwpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB2YXIgY29uZmlnX3VybCA9IGVuY29kZVVSSUNvbXBvbmVudChjb25maWdfdXJsKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHZhciBjb25maWdfYyA9IGNvbmZpZ191cmwubGVuZ3RoO1xcbiAgICAgICAgZm9yIChpID0gMHgwOyBpIDwgMHgxMDA7IGkrKykge1xcbiAgICAgICAgICAgIHRlbVtpXSA9IGNvbmZpZ19hW2kgJSBjb25maWdfYl0uY2hhckNvZGVBdCgpO1xcbiAgICAgICAgICAgIGNvbmZpZ19hcnJ5W2ldID0gaTtcXG4gICAgICAgIH1cXG4gICAgICAgIGZvciAoaiA9IGkgPSAweDA7IGkgPCAweDEwMDsgaSsrKSB7XFxuICAgICAgICAgICAgaiA9IChqICsgY29uZmlnX2FycnlbaV0gKyB0ZW1baV0pICUgMHgxMDA7XFxuICAgICAgICAgICAgdG1wID0gY29uZmlnX2FycnlbaV07XFxuICAgICAgICAgICAgY29uZmlnX2FycnlbaV0gPSBjb25maWdfYXJyeVtqXTtcXG4gICAgICAgICAgICBjb25maWdfYXJyeVtqXSA9IHRtcDtcXG4gICAgICAgIH1cXG4gICAgICAgIGZvciAoYSA9IGogPSBpID0gMHgwOyBpIDwgY29uZmlnX2M7IGkrKykge1xcbiAgICAgICAgICAgIGEgPSAoYSArIDB4MSkgJSAweDEwMDtcXG4gICAgICAgICAgICBqID0gKGogKyBjb25maWdfYXJyeVthXSkgJSAweDEwMDtcXG4gICAgICAgICAgICB0bXAgPSBjb25maWdfYXJyeVthXTtcXG4gICAgICAgICAgICBjb25maWdfYXJyeVthXSA9IGNvbmZpZ19hcnJ5W2pdO1xcbiAgICAgICAgICAgIGNvbmZpZ19hcnJ5W2pdID0gdG1wO1xcbiAgICAgICAgICAgIGsgPSBjb25maWdfYXJyeVsoY29uZmlnX2FycnlbYV0gKyBjb25maWdfYXJyeVtqXSkgJSAweDEwMF07XFxuICAgICAgICAgICAgdmlkZW8gKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb25maWdfdXJsW2ldLmNoYXJDb2RlQXQoKSBeIGspO1xcbiAgICAgICAgfVxcbiAgICAgICAgbG9nKGRlY29kZVVSSUNvbXBvbmVudCh2aWRlbykpO1xcbiAgICAgICAgaWYgKHRva2VuID09IDB4MSkge1xcbiAgICAgICAgICAgIHJldHVybiBkZWNvZGVVUklDb21wb25lbnQodmlkZW8pO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gYnRvYSh2aWRlbyk7XFxuICAgICAgICB9XFxuICAgIH1cXG59O1xcbmlmIChnZXRWYXIoXFxcImp4T2xkVlxcXCIsIFxcXCIwXFxcIikgIT0gdmVyc2lvbikge1xcbiAgICBwdXRWYXIoJ2NqQ2FjaGUnLCBfbXlTZXQuY2pjYWNoZSk7XFxuICAgIHB1dFZhcigneDVDYWNoZScsIF9teVNldC54NUNhY2hlKTtcXG4gICAgcHV0VmFyKCdvbGRDb25maWcnLCBfbXlTZXQub2xkQ29uZmlnKTtcXG4gICAgcHV0VmFyKCdwYXJzZVJvdXRlJywgX215U2V0LnBhcnNlUm91dGUpO1xcbiAgICAvLyBsZXQganhOZXdWID0gZmV0Y2goJ2h0dHBzOi8vZ2l0ZWUuY29tL0R1YW4tTmlhbi9Ebi9yYXcvbWFzdGVyL2hpa2Vydmlldy9QYXJzZVZlcnNpb24udHh0Jyk7XFxuICAgIGxldCBqeE5ld1YgPSBmZXRjaCgnaHR0cHM6Ly9oamRobnguY29kaW5nLm5ldC9wL2hpa2VyL2QvZHIvZ2l0L3Jhdy9tYXN0ZXIvanMvUGFyc2VWZXJzaW9uLnR4dCcpO1xcbiAgICBsZXQganhPbGRWID0gKGZldGNoKF9teVNldC5jamNhY2hlKS5zcGxpdCgndmVyc2lvbiA9IFxcXCInKVsxXSArICcnKS5zcGxpdCgnXFxcIicpWzBdO1xcbiAgICB0b29scy5jcHJWZXJzaW9uKGp4TmV3ViwganhPbGRWKTtcXG59XFxuXFxudmFyIFBhcnNlUyA9IHt9O1xcbnZhciBvcmlnaW5hbFBhcnNlUyA9IHtcXG4gICAgLy8gdXBkYXRlRGF0ZTogdXBkYXRlRGF0ZSxcXG4gICAgcGFyc2VMYzonaHR0cHM6Ly9jb2RlLmFsaXl1bi5jb20vQUk5NTcvSGlrZXIvcmF3L21hc3Rlci9wL3BhcnNlTGMuanMnLFxcbiAgICBDaXR5SVA6ICdodHRwOi8vcHYuc29odS5jb20vY2l0eWpzb24nLFxcbiAgICBwY1VBOiAnVXNlci1BZ2VudEBNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wXFxcXO+8m1xcXFzvvJsgV09XNjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS80OS4wLjI2MjMuODcgU2FmYXJpLzUzNy4zNicsXFxuICAgIGNhY2hlTTN1ODogZnVuY3Rpb24odlVybCwgcmVmKSB7XFxuICAgICAgICBsZXQgcGFyYW1hcyA9IHJlZj97aGVhZGVyczp7UmVmZXJlcjpyZWZ9fTp7fTtcXG4gICAgICAgIHJldHVybiBjYWNoZU0zdTgodXJsLCBwYXJhbWFzKVxcbiAgICB9LFxcbiAgICBpc1ZpZGVvOmZ1bmN0aW9uKHBsYXlVcmwpe1xcbiAgICAgICAgY29uc3Qge2lzVmlkZW99ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZ2xvYmFsUGFyc2U/cnVsZT3pgZPplb/ku5PlupNQcm8nKTtcXG4gICAgICAgIHJldHVybiBpc1ZpZGVvKHBsYXlVcmwpXFxuICAgIH0sXFxuICAgIGRlZmF1bHRQYXJzZTogZnVuY3Rpb24odXJsLHRpbWVvdXQpIHtcXG4gICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlV2ViKHVybCx0aW1lb3V0KTtcXG4gICAgfSxcXG4gICAgZGVmYXVsdFBhcnNlV2ViOiBmdW5jdGlvbihwbGF5VXJsLHRpbWVvdXQsZXh0cmEpIHtcXG4gICAgICAgIC8vIGxvZygn5Lyg5YWlZGVmYXVsdFBhcnNlV2Vi55qE6LaF5pe2OicrdGltZW91dCk7XFxuICAgICAgICB0aW1lb3V0ID0gcGFyc2VJbnQodGltZW91dCl8fHBhcnNlSW50KGdldFZhcignZHAuanhUaW1lb3V0JywnNTAwMCcpKXx8NTAwMDtcXG4gICAgICAgIGV4dHJhID0gZXh0cmF8fHt9O1xcbiAgICAgICAgbGV0IHBsYXlVcmxMaXN0ID0gZXh0cmEucGxheVVybExpc3R8fFtdO1xcbiAgICAgICAgaWYodHlwZW9mKHBsYXlVcmxMaXN0KT09PSdvYmplY3QnJiZwbGF5VXJsTGlzdC5sZW5ndGg+MCl7XFxuICAgICAgICAgICAgcGxheVVybExpc3QudW5zaGlmdChwbGF5VXJsKTtcXG4gICAgICAgICAgICBsZXQgcGxheVVybHM9cGxheVVybExpc3Quc2xpY2UoMCw0KTtcXG4gICAgICAgICAgICBsZXQgbmFtZXM9ZXh0cmEubmFtZUxpc3Quc2xpY2UoMCw0KTtcXG4gICAgICAgICAgICAvLyBsb2coJ+W8gOWni+aJuemHj+ino+aekCjlt7Lljrvph40s5Y+q5Y+W5YmNM+S4quWkh+iDju+8jOWKoOmBk+mVv+e+pDo0ODY3MjIzMjjojrflj5bmnIDmlrDprZTmlq3liqjmgIEpOicrbmFtZXMpO1xcbiAgICAgICAgICAgIHBsYXlVcmxzPXBsYXlVcmxzLm1hcCgoaXQsaWQpPT5pdCtcXFwiO1xcXCIrbmFtZXNbaWRdKTtcXG4gICAgICAgICAgICAvL2xvZyhwbGF5VXJscyk7XFxuICAgICAgICAgICAgY29uc3Qge0xhenlQYXJzZUZhc3R9ID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZ2xvYmFsUGFyc2U/cnVsZT3pgZPplb/ku5PlupNQcm8nKTtcXG4gICAgICAgICAgICBsZXQgcmV0ID0gTGF6eVBhcnNlRmFzdChwbGF5VXJscyx0aW1lb3V0LHRpbWVvdXQpO1xcbiAgICAgICAgICAgIGlmKHR5cGVvZihyZXQpPT09J29iamVjdCcmJnJldC5sZW5ndGg+MCl7XFxuICAgICAgICAgICAgICAgIC8vcmV0dXJuIHJldFswXVxcbiAgICAgICAgICAgICAgICAvL2xvZyhyZXQpO1xcbiAgICAgICAgICAgICAgICBsZXQgdiA9IGdldEFwcFZlcnNpb24oKTtcXG4gICAgICAgICAgICAgICAgaWYocGFyc2VJbnQodik+PTIxOTQmJnJldC5sZW5ndGg+MSl7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdXJscyA9IEFycmF5LmZyb20obmV3IFNldChyZXQpKTtcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVzPXVybHMubWFwKChpdCxpZCk9Pml0LnNwbGl0KFxcXCLimIVcXFwiKS5sZW5ndGg+MT9pdC5zcGxpdChcXFwi4piFXFxcIilbMV06XFxcIue6v+i3rzpcXFwiK3BhcnNlSW50KGlkKzEpKTtcXG4gICAgICAgICAgICAgICAgICAgIHVybHM9dXJscy5tYXAoaXQ9Pml0LnNwbGl0KFxcXCLimIVcXFwiKVswXSk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaGVhZGVycyA9IHVybHMubWFwKChpdCk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZighLzsvLnRlc3QoaXQpfHxpdC5zcGxpdCgnOycpLmxlbmd0aDwyKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoZWFkID0gaXQuc3BsaXQoJzsnKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIS9ALy50ZXN0KGhlYWQpfHwhL3t8fS8udGVzdChoZWFkKSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge31cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkPWhlYWQuc3BsaXQoXFxcIntcXFwiKVsxXS5zcGxpdChcXFwifVxcXCIpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2hlYWQgPSBoZWFkLnJlcGxhY2UoL3t8fS9nLCcnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZCA9IGhlYWQuc3BsaXQoJyYmJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmogPSB7fTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIGhlYWQpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtleSA9IGhlYWRbaV0uc3BsaXQoJ0AnKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGhlYWRbaV0uc3BsaXQoJ0AnKVsxXS5yZXBsYWNlKC87Lywn77yb77ybJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIHVybHMgPSB1cmxzLm1hcCgoaXQpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHR1cmw9aXQuc3BsaXQoJzsnKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihpdC5pbmNsdWRlcyhcXFwiI2lzVmlkZW89dHJ1ZSNcXFwiKSYmIXR1cmwuaW5jbHVkZXMoXFxcIiNpc1ZpZGVvPXRydWUjXFxcIikpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0dXJsKz1cXFwiI2lzVmlkZW89dHJ1ZSNcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHVybFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe3VybHM6dXJscyxoZWFkZXJzOmhlYWRlcnMsbmFtZXM6bmFtZXN9KTtcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gcmV0WzBdLnNwbGl0KFxcXCLimIVcXFwiKVswXVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgIHJldHVybiByZXRcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICBjb25zdCB7bGF6eVBhcnNlfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2dsb2JhbFBhcnNlP3J1bGU96YGT6ZW/5LuT5bqTUHJvJyk7XFxuICAgICAgICAgICAgbGV0IHg1UGxheT1sYXp5UGFyc2UocGxheVVybCx0aW1lb3V0KTtcXG4gICAgICAgICAgICBpZih0eXBlb2YoeDVQbGF5KT09XFxcInVuZGVmaW5lZFxcXCJ8fCF4NVBsYXkpe1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6YGT6ZW/5LuT5bqT6Kej5p6Q5aSx6LSlXFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBsZXQgdGlwcz0veDVSdWxlfHdlYlJ1bGUvLnRlc3QoeDVQbGF5KT9cXFwieDUvd2Vi5YWN5ZeF5byA5aeLXFxcIjpcXFwi5p6B6YCf5YWN5ZeF5o6i5a6M5q+V77yM5Zyw5Z2AOlxcXCIrKC9eaHR0cC8udGVzdCh4NVBsYXkpP3g1UGxheTon6Z2e5q2j5bi46ZO+5o6lJyk7XFxuICAgICAgICAgICAgbG9nKHRpcHMpO1xcbiAgICAgICAgICAgIHJldHVybiB4NVBsYXk7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIFxcXCJtYW9zc1xcXCI6XFxuICAgICAgICBmdW5jdGlvbiAoanh1cmwsIHJlZiwga2V5KSB7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMu54yrKGp4dXJsLCByZWYsIGtleSlcXG4gICAgICAgIH0sXFxuICAgIOWFjeWXhTpmdW5jdGlvbih2aXBVcmwsayl7XFxuICAgICAgICBrPWt8fFxcXCJ1cmxcXFwiO1xcbiAgICAgICAgdHJ5e1xcbiAgICAgICAgICAgIGxldCByZWFsVXJsPUpTT04ucGFyc2UoZmV0Y2godmlwVXJsKSlba107XFxuICAgICAgICAgICAgaWYocmVhbFVybC5zdGFydHNXaXRoKCcvJykpe1xcbiAgICAgICAgICAgICAgICByZWFsVXJsID0gJ2h0dHBzOi8vJytyZWFsVXJsO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZpZGVvKHJlYWxVcmwpfHxcXFwiXFxcIjtcXG4gICAgICAgIH1jYXRjaChlKXtcXG4gICAgICAgICAgICAvL2xvZyhlLm1lc3NhZ2UpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiXFxcIlxcbiAgICAgICAgfVxcbiAgICB9LFxcbiAgICBYNTpmdW5jdGlvbih2aXBVcmwscmVmKXsvLyBodHRwczovL2FwaS41Mnd5Yi5jb20vd2ViY2xvdWQvP3Y9aHR0cDovL3ZpcC4xOTA1LmNvbS9wbGF5LzY5MTk0MC5zaHRtbCBodHRwOi8vd3d3LmNkY2VyLm5ldC9cXG4gICAgICAgIGxldCBfeDUgPSAkLnRvU3RyaW5nKCh2aXBVcmwpID0+IHtcXG4gICAgICAgICAgICBpZighbG9jYXRpb24uaHJlZi5pbmNsdWRlcyh2aXBVcmwpKXtcXG4gICAgICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9IHZpcFVybDtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYod2luZG93LmNvdW50ID09IG51bGwpe1xcbiAgICAgICAgICAgICAgICB3aW5kb3cuY291bnQ9MTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgd2luZG93LmNvdW50Kys7XFxuICAgICAgICAgICAgaWYoIHdpbmRvdy5jb3VudCA+PSAyMCl7XFxuICAgICAgICAgICAgICAgIGZiYS5sb2coXFxcIuacquiOt+WPluWIsOi1hOa6kOWcsOWdgO+8jOi3s+WIsOino+aekOmhtVxcXCIpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdmlwVXJsXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciB1cmxzID0gX2dldFVybHMoKTtcXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIHVybHMpIHtcXG4gICAgICAgICAgICAgICAgaWYgKCEvcGxheW0zdTh8bTN1OFxcXFwudHYvLnRlc3QodXJsc1tpXSkgJiYgdXJsc1tpXS5tYXRjaCgvXFxcXC5tcDN8XFxcXC5tcDR8XFxcXC5tM3U4fFxcXFwuZmx2LykpIHtcXG4gICAgICAgICAgICAgICAgICAgIGZiYS5sb2codXJsc1tpXSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsc1tpXVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSx2aXBVcmwpO1xcbiAgICAgICAgbGV0IHBsYXlVcmwgPSByZWY/cmVmOnZpcFVybDtcXG4gICAgICAgIGxldCB4NVVybCA9ICd3ZWJSdWxlOi8vJytwbGF5VXJsKyAnQCcgK194NTtcXG4gICAgICAgIHNob3dMb2FkaW5nKCfprZTmlq0uanPll4XmjqLkuK0uLi4nKTtcXG4gICAgICAgIHJldHVybiB4NVVybFxcbiAgICB9LFxcbiAgICAn6YGT6ZW/JzpmdW5jdGlvbiAodmlwVXJsKXtcXG4gICAgICAgIGV2YWxQcml2YXRlSlMoJ3pTV3ZlK2VlQTZpTCtmMmZHVEkrMXBSOGpuTGQwU2l5VjZ5dmdjUE1Xd0JNUDVhWXBxaFRGYklTeG52aGIwYmQ1VmdpenlVTUhlNGRtc25HaFdMQmtxZmI1SGZOYklXNE1CTXh6THBQLzlUak5UOFNJUUFmamRUajRQOG9YMzVla0tOdkdWeERvbHlmY1lycG9Ld05vUT09Jyk7XFxuICAgICAgICByZXR1cm4gdGhpcy7lhY3ll4UodmlwVXJsKycmc2VjcmV0PScrc2VjcmV0KVxcbiAgICB9LFxcbiAgICAn54yrJzpmdW5jdGlvbiAoanh1cmwsIHJlZiwga2V5KSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciBnZXRWaWRlb0luZm8gPSBmdW5jdGlvbiAodGV4dCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdG9vbHMuQUVTKHRleHQsIGtleSwgaXYpO1xcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSB7aGVhZGVyczoge1xcXCJSZWZlcmVyXFxcIjogcmVmfHwnJ319O1xcbiAgICAgICAgICAgIGtleSA9IGtleSA9PSB1bmRlZmluZWQgPyBcXFwiZHZ5WVJRbG5QUkNNZFFTZVxcXCIgOiBrZXk7XFxuICAgICAgICAgICAgdmFyIGh0bWwgPSByZWY/cmVxdWVzdChqeHVybCwgaGVhZGVycyk6cmVxdWVzdChqeHVybCk7XFxuICAgICAgICAgICAgaWYgKC8mYnR3YWY9Ly50ZXN0KGh0bWwpKSB7XFxuICAgICAgICAgICAgICAgIGh0bWwgPSByZXF1ZXN0KGp4dXJsICsgXFxcIiZidHdhZlxcXCIgKyBodG1sLm1hdGNoKC8mYnR3YWYoLio/KVxcXCIvKVsxXSwgaGVhZGVycyk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBpdiA9IGh0bWwuc3BsaXQoXFxcIl90b2tlbiA9IFxcXFxcXFwiXFxcIilbMV0uc3BsaXQoXFxcIlxcXFxcXFwiXFxcIilbMF07XFxuICAgICAgICAgICAgZXZhbChodG1sLm1hdGNoKC92YXIgY29uZmlnID0ge1tcXFxcc1xcXFxTXSo/fS8pWzBdICsgXFxcIlxcXCIpO1xcbiAgICAgICAgICAgIGlmICghL15odHRwLy50ZXN0KGNvbmZpZy51cmwpKSB7XFxuICAgICAgICAgICAgICAgIGNvbmZpZy51cmwgPSBkZWNvZGVVUklDb21wb25lbnQodG9vbHMuQUVTKGNvbmZpZy51cmwsIGtleSwgaXYpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy51cmw7XFxuICAgICAgICB9XFxuICAgICAgICBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIC8vIHJldHVybiBcXFwiXFxcIjtcXG4gICAgICAgICAgICByZXR1cm4ganh1cmw7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIExMUTogZnVuY3Rpb24oanh1cmwpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIGFwaSA9IGp4dXJsLnNwbGl0KCc/dXJsPScpWzBdICsgXFxcImFwaS5waHBcXFwiO1xcbiAgICAgICAgICAgIHZhciBiNjRpZCA9IGJhc2U2NEVuY29kZShqeHVybC5zcGxpdCgndXJsPScpWzFdKTtcXG4gICAgICAgICAgICB2YXIgcGFyc2VpZCA9IHRvb2xzLmNhZXNhckNpcGhlcihiNjRpZCwgLTEpO1xcbiAgICAgICAgICAgIHZhciBqc29uID0gSlNPTi5wYXJzZShyZXF1ZXN0KGFwaSwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IGp4dXJsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxcbiAgICAgICAgICAgICAgICBib2R5OiAndXJsPScgKyBwYXJzZWlkXFxuICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgIHVybCA9IChqc29uLmNvZGUgPT0gMjAwID8gYmFzZTY0RGVjb2RlKHRvb2xzLmNhZXNhckNpcGhlcihqc29uLnVybCwgLTEpKSA6ICcnKTtcXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiAnJztcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgUGFuR3U6IGZ1bmN0aW9uKHZpcFVybCwgZGF0YSkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAvKnZhciByZWYgPSAnaHR0cHM6Ly93d3cucGFuZ3VqaWV4aS5jb20vJztcXG4gICAgICAgICAgICB2YXIgcGFyc2UgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L2ppZXhpLz91cmw9JyArIHZpcFVybDtcXG4gICAgICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vcGFuZ3VhcGkubnRyeWpkLm5ldC9qaWV4aS9hcGkucGhwJztcXG4gICAgICAgICAgICAqL1xcbiAgICAgICAgICAgIC8vdmFyIHJlZiA9ICdodHRwczovL3hteXN0di5jb20vJztcXG4gICAgICAgICAgICAvL3ZhciBwYXJzZSA9ICdodHRwczovL3d3dy45OWtwdy5jb20vcGFuZ3UvaW5kZXgucGhwP3VybD0nICsgdGFpbFVybDtcXG4gICAgICAgICAgICAvL3ZhciBhcGkgPSAnaHR0cHM6Ly93d3cuOTlrcHcuY29tL3Bhbmd1L2FwaS5waHAnO1xcbiAgICAgICAgICAgIHZhciBwYXJzZSA9ICdodHRwczovL3d3dy5wYW5ndWppZXhpLmNvbS9wYW5ndS8/dXJsPScgKyB2aXBVcmw7XFxuICAgICAgICAgICAgdmFyIGFwaSA9ICdodHRwczovL3Bhbmd1YXBpLm50cnlqZC5uZXQvcGFuZ3UyMDIxL2FwaS5waHAnO1xcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XFxuICAgICAgICAgICAgICAgIHJlZiA9IGRhdGFbMF07XFxuICAgICAgICAgICAgICAgIHBhcnNlID0gZGF0YVsxXTtcXG4gICAgICAgICAgICAgICAgYXBpID0gZGF0YVsyXTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdmFyIFRpbWUgPSAoTWF0aC5mbG9vcihuZXcgRGF0ZSgpLmdldFRpbWUoKSAvIDEwMDApICogMSkudG9TdHJpbmcoKTtcXG4gICAgICAgICAgICB2YXIgdXJsID0gSlNPTi5wYXJzZShyZXF1ZXN0KGFwaSwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IHBhcnNlXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIGJvZHk6ICd1cmw9JyArIHZpcFVybCArICcmcmVmZXJlcj0nICsgYmFzZTY0RW5jb2RlKHBhcnNlKSArICcmcmVmPTEmdGltZT0nICsgVGltZSArICcmdHlwZT0mb3RoZXI9JyArIGJhc2U2NEVuY29kZSh2aXBVcmwpICsgJyZpb3M9MCcsXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxuICAgICAgICAgICAgfSkpLnVybDtcXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiAnJztcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgeXVuMTcxNzogZnVuY3Rpb24gKHZpcFVybCkge1xcbiAgICAgICAgdmFyIGlzeWsgPSB2aXBVcmwuaW5kZXhPZigneW91a3UnKTtcXG4gICAgICAgIHZhciByZWYgPSBcXFwiaHR0cHM6Ly93d3cuMTcxN3l1bi5jb20vangvdHkucGhwP3VybD1cXFwiICsgdmlwVXJsO1xcbiAgICAgICAgdmFyIHBhcnNlID0gXFxcImh0dHBzOi8vMTcxN3l1bi5jb20uemgxODgubmV0LzA4MjgvP3VybD1cXFwiICsgdmlwVXJsO1xcbiAgICAgICAgdmFyIGFwaSA9IFxcXCJodHRwczovLzE3MTd5dW4uY29tLnpoMTg4Lm5ldC8xMDA0Ly4uaW5kZXguLnBocFxcXCI7XFxuICAgICAgICByZXR1cm4gaXN5ayA9PSAtMSA/IHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmLCBwYXJzZSwgYXBpXSkgOiB0aGlzLlBhbkd1KHZpcFVybCwgW3JlZiArICcsdmlwOicsIHBhcnNlICsgJyx2aXA6JywgYXBpXSk7XFxuICAgIH0sXFxuICAgIE9L6Kej5p6QOidodHRwczovL29ranguY2MvP3VybD0nLFxcbiAgICBNM1U4VFY6J2h0dHBzOi8vangubTN1OC50di9qaWV4aS8/dXJsPScsXFxuICAgIOmBk+mVv+S7k+W6k+mAmuWFjTpmdW5jdGlvbiAodXJsLHRpbWVvdXQpe1xcbiAgICAgICAgcmV0dXJuIFBhcnNlUy5kZWZhdWx0UGFyc2VXZWIodXJsLHRpbWVvdXQpO1xcbiAgICB9LFxcbiAgICBGdVhpbmc6IGZ1bmN0aW9uKHZpcFVybCkge1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAvL2lmKHZpcFVybC5pbmRleE9mKCd2LnlvdWt1JykhPS0xKXtcXG4gICAgICAgICAgICAvLyAgICB2aXBVcmwgPSAoSlNPTi5wYXJzZShyZXF1ZXN0KHZpcFVybCwge3JlZGlyZWN0OmZhbHNlLCB3aXRoSGVhZGVyczp0cnVlfSkpLmhlYWRlcnMubG9jYXRpb24gKyAnJykucmVwbGFjZSgvXFxcXD8uKi8sJycpO1xcbiAgICAgICAgICAgIC8vfVxcbiAgICAgICAgICAgIHZhciByZWYgPSAnaHR0cHM6Ly9qeC54dWV0dWlndWFuZy5jbi9qaWV4aS8/dXJsPScgKyB2aXBVcmw7XFxuICAgICAgICAgICAgdmFyIHBhcnNlID0gcmVmO1xcbiAgICAgICAgICAgIHZhciBhcGkgPSAnaHR0cHM6Ly9qeC54dWV0dWlndWFuZy5jbi9qaWV4aS9hcGl1X2Z4LnBocCc7XFxuICAgICAgICAgICAgcmV0dXJuIHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmLCBwYXJzZSwgYXBpXSk7XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgcmV0dXJuICcnO1xcbiAgICAgICAgfVxcbiAgICB9LFxcbn07XFxuXFxuT2JqZWN0LmFzc2lnbihQYXJzZVMsIG9yaWdpbmFsUGFyc2VTLCBNeVBhcnNlUyk7XFxuLy/opobnm5bpobrluo/vvIznrKzkuInkuKropobnm5bnrKzkuozkuKrnhLblkI7opobnm5bnrKzkuIDkuKpcXG5cXG5cXG5mdW5jdGlvbiBheXRtUGFyc2UodmlwVXJsLHN0clRpdGxlLHRpbWVvdXQscGxheVVybCkge1xcbiAgICAvLyDlj4LmlbAxOuato+eJiOe9keWdgOWcsOWdgCDlj4LmlbAyIOWumuWQkeino+aekOaOpeWPo+WQjeensCDlj4LmlbAzIHg16Kej5p6Q6LaF5pe2IOWPguaVsDQg5a6M5pW055qE5pKt5pS+6ZO+5o6lXFxuICAgIHN0clRpdGxlID0gc3RyVGl0bGV8fCcnO1xcbiAgICB2aXBVcmwgPSBkZWNvZGVVUklDb21wb25lbnQodmlwVXJsKTtcXG4gICAgaWYoIS9taWd1dmlkZW8vLnRlc3QodmlwVXJsKSl7XFxuICAgICAgICB2aXBVcmw9dmlwVXJsLnNwbGl0KCcjJylbMF0uc3BsaXQoJz8nKVswXTtcXG4gICAgfVxcbiAgICBwbGF5VXJsPWRlY29kZVVSSUNvbXBvbmVudChwbGF5VXJsKXx8dmlwVXJsfHwnJztcXG4gICAgLy8gbG9nKCfkvKDlhaVheXRtUGFyc2XnmoTotoXml7Y6Jyt0aW1lb3V0KTtcXG4gICAgdGltZW91dCA9IHBhcnNlSW50KHRpbWVvdXQpfHxwYXJzZUludChnZXRWYXIoJ2RwLmp4VGltZW91dCcsJzUwMDAnKSl8fDUwMDA7XFxuXFxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbiAgICBsZXQganhzUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeUppZXhpLmpzb25cXFwiO1xcbiAgICBsZXQgTXlKaWV4aSA9IHt9O1xcbiAgICBsZXQgamlleGlzID0ge307XFxuICAgIHRyeSB7XFxuICAgICAgICBNeUppZXhpID0gSlNPTi5wYXJzZShmZXRjaChqeHNSb3V0ZSkpO1xcbiAgICAgICAgamlleGlzID0gTXlKaWV4aS5qaWV4aXMuZmlsdGVyKGl0PT5pdC5uYW1lPT09TXlKaWV4aS5ub3cpWzBdO1xcbiAgICB9Y2F0Y2ggKGUpIHt9XFxuICAgIGZ1bmN0aW9uIGdldFBsYXlKeChrZXkpe1xcbiAgICAgICAgbGV0IHBsYXlVcmxMaXN0ID0gW107Ly/mibnph4/mkq3mlL7lnLDlnYDliJfooahcXG4gICAgICAgIGxldCBuYW1lTGlzdCA9IFtdO1xcbiAgICAgICAgbGV0IGp4cyA9IGppZXhpc1trZXldOyAvLyDpgILnlKjkuo7ov5nkuKrnvZHnq5nnmoTop6PmnpDliJfooahcXG4gICAgICAgIGlmKGp4cyl7XFxuICAgICAgICAgICAgZm9yKGxldCBpIGluIGp4cyl7XFxuICAgICAgICAgICAgICAgIGlmKHR5cGVvZiBQYXJzZVNbanhzW2ldXSA9PSAnc3RyaW5nJyYmUGFyc2VTW2p4c1tpXV0ubWF0Y2goL2h0dHAuKj89Lykpe1xcbiAgICAgICAgICAgICAgICAgICAgcGxheVVybExpc3QucHVzaChQYXJzZVNbanhzW2ldXSt2aXBVcmwpO1xcbiAgICAgICAgICAgICAgICAgICAgbmFtZUxpc3QucHVzaChqeHNbaV0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgLy8gcmV0dXJuIHBsYXlVcmxMaXN0XFxuICAgICAgICByZXR1cm4ge3BsYXlVcmxMaXN0OnBsYXlVcmxMaXN0LG5hbWVMaXN0Om5hbWVMaXN0fVxcbiAgICB9XFxuICAgIGZ1bmN0aW9uIGdldExhenlMaXN0KGtleSl7Ly/lj6rojrflj5blpIfog47liJfooajnmoTlhY3ll4XmjqLop6PmnpDliJfooahcXG4gICAgICAgIGxldCBwYXJzZXMgPSBbXTtcXG4gICAgICAgIGxldCBqeHMgPSBqaWV4aXNba2V5XXx8W107IC8vIOmAgueUqOS6jui/meS4que9keermeeahOino+aekOWIl+ihqFxcbiAgICAgICAgLy8gbG9nKGp4cyk7XFxuICAgICAgICBpZihqeHMpe1xcbiAgICAgICAgICAgIGZvcihsZXQgaSBpbiBqeHMpe1xcbiAgICAgICAgICAgICAgICBpZih0eXBlb2YgUGFyc2VTW2p4c1tpXV0gPT0gJ2Z1bmN0aW9uJyYmIS/pgJrlhY0vLnRlc3QoUGFyc2VTW2p4c1tpXV0udG9TdHJpbmcoKSkpe1xcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VzLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6anhzW2ldLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJ1bGU6UGFyc2VTW2p4c1tpXV1cXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gcGFyc2VzXFxuICAgIH1cXG4gICAgdmFyIGV4dHJhID0ge307XFxuICAgIHZhciBwYXJzZXMgPSBbXTsgLy/lhY3ll4XmjqLliJfooahcXG4gICAgLy8tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tXFxuICAgIGlmKCFzdHJUaXRsZSl7XFxuICAgICAgICBpZigvTFQvLnRlc3QodmlwVXJsKSl7XFxuICAgICAgICAgICAgc3RyID0gbXlTZXQubHQ7XFxuICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ2x0Jyk7XFxuICAgICAgICAgICAgcGFyc2VzID0gZ2V0TGF6eUxpc3QoJ2x0JyxzdHIpO1xcbiAgICAgICAgfSBlbHNlIGlmKC9yZW5yZW5taS8udGVzdCh2aXBVcmwpKXtcXG4gICAgICAgICAgICBzdHIgPSBteVNldC5ycjtcXG4gICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgncnInKTtcXG4gICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgncnInLHN0cik7XFxuICAgICAgICB9ZWxzZSBpZigvd3VkdXl1bi8udGVzdCh2aXBVcmwpKXtcXG4gICAgICAgICAgICBzdHIgPSBteVNldC53ZDtcXG4gICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnd2QnKTtcXG4gICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgnd2QnLHN0cik7XFxuICAgICAgICB9ZWxzZSBpZigveGlubHVhbnxMVHxydWlmZW5nbGJ8c3VveW98eGZ5fHJlbnJlbm1pfFJvbmdYaW5nVlJ8eHVlcmVufHd1ZHV5dW58bGFvZGl8TmFpZmVpbWl8ZGFvZG18WE1NVHx2MDIwYy8udGVzdCh2aXBVcmwpKXtcXG4gICAgICAgICAgICBzdHIgPSBteVNldC5vdGg7XFxuICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ290aCcpO1xcbiAgICAgICAgICAgIHBhcnNlcyA9IGdldExhenlMaXN0KCdvdGgnLHN0cik7XFxuICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICB2YXIgaG9zdDtcXG4gICAgICAgICAgICB0cnl7XFxuICAgICAgICAgICAgICAgIGhvc3QgPSB2aXBVcmwubWF0Y2goL1xcXFwuKC4qPylcXFxcLy8pWzFdO1xcbiAgICAgICAgICAgIH1jYXRjaChlKXtcXG4gICAgICAgICAgICAgICAgaWYoIS9eaHR0cC8udGVzdChwbGF5VXJsKSl7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcIuaWreaPkuiwg+eUqOWksei0pe+8gVxcXFxu6Z2e5q2j5bi455qEdmlw5q2j54mI5Zyw5Z2A5LiU5pyq6K+G5Yir5Y6f56uZ6Kej5p6Q5pKt5pS+5Zyw5Z2AXFxcIjtcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTLumBk+mVv+S7k+W6k+mAmuWFjShwbGF5VXJsLHRpbWVvdXQpXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy9ob3N0ID0gZGVjb2RlVVJJQ29tcG9uZW50KGhvc3QpO1xcbiAgICAgICAgICAgIHN3aXRjaCAobXlTZXQucWp1KSB7XFxuICAgICAgICAgICAgICAgIGNhc2UgXFxcIum7mOiupFxcXCI6XFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGhvc3QpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJxcS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC50eDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3R4Jyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcyA9IGdldExhenlMaXN0KCd0eCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJpcWl5aS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5xeTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3F5Jyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcyA9IGdldExhenlMaXN0KCdxeScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJ5b3VrdS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC55aztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3lrJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcyA9IGdldExhenlMaXN0KCd5aycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJhbGl6eVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmFsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnYWwnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VzID0gZ2V0TGF6eUxpc3QoJ2FsaXp5Jyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIm1ndHYuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQubWc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdtZycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgnbWcnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwiYmlsaWJpbGkuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQuYmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdibCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgnYmwnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwic29odS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5zaDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3NoJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcyA9IGdldExhenlMaXN0KCdzaCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJ0di5zb2h1LmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnNoO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnc2gnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VzID0gZ2V0TGF6eUxpc3QoJ3NoJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIml4aWd1YS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC54ZztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3hnJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcyA9IGdldExhenlMaXN0KCd4ZycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJwcHR2LmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnBwO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgncHAnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VzID0gZ2V0TGF6eUxpc3QoJ3BwJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIm1pZ3V2aWRlby5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5taTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ21pJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcyA9IGdldExhenlMaXN0KCdtaScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCJsZS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5sZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ2xlJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcyA9IGdldExhenlMaXN0KCdsZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCIxOTA1LmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0Lm9uZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ29uZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgnb25lJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcImZ1bi50dlxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmZ1bjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ2Z1bicpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgnZnVuJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0Lm90aDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ290aCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgnb3RoJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5xanU7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1lbHNle1xcbiAgICAgICAgbG9nKCfprZTmlq3miafooYzlrprlkJHop6PmnpDnur/ot6/lpLQ6JytzdHJUaXRsZSk7XFxuICAgICAgICBzdHIgPSBzdHJUaXRsZTtcXG4gICAgfVxcbiAgICBsZXQgd2l0aEJhdGNoID0gISEoTXlKaWV4aS5pc0F1dG8gJiYgTXlKaWV4aS5hdXRvTW9kZSA9PT0gJ+mAn+W6puS8mOWFiCcpO1xcbiAgICBsZXQgd2l0aEJhdGNoT3JkZXIgPSAhIShNeUppZXhpLmlzQXV0byAmJiBNeUppZXhpLmF1dG9Nb2RlID09PSAn6aG65bqP5LyY5YWIJyk7XFxuICAgIGxldCBzaW5nbGVCYWNrID0gTXlKaWV4aS5zaW5nbGVCYWNrfHxmYWxzZTsgLy/lkIrmr5vmqKHlvI/jgILljZXkuKrnu5Pmnpznm7TmjqXov5Tlm57vvIzlgZzmraLlkI7pnaLnmoRcXG4gICAgbGV0IGRtUGF0aCA9ICdoaWtlcjovL2ZpbGVzL2NhY2hlL2RpYW9tYW8udHh0JzsvL+WQiuavm+aooeW8j+i/h+a7pOaWh+S7tui3r+W+hFxcbiAgICBsZXQgZG1VcmxzO1xcbiAgICB0cnkge1xcbiAgICAgICAgZG1VcmxzID0gZmV0Y2goZG1QYXRoKS50cmltKCkuc3BsaXQoJ1xcXFxuJykuZmlsdGVyKGl0PT5pdCYmIWl0LnN0YXJ0c1dpdGgoJy8vJykpO1xcbiAgICB9Y2F0Y2ggKGUpIHtcXG4gICAgICAgIGRtVXJscyA9IFtdO1xcbiAgICB9XFxuICAgIGZ1bmN0aW9uIGhhc0RtKHZpZGVvVXJsLGRtVXJscyl7Ly/mkq3mlL7lnLDlnYDmmK/lkKbkuLrlkIrmr5vop4bpopFcXG4gICAgICAgIGlmKGRtVXJscy5sZW5ndGg8MSl7XFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXFxuICAgICAgICB9XFxuICAgICAgICBmb3IobGV0IGRtVXJsIG9mIGRtVXJscyl7XFxuICAgICAgICAgICAgaWYoKG5ldyBSZWdFeHAoZG1VcmwpKS50ZXN0KHZpZGVvVXJsKSl7Ly/mkq3mlL7lnLDlnYDljIXlkKvlkIrmr5vmoIflv5fnmoTlnLDlnYBcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRydWVcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gZmFsc2VcXG4gICAgfVxcblxcbiAgICBmdW5jdGlvbiB1bmlxdWUyKGFycmF5KXsvL+WOu+mHjeWHveaVsFxcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChhcnJheSkpO1xcbiAgICB9XFxuICAgIGZ1bmN0aW9uIEFyclNldChBcnIsIGlkKSB7Ly/lr7nosaHmlbDnu4Tljrvph41cXG4gICAgICAgIHZhciBvYmogPSB7fTtcXG4gICAgICAgIGNvbnN0IGFycmF5cyA9IEFyci5yZWR1Y2UoKHNldEFyciwgaXRlbSkgPT4ge1xcbiAgICAgICAgICAgIG9ialtpdGVtW2lkXV0gPyAnJyA6IG9ialtpdGVtW2lkXV0gPSB0cnVlICYmIHNldEFyci5wdXNoKGl0ZW0pO1xcbiAgICAgICAgICAgIHJldHVybiBzZXRBcnI7XFxuICAgICAgICB9LCBbXSk7XFxuICAgICAgICByZXR1cm4gYXJyYXlzO1xcbiAgICB9XFxuICAgIGZ1bmN0aW9uIHNvcnRCeUtleShhcnJheSwga2V5LCBvcmRlcikgey8v5a+56LGh5pWw57uE5oyJ5p+Q5Liq6ZSu5YC85o6S5bqPXFxuICAgICAgICByZXR1cm4gYXJyYXkuc29ydChmdW5jdGlvbihhLCBiKSB7XFxuICAgICAgICAgICAgdmFyIHggPSBhW2tleV0ubWF0Y2goLyhcXFxcZCspLylbMV07XFxuICAgICAgICAgICAgdmFyIHkgPSBiW2tleV0ubWF0Y2goLyhcXFxcZCspLylbMV07XFxuICAgICAgICAgICAgLy8gbG9nKCd4OicreCtcXFwiLHk6XFxcIit5KTtcXG4gICAgICAgICAgICBpZiAob3JkZXIpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICgoeCA8IHkpID8gLTEgOiAoKHggPiB5KSA/IDEgOiAwKSlcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gKCh4IDwgeSkgPyAoKHggPiB5KSA/IDEgOiAwKSA6IC0xKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH1cXG4gICAgaWYgKHR5cGVvZiBQYXJzZVNbc3RyXSA9PSAnZnVuY3Rpb24nKSB7XFxuICAgICAgICBpZigv6YCa5YWNLy50ZXN0KHN0cikpe1xcbiAgICAgICAgICAgIHJldHVybiBQYXJzZVNbc3RyXSh2aXBVcmwsdGltZW91dCk7XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgdXJsO1xcbiAgICAgICAgdmFyIHRhc2sgPSBmdW5jdGlvbihvYmopIHtcXG4gICAgICAgICAgICBldmFsKCd2YXIgY29uZmlnX2RwID0nICsgZmV0Y2goZ2V0VmFyKCdvbGRDb25maWcnKSkpO1xcbiAgICAgICAgICAgIGV2YWwoZmV0Y2goY29uZmlnX2RwLmNqKSk7XFxuICAgICAgICAgICAgcmV0dXJuIGF5dG1QYXJzZShvYmoudmlwVXJsLG9iai5uYW1lLG9iai50aW1lb3V0KTtcXG4gICAgICAgIH07XFxuICAgICAgICBpZighd2l0aEJhdGNoT3JkZXJ8fHN0clRpdGxlKSB7Ly/kuI3lvIDlpJrnur/ot6/pobrluo/kvJjlhYjmiJbogIXmjIflrprkuobop6PmnpBcXG4gICAgICAgICAgICB1cmwgPSBQYXJzZVNbc3RyXSh2aXBVcmwsdGltZW91dCk7XFxuICAgICAgICB9ZWxzZXsvL+W8gOS6huWkmue6v+i3r+mhuuW6j+S8mOWFiOaJp+ihjOWFjeWXheWkmuS7u+WKoVxcbiAgICAgICAgICAgIHBhcnNlcy51bnNoaWZ0KHtuYW1lOnN0cn0pOyAvL+aKiuS4u+mFjee9rueahOWFjeWXheaOouWKoOWFpeWIsOWkmuS7u+WKoeWIl+ihqFxcbiAgICAgICAgICAgIHBhcnNlcyA9IEFyclNldChwYXJzZXMsJ25hbWUnKTsgLy/ljrvph41cXG4gICAgICAgICAgICB2YXIgY291bnQgPSBwYXJzZXMubGVuZ3RoOyAvL+iuvue9ruS7u+WKoeaVsOmHj1xcbiAgICAgICAgICAgIGxvZygn6a2U5pat5byA5ZCv5aSa5Lu75Yqh6Kej5p6QLOS7u+WKoeaVsOmHjzonK2NvdW50KTtcXG4gICAgICAgICAgICBsb2coJ+ino+aekOWIl+ihqDonK0pTT04uc3RyaW5naWZ5KHBhcnNlcykpO1xcbiAgICAgICAgICAgIHZhciBwYXJzZVJldCA9IFtdOyAvL+ino+aekOe7k+aenOWIl+ihqFxcbiAgICAgICAgICAgIGxldCB0YXNrcyA9IHBhcnNlcy5tYXAoKGl0LGlkZXgpPT57XFxuICAgICAgICAgICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgICAgICAgICBmdW5jOiB0YXNrLFxcbiAgICAgICAgICAgICAgICAgICAgcGFyYW06IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOml0Lm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcnVsZTppdC5ydWxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHZpcFVybDogdmlwVXJsLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpbWVvdXQ6IHRpbWVvdXRcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICBpZDogXFxcInRhc2tcXFwiK2lkZXhcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHNob3dMb2FkaW5nKFxcXCLprZTmlq3lubblj5Hop6PmnpDkuK3vvIzliankvZnop6PmnpA6XFxcIitjb3VudCk7XFxuICAgICAgICAgICAgZnVuY3Rpb24gaXNEbShyZXQpe1xcbiAgICAgICAgICAgICAgICBpZighcmV0KXtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmV0dXJuIGhhc0RtKHJldC5zcGxpdCgnIycpWzBdLnNwbGl0KCc7JylbMF0sZG1VcmxzKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBiZSh0YXNrcyx7XFxuICAgICAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKG9iaiwgaWQsIGVycm9yLHJldCkge1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKFxcXCLnm5HlkKzliLDku7vliqFcXFwiICsgaWQrJ+W3sue7k+adnyxlcnJvcjonK2Vycm9yKycscmV0OicrcmV0KTtcXG4gICAgICAgICAgICAgICAgICAgIHJldCA9IHJldHx8Jyc7XFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVJldC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0YXNrOmlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldDpyZXQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTp0YXNrcy5maWx0ZXIoaXQ9Pml0LmlkPT09aWQpWzBdLnBhcmFtLm5hbWVcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICAgICAgaWYoc2luZ2xlQmFjayl7Ly/lkIrmr5vmqKHlvI/lvIDlp4vnmoTor50s5Yik5patcmV05pyJ5pWI5oCnXFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCfku7vliqEnK2lkKyfnu5PmnpzmmK/lkIrmr5s/Jytpc0RtKHJldCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFpc0RtKHJldCkmJlBhcnNlUy5pc1ZpZGVvKHJldC5zcGxpdCgnIycpWzBdLnNwbGl0KCc7JylbMF0pKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUxvYWRpbmcoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKCflkIrmr5vmqKHlvI/kuK3mlq3op6PmnpDlubbov5Tlm57op4bpopEnK3JldCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnYnJlYWsnXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgY291bnQgLT0gMTsgLy/lrozmiJDkuobku7vliqHvvIzku7vliqHmlbDph48tMVxcbiAgICAgICAgICAgICAgICAgICAgLy9sb2cob2JqKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzaG93TG9hZGluZyhcXFwi6a2U5pat5bm25Y+R6Kej5p6Q5Lit77yM5Ymp5L2Z6Kej5p6QOlxcXCIgKyBjb3VudClcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUxvYWRpbmcoKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgcGFyYW06IHsvL+S8oOWIsOebkeWQrOWHveaVsOeahG9iauWPguaVsOmHjFxcbiAgICAgICAgICAgICAgICAgICAgaGk6IFxcXCJjY2NcXFwiLFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7Ly/miafooYzlpJrku7vliqFcXG4gICAgICAgICAgICAvLyBsZXQgdmFsdWFibGUgPSBwYXJzZVJldC5maWx0ZXIoaXQ9Pi9tM3U4fG1wNC8udGVzdChpdC5yZXQpKTtcXG4gICAgICAgICAgICBsb2coXFxcIuWkmuS7u+WKoeaJp+ihjOe7k+aenOaVsDpcXFwiK3BhcnNlUmV0Lmxlbmd0aCk7XFxuICAgICAgICAgICAgbGV0IHZhbHVhYmxlID0gcGFyc2VSZXQuZmlsdGVyKGl0PT5pdC5yZXQmJlBhcnNlUy5pc1ZpZGVvKGl0LnJldC5zcGxpdCgnIycpWzBdLnNwbGl0KCc7JylbMF0pKTtcXG4gICAgICAgICAgICB2YWx1YWJsZSA9IHZhbHVhYmxlLmZpbHRlcihpdD0+IWlzRG0oaXQucmV0KSk7Ly/ov4fmu6TlkIrmr5vop4bpopFcXG4gICAgICAgICAgICBsb2coJ+WkmuS7u+WKoemhuuW6j+aJp+ihjOacieaViOe7k+aenDonK0pTT04uc3RyaW5naWZ5KHZhbHVhYmxlKSk7XFxuICAgICAgICAgICAgaWYodmFsdWFibGUubGVuZ3RoPjEpey8v5aSa57q/6LevXFxuICAgICAgICAgICAgICAgIHZhbHVhYmxlID0gc29ydEJ5S2V5KHZhbHVhYmxlLCd0YXNrJyx0cnVlKTsvL+WNh+W6j+aOkuWIl1xcbiAgICAgICAgICAgICAgICBsZXQgdXJscz12YWx1YWJsZS5tYXAoaXQ9Pml0LnJldCk7Ly/lj5blh7rpk77mjqUs57yT5a2Y5YmN55qEXFxuICAgICAgICAgICAgICAgIGlmKGdldFZhcignZHAuY2FjaGVWaWRlbycsJ3RydWUnKT09PSd0cnVlJyYmcGFyc2VJbnQoZ2V0QXBwVmVyc2lvbigpKT49MjI1NSkgey8v5byA5aeL57yT5a2YXFxuICAgICAgICAgICAgICAgICAgICBsb2coXFxcIuWwiuaVrOeahOmtlOaWreeUqOaIt++8jOinhumikee8k+WtmOW3suWQr+eUqO+8jOivt+WwveaDheS6q+WPl+eci+WJp+aXtuWFiVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZpZGVvc0NhY2hlPXVybHMubWFwKChpdCk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGVhZGVycz17fTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihpdC5zcGxpdChcXFwiO1xcXCIpLmxlbmd0aD4xKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhlYWQgPSBpdC5zcGxpdCgnOycpWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigvQC8udGVzdChoZWFkKSYmL3t8fS8udGVzdChoZWFkKSl7XFxuLy9oZWFkID0gaGVhZC5yZXBsYWNlKC97fH0vZywnJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkID0gaGVhZC5zcGxpdChcXFwie1xcXCIpWzFdLnNwbGl0KFxcXCJ9XFxcIilbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkID0gaGVhZC5zcGxpdCgnJiYnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiBoZWFkKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5ID0gaGVhZFtpXS5zcGxpdCgnQCcpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9aGVhZFtpXS5zcGxpdCgnQCcpWzFdLnJlcGxhY2UoLzsvLCfvvJvvvJsnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW2tleV0gPSB2YWx1ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6aXQuc3BsaXQoXFxcIjtcXFwiKVswXS5zcGxpdChcXFwiI1xcXCIpWzBdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zOntcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6aGVhZGVyc1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YT1iYXRjaENhY2hlTTN1OCh2aWRlb3NDYWNoZSk7XFxuICAgICAgICAgICAgICAgICAgICBkYXRhPWRhdGEubWFwKChpdCxpZCk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXh0cmE9XFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYodXJsc1tpZF0uc3BsaXQoXFxcIjtcXFwiKS5sZW5ndGg+MSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPVxcXCI7XFxcIit1cmxzW2lkXS5zcGxpdChcXFwiO1xcXCIpWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHVybHNbaWRdLnNwbGl0KFxcXCLimIVcXFwiKS5sZW5ndGg+MSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPVxcXCLimIVcXFwiK3VybHNbaWRdLnNwbGl0KFxcXCLimIVcXFwiKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXQrXFxcIlxcXCIhPT1cXFwibnVsbFxcXCIpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXQrZXh0cmFcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybHNbaWRdXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICB1cmxzID0gZGF0YVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vIGxvZygn5o6S5bqP5a6M5q+V5ZCO57uT5p6cOicrSlNPTi5zdHJpbmdpZnkodmFsdWFibGUpKTtcXG4gICAgICAgICAgICAgICAgbGV0IG5hbWVzPXZhbHVhYmxlLm1hcChpdD0+aXQubmFtZSk7XFxuICAgICAgICAgICAgICAgIGxldCBoZWFkZXJzID0gdXJscy5tYXAoKGl0KT0+e1xcbiAgICAgICAgICAgICAgICAgICAgaWYoIS87Ly50ZXN0KGl0KXx8aXQuc3BsaXQoJzsnKS5sZW5ndGg8Mil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9XFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGVhZCA9IGl0LnNwbGl0KCc7JylbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIS9ALy50ZXN0KGhlYWQpfHwhL3t8fS8udGVzdChoZWFkKSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7fVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkPWhlYWQuc3BsaXQoXFxcIntcXFwiKVsxXS5zcGxpdChcXFwifVxcXCIpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vaGVhZCA9IGhlYWQucmVwbGFjZSgve3x9L2csJycpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWQgPSBoZWFkLnNwbGl0KCcmJicpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBvYmogPSB7fTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gaGVhZCl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBoZWFkW2ldLnNwbGl0KCdAJylbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB2YWx1ZSA9IGhlYWRbaV0uc3BsaXQoJ0AnKVsxXS5yZXBsYWNlKC87Lywn77yb77ybJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBvYmpcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHVybHMgPSB1cmxzLm1hcCgoaXQpPT57XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdHVybD1pdC5zcGxpdCgnOycpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgaWYoaXQuaW5jbHVkZXMoXFxcIiNpc1ZpZGVvPXRydWUjXFxcIikmJiF0dXJsLmluY2x1ZGVzKFxcXCIjaXNWaWRlbz10cnVlI1xcXCIpKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0dXJsKz1cXFwiI2lzVmlkZW89dHJ1ZSNcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHR1cmxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7dXJsczp1cmxzLGhlYWRlcnM6aGVhZGVycyxuYW1lczpuYW1lc30pO1xcblxcbiAgICAgICAgICAgIH1lbHNlIGlmKHZhbHVhYmxlLmxlbmd0aD09PTApe1xcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gJ3RvYXN0Oi8v6a2U5pat5aSa5Lu75Yqh5YWN5ZeF6Kej5p6Q5YWo5Yab6KaG5rKhJ1xcbiAgICAgICAgICAgICAgICBpZih0eXBlb2YoZXh0cmEucGxheVVybExpc3QpPT09J29iamVjdCcmJmV4dHJhLnBsYXlVcmxMaXN0Lmxlbmd0aD4wKXtcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLnBsYXlVcmxMaXN0ID0gZXh0cmEucGxheVVybExpc3QuZmlsdGVyKGl0PT5pdCE9PShQYXJzZVNbc3RyXXx8c3RyKSArIHZpcFVybCk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgbmFtZUxpc3QgPSBleHRyYS5uYW1lTGlzdDtcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLm5hbWVMaXN0PXVuaXF1ZTIobmFtZUxpc3QpO1xcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEucGxheVVybExpc3QgPSB1bmlxdWUyKGV4dHJhLnBsYXlVcmxMaXN0KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBpZihleHRyYS5uYW1lTGlzdC5sZW5ndGg8MSl7XFxuICAgICAgICAgICAgICAgICAgICBoaWRlTG9hZGluZygpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+iKreavlFHkuoYs5aSa5Lu75Yqh5YWN5ZeF6Kej5p6Q5YWo5Yab6KaG5rKh5bm25LiU5rKh5pyJ5Y+v55So55qEanNvbnx4Neino+aekOS6hidcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBzaG93TG9hZGluZyhcXFwi6a2U5pat5aSa5Lu75Yqh5YWN5ZeF5aSx6LSlLOWwneivlWpzb258eDVcXFwiKTtcXG4gICAgICAgICAgICAgICAgLy/mjpLpmaTnrKzkuIDkuKpcXG4gICAgICAgICAgICAgICAgbGV0IGV4dHJhMiA9IHtcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0OmV4dHJhLm5hbWVMaXN0LFxcbiAgICAgICAgICAgICAgICAgICAgcGxheVVybExpc3Q6ZXh0cmEucGxheVVybExpc3Quc2xpY2UoMSksXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy8gbG9nKGV4dHJhLnBsYXlVcmxMaXN0WzBdKTtcXG4gICAgICAgICAgICAgICAgLy8gbG9nKGV4dHJhMik7XFxuICAgICAgICAgICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlV2ViP1BhcnNlUy5kZWZhdWx0UGFyc2VXZWIoZXh0cmEucGxheVVybExpc3RbMF0sdGltZW91dCxleHRyYTIpOmV4dHJhLnBsYXlVcmxMaXN0WzBdO1xcblxcbiAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWFibGVbMF0ucmV0XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYoL15oaWtlcjp8XnRvYXN0OnxecnVsZTp8Xng1UnVsZTp8XndlYlJ1bGU6fF5zZWxlY3QvLnRlc3QodXJsKSl7XFxuICAgICAgICAgICAgcmV0dXJuIHVybDtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmKCF1cmwmJiEvXmh0dHAvLnRlc3QodmlwVXJsKSl7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mtlOaWreino+aekOWksei0pT4nK3ZpcFVybFxcbiAgICAgICAgfVxcbiAgICAgICAgLy8gbG9nKHZpcFVybCsn5YWN5ZeF5o6i57uT5p6cOicrdXJsKTtcXG4gICAgICAgIGlmICgvXlxcXFwvLy50ZXN0KHVybCkpIHtcXG4gICAgICAgICAgICB1cmwgPSAnaHR0cHM6JyArIHVybFxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKC89aHR0cC8udGVzdCh1cmwpKSB7XFxuICAgICAgICAgICAgdXJsID0gLyZ1cmw9Ly50ZXN0KHVybCkgPyB1cmwgOiAnaHR0cCcgKyBkZWNvZGVVUklDb21wb25lbnQodXJsLnNwbGl0KCc9aHR0cCcpWzFdKTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8qaWYodXJsLm1hdGNoKC9tZ3R2LmNvbS9nKT09J21ndHYuY29tJyl7XFxuICAgICAgICAgICAgdXJsID0gdXJsICsgJzt7UmVmZXJlckBodHRwczovL3d3dy5tZ3R2LmNvbX0nO1xcbiAgICAgICAgfSBlbHNlICovXFxuICAgICAgICBpZiAoL1xcXFwuZmx2Ly50ZXN0KHVybCkmJiEvVXNlci1BZ2VudC8udGVzdCh1cmwpKSB7XFxuICAgICAgICAgICAgdXJsID0gdXJsICsgJzt7VXNlci1BZ2VudEBhcHAmJlJlZmVyZXJAJyArIHZpcFVybCArICd9JztcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICh1cmwgPT09ICcnIHx8IHVybCA9PT0gdmlwVXJsKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHZpcFVybDtcXG4gICAgICAgIH0gZWxzZSBpZighLyNpc1ZpZGVvPXRydWUjLy50ZXN0KHVybCkpe1xcbiAgICAgICAgICAgIHJldHVybiB1cmwgKyAnI2lzVmlkZW89dHJ1ZSMnO1xcbiAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgcmV0dXJuIHVybFxcbiAgICAgICAgfVxcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBQYXJzZVNbc3RyXSA9PSAnc3RyaW5nJyYmUGFyc2VTW3N0cl0ubWF0Y2goL2h0dHAuKj89LykpIHtcXG4gICAgICAgIC8vIGxvZyhcXFwi5pat5o+S5byA5aeL6YCa55So5omn6KGM5YWN5ZeFIGRlZmF1bHRQYXJzZVdlYjpcXFwiK3RpbWVvdXQpO1xcbiAgICAgICAgLy9sb2coXFxcIum7mOiupHg1XFxcIitQYXJzZVMuZGVmYXVsdFBhcnNlV2ViKTtcXG4gICAgICAgIGlmKHdpdGhCYXRjaCl7XFxuICAgICAgICAgICAgaWYodHlwZW9mKGV4dHJhLnBsYXlVcmxMaXN0KT09PSdvYmplY3QnJiZleHRyYS5wbGF5VXJsTGlzdC5sZW5ndGg+MCl7XFxuICAgICAgICAgICAgICAgIGV4dHJhLnBsYXlVcmxMaXN0ID0gZXh0cmEucGxheVVybExpc3QuZmlsdGVyKGl0PT5pdCE9PShQYXJzZVNbc3RyXXx8c3RyKSArIHZpcFVybCk7XFxuICAgICAgICAgICAgICAgIGxldCBuYW1lTGlzdCA9IGV4dHJhLm5hbWVMaXN0O1xcbiAgICAgICAgICAgICAgICBuYW1lTGlzdC51bnNoaWZ0KHN0cik7XFxuXFxuICAgICAgICAgICAgICAgIGV4dHJhLm5hbWVMaXN0PXVuaXF1ZTIobmFtZUxpc3QpO1xcbiAgICAgICAgICAgICAgICBleHRyYS5wbGF5VXJsTGlzdCA9IHVuaXF1ZTIoZXh0cmEucGxheVVybExpc3QpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIGV4dHJhID0ge31cXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlV2ViP1BhcnNlUy5kZWZhdWx0UGFyc2VXZWIoKFBhcnNlU1tzdHJdfHxzdHIpICsgdmlwVXJsLHRpbWVvdXQsZXh0cmEpOihQYXJzZVNbc3RyXXx8c3RyKSArIHZpcFVybDtcXG4gICAgfSBlbHNlIGlmKHR5cGVvZihzdHIpPT09J3N0cmluZycmJnN0ci5sZW5ndGg+MSYmKHR5cGVvZiBQYXJzZVNbc3RyXT09J3VuZGVmaW5lZCd8fCFQYXJzZVNbc3RyXSkmJiEvXmh0dHAvLnRlc3Qoc3RyKSl7XFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6K+35YWI6L+b6KGM5pat5o+S6YWN572u56Gu5L+d6K+l6Kej5p6Q5a2Y5ZyoIVxcXFxu5qOA5rWL5Yiw5peg5pWI55qE6Kej5p6Q6YWN572uOicrc3RyO1xcbiAgICB9ZWxzZSB7XFxuICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZShzdHIgKyB2aXBVcmwsdGltZW91dCk7XFxuICAgIH1cXG59XFxuXFxudmFyIHBsYXlQYXJzZSA9IHtcXG4gICAgcGxheWVyX3h4OiBmdW5jdGlvbihqdXJsLCBMYWJlbCkge1xcbiAgICAgICAgcmV0dXJuICQoanVybCkubGF6eVJ1bGUoKGspID0+IHtcXG4gICAgICAgICAgICB2YXIganNVcmwgPSBKU09OLnBhcnNlKGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpKS5jajtcXG4gICAgICAgICAgICB2YXIgTGFiZWwgPSBrO1xcbiAgICAgICAgICAgIHZhciBmYSA9IFsnbGV0dicsICdwcHR2JywgJ3FxJywgJ3lvdWt1JywgJ3FpeWknLCAnaXFpeWknLCAnbWd0dicsICdiaWxpYmlsaScsICdzb2h1JywgJ21pZ3UnLCAnbTE5MDUnLCAndmlwJ107XFxuICAgICAgICAgICAgdmFyIGh0bWwgPSBwYXJzZURvbShyZXF1ZXN0KGlucHV0KSwgTGFiZWwpO1xcbiAgICAgICAgICAgIGV2YWwoaHRtbC5yZXBsYWNlKC9wbGF5ZXJfLio/PXsvLCAncGRhdGE9eycpKTtcXG4gICAgICAgICAgICBldmFsKGZldGNoKGpzVXJsKSk7XFxuICAgICAgICAgICAgaWYgKHBkYXRhLnVybC5zdWJzdHIoMCwgOCkubWF0Y2goL0pULi5KVC4uLykpIHtcXG4gICAgICAgICAgICAgICAgcGRhdGEudXJsID0gYmFzZTY0RGVjb2RlKHBkYXRhLnVybCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGlmIChwZGF0YS51cmwuc3Vic3RyKDAsIDgpLm1hdGNoKC8lLi4lLi4vKSkge1xcbiAgICAgICAgICAgICAgICBwZGF0YS51cmwgPSB1bmVzY2FwZShwZGF0YS51cmwpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBpZiAoZmEuaW5jbHVkZXMocGRhdGEuZnJvbSkpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF5dG1QYXJzZShwZGF0YS51cmwpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBwZGF0YS51cmwgKyAnI2lzVmlkZW89dHJ1ZSMnO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIExhYmVsKVxcbiAgICB9XFxufTtcXG5mdW5jdGlvbiBtelBvcHVwKCkge1xcbiAgICAvKlxcbiAgICBpZiAoZ2V0VmFyKFxcXCJpamstdHhcXFwiLCBcXFwiXFxcIikgPT0gXFxcIjFcXFwiKSB7XFxuICAgICAgICBzZXRJdGVtKFxcXCJ0aXhpbmdcXFwiLCBcXFwiMVxcXCIpXFxuICAgICAgICBjbGVhclZhcihcXFwiaWprLXR4XFxcIilcXG4gICAgfVxcbiAgICBpZiAoZ2V0SXRlbShcXFwidGl4aW5nXFxcIiwgXFxcIlxcXCIpID09IFxcXCJcXFwiKSB7XFxuICAgICAgICBjb25maXJtKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+WFjei0o+WjsOaYjicsXFxuICAgICAgICAgICAgY29udGVudDogJ+acrOeoi+W6j+S4jeaPkOS+m+inhumikeino+aekOacjeWKoVxcXFxu5omA5pyJ5YaF5a655Z2H5LuO55So5oi35YiG5Lqr5Lit5pS26ZuGXFxcXG7ku4XkvpvmtYvor5XlkozlrabkuaDkuqTmtYFcXFxcblxcXFxu56Gu5a6a5Y2z6K6k5Y+v77yM5LiN5YaN5o+Q6YaSJyxcXG4gICAgICAgICAgICBjb25maXJtOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKFxcXCJpamstdHhcXFwiLCBcXFwiMVxcXCIpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/ngrnlh7vkuobnoa7orqRcXFwiXFxuXFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgIH1cXG4gICAgICovXFxufVxcbi8qXFxuaWYgKCFnZXRWYXIoXFxcInRpeGluZ1xcXCIpKSB7XFxuICAgIG16UG9wdXAoKTtcXG4gICAgcHV0VmFyKCd0aXhpbmcnLCdvaycpO1xcbn1cXG4qL1xcbmZ1bmN0aW9uIHNhdmVCdXR0b24oY29udGVudCxuYW1lKSB7XFxuICAgIG5hbWUgPSBuYW1lfHwnJztcXG4gICAgdmFyIGRhdGEgPSBjb250ZW50LnNwbGl0KCfimIXimIXimIUnKTtcXG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAyKSB7XFxuICAgICAgICB2YXIgX2R0ID0gcGFyc2VQYXN0ZShkYXRhWzBdKTtcXG4gICAgICAgIGNvbnRlbnQgPSBfZHQuc3Vic3RyKDAsIDYpICE9PSAnZXJyb3I6JyA/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/LC4qP1tcXFxcc10vZyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgaW4gamlleGkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZT1qaWV4aVtpXS5zcGxpdCgnLCcpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGU9amlleGlbaV0uc3BsaXQoJywnKVsxXS5zcGxpdChcXFwiXFxcXG5cXFwiKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKCEvXmh0dHB8ZnVuY3Rpb24vLnRlc3QoY29kZSkmJmNvZGUubGVuZ3RoPjIwKXsvL2Jhc2U2NOe8lueggeeahOWHveaVsFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUgPSBiYXNlNjREZWNvZGUoY29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlLnB1c2godGl0bGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb2RlW3RpdGxlXT0vZnVuY3Rpb24vLnRlc3QoY29kZSk/ZXZhbChjb2RlKTpjb2RlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocmV0Lm9wdD09PSdqeCcpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigvW1xcXFxTXSo/LGh0dHBbXFxcXFNdLy50ZXN0KHJldC5yZXQpKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IHJldC5yZXQuc3BsaXQoJywnKVswXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gcmV0LnJldC5zcGxpdCgnLCcpWzFdLnNwbGl0KCdcXFxcbicpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09Y29kZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoL15odHRwLy50ZXN0KHJldC5yZXQpKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IGNqTGluay5zcGxpdCgnIycpWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSByZXQucmV0LnNwbGl0KCdcXFxcbicpWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09Y29kZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pyq55+l55qE56aP5YipOlxcXFxuJytyZXQucmV0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocmV0Lm9wdD09PSd2aXBKeCcpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBjakxpbmsuc3BsaXQoJyMnKVsxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSByZXQucmV0O1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2coY29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09L2Z1bmN0aW9uLy50ZXN0KGNvZGUpP2V2YWwoY29kZSk6Y29kZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5LuT5bqT6Z2e5pyA5paw54mI5oiW6ICF56aP5Yip56S+5Yqf6IO95byA5Y+R5LitJ1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihjakxpbms9PT0n5pat5o+SJyl7XFxuICAgICAgICAgICAgICAgICAgICBldmFsKGZldGNoKFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzXFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZT1PYmplY3Qua2V5cyhQYXJzZVMpO1xcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZigvXmhpa2VyOlxcXFwvXFxcXC98XmZpbGU6XFxcXC9cXFxcL3xeaHR0cHxeXFxcXC9zdG9yYWdlXFxcXC98XlxcXFwvc2RjYXJkXFxcXC8vLnRlc3QoY2pMaW5rKSl7XFxuICAgICAgICAgICAgICAgICAgICBpZigvXlxcXFwvc3RvcmFnZVxcXFwvfF5cXFxcL3NkY2FyZFxcXFwvLy50ZXN0KGNqTGluaykpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNqTGluayA9ICdmaWxlOi8vJytjakxpbms7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBldmFsKGZldGNoKGNqTGluaykpO1xcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZT1PYmplY3Qua2V5cyhQYXJzZVMpO1xcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mi4nlj5blj6Pku6TmnInor68nXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgIGxvZyhlLm1lc3NhZ2UpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB2YXIganhKdWRnZSA9IHR5cGVvZiBQYXJzZVMgPT0gJ29iamVjdCc7XFxuICAgICAgICAgICAgdmFyIGxiSnVkZ2UgPSB0eXBlb2YocGFyc2VUaXRsZSkgPT0gJ29iamVjdCc7XFxuICAgICAgICAgICAgaWYgKGp4SnVkZ2UgfHwgbGJKdWRnZSkge1xcbiAgICAgICAgICAgICAgICAvLyBpZiAocHVsbE1vZGUgPT09ICfliJfooagnKSB7XFxuICAgICAgICAgICAgICAgIC8vICAgICBpZiAoIWxiSnVkZ2UpIHtcXG4gICAgICAgICAgICAgICAgLy8gICAgICAgICBwYXJzZVRpdGxlID0gT2JqZWN0LmtleXMoUGFyc2VTKTtcXG4gICAgICAgICAgICAgICAgLy8gICAgIH1cXG4gICAgICAgICAgICAgICAgLy8gICAgIHZhciBuZXdQYXJzZVRpdGxlID0ganNvbi50aXRsZS5jb25jYXQocGFyc2VUaXRsZSk7XFxuICAgICAgICAgICAgICAgIC8vICAgICBqc29uLnRpdGxlID0gQXJyYXkuZnJvbShuZXcgU2V0KG5ld1BhcnNlVGl0bGUpKTtcXG4gICAgICAgICAgICAgICAgLy8gfVxcbiAgICAgICAgICAgICAgICAvLyDkuI3nrqHmi4nlj5bku6PnoIHov5jmmK/liJfooajpg73opoHmiorliJfooajmi4nkuoZcXG4gICAgICAgICAgICAgICAgaWYgKCFsYkp1ZGdlKSB7XFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlID0gT2JqZWN0LmtleXMoUGFyc2VTKTtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhwYXJzZVRpdGxlKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB2YXIgc2NPYmplY3QgPSBbXFxcIkNpdHlJUFxcXCIsIFxcXCJwY1VBXFxcIiwgXFxcImNhY2hlTTN1OFxcXCIsXFxcImlzVmlkZW9cXFwiLCBcXFwiZGVmYXVsdFBhcnNlXFxcIixcXFwiZGVmYXVsdFBhcnNlV2ViXFxcIixcXFwibWFvc3NcXFwiLCBcXFwiTExRXFxcIixcXFwicGFyc2VMY1xcXCJdO1xcbiAgICAgICAgICAgICAgICBwYXJzZVRpdGxlID0gcGFyc2VUaXRsZT9wYXJzZVRpdGxlLmZpbHRlcihpdD0+IXNjT2JqZWN0LmluY2x1ZGVzKGl0KSk6W107XFxuICAgICAgICAgICAgICAgIHZhciBuZXdQYXJzZVRpdGxlID0ganNvbi50aXRsZS5jb25jYXQocGFyc2VUaXRsZSk7XFxuICAgICAgICAgICAgICAgIGpzb24udGl0bGUgPSBBcnJheS5mcm9tKG5ldyBTZXQobmV3UGFyc2VUaXRsZSkpO1xcblxcbiAgICAgICAgICAgICAgICBpZiAocHVsbE1vZGUgPT09ICfku6PnoIEnKSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9yaWdpbmFsUGFyc2VTID09ICdvYmplY3QnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSBpbiBzY09iamVjdCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUgb3JpZ2luYWxQYXJzZVNbc2NPYmplY3RbaV1dO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBvcmlnaW5hbFBhcnNlUyA9b3JpZ2luYWxQYXJzZVMuZmlsdGVyKGl0PT4hc2NPYmplY3QuaW5jbHVkZXMoT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoaXQpWzBdKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihqc29uLmNvZGVzLCBvcmlnaW5hbFBhcnNlUyk7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZihQYXJzZVMpPT1cXFwidW5kZWZpbmVkXFxcIil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oanNvbi5jb2RlcywgcGFyc2VDb2RlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9yZXR1cm4gXFxcInRvYXN0Oi8v5rKh5pyJ5Luj56CB77yM5LiN5Y+v5ouJ5Y+WXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKGpzb24uY29kZXMsIFBhcnNlUyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vdmFyIG5ld0ZpbGUgPSB0b29scy50b0pTT04oanNvbik7Ly/oh6rlrprkuYlzdHJpbmdpZnnlh73mlbDvvIzluKbmnInovazkuYnlrZfnrKZcXG4gICAgICAgICAgICAgICAgdmFyIG5ld0ZpbGUgPSAkLnN0cmluZ2lmeShqc29uKTsgLy9KU09OLnBhcnNl5Lya5oql6ZSZXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCBuZXdGaWxlKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ouJ5Y+WJyArIHB1bGxNb2RlICsgJ+aIkOWKnyc7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+acquiOt+WPluWIsOWvueixoSc7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwgW2ssIF9teVNldC5wYXJzZVJvdXRlXSlcXG4gICAgfSxcXG4gICAgcHVsbFNjcmlwdDogZnVuY3Rpb24oY2osIHg1KSB7XFxuICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcbiAgICAgICAgICAgIHZhciBjakZyb20gPSAnaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmpzP3J1bGU9TXlGaWVsZOG0sOKBvyc7XFxuICAgICAgICAgICAgdmFyIHg1RnJvbSA9ICdoaWtlcjovL3BhZ2UvUGFyc2VfRG4uaHRtbD9ydWxlPU15RmllbGThtLDigb8nO1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIHZhciBjakZpbGUgPSBKU09OLnBhcnNlKGZldGNoKGNqRnJvbSkpLnJ1bGU7XFxuICAgICAgICAgICAgICAgIHZhciB4NUZpbGUgPSBKU09OLnBhcnNlKGZldGNoKHg1RnJvbSkpLnJ1bGU7XFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShrWzBdLCBjakZpbGUpO1xcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoa1sxXSwgeDVGaWxlKTtcXG4gICAgICAgICAgICAgICAgY2xlYXJWYXIoJ2p4T2xkVicpO1xcbiAgICAgICAgICAgICAgICBjbGVhclZhcignanhOZXdWJyk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieWPluaIkOWKnyc7XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pyq5oiQ5Yqf6I635Y+W5YaF5a65JztcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCBbY2osIHg1XSlcXG4gICAgfSxcXG4gICAgeGxTZWxlY3Q6IGZ1bmN0aW9uKGJpYW5qaSwgbGJMZW5ndGgpIHtcXG4gICAgICAgIHJldHVybiBcXFwic2VsZWN0Oi8vXFxcIiArIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBvcHRpb25zOiBbJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXCJjb2xvcjpyZWRcXFwiIHRpdGxlPVxcXCLliKDpmaR8fCcgKyBiaWFuamkgKyAnXFxcIj7liKAg6ZmkJywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojRjU3NDc0XFxcIiB0aXRsZT1cXFwi6ZqQ6JePfHwnICsgYmlhbmppICsgJ1xcXCI+6ZqQIOiXjycsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6I0ZGODAwMFxcXCIgdGl0bGU9XFxcIuS/ruaUuXx8JyArIGJpYW5qaSArICdcXFwiPuS/riDmlLknLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcImNvbG9yOiMwOThBQzFcXFwiIHRpdGxlPVxcXCLnva7pobZ8fCcgKyBiaWFuamkgKyAnMCcgKyAnXFxcIj7nva4g6aG2JywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMDk4QUMxXFxcIiB0aXRsZT1cXFwi56e75YqofHwnICsgYmlhbmppICsgJ1xcXCI+56e7IOWKqCcsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzA5OEFDMVxcXCIgdGl0bGU9XFxcIue9ruW6lXx8JyArIGJpYW5qaSArIGxiTGVuZ3RoICsgJ1xcXCI+572uIOW6lScsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzA0QjQzMVxcXCIgdGl0bGU9XFxcIuWIhuS6q3x8JyArIGJpYW5qaSArICdcXFwiPuWcsOadv+WIhuS6qycsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzA0QjQzMVxcXCIgdGl0bGU9XFxcIuS6keWIhuS6q3x8JyArIGJpYW5qaSArICdcXFwiPuS6keadv+WIhuS6qyddLFxcbiAgICAgICAgICAgIGNvbDogJzInLFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXG4gICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxuICAgICAgICAgICAgICAgIHZhciBuZXdJbnB1dCA9IHBhcnNlRG9tRm9ySHRtbChpbnB1dCwgJ3NwYW4mJnRpdGxlJykuc3BsaXQoJ3x8Jyk7XFxuICAgICAgICAgICAgICAgIC8vIOS/ruaUuSzov6rov6osMCAgIOaTjeS9nOexu+WeiyzlkI3np7As57Si5byVXFxuICAgICAgICAgICAgICAgIHZhciB0eXBlID0gbmV3SW5wdXRbMF07XFxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gbmV3SW5wdXRbMV07XFxuICAgICAgICAgICAgICAgIHZhciBudW0gPSBuZXdJbnB1dFsyXTtcXG4gICAgICAgICAgICAgICAgdmFyIG51bTIgPSBuZXdJbnB1dFszXTtcXG4gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCLliKDpmaRcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrID0gW25hbWUsIG51bV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5oC75oSf6KeJ562b6YCJ5oiW6ICF5pCc57Si5ZCO77yM55Sx5LqObnVt55qE5L2N572u5LiN5a+55Y+v6IO95Lya5Yig6Zmk6ZSZLOS6i+WunuWmguatpCzlt7Lkv64/XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoXFxcIuWNs+WwhuWIoOmZpDogXFxcIiArIG5hbWUpLmNvbmZpcm0oKGspID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBrWzBdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbnVtID0ga1sxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzLmhhc093blByb3BlcnR5KG5hbWUpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUganNvbi5jb2Rlc1tuYW1lXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW0gPSBqc29uLnRpdGxlLmluZGV4T2YobmFtZSk7IC8v6L+Z5qC35omN5Lya5b6X5Yiw5q2j56Gu55qE57Si5byVXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKG51bSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3suWwhuOAllxcXCIgKyBuYW1lICsgXFxcIuOAl+WIoOmZpFxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgayk7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCLpmpDol49cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXCJoaWtlcjovL2VtcHR5I25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoaykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGtbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW0gPSBrWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uY29kZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bSA9IGpzb24udGl0bGUuaW5kZXhPZihuYW1lKTsgLy/ov5nmoLfmiY3kvJrlvpfliLDmraPnoa7nmoTntKLlvJVcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKG51bSwgMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgJC5zdHJpbmdpZnkoanNvbikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3suWwhuOAllxcXCIgKyBuYW1lICsgXFxcIuOAl+makOiXj1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Y+v6IO95piv5Liq572R5Z2ALCDmgqjlj6/pgInmi6nliKDpmaRcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW25hbWUsIG51bV0pO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwi5L+u5pS5XFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2lmIChqc29uLmNvZGVzW25hbWVdKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5Db2RlID0gbmFtZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgdGl0bGVzID0ganNvbi50aXRsZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbk5hbWUgPSBcXFwi6L+Z5piv5ZCN56ewXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5jb2Rlc1tuYW1lXSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuQ29kZSA9IGpzb24uY29kZXNbbmFtZV0udG9TdHJpbmcoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbk5hbWUgPSBuYW1lO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiaGlrZXI6Ly9lbXB0eSNub1JlY29yZEhpc3RvcnkjXFxcIikucnVsZSgoayx0aXRsZXMpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChnZXRJdGVtKCdteUZ1bmN0aW9uJykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGtbMF07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBjb2RlID0ga1sxXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5L+dIOWtmCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IHNhdmVCdXR0b24gKyBcXFwic2F2ZUJ1dHRvbihnZXRWYXIoJ2lucHV0X2VkaXQnKSxuYW1lKTtiYWNrKCk7XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIuW7uuiuruaMiem7mOiupOeahOS7o+eggeagvOW8j+S/ruaUueWTplxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0VmFyKCdpbnB1dF9lZGl0JywgaW5wdXQpXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcXFwidGV4dGFyZWFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlaWdodDogXFxcIi0xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogJ+S/ruaUueKYhScgKyBuYW1lICsgJ+KYhScgKyBjb2RlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojNkVCODk3XFxcIj7moLzlvI/kuLrvvJrmk43kvZznsbvlnovimIXmoIfpopjimIVmdW5jdGlvbigpe+iHquWumuS5ieWGheWuuX08YnI+6K+35Yu/5aGr5YWl5YW25LuW5qC85byPJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoc2F2ZUJ1dHRvbixuYW1lLHRpdGxlcykgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB0bXBBciA9IGdldFZhcignaW5wdXRfZWRpdCcpLnNwbGl0KCfimIUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0bXBBci5sZW5ndGg8Mil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kv67mlLnmoLzlvI/mnInor6/vvIzorr/pl67ooqvmi5Lnu50nXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdOYW1lID0gdG1wQXJbMV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobmV3TmFtZSE9PW5hbWUmJnRpdGxlcy5pbmNsdWRlcyhuZXdOYW1lKSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCfmo4DmtYvliLDlkIzlkI3mjqXlj6M6JytuZXdOYW1lKycs5piv5ZCm6KaG55uWPycpLmNvbmZpcm0oKHNhdmVCdXR0b24sbmFtZSk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gc2F2ZUJ1dHRvbihnZXRWYXIoJ2lucHV0X2VkaXQnKSxuYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhY2soKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv53lrZjkv67mlLlcXFxcbuivt+iHquihjOajgOa1i+imhuebluWQjueahOWGheWuuSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sc2F2ZUJ1dHRvbixuYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSBzYXZlQnV0dG9uKGdldFZhcignaW5wdXRfZWRpdCcpLG5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWNrKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv53lrZjkv67mlLknO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpZih0eXBlb2YoY29kZSk9PT0nc3RyaW5nJyYmY29kZS5sZW5ndGg+Mil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiBjb2RlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv53lrZjkv67mlLknO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIHNhdmVCdXR0b24sbmFtZSx0aXRsZXMpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJ+KAmOKAmOKAmeKAmTxiaWc+PGJpZz48c3BhbiBzdHlsZT1cXFwiY29sb3I6IzI5OEEwOFxcXCI+5L+dIOWtmCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW25OYW1lLCBuQ29kZV0sdGl0bGVzKSAvL1tuYW1lLCBqc29uLmNvZGVzW25hbWVdLnRvU3RyaW5nKCldKVxcbiAgICAgICAgICAgICAgICAgICAgLyp9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lj6rmnInnvZHlnYDmiJbogIXmoIfpopgsIOS4jeaUr+aMgeS/ruaUuVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH0qL1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwi572u6aG2XFxcIjpcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIue9ruW6lVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbnVtID0ganNvbi50aXRsZS5pbmRleE9mKG5hbWUpOyAvL+i/meagt+aJjeS8muW+l+WIsOato+ehrueahOe0ouW8lVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG51bT4tMSl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0ganNvbi50aXRsZS5zcGxpY2UobnVtLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbi50aXRsZS5zcGxpY2UobnVtMiwgMCwgaXRlbVswXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+ayoeaJvuWIsDonK25hbWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFwi56e75YqoXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdiaWFuamknLCAn56e75YqoIycgKyBrKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5wdXQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgbnVtKTtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcIuWIhuS6q1xcXCI6XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXCLkupHliIbkuqtcXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChqc29uLmNvZGVzW25hbWVdKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZVRleHQgPSB0eXBlb2YganNvbi5jb2Rlc1tuYW1lXSA9PSAnZnVuY3Rpb24nID8gJC5zdHJpbmdpZnkoanNvbi5jb2Rlc1tuYW1lXSkgOiBqc29uLmNvZGVzW25hbWVdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRleHQgPSAnTXlQYXJzZVPimIUnICsgbmFtZSArICfimIUnICsgYmFzZTY0RW5jb2RlKHBhcnNlVGV4dCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlVGV4dCA9ICfnm7Tpk77imIUnICsganNvbi50aXRsZVtudW1dO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodHlwZSA9PSAn5LqR5YiG5LqrJyAmJiBwYXJzZVRleHQuc3Vic3RyKDAsIDgpID09ICdNeVBhcnNlUycpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUZXh0ID0gc2hhcmVQYXN0ZShwYXJzZVRleHQpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VUZXh0LnN1YnN0cigwLCA2KSAhPSAnZXJyb3I6JyA/ICdjb3B5Oi8vJyArIHBhcnNlVGV4dCArICdcXFxcbuKYheKYheKYhVxcXFxuJyArICdNeVBhcnNlU++8micgKyBuYW1lIDogJ3RvYXN0Oi8v5YiG5Lqr5aSx6LSlISHkupHliarotLTmnb/lj6/og73mjILkuoYnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnY29weTovLycgKyBwYXJzZVRleHQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pqC5LiN5pSv5oyBJztcXG4gICAgICAgICAgICAgICAgfSAvL3N3aXRjaOeahFxcbiAgICAgICAgICAgIH0pIC8vU3RyaW5n55qEXFxuICAgICAgICB9KSAvL3N0cmluZ2lmeeeahFxcbiAgICB9LFxcbiAgICB4alBhcnNlOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIHJldHVybiAkKFxcXCJoaWtlcjovL2VtcHR5I25vSGlzdG9yeSNcXFwiKS5ydWxlKCgpID0+IHtcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcbiAgICAgICAgICAgIGV2YWwoZ2V0SXRlbSgnbXlGdW5jdGlvbicpKTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+S/nSDlrZgnLFxcbiAgICAgICAgICAgICAgICB1cmw6IHNhdmVCdXR0b24gKyBcXFwic2F2ZUJ1dHRvbihpbnB1dCk7YmFjaygpO2NsZWFyVmFyKCdpbnB1dF9hZGQnKVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFwi6L6T5YWl5q2j56Gu5qC85byP5YaF5a65XFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiAncHV0VmFyKFxcXCJpbnB1dF9hZGRcXFwiLCBpbnB1dCknLFxcbiAgICAgICAgICAgICAgICAgICAgdHlwZTogXFxcInRleHRhcmVhXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogXFxcIi0xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcignaW5wdXRfYWRkJyksXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxzbWFsbD48c3BhbiBzdHlsZT1cXFwiY29sb3I6IzZFQjg5N1xcXCI+5oyJ5o+P6L+w6K+J5qC85byP6L6T5YWlLCDor7fli7/loavlhaXlhbbku5bmoLzlvI88YnI+5pys5Zyw5Y+j5LukOiDmk43kvZznsbvlnovimIXlkI3np7DimIXku6PnoIE8YnI+5LqR5Y+j5LukOiDpk77mjqXimIXimIXimIXlkI3np7A7IOe6r+e9keWdgDog55u06ZO+4piFdXJsMeKYhXVybDInLFxcbiAgICAgICAgICAgICAgICBkZXNjOiAn4oCY4oCY4oCZ4oCZPGJpZz48YmlnPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojMjk4QTA4XFxcIj7kv50g5a2YJyxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCdub0xvYWRpbmcnKS5sYXp5UnVsZSgoc2F2ZUJ1dHRvbikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNhdmVCdXR0b24oZ2V0VmFyKCdpbnB1dF9hZGQnKSk7XFxuICAgICAgICAgICAgICAgIH0sIHNhdmVCdXR0b24pLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgfSlcXG4gICAgfSxcXG4gICAgeWRQYXJzZTogZnVuY3Rpb24oQkptb2RlLCBpKSB7XFxuICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xcbiAgICAgICAgICAgIHZhciBBID0ga1swXS5zcGxpdCgnIycpWzFdO1xcbiAgICAgICAgICAgIHZhciBCID0ga1sxXTtcXG4gICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcbiAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcbiAgICAgICAgICAgIHZhciBpdGVtID0ganNvbi50aXRsZS5zcGxpY2UoQSwgMSk7IC8vIDE6IOagh+iusOW8gOWni+S9jee9ru+8jDI6IOWIoOmZpOWIsOWTquS4quS9jee9rlxcbiAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKEIsIDAsIGl0ZW1bMF0pOyAvLyAxOiDlkIzkuIrvvIwyOiAw6KGo56S65LiN5Yig6Zmk77yMMzog5re75Yqg5a+56LGhXFxuICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXG4gICAgICAgICAgICBjbGVhclZhcignYmlhbmppJyk7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICB9LCBbQkptb2RlLCBpXSlcXG4gICAgfSxcXG4gICAgcGxzY1BhcnNlOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSMnKS5ydWxlKCgpID0+IHtcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn5om56YeP5L+u5pS5L+WIoOmZpOino+aekCcsXFxuICAgICAgICAgICAgICAgIGRlc2M6ICdhdXRvJiZmbG9hdCcsXFxuICAgICAgICAgICAgICAgIC8vIHVybDogJ2ZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL2NhY2hlL3Bsc2NQYXJzZS5odG1sJyxcXG4gICAgICAgICAgICAgICAgdXJsOiBfbXlTZXQuYmF0Y2hSb3V0ZSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd4NV93ZWJ2aWV3X3NpbmdsZSdcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgICAgIH0pXFxuICAgIH1cXG59O1xcblxcbmZ1bmN0aW9uIHNldFBhcnNlKCkge1xcbiAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb9cXFwiKS5zZXRQYXJzZSgpO1xcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuiwg+eUqOi3r+eUsVwiLFwicGF0aFwiOlwiUm91dGVcIixcInJ1bGVcIjpcImpzOlxcbmNvbnN0IGQgPSBbXTtcXG5jb25zdCBkYXRhID0ge307XFxuXFxuZGF0YS5vbGRDb25maWcgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFwiO1xcbmRhdGEuY2pSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzXFxcIjtcXG5kYXRhLng1Um91dGUgPVxcbmdldFBhdGgoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uaHRtbCcpO1xcblxcbmRhdGEuanhMYXp5ID0gXFxcImV2YWwoJ3ZhciBjb25maWcgPScgKyBmZXRjaCgnXFxcIiArIGRhdGEub2xkQ29uZmlnICsgXFxcIicpKTtldmFsKGZldGNoKGNvbmZpZy5jaikpO2F5dG1QYXJzZShpbnB1dClcXFwiO1xcblxcbmRhdGEuc3pQYXJzZSA9IFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXCI7XFxuXFxuZGF0YS5zZXRQYXJzZSA9IGZ1bmN0aW9uKCkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgZGVzYzogJzc5NScsXFxuICAgICAgICB1cmw6IHRoaXMueDVSb3V0ZSxcXG4gICAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnXFxuICAgIH0pO1xcbiAgICB2YXIgb2xkViA9IGdldFZhcignanhPbGRWJyk7XFxuICAgIHZhciBuZXdWID0gZ2V0VmFyKCdqeE5ld1YnKTtcXG4gICAgdmFyIHZlcnNpb25UaXBzID0gcGFyc2VGbG9hdChuZXdWKSA+IHBhcnNlRmxvYXQob2xkVikgPyAn4oCY4oCY5pyJ5paw54mI5pysOiB2JyArIG5ld1YgOiAn4oCY4oCYJztcXG4gICAgdmFyIHBpY3MgPSBbXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9zZW92eC0yMC0xMCUyMCg5MikuanBnJyxcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL21vbTIwMTglMjAoMjA3KS5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vdHZhNC5zaW5haW1nLmNuL2xhcmdlLzliZDliMTY3Z3kxZndyaDV4b2x0ZGoyMWhjMHUwdGF4LmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly90dmExLnNpbmFpbWcuY24vbGFyZ2UvMDA1QllxcGdneTFmd3JleXU0bmw2ajMxaGMwdTBhaHIuanBnJyxcXG4gICAgICAgICdodHRwczovL3MzLmJtcC5vdmgvaW1ncy8yMDIxLzEwL2Q3ZTYwYjk5MDc0MjA5M2QuanBlZycsXFxuICAgICAgICAnaHR0cHM6Ly9zMy5ibXAub3ZoL2ltZ3MvMjAyMS8xMC85MWFkNmQ2NTM4YmY4Njg5LmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly90dmExLnNpbmFpbWcuY24vbGFyZ2UvMDA1QllxcGdneTFmd3Jlc2w1cG1sajMxaGMweGN3a2EuanBnJyxcXG4gICAgICAgICdodHRwczovL3R2YTMuc2luYWltZy5jbi9sYXJnZS8wMDVCWXFwZ2d5MWZ3cmdqZGs3NG9qMzFoYzB1MGRxbi5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnNlb3Z4LmNvbS9pbWcvbW9tMjAxOCUyMCgzMjApLmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9tb20yMDE4JTIwKDgwMykuanBnJ1xcbiAgICBdO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgaW1nOiBwaWNzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwKV0sXFxuICAgICAgICB0aXRsZTogdmVyc2lvblRpcHMgKyAn4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojNkVCODk3XFxcIj48YnI+44CA44CA54K55Ye75LiK5pa55aS05YOP6L+b5YWl57yW6L6RPGJyPueCueatpOi/m+WFpeiuuuWdm+W4luWtkOWIl+ihqCcsXFxuICAgICAgICBkZXNjOiAn5b2T5YmN54mI5pysOiB2JyArIG9sZFYsXFxuICAgICAgICB1cmw6ICdodHRwczovL2hhaWt1b3NoaWppZS5jbi91c2VyLzE5NTgnLFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xJ1xcbiAgICB9KTtcXG4gIHNldFJlc3VsdChkKTtcXG59XFxuXFxuc3dpdGNoIChnZXRQYXJhbShcXFwidHlwZVxcXCIpKSB7XFxuICAgIGNhc2UgXFxcIuiuvue9rlxcXCI6XFxuICAgICAgICBkYXRhLnNldFBhcnNlKCk7XFxuICAgICAgICAvL3NldFJlc3VsdChkKTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlIFxcXCLnvJbovpFcXFwiOlxcbiAgICAgICAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvanhJdGVtP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLmp4TGlzdCgpO1xcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgYnJlYWs7XFxuXFx0Y2FzZSBcXFwi5Li76aKYXFxcIjpcXG5cXHQgICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3RoZW1lP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLnRoZW1lSW5pdCgpO1xcbiAgICAgICAgYnJlYWs7XFxuXFx0Y2FzZSBcXFwi6Kej5p6QXFxcIjpcXG5cXHQgICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2p4TWFuYWdlP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLmp4TWFuYWdlKCk7XFxuICAgICAgICBicmVhaztcXG4gICAgZGVmYXVsdDpcXG4gICAgICAgICQuZXhwb3J0cyA9IGRhdGE7XFxuICAgICAgICBicmVhaztcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLop6PmnpDpobnkuLvnlYzpnaJcIixcInBhdGhcIjpcImp4SXRlbVwiLFwicnVsZVwiOlwiZXZhbChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL3BhZ2UvUGFyc2VfRG4uanM/cnVsZT1NeUZpZWxk4bSw4oG/JykpLnJ1bGUpO1xcbnZhciBpc0xvZ2luID0gZnVuY3Rpb24gKCl7cmV0dXJuIHRydWV9XFxuZnVuY3Rpb24gYmJzWVooKSB7XFxuICAgIHZhciBfMHg0N2E5YjQgPSB7XFxuICAgICAgICAnSnhTTW4nOiBmdW5jdGlvbihfMHgyNDk5NTIsIF8weDRhYmMxNSkge1xcbiAgICAgICAgICAgIHJldHVybiBfMHgyNDk5NTIgKyBfMHg0YWJjMTU7XFxuICAgICAgICB9LFxcbiAgICAgICAgJ0xHd21DJzogJ+enu+WKqCMnLFxcbiAgICAgICAgJ0d2RFZZJzogZnVuY3Rpb24oXzB4NDYxZjJkLCBfMHg1NDA1NzEpIHtcXG4gICAgICAgICAgICByZXR1cm4gXzB4NDYxZjJkICsgXzB4NTQwNTcxO1xcbiAgICAgICAgfSxcXG4gICAgICAgICdXZmVIRCc6ICfigJjigJjigJnigJk8c21hbGw+PHNwYW4gc3R5bGU9XFxcImNvbG9yOiNGRTlBMkVcXFwiPicsXFxuICAgICAgICAnRXFJbHMnOiAn56e75YqoOiAnLFxcbiAgICAgICAgJ0VmZmJuJzogJ3RleHRfMicsXFxuICAgICAgICAnUnhreEEnOiBmdW5jdGlvbihfMHgzMmE3ZDAsIF8weDFhOTMyYykge1xcbiAgICAgICAgICAgIHJldHVybiBfMHgzMmE3ZDAoXzB4MWE5MzJjKTtcXG4gICAgICAgIH0sXFxuICAgICAgICAnVkJHSkgnOiAnamRSb3V0ZScsXFxuICAgICAgICAnQlpnUnQnOiBmdW5jdGlvbihfMHgyNjk4NGUsIF8weDVjYzkyNikge1xcbiAgICAgICAgICAgIHJldHVybiBfMHgyNjk4NGUgPT09IF8weDVjYzkyNjtcXG4gICAgICAgIH0sXFxuICAgICAgICAncmdHQ0MnOiAnd0RWRWInLFxcbiAgICAgICAgJ01jek9XJzogZnVuY3Rpb24oXzB4Mjg4MGJmLCBfMHgyZDkzMDYsIF8weDk3Nzg3YSkge1xcbiAgICAgICAgICAgIHJldHVybiBfMHgyODgwYmYoXzB4MmQ5MzA2LCBfMHg5Nzc4N2EpO1xcbiAgICAgICAgfSxcXG4gICAgICAgICdGVWpkbSc6ICdiYnNZWicsXFxuICAgICAgICAnbHFGaGInOiBmdW5jdGlvbihfMHg0M2JiZTYpIHtcXG4gICAgICAgICAgICByZXR1cm4gXzB4NDNiYmU2KCk7XFxuICAgICAgICB9LFxcbiAgICAgICAgJ0ZVUnB5JzogZnVuY3Rpb24oXzB4MjI2NWMyLCBfMHhhMWQ1NjgsIF8weDI5ZGUwMSkge1xcbiAgICAgICAgICAgIHJldHVybiBfMHgyMjY1YzIoXzB4YTFkNTY4LCBfMHgyOWRlMDEpO1xcbiAgICAgICAgfSxcXG4gICAgICAgICdYSU9iQic6ICd2YXIgeGRSb3V0ZT1cXFxcXFxcIlxcXFxcXFwiOydcXG4gICAgfTtcXG4gICAgaWYgKCFfMHg0N2E5YjRbJ1J4a3hBJ10oZ2V0VmFyLCBfMHg0N2E5YjRbJ1ZCR0pIJ10pKSB7XFxuICAgICAgICBpZiAoXzB4NDdhOWI0WydCWmdSdCddKF8weDQ3YTliNFsncmdHQ0MnXSwgJ0pWa0FaJykpIHtcXG4gICAgICAgICAgICBkWydwdXNoJ10oe1xcbiAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg0N2E5YjRbJ0p4U01uJ10oXzB4NDdhOWI0WydMR3dtQyddLCBpKSA9PSBCSm1vZGUgPyBfMHg0N2E5YjRbJ0p4U01uJ10oXzB4NDdhOWI0WydHdkRWWSddKF8weDQ3YTliNFsnV2ZlSEQnXSwgXzB4NDdhOWI0WydFcUlscyddKSwgeHNMaXN0KSA6ICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFwiY29sb3I6IzI5OEEwOFxcXCI+JyArIHhzTGlzdCxcXG4gICAgICAgICAgICAgICAgJ3VybCc6IGJqSXRlbVsneWRQYXJzZSddKEJKbW9kZSwgaSksXFxuICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDQ3YTliNFsnRWZmYm4nXVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBfMHg0N2E5YjRbJ01jek9XJ10ocHV0VmFyLCBfMHg0N2E5YjRbJ0ZVamRtJ10sIF8weDQ3YTliNFsnbHFGaGInXShpc0xvZ2lufHxmdW5jdGlvbiAoKXtyZXR1cm4gdHJ1ZX0pKTtcXG4gICAgICAgICAgICBfMHg0N2E5YjRbJ0ZVUnB5J10ocHV0VmFyLCAnamRSb3V0ZScsIF8weDQ3YTliNFsnWElPYkInXSk7XFxuICAgICAgICB9XFxuICAgIH1cXG4gICAgcmV0dXJuIGdldFZhcihfMHg0N2E5YjRbJ0ZVamRtJ10pO1xcbn1cXG52YXIganhJdGVtID0ge1xcbiAgICAnanhMaXN0JzogZnVuY3Rpb24oKSB7XFxuICAgICAgICB2YXIgXzB4NGMwNDI3ID0ge1xcbiAgICAgICAgICAgICdVVldvRic6IGZ1bmN0aW9uKF8weDI2YmIwNywgXzB4MjIxYjRkKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHgyNmJiMDcgKyBfMHgyMjFiNGQ7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAnY29sb3InOmZ1bmN0aW9uKHRleHQsIGNvbG9yKSB7XFxuICAgICAgICAgICAgICAgIHRleHQgKz0gXFxcIlxcXCI7XFxuICAgICAgICAgICAgICAgIGlmICh0ZXh0LmluZGV4T2YoXFxcIuKAnOKAnOKAneKAnVxcXCIpID09PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICB0ZXh0LnJlcGxhY2UoXFxcIuKAnOKAnOKAneKAnVxcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSdcXFwiICsgY29sb3IgKyBcXFwiJz5cXFwiICsgdGV4dCArIFxcXCI8L2ZvbnQ+XFxcIjtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICdreldESyc6IGZ1bmN0aW9uKF8weDQ4NTRhOSwgXzB4M2U5OGM1KSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHg0ODU0YTkgKyBfMHgzZTk4YzU7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAnWFh5UXInOiAn56e75YqoIycsXFxuICAgICAgICAgICAgJ2d0VW5qJzogZnVuY3Rpb24oXzB4NTlhYWY3LCBfMHgyMmM2NmIpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDU5YWFmNyArIF8weDIyYzY2YjtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICdVdGZXZic6ICfigJjigJjigJnigJk8c21hbGw+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojRkU5QTJFXFxcXFxcXCI+JyxcXG4gICAgICAgICAgICAnUU92SlYnOiAn56e75YqoOiAnLFxcbiAgICAgICAgICAgICdBQkV3Qic6ICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiMyOThBMDhcXFxcXFxcIj4nLFxcbiAgICAgICAgICAgICdvenpXRyc6ICd0ZXh0XzInLFxcbiAgICAgICAgICAgICduV2ZWUic6IGZ1bmN0aW9uKF8weDQ4MGYzYSwgXzB4NGM4NGZjKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHg0ODBmM2EgKyBfMHg0Yzg0ZmM7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAnSkNjTlknOiAncGFyc2VSb3V0ZScsXFxuICAgICAgICAgICAgJ3JnRElwJzogJ2JpYW5qaScsXFxuICAgICAgICAgICAgJ2hvSWRKJzogJ+KAmOKAmOKAmeKAmTxiaWc+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojNkVCODk3XFxcXFxcXCI+5pawIOW7uiDop6Mg5p6QJyxcXG4gICAgICAgICAgICAnRnJHT0gnOiBmdW5jdGlvbihfMHgxMmQ2ZGIsIF8weDJhMDY4ZCkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4MTJkNmRiIDwgXzB4MmEwNjhkO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgJ29DQ1NqJzogZnVuY3Rpb24oXzB4MTliMTc4LCBfMHg0ZWY4ZjYpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDE5YjE3OCA9PT0gXzB4NGVmOGY2O1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgJ0haaGxjJzogZnVuY3Rpb24oXzB4NWNhZTAzLCBfMHgyNmUyNDIpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDVjYWUwMyA9PSBfMHgyNmUyNDI7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAnY2dJZUEnOiBmdW5jdGlvbihfMHgyNWUzNjgsIF8weDhiYzhlOSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4MjVlMzY4ICsgXzB4OGJjOGU5O1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgJ3hkckZ2JzogZnVuY3Rpb24oXzB4NGFiNWQ4LCBfMHgyMTI0MmYpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDRhYjVkOCArIF8weDIxMjQyZjtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICd5d2p1eCc6IGZ1bmN0aW9uKF8weDVlMzA1MSwgXzB4NGUwMjMwKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHg1ZTMwNTEoXzB4NGUwMjMwKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9O1xcbiAgICAgICAgdmFyIF8weDFkOGJiMSA9IGdldFZhcihfMHg0YzA0MjdbJ0pDY05ZJ10pO1xcbiAgICAgICAgdmFyIF8weDNiODlhYiA9IHBhcnNlRmlsZVsndGl0bGUnXTtcXG4gICAgICAgIHZhciBfMHg0OWRhOTYgPSBnZXRWYXIoXzB4NGMwNDI3WydyZ0RJcCddKTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IF8weDRjMDQyN1snaG9JZEonXSxcXG4gICAgICAgICAgICBkZXNjOifms6jmhI865L2N572u5pON5L2c5Yqf6IO95Y+q5Zyo5YiG57G7562b6YCJ5Li65YWo6YOo5pe255Sf5pWIXFxcXG7kuIvmlrnmkJzntKLmjInlkI3np7DmiJblnLDlnYAs6YeN572u6K+355WZ56m65oiW54K56Kej5p6Q5pWw6YeP5oyJ6ZKuJyxcXG4gICAgICAgICAgICB1cmw6IGJqSXRlbVsneGpQYXJzZSddKCksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTpmYWxzZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTon5pCc57SiJyxcXG4gICAgICAgICAgICBkZXNjOidtZW5neCcsXFxuICAgICAgICAgICAgY29sX3R5cGU6J2lucHV0JyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBvbkNoYW5nZTogXFxcInB1dFZhcignZHAuc2VhcmNoSngnLGlucHV0KVxcXCIsXFxuICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogdHJ1ZSxcXG4gICAgICAgICAgICAgICAgdGV4dFNpemU6IDExLFxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6Z2V0VmFyKCdkcC5zZWFyY2hKeCcsJycpLFxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgdXJsOiQudG9TdHJpbmcoKCk9PntcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSk7XFxuICAgICAgICBsZXQgZmlsdGVycyA9IFsn5YWo6YOoJywn6ZO+5o6lJywnanNvbicsJ+WFjeWXhSddO1xcbiAgICAgICAgZm9yKGxldCBvIGluIGZpbHRlcnMpe1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOmdldFZhcignZG4uanhfZmlsdGVyJywn5YWo6YOoJyk9PT1maWx0ZXJzW29dPyfigJzigJzigJ3igJ08c3BhbiBzdHlsZT1cXFwiY29sb3I6IzI5OEEwOFxcXCI+JytmaWx0ZXJzW29dOmZpbHRlcnNbb10sXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGl0KT0+e1xcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdkbi5qeF9maWx0ZXInLGl0KTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICB9LGZpbHRlcnNbb10pLFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgdmFyIF8weDJlY2JlNSA9IF8weDNiODlhYlsnbGVuZ3RoJ107XFxuICAgICAgICB2YXIganNvbj17dGl0bGU6W10sY29kZXM6e319O1xcbiAgICAgICAgbGV0IHNldEZpbGUgPSByZXF1ZXN0KCdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicpO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBldmFsKCdqc29uPScrc2V0RmlsZSk7XFxuICAgICAgICB9Y2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICBsb2coJ0pzb27op6PmnpDlj5HnlJ/kuobplJnor686JytlLm1lc3NhZ2UpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYoZ2V0VmFyKCdkbi5qeF9maWx0ZXInLCflhajpg6gnKT09PSfpk77mjqUnKXtcXG4gICAgICAgICAgICBfMHgzYjg5YWIgPSBfMHgzYjg5YWIuZmlsdGVyKGl0PT4oIS/CqSQvLnRlc3QoaXQpKSYmdHlwZW9mKGpzb24uY29kZXNbXzB4NGMwNDI3WyduV2ZWUiddKGl0LCAnJylbJ3JlcGxhY2UnXSgvaHR0cC4qXFxcXC9cXFxcLy9nLCAnJyldKT09PSdzdHJpbmcnKTtcXG4gICAgICAgIH1lbHNlIGlmKGdldFZhcignZG4uanhfZmlsdGVyJywn5YWo6YOoJyk9PT0n5YWN5ZeFJyl7XFxuICAgICAgICAgICAgXzB4M2I4OWFiID0gXzB4M2I4OWFiLmZpbHRlcihpdD0+dHlwZW9mKGpzb24uY29kZXNbXzB4NGMwNDI3WyduV2ZWUiddKGl0LCAnJylbJ3JlcGxhY2UnXSgvaHR0cC4qXFxcXC9cXFxcLy9nLCAnJyldKT09PSdmdW5jdGlvbicpO1xcbiAgICAgICAgfWVsc2UgaWYoZ2V0VmFyKCdkbi5qeF9maWx0ZXInLCflhajpg6gnKT09PSdqc29uJyl7XFxuICAgICAgICAgICAgXzB4M2I4OWFiID0gXzB4M2I4OWFiLmZpbHRlcihpdD0+KC/CqSQvLnRlc3QoaXQpKSYmdHlwZW9mKGpzb24uY29kZXNbXzB4NGMwNDI3WyduV2ZWUiddKGl0LCAnJylbJ3JlcGxhY2UnXSgvaHR0cC4qXFxcXC9cXFxcLy9nLCAnJyldKT09PSdzdHJpbmcnKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmKGdldFZhcignZHAuc2VhcmNoSngnLCcnKSl7XFxuICAgICAgICAgICAgXzB4M2I4OWFiID0gXzB4M2I4OWFiLmZpbHRlcihpdD0+KGpzb24uY29kZXNbXzB4NGMwNDI3WyduV2ZWUiddKGl0LCAnJyldKycnKS5pbmNsdWRlcyhnZXRWYXIoJ2RwLnNlYXJjaEp4JykpfHxpdC5pbmNsdWRlcyhnZXRWYXIoJ2RwLnNlYXJjaEp4JywnJykpKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6XFxcIuino+aekOaVsDpcXFwiK18weDRjMDQyNy5jb2xvcihfMHgzYjg5YWIubGVuZ3RoLCcjZmY3MDAwJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6XFxcInNjcm9sbF9idXR0b25cXFwiLFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpPT57XFxuICAgICAgICAgICAgICAgIGNsZWFyVmFyKCdkcC5zZWFyY2hKeCcpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3sumHjee9ridcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSk7XFxuICAgICAgICAvLyDkuIvpnaLmmK/op6PmnpDliJfooajmjpLliJdcXG4gICAgICAgIC8vIGZvciAodmFyIF8weGUyYzNkOCA9IDB4MDsgXzB4NGMwNDI3WydGckdPSCddKF8weGUyYzNkOCwgXzB4MmVjYmU1KTsgXzB4ZTJjM2Q4KyspIHtcXG4gICAgICAgIGZvciAobGV0IF8weGUyYzNkOCBpbiBfMHgzYjg5YWIpIHtcXG4gICAgICAgICAgICB2YXIgXzB4MzM3ODhjID0gXzB4M2I4OWFiW18weGUyYzNkOF07XFxuICAgICAgICAgICAgdmFyIF8weDM3ODcxZSA9IF8weDRjMDQyN1snbldmVlInXShfMHgzMzc4OGMsICcnKVsncmVwbGFjZSddKC9odHRwLipcXFxcL1xcXFwvL2csICcnKTtcXG4gICAgICAgICAgICBpZiAoL+enu+WKqC8gWyd0ZXN0J10oXzB4NDlkYTk2KSkge1xcbiAgICAgICAgICAgICAgICBpZiAoXzB4NGMwNDI3WydvQ0NTaiddKCd1S0x4RicsICd1S0x4RicpKSB7XFxuICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDRjMDQyN1snSFpobGMnXShfMHg0YzA0MjdbJ1hYeVFyJ10gKyBfMHhlMmMzZDgsIF8weDQ5ZGE5NikgPyBfMHg0YzA0MjdbJ25XZlZSJ10oXzB4NGMwNDI3WydjZ0llQSddKF8weDRjMDQyN1snVXRmV2YnXSwgXzB4NGMwNDI3WydRT3ZKViddKSwgXzB4Mzc4NzFlKSA6IF8weDRjMDQyN1snY2dJZUEnXShfMHg0YzA0MjdbJ0FCRXdCJ10sIF8weDM3ODcxZSksXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6IGJqSXRlbVsneWRQYXJzZSddKF8weDQ5ZGE5NiwgXzB4ZTJjM2Q4KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiAndGV4dF8yJ1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgXzB4MmJjNjE4ID0gXzB4M2I4OWFiW18weGUyYzNkOF07XFxuICAgICAgICAgICAgICAgICAgICB2YXIgXzB4NWNmNDE3ID0gXzB4NGMwNDI3WydVVldvRiddKF8weDJiYzYxOCwgJycpWydyZXBsYWNlJ10oL2h0dHAuKlxcXFwvXFxcXC8vZywgJycpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKC/np7vliqgvIFsndGVzdCddKF8weDQ5ZGE5NikpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg0YzA0MjdbJ2t6V0RLJ10oXzB4NGMwNDI3WydYWHlRciddLCBfMHhlMmMzZDgpID09IF8weDQ5ZGE5NiA/IF8weDRjMDQyN1snZ3RVbmonXShfMHg0YzA0MjdbJ2d0VW5qJ10oXzB4NGMwNDI3WydVdGZXZiddLCBfMHg0YzA0MjdbJ1FPdkpWJ10pLCBfMHg1Y2Y0MTcpIDogXzB4NGMwNDI3WydBQkV3QiddICsgXzB4NWNmNDE3LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWyd5ZFBhcnNlJ10oXzB4NDlkYTk2LCBfMHhlMmMzZDgpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg0YzA0MjdbJ296eldHJ11cXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF8weDExOTM2NSA9IFtfMHgyYmM2MTgsIF8weDRjMDQyN1snZ3RVbmonXShfMHhlMmMzZDgsICd8fCcpXVsnam9pbiddKCd8fCcpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDRjMDQyN1snbldmVlInXShfMHg0YzA0MjdbJ0FCRXdCJ10sIF8weDVjZjQxNyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDRjMDQyN1snb3p6V0cnXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6IGJqSXRlbVsneGxTZWxlY3QnXShfMHgxMTkzNjUsIF8weDJlY2JlNVsndG9TdHJpbmcnXSgpKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdmFyIF8weGI3MDE5MiA9IFtfMHgzMzc4OGMsIF8weGUyYzNkOCArICd8fCddWydqb2luJ10oJ3x8Jyk7XFxuICAgICAgICAgICAgICAgIC8vIOi/qui/quW9semZonx8MHx8ICDlkI3np7B8fOe0ouW8lSDnmoTmlbDnu4RcXG4gICAgICAgICAgICAgICAgLy8gQUJFd0Ig5piv57u/6ImyIF8weDM3ODcxZSDmmK/moIfpopjlkI3np7AgIHhkckZ25piv5a2X56ym5Liy6L+e5o6l5Ye95pWwXFxuICAgICAgICAgICAgICAgIC8vIGxldCBmbGFnID0gJ+KAmOKAmOKTiuKAmeKAmSc7XFxuICAgICAgICAgICAgICAgIGxldCBmbGFnID0gXzB4NGMwNDI3LmNvbG9yKCfik4onLCcjMDA1MWZmJyk7XFxuICAgICAgICAgICAgICAgIGlmKHR5cGVvZihqc29uLmNvZGVzW18weDM3ODcxZV0pPT09J2Z1bmN0aW9uJyl7XFxuICAgICAgICAgICAgICAgICAgICAvLyBmbGFnID0gJ+KAnOKAnOKSv+KAneKAnSc7XFxuICAgICAgICAgICAgICAgICAgICBmbGFnID0gXzB4NGMwNDI3LmNvbG9yKCfikr8nLCcjZmY3MDAwJyk7XFxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZihqc29uLmNvZGVzW18weDM3ODcxZV0pPT09J3VuZGVmaW5lZCcpe1xcbiAgICAgICAgICAgICAgICAgICAgZmxhZyA9ICcnO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vIGxldCBjbHMgPSAnPHNwYW4gc3R5bGU9XFxcImNvbG9yOiMyOThBMDhcXFwiPic7XFxuICAgICAgICAgICAgICAgIC8vIGxldCB0aXRsZSA9IF8weDRjMDQyN1sneGRyRnYnXShfMHg0YzA0MjdbJ0FCRXdCJ10sIGZsYWcrXzB4Mzc4NzFlKTtcXG4gICAgICAgICAgICAgICAgLy8gbGV0IHRpdGxlID0gZmxhZytjbHMrXzB4Mzc4NzFlO1xcbiAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBmbGFnK18weDRjMDQyNy5jb2xvcihfMHgzNzg3MWUsJyMyOThBMDgnKTtcXG4gICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXG4gICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IHRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgLy8gJ3RpdGxlJzogXzB4Mzc4NzFlLFxcbiAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NGMwNDI3WydvenpXRyddLFxcbiAgICAgICAgICAgICAgICAgICAgJ3VybCc6IGJqSXRlbVsneGxTZWxlY3QnXShfMHhiNzAxOTIsIF8weDJlY2JlNVsndG9TdHJpbmcnXSgpKVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBfMHg0YzA0MjdbJ3l3anV4J10oY2xlYXJWYXIsIF8weDRjMDQyN1sncmdESXAnXSk7XFxuICAgIH0sXFxuICAgICdscUZpbGUnOiBmdW5jdGlvbigpIHtcXG4gICAgICAgIHZhciBfMHg1NDFkNzYgPSB7XFxuICAgICAgICAgICAgJ2FXaVJzJzogZnVuY3Rpb24oXzB4NDhkNzdiLCBfMHgxOTE2MWYsIF8weDIxY2I4NSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NDhkNzdiKF8weDE5MTYxZiwgXzB4MjFjYjg1KTtcXG4gICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICd3U2Zueic6IGZ1bmN0aW9uKF8weDQ4NTBlYSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NDg1MGVhKCk7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAncVJRZEEnOiAnamRSb3V0ZScsXFxuICAgICAgICAgICAgJ1dRaXFrJzogJ3ZhciB4ZFJvdXRlPVxcXCJcXFwiOycsXFxuICAgICAgICAgICAgJ3BzR2R0JzogZnVuY3Rpb24oXzB4MTcwNzgwLCBfMHgzYjUxMmEpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDE3MDc4MCA9PSBfMHgzYjUxMmE7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAnaW14cmknOiAndHJ1ZScsXFxuICAgICAgICAgICAgJ25Ta2p4JzogZnVuY3Rpb24oXzB4OTViZjM4LCBfMHgzMTNmMjUpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDk1YmYzOCAhPT0gXzB4MzEzZjI1O1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgJ2lWTmVNJzogJ2VlTEptJyxcXG4gICAgICAgICAgICAnSXdNVGwnOiAnMHwxfDV8OXwxMXwzfDZ8N3wxMHw0fDJ8OCcsXFxuICAgICAgICAgICAgJ3hmZEhrJzogJ+aLieWPluS4u+aPkuS7tuWSjOe9kemhteiEmuacrCcsXFxuICAgICAgICAgICAgJ3JHTHVBJzogJ+S4u+aPkuS7tuWtmOaUvui3r+W+hDogL2NhY2hlL1BhcnNlX0RuLmpzXFxcXHgwYee9kemhteiEmuacrOWtmOaUvui3r+W+hDogL2NhY2hlL1BhcnNlX0RuLmh0bWwnLFxcbiAgICAgICAgICAgICd6UVNMRSc6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgICAgICAgICAnaHZpRGwnOiBmdW5jdGlvbihfMHgyNmRiNjIsIF8weDMxMmYxYykge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4MjZkYjYyKF8weDMxMmYxYyk7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAnWnhVZ3QnOiAn5pON5L2c5oyH5byVJyxcXG4gICAgICAgICAgICAnc1dGb2MnOiBmdW5jdGlvbihfMHgyYTA0NGIsIF8weDE0OWEzZikge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4MmEwNDRiICsgXzB4MTQ5YTNmO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgJ09FaGF0JzogJ+aLieWPluS7o+eggScsXFxuICAgICAgICAgICAgJ1p2dFN1JzogJ+e8lui+keino+aekCcsXFxuICAgICAgICAgICAgJ2dYS01iJzogJ3RvYXN0Oi8v6K+35YWI5ouJ5Y+W5YiX6KGoJyxcXG4gICAgICAgICAgICAnV0NPREMnOiBmdW5jdGlvbihfMHg0YWQzZDUsIF8weDMxZmExZSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NGFkM2Q1IDwgXzB4MzFmYTFlO1xcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgJ3JBa0FoJzogJ3RleHRfMycsXFxuICAgICAgICAgICAgJ3lXYU9JJzogJ+aBouWkjeaPkuS7tui3r+W+hOS4uum7mOiupCcsXFxuICAgICAgICAgICAgJ3lqeWpLJzogJ+W9k+WJjeiuvue9ruS4ujogJyxcXG4gICAgICAgICAgICAndEhYZUUnOiAn5ouJ5Y+W6Kej5p6Q5YiX6KGo5oiW6ICF6Kej5p6Q5Luj56CBJyxcXG4gICAgICAgICAgICAnR01VWXUnOiAn5a2Y5pS+6Lev5b6EOiAvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJyxcXG4gICAgICAgICAgICAnbXBaQlonOiAnbGluZV9ibGFuaycsXFxuICAgICAgICAgICAgJ3h2cWdGJzogJ+i+k+WFpeacieaViOaPkuS7tuWcsOWdgCcsXFxuICAgICAgICAgICAgJ2hldUt4JzogJ3B1dFZhcihcXFwicGx1Z2luTGlua1xcXCIsaW5wdXQpJyxcXG4gICAgICAgICAgICAnSWlmaWEnOiAn4oCY4oCY4oCZ4oCZPHN0cm9uZz48YmlnPueZu+W9leaPkOekuicsXFxuICAgICAgICAgICAgJ1BGUkhBJzogJ+S9v+eUqOebuOWFs+WKn+iDvemcgOeZu+W9leinhueVjOiuuuWdm+i0puWPt1xcXFxu5aaC5pyJ6Zeu6aKY5YmN5b6A6K665Z2b5LqG6Kej6K+m5oOFJyxcXG4gICAgICAgICAgICAnVUx3a1QnOiAnaHR0cHM6Ly9oYWlrdW9zaGlqaWUuY24vdXNlci9zaWduaW4nXFxuICAgICAgICB9O1xcbiAgICAgICAgaWYgKF8weDU0MWQ3NlsncHNHZHQnXShfMHg1NDFkNzZbJ3dTZm56J10oYmJzWVopLCBfMHg1NDFkNzZbJ2lteHJpJ10pKSB7XFxuICAgICAgICAgICAgaWYgKF8weDU0MWQ3NlsnblNrangnXShfMHg1NDFkNzZbJ2lWTmVNJ10sIF8weDU0MWQ3NlsnaVZOZU0nXSkpIHtcXG4gICAgICAgICAgICAgICAgXzB4NTQxZDc2WydhV2lScyddKHB1dFZhciwgJ2Jic1laJywgXzB4NTQxZDc2Wyd3U2ZueiddKGlzTG9naW4pfHxmdW5jdGlvbiAoKXtyZXR1cm4gdHJ1ZX0pO1xcbiAgICAgICAgICAgICAgICBfMHg1NDFkNzZbJ2FXaVJzJ10ocHV0VmFyLCBfMHg1NDFkNzZbJ3FSUWRBJ10sIF8weDU0MWQ3NlsnV1FpcWsnXSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdmFyIF8weDRkMjVmZiA9IF8weDU0MWQ3NlsnSXdNVGwnXVsnc3BsaXQnXSgnfCcpLFxcbiAgICAgICAgICAgICAgICAgICAgXzB4NGE5N2M5ID0gMHgwO1xcbiAgICAgICAgICAgICAgICB3aGlsZSAoISFbXSkge1xcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChfMHg0ZDI1ZmZbXzB4NGE5N2M5KytdKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg1NDFkNzZbJ3hmZEhrJ10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWydwdWxsU2NyaXB0J10oX215U2V0WydjamNhY2hlJ10sIF9teVNldFsneDVjYWNoZSddKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXNjJzogXzB4NTQxZDc2WydyR0x1QSddLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NTQxZDc2Wyd6UVNMRSddXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcxJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXzB4NTQxZDc2WydodmlEbCddKGV2YWwsIF8weDU0MWQ3NlsnaHZpRGwnXShnZXRWYXIsIF8weDU0MWQ3NlsncVJRZEEnXSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcyJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6ICdsaW5lX2JsYW5rJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMyc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfMHgyYWIzOTkgPSAnaGlrZXI6Ly9lbXB0eSNub0hpc3RvcnkjQHJ1bGU9anM6dGhpcy5kPVtdOyQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2p4SXRlbT9ydWxlPU15RmllbGThtLDigb9cXFwiKS5qeExpc3QoKTtzZXRSZXN1bHQoZCk7JztcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg1NDFkNzZbJ1p4VWd0J10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogdHlwZW9mIGN6R3VpZGUgPT0gJ2Z1bmN0aW9uJyA/IGN6R3VpZGUoKSA6ICcnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NTQxZDc2Wyd6UVNMRSddXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc1JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGRSb3V0ZSA9IF8weDU0MWQ3Nlsnc1dGb2MnXSh4ZFJvdXRlLCBfbXlTZXRbJ3BhcnNlUm91dGUnXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzYnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgXzB4M2E5YWZlID0gW3tcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6ICfmi4nlj5bliJfooagnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6IGJqSXRlbVsncHVsbENvZGUnXSgn5YiX6KGoJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4NTQxZDc2WydPRWhhdCddLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6IGJqSXRlbVsncHVsbENvZGUnXSgn5Luj56CBJylcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4NTQxZDc2WydadnRTdSddLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6IF8weDU0MWQ3NlsnaHZpRGwnXShmaWxlRXhpc3QsIF8weDU0MWQ3NlsnaHZpRGwnXShnZXRWYXIsICdwYXJzZVJvdXRlJykpID09ICEhW10gPyBfMHgyYWIzOTkgOiBfMHg1NDFkNzZbJ2dYS01iJ11cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfV07XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzcnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfMHgxYTJjZGIgPSAweDA7IF8weDU0MWQ3NlsnV0NPREMnXShfMHgxYTJjZGIsIF8weDNhOWFmZVsnbGVuZ3RoJ10pOyBfMHgxYTJjZGIrKykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHgzYTlhZmVbXzB4MWEyY2RiXVsndGl0bGUnXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogXzB4M2E5YWZlW18weDFhMmNkYl1bJ3VybCddLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDU0MWQ3NlsnckFrQWgnXVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnOCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg1NDFkNzZbJ3lXYU9JJ10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWydoZlBsdWdpbiddKF9teVNldFsncGFyc2VSb3V0ZSddKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXNjJzogXzB4NTQxZDc2WydzV0ZvYyddKF8weDU0MWQ3NlsneWp5aksnXSArIG15U2V0WydjaiddLCAnXFxcXG7lrZjmlL7ot6/lvoQ6IC9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDU0MWQ3NlsnelFTTEUnXVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnOSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg1NDFkNzZbJ3RIWGVFJ10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogJ3RvYXN0Oi8v6K+35Zyo5LiL5pa56YCJ6aG55pON5L2cJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXNjJzogXzB4NTQxZDc2WydHTVVZdSddLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NTQxZDc2Wyd6UVNMRSddXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICcxMCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg1NDFkNzZbJ21wWkJaJ11cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzExJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXNjJzogXzB4NTQxZDc2Wyd4dnFnRiddLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogJ2lucHV0JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdleHRyYSc6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGVWaXNpYmxlJzogIVtdLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZWZhdWx0VmFsdWUnOiBfMHg1NDFkNzZbJ2h2aURsJ10oZ2V0VmFyLCAncGx1Z2luTGluaycpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdvbkNoYW5nZSc6IF8weDU0MWQ3NlsnaGV1S3gnXVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgZFsncHVzaCddKHtcXG4gICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4NTQxZDc2WydJaWZpYSddLFxcbiAgICAgICAgICAgICAgICAnZGVzYyc6IF8weDU0MWQ3NlsnUEZSSEEnXSxcXG4gICAgICAgICAgICAgICAgJ3VybCc6IF8weDU0MWQ3NlsnVUx3a1QnXSxcXG4gICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NTQxZDc2Wyd6UVNMRSddXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgIH1cXG59O1xcbiQuZXhwb3J0cyA9IGp4SXRlbTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuino+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+V5pWw5o2uXCIsXCJwYXRoXCI6XCJkZW1vRGF0YVwiLFwicnVsZVwiOlwianM6XFxuICAgIGxldCBkZW1vRGF0YSA9IHtcXG4gICAgICAgIOeIseWlh+iJujpbJ2h0dHBzOi8vd3d3LmlxaXlpLmNvbS92XzF6cDdxZ2gyM2tnLmh0bWwnLCdodHRwczovL3d3dy5pcWl5aS5jb20vdl8yYmM4dGs4cjZ1Zy5odG1sJ10sXFxuICAgICAgICDkvJjphbc6WydodHRwczovL3YueW91a3UuY29tL3Zfc2hvdy9pZF9YTlRFNE5UZ3hNVFkyTUE9PS5odG1sJywnaHR0cHM6Ly92LnlvdWt1LmNvbS92X3Nob3cvaWRfWE5URTVPRFl4TWpBek5nPT0uaHRtbCddLFxcbiAgICAgICAg6IW+6K6vOlsnaHR0cHM6Ly92LnFxLmNvbS94L2NvdmVyL200NDFlM3JqcTlrd3BzYy9wMDA0MGdpbTRmei5odG1sJywnaHR0cHM6Ly92LnFxLmNvbS94L2NvdmVyL216YzAwMjAweGg5MzEzdi96MDAzOXRiaG83cS5odG1sJ10sXFxuICAgICAgICDoipLmnpw6WydodHRwczovL3d3dy5tZ3R2LmNvbS9iLzM3MjA2MS8xMjE5MzU1OC5odG1sJywnaHR0cHM6Ly93d3cubWd0di5jb20vYi8zNjMyODYvMTQyOTU4MjMuaHRtbCddLFxcbiAgICAgICAg5ZOU5ZOp5ZOU5ZOpOlsnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL2Jhbmd1bWkvcGxheS9lcDM4MTIxNycsJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9iYW5ndW1pL3BsYXkvZXA0MDgxMjMnLCdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vYmFuZ3VtaS9wbGF5L3NzMzM0MzQnLCdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vdmlkZW8vYXYzMzYzNDg2NjMnXSxcXG4gICAgICAgIOaQnOeLkDpbJ2h0dHBzOi8vZmlsbS5zb2h1LmNvbS9hbGJ1bS85NDU3NTg0Lmh0bWwnLCdodHRwczovL2ZpbG0uc29odS5jb20vYWxidW0vOTE4MjY0Ni5odG1sJ10sXFxuICAgICAgICDopb/nk5w6WydodHRwczovL3d3dy5peGlndWEuY29tLzY1NTEzMzIxMjU2NTQ2NDczMTAnLCdodHRwczovL3d3dy5peGlndWEuY29tLzY2OTkzNTY3OTI5MDU3OTQwNTUnXSxcXG4gICAgICAgIFBQVFY6WydodHRwOi8vdi5wcHR2LmNvbS9zaG93L1RJbmRXc0lvbU5ZNXR4OC5odG1sJywnaHR0cDovL3YucHB0di5jb20vc2hvdy9TQ1E1dGg2RTlES1ZFM3MuaHRtbCddLFxcbiAgICAgICAg5ZKq5ZKVOlsnaHR0cHM6Ly93d3cubWlndXZpZGVvLmNvbS9tZ3Mvd2Vic2l0ZS9wcmQvZGV0YWlsLmh0bWw/Y2lkPTYzMzUxMTc0MycsJ2h0dHBzOi8vd3d3Lm1pZ3V2aWRlby5jb20vbWdzL3dlYnNpdGUvcHJkL2RldGFpbC5odG1sP2NpZD03MTYyNzAzMTknXSxcXG4gICAgICAgIOS5kOinhjpbJ2h0dHA6Ly93d3cubGUuY29tL3B0di92cGxheS83NTg0MzA1OS5odG1sJywnaHR0cDovL3d3dy5sZS5jb20vcHR2L3ZwbGF5LzI0MjIwOTAxLmh0bWwjdmlkPTI0MjIwOTAxJ10sXFxuICAgICAgICAxOTA1OlsnaHR0cHM6Ly92aXAuMTkwNS5jb20vcGxheS84NzU3NDAuc2h0bWwnLCdodHRwczovL3d3dy4xOTA1LmNvbS92b2QvcGxheS84ODA2NDEuc2h0bWwnXSxcXG4gICAgICAgIOmjjuihjDpbJ2h0dHA6Ly93d3cuZnVuLnR2L3ZwbGF5L2ctMzA0MTQzJywnaHR0cDovL3d3dy5mdW4udHYvdnBsYXkvZy0xMDA4OTYzLyddLFxcbiAgICAgICAg6b6Z6IW+OlsnTFQtMWVjM2Y2NzU0ZjY4NTg2ZWQ3ZjkyYzNlOTk1Y2ZjYTYnLCdMVC1mZmY0N2FiZjdmZjIyZmZhM2RlZjkwNGM2YzkxZTE5MicsJ0xULTdjY2RhNjg2ODMzMjk3ODBiZDcyNjRjOGY5ZWRkOTBlJ10sXFxuICAgICAgICDkurrkurrov7c6WydyZW5yZW5taS1hYjkyNGUxMWQyZDY5Mzk3JywncmVucmVubWktOTI2NDBlOGRjNGNhZDgzYSddLFxcbiAgICAgICAg5LqU5q+SOlsnd3VkdXl1bi0xNjQ5NDMxMzA3MDIxJ10sXFxuICAgICAgICDlpJrlpJo6WydodHRwczovL20zdTguY2FjaGUuc3VveW8uY2MvbTN1OC8yMDIyMDMvOC9hYWFiZDkyZGEyNjc3NGM2ODg1MGEwMjMxNTNjODBmMWFlNmZhOWJlLm0zdTgnXSxcXG4gICAgICAgIOiejeWFtDpbJ1JvbmdYaW5nVlItNDIxNTY0NTU4MTkzMicsJ1JvbmdYaW5nVlItNDIxNTY0NTU4NzAwMCddLFxcbiAgICAgICAg6Zuq5Lq6OlsneHVlcmVuLTE2NDY4MjMwNzInLCd4dWVyZW4tMTY0OTQwMjc1MycsJ3h1ZXJlbi0xNjQ5MTc1MjUyJywneHVlcmVuLTE2NDkzMDc3ODAnLCd4dWVyZW4tMTY0ODc4MTQ3NSddLFxcbiAgICAgICAg5peL6aOO5LqROlsneGZ5LTUyOWU2NDU3OTUzZDU0NWYnLCd4ZnktYjY1NjE1ZGFjNDM3N2VlMyddLFxcbiAgICAgICAg55Ge5Liw6LWE5rqQOlsnaHR0cHM6Ly8xLnJ1aWZlbmdsYi5jb20vcGxheS8xNjQ0OTE0NTk1Lm0zdTgnLCdodHRwczovLzEucnVpZmVuZ2xiLmNvbS9wbGF5LzE2NDIzODk5MDcubTN1OCddLFxcbiAgICB9XFxuXFxubGV0IGRlZmF1bHRTZXRzID0gIHtcXG4gICAgcXk6ICfkuIfog73op6PmnpDikr8nLFxcbiAgICB5azogJ+S4h+iDveino+aekOKSvycsXFxuICAgIHR4OiAn5LiH6IO96Kej5p6Q4pK/JyxcXG4gICAgbWc6ICfkuIfog73op6PmnpDikr8nLFxcbiAgICBibDogJ+S4h+iDveino+aekOKSvycsXFxuICAgIHNoOiAn5LiH6IO96Kej5p6Q4pK/JyxcXG4gICAgeGc6ICfkuIfog73op6PmnpDikr8nLFxcbiAgICBhbDogJ+S4h+iDveino+aekOKSvycsXFxuICAgIHBwOiAn5LiH6IO96Kej5p6Q4pK/JyxcXG4gICAgbWk6ICfkuIfog73op6PmnpDikr8nLFxcbiAgICBsZTogJ+S4h+iDveino+aekOKSvycsXFxuICAgIG90aDogJ+mBk+mVv+S7k+W6k+mAmuWFjScsXFxuICAgIGZ1bjogJ+S4h+iDveino+aekOKSvycsXFxuICAgIG9uZTon5LiH6IO96Kej5p6Q4pK/JyxcXG4gICAgbHQ6J+S4h+iDveino+aekOKSvycsXFxuICAgIHJyOifkuIfog73op6PmnpDikr8nLFxcbiAgICB3ZDon5LiH6IO96Kej5p6Q4pK/JyxcXG4gICAgcWp1OiAn6buY6K6kJyxcXG4gICAgY2o6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJ1xcbn07XFxuXFxubGV0IGZsb29ycyA9ICfikaDikaHikaLikaPikaTikaXikabikafikajikanvvJHvvJLvvJPvvJTvvJXvvJbvvJfvvJjvvJnvvJDikojikonikorikovikoziko3iko7iko/ikpAnLnNwbGl0KCcnKTtcXG5sZXQgZW1vamlzID0gJyPvuI/ig6N8Ku+4j+KDo3ww77iP4oOjfDHvuI/ig6N8Mu+4j+KDo3wz77iP4oOjfDTvuI/ig6N8Ne+4j+KDo3w277iP4oOjfDfvuI/ig6N8OO+4j+KDo3w577iP4oOjfPCfhbDvuI988J+Fse+4j3zwn42HfPCfjYh88J+NiXzwn42KfPCfjYt88J+NjHzwn42NfPCfjY588J+Nj3zwn42QfPCfjZF88J+Nknzwn42TfPCfjYV88J+Nhnzwn4y9fPCfjYR88J+MsHzwn42efPCfjZZ88J+Nl3zwn42UfPCfjZ988J+NlXzwn42zfPCfjbJ88J+NsXzwn42YfPCfjZl88J+Nmnzwn42bfPCfjZx88J+NnXzwn42gfPCfjaJ88J+No3zwn42kfPCfjaV88J+NoXzwn42mfPCfjad88J+NqHzwn42pfPCfjap88J+Ognzwn42wfPCfjat88J+NrHzwn42tfPCfja588J+Nr3zwn428fOKYlXzwn421fPCfjbZ88J+Nt3zwn424fPCfjbl88J+Nunzwn427fPCfjbQnLnNwbGl0KCd8Jyk7XFxuZmxvb3JzID0gZmxvb3JzLmNvbmNhdChlbW9qaXMpO1xcbiQuZXhwb3J0cy5kZW1vRGF0YSA9IGRlbW9EYXRhO1xcbiQuZXhwb3J0cy5kZWZhdWx0U2V0cyA9IGRlZmF1bHRTZXRzO1xcbiQuZXhwb3J0cy5mbG9vcnMgPSBmbG9vcnM7XCJ9LHtcIm5hbWVcIjpcIuW3peWFt+exu1wiLFwicGF0aFwiOlwidXRpbHNcIixcInJ1bGVcIjpcImpzOlxcbi8v6ZqP5py65LuO5YiX6KGo5oq95Y+W5LiA5Liq5YWD57SgXFxuZnVuY3Rpb24gZ2V0T25lKGl0cykge3JldHVybiAgaXRzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSppdHMubGVuZ3RoKV07fVxcbi8v5Y676YeN77yIRVM2IFNldO+8iVxcbmZ1bmN0aW9uIHVuaXF1ZTIoYXJyYXkpe1xcbiAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGFycmF5KSk7XFxufVxcbi8v6I635Y+W5YiX6KGo5Lit6YeN5aSN6YO95YC8XFxuZnVuY3Rpb24gZHVwbGljYXRlcyhhcnIpIHtcXG4gICAgbGV0IHJlcz1hcnIuZmlsdGVyKCh4LGspPT57XFxuICAgICAgICBsZXQgYT1rKjErMTtcXG4gICAgICAgIGxldCBpbmRleD1hcnIuaW5kZXhPZih4LGEpO1xcbiAgICAgICAgaWYoaW5kZXg+LTEpe1xcbiAgICAgICAgICAgIHJldHVybiB4O1xcbiAgICAgICAgfVxcbiAgICB9KVxcbiAgICBsZXQgcmU9bmV3IFNldChyZXMpO1xcbiAgICByZXR1cm4gQXJyYXkuZnJvbShyZSk7XFxufVxcbiQuZXhwb3J0cy5nZXRPbmUgPSBnZXRPbmU7XFxuJC5leHBvcnRzLnVuaXF1ZTIgPSB1bmlxdWUyO1xcbiQuZXhwb3J0cy5kdXBsaWNhdGVzID0gZHVwbGljYXRlcztcIn0se1wibmFtZVwiOlwi6Kej5p6Q566h55CGXCIsXCJwYXRoXCI6XCJqeE1hbmFnZVwiLFwicnVsZVwiOlwianM6XFxuICAgIGZ1bmN0aW9uIGp4TWFuYWdlKCl7XFxuICAgICAgICBjb25zdCB7Y29sb3Isc21hbGx9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5P3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcIik7XFxuICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBbJ+mAieaLqScsJ+S/ruaUuScsJ+WIoOmZpCcsJ+WvvOWHuiddO1xcblxcbiAgICAgICAgZm9yKGxldCBpIGluIG9wdGlvbnMpe1xcbiAgICAgICAgICAgIGxldCBvcHRpb24gPSBvcHRpb25zW2ldO1xcbiAgICAgICAgICAgIGxldCBmbGFnID0gZ2V0VmFyKCdkbi5qeG1fb3B0aW9uJywn6YCJ5oupJyk9PT1vcHRpb24/J/CfkYknOicnO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOmZsYWcrb3B0aW9uLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChvcHRpb24pPT57XFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RuLmp4bV9vcHRpb24nLCBvcHRpb24pO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknO1xcbiAgICAgICAgICAgICAgICB9LG9wdGlvbiksXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgICAgICBsZXQganhzUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeUppZXhpLmpzb25cXFwiO1xcbiAgICAgICAgbGV0IGRtUGF0aCA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL2RpYW9tYW8udHh0XFxcIjtcXG4gICAgICAgIGxldCBNeUppZXhpID0ge2ppZXhpczpbXX07XFxuICAgICAgICBsZXQgamlleGlzID0ge307XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIE15SmlleGkgPSBKU09OLnBhcnNlKGZldGNoKGp4c1JvdXRlKSk7XFxuICAgICAgICAgICAgamlleGlzID0gTXlKaWV4aS5qaWV4aXMuZmlsdGVyKGl0PT5pdC5uYW1lPT09TXlKaWV4aS5ub3cpWzBdO1xcbiAgICAgICAgfWNhdGNoIChlKSB7fVxcblxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTon5a+85YWlJyxcXG4gICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICAgICAgdXJsOiQoJycsJ+ivt+i+k+WFpeWvvOWFpeWPo+S7pCcpLmlucHV0KChNeUppZXhpLGp4c1JvdXRlKT0+e1xcbiAgICAgICAgICAgICAgICBpZigvXumtlOaWreino+aekOmFjee9rkAuKj9AaHR0cC8udGVzdChpbnB1dCkpe1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5hbWUgPSBpbnB1dC5zcGxpdCgnQCcpWzFdO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IGlucHV0LnNwbGl0KCdAJylbMl07XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgn56Gu5a6a6KaB5a+85YWl5pat5o+S6Kej5p6Q6YWN572uLScrbmFtZSsnIOWQlz8nKS5jb25maXJtKChuYW1lLHVybCxNeUppZXhpLGp4c1JvdXRlKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gcGFyc2VQYXN0ZSh1cmwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoYXNJdCA9IE15SmlleGkuamlleGlzLmZpbHRlcihpdD0+aXQubmFtZT09PW5hbWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGhhc0l0JiZoYXNJdC5sZW5ndGg+MCl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZCA9IG51bGw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaiBpbiBNeUppZXhpLmppZXhpcyl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihNeUppZXhpLmppZXhpc1tqXS5uYW1lID09PSBuYW1lKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGo7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIWlkKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ntKLlvJXplJnor6/ml6Dms5Xopobnm5blr7zlhaU6XFxcXG4nK2lkXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKCfopobnm5blr7zlhaXkuLvpophpZDonK2lkKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdID0gT2JqZWN0LmFzc2lnbihKU09OLnBhcnNlKGJhc2U2NERlY29kZShjb250ZW50KSkseyduYW1lJzpuYW1lfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzLnB1c2goT2JqZWN0LmFzc2lnbihKU09OLnBhcnNlKGJhc2U2NERlY29kZShjb250ZW50KSkseyduYW1lJzpuYW1lfSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LmiJDlip/lr7zlhaXop6PmnpDphY3nva46XFxcXG4nK25hbWVcXG4gICAgICAgICAgICAgICAgICAgIH0sbmFtZSx1cmwsTXlKaWV4aSxqeHNSb3V0ZSk7XFxuICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aXoOazleivhuWIq+eahOWvvOWFpeWPo+S7pDpcXFxcbicraW5wdXQ7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LE15SmlleGksanhzUm91dGUpLFxcbiAgICAgICAgfSk7XFxuXFxuICAgICAgICBsZXQgaXNBdXRvID0gTXlKaWV4aS5pc0F1dG87XFxuICAgICAgICBsZXQgYXV0b01vZGUgPSBNeUppZXhpLmF1dG9Nb2RlO1xcbiAgICAgICAgbGV0IHNpbmdsZUJhY2sgPSBNeUppZXhpLnNpbmdsZUJhY2t8fGZhbHNlOyAvL+WQiuavm+aooeW8j+OAguWNleS4que7k+aenOebtOaOpei/lOWbnu+8jOWBnOatouWQjumdoueahFxcbiAgICAgICAgbGV0IHRpcHMgPSAn6Kej5p6Q6YWN572u5YiX6KGoOuWFseiuoTonK2NvbG9yKE15SmlleGkuamlleGlzLmxlbmd0aCwnI2ZmNzAwMCcpKyfkuKrphY3nva4s6Ieq5Yqo5qGj5byA5YWzOicrY29sb3IoaXNBdXRvPyflvIAnOiflhbMnLCcjZmY3MDAwJyk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOk15SmlleGkuamlleGlzJiZNeUppZXhpLmppZXhpcy5sZW5ndGg+MD90aXBzOlxcXCLnrKzkuIDmrKHliqDovb3vvIzngrnmraTov5vljrvliJ3lp4vljJbop6PmnpDliJfooahcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChNeUppZXhpLGp4c1JvdXRlKT0+e1xcbiAgICAgICAgICAgICAgICBpZihNeUppZXhpLmppZXhpcyYmTXlKaWV4aS5qaWV4aXMubGVuZ3RoPjApe1xcbiAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5pc0F1dG8gPSAhTXlKaWV4aS5pc0F1dG87XFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgdGlwcyA9IE15SmlleGkuaXNBdXRvPyflvIAnOiflhbMnO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suiuvue9ruiHquWKqOaho+aooeW8j+S4ujonK3RpcHNcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgaW5pdFNldCA9IHsnbm93JzpcXFwi6YGT6ZW/5o6o6I2QXFxcIiwnamlleGlzJzpbe25hbWU6J+mBk+mVv+aOqOiNkCcscXk6WyfkuIfog73op6PmnpDikr8nXSx5azpbJ+S4h+iDveino+aekOKSvyddLHR4Olsn5LiH6IO96Kej5p6Q4pK/J10sbWc6WyfkuIfog73op6PmnpDikr8nXSxibDpbJ+S4h+iDveino+aekOKSvyddLHNoOlsn5LiH6IO96Kej5p6Q4pK/J10seGc6WyfkuIfog73op6PmnpDikr8nXSxwcDpbJ+S4h+iDveino+aekOKSvyddLG1pOlsn5LiH6IO96Kej5p6Q4pK/J10sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxlOlsn5LiH6IO96Kej5p6Q4pK/J10sZnVuOlsn5LiH6IO96Kej5p6Q4pK/J10sb25lOlsn5LiH6IO96Kej5p6Q4pK/J10sbHQ6WyfkuIfog73op6PmnpDikr8nXSxycjpbJ+S4h+iDveino+aekOKSvyddLHdkOlsn5LiH6IO96Kej5p6Q4pK/J119XX07XFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoaW5pdFNldCkpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S6Kej5p6Q6YWN572u5bey5Yid5aeL5YyWJ1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSxNeUppZXhpLGp4c1JvdXRlKVxcbiAgICAgICAgfSk7XFxuICAgICAgICBsZXQgYXV0b01vZGVUaXBzID0gYXV0b01vZGU9PT0n6YCf5bqm5LyY5YWIJz8n6YCf5bqm5LyY5YWIJzon6aG65bqP5LyY5YWIJztcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6c21hbGwoXFxcIuWkh+iDjuWuoOW5uOaWueahiDpcXFwiKStjb2xvcihhdXRvTW9kZVRpcHMsJyNmZjcwMDAnKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTondGV4dF8yJyxcXG4gICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoTXlKaWV4aSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgTXlKaWV4aS5hdXRvTW9kZSA9IE15SmlleGkuYXV0b01vZGU9PT0n6YCf5bqm5LyY5YWIJz8n6aG65bqP5LyY5YWIJzon6YCf5bqm5LyY5YWIJztcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lorr7nva7lpIfog47lrqDlubjmlrnmoYjkuLo6JytNeUppZXhpLmF1dG9Nb2RlXFxuICAgICAgICAgICAgfSxNeUppZXhpLGp4c1JvdXRlKVxcbiAgICAgICAgfSk7XFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOmNvbG9yKFxcXCLmgaLlpI3lh7rljoLorr7nva5cXFwiLCcjZmY3MDAwJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMicsXFxuICAgICAgICAgICAgdXJsOiQoXFxcIuWmguaenOS9oOeahOino+aekOeuoeeQhuaXoOazleato+W4uOeUqOS6hu+8jOatpOaWueazleWPr+S7peaVkeeglu+8jOehruiupOaBouWkjT9cXFwiKS5jb25maXJtKChqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgbGV0IGluaXRTZXQgPSB7J25vdyc6XFxcIumBk+mVv+aOqOiNkFxcXCIsJ2ppZXhpcyc6W3tuYW1lOifpgZPplb/mjqjojZAnLHF5Olsn5LiH6IO96Kej5p6Q4pK/J10seWs6WyfkuIfog73op6PmnpDikr8nXSx0eDpbJ+S4h+iDveino+aekOKSvyddLG1nOlsn5LiH6IO96Kej5p6Q4pK/J10sYmw6WyfkuIfog73op6PmnpDikr8nXSxzaDpbJ+S4h+iDveino+aekOKSvyddLHhnOlsn5LiH6IO96Kej5p6Q4pK/J10scHA6WyfkuIfog73op6PmnpDikr8nXSxtaTpbJ+S4h+iDveino+aekOKSvyddLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxlOlsn5LiH6IO96Kej5p6Q4pK/J10sZnVuOlsn5LiH6IO96Kej5p6Q4pK/J10sb25lOlsn5LiH6IO96Kej5p6Q4pK/J10sbHQ6WyfkuIfog73op6PmnpDikr8nXSxycjpbJ+S4h+iDveino+aekOKSvyddLHdkOlsn5LiH6IO96Kej5p6Q4pK/J119XX07XFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShpbml0U2V0KSk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S6Kej5p6Q6YWN572u5bey6YeN572u5Li65Ye65Y6C6K6+572uJ1xcbiAgICAgICAgICAgIH0sanhzUm91dGUpXFxuICAgICAgICB9KTtcXG5cXG4gICAgICAgIGxldCBjYWNoZVZpZGVvU3dpdGNoID0gZ2V0VmFyKCdkcC5jYWNoZVZpZGVvJywndHJ1ZScpPT09J3RydWUnPyflvIAnOiflhbMnO1xcbiAgICAgICAgbGV0IGp4VGltZW91dCA9IGdldFZhcignZHAuanhUaW1lb3V0JywnNzAwMCcpO1xcbiAgICAgICAgbGV0IGNvbF90eXBlMiA9IGF1dG9Nb2RlPT09J+mhuuW6j+S8mOWFiCc/J3RleHRfMyc6J3RleHRfMic7XFxuICAgICAgICBsZXQgc2luZ2xlQmFja1RpcHMgPSBzaW5nbGVCYWNrPyflvIAnOiflhbMnO1xcbiAgICAgICAgaWYoYXV0b01vZGU9PT0n6aG65bqP5LyY5YWIJyl7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6c21hbGwoJ+WQiuavm+aooeW8jzonKStjb2xvcihzaW5nbGVCYWNrVGlwcywnI2ZmNzAwMCcpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTpjb2xfdHlwZTIsXFxuICAgICAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChNeUppZXhpLGp4c1JvdXRlKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5zaW5nbGVCYWNrID0gIShNeUppZXhpLnNpbmdsZUJhY2t8fGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lorr7nva7lkIrmr5vmqKHlvI/lvIDlhbPkuLo6JysoTXlKaWV4aS5zaW5nbGVCYWNrPyflvIAnOiflhbMnKVxcbiAgICAgICAgICAgICAgICB9LE15SmlleGksanhzUm91dGUpXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOnNtYWxsKCflpJrnur/ot6/nvJPlrZg6JykrY29sb3IoY2FjaGVWaWRlb1N3aXRjaCwnI2ZmNzAwMCcpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOmNvbF90eXBlMixcXG4gICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoY2FjaGVWaWRlb1N3aXRjaCk9PntcXG4gICAgICAgICAgICAgICAgaWYoY2FjaGVWaWRlb1N3aXRjaD09PSflvIAnKXtcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcignZHAuY2FjaGVWaWRlbycsJ2ZhbHNlJyk7XFxuICAgICAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdkcC5jYWNoZVZpZGVvJywndHJ1ZScpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICAgICAgfSxjYWNoZVZpZGVvU3dpdGNoKVxcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOnNtYWxsKCfop6PmnpDotoXml7Y6JykrY29sb3IoanhUaW1lb3V0LCcjZmY3MDAwJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6Y29sX3R5cGUyLFxcbiAgICAgICAgICAgIHVybDokKGp4VGltZW91dCwn6K+36K6+572u6a2U5pat6Kej5p6Q6LaF5pe2LOW/hemhu+S4uuaVtOaVsCcpLmlucHV0KCgpPT57XFxuICAgICAgICAgICAgICAgIGlmKCFwYXJzZUludChpbnB1dCkpe1xcbiAgICAgICAgICAgICAgICAgICAgaW5wdXQgPSA3MDAwO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHB1dFZhcignZHAuanhUaW1lb3V0JyxpbnB1dCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6K6+572u5Li6OicrcGFyc2VJbnQoaW5wdXQpXFxuICAgICAgICAgICAgfSxqeFRpbWVvdXQpXFxuICAgICAgICB9KTtcXG4gICAgICAgIGlmKGF1dG9Nb2RlJiZzaW5nbGVCYWNrKXtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogY29sb3IoJ+aJk+W8gOe8lui+keWQiuavm+i/h+a7pOaWh+S7ticsJyMxMzc5Q0InKSxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChkbVBhdGgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBkZWZfZG1zID0gWydodHRwczovL3ZkMy5iZHN0YXRpYy5jb20vbWRhLWtpOXVncTU0MzBiaHh5czgvdjEtY2FlLzEwODBwL21kYS1raTl1Z3E1NDMwYmh4eXM4Lm1wNCddO1xcbiAgICAgICAgICAgICAgICAgICAgaWYoIWZpbGVFeGlzdChkbVBhdGgpKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoZG1QYXRoLCcvL+S4gOihjOS4gOS4qumTvuaOpSzlj6/ms6jph4rjgIJcXFxcbicrZGVmX2Rtcy5qb2luKCdcXFxcbicpKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnZWRpdEZpbGU6Ly8nK2RtUGF0aDtcXG4gICAgICAgICAgICAgICAgfSxkbVBhdGgpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBjb2xvcign5omT5byA57yW6L6R6Kej5p6Q5paH5Lu2JywnIzEzNzlDQicpLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoanhzUm91dGUpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdlZGl0RmlsZTovLycranhzUm91dGU7XFxuICAgICAgICAgICAgfSxqeHNSb3V0ZSksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgfSk7XFxuXFxuICAgICAgICBmb3IobGV0IGkgaW4gTXlKaWV4aS5qaWV4aXMpe1xcbiAgICAgICAgICAgIGxldCBub3dKeCA9IE15SmlleGkuamlleGlzW2ldO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOk15SmlleGkubm93PT09bm93SngubmFtZT8n8J+RiScrbm93SngubmFtZTpub3dKeC5uYW1lLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTonZmxleF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICAgICAgICBub3dKeDpub3dKeCxcXG4gICAgICAgICAgICAgICAgICAgIE15SmlleGk6TXlKaWV4aSxcXG4gICAgICAgICAgICAgICAgICAgIGp4c1JvdXRlOmp4c1JvdXRlXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChub3dKeCxNeUppZXhpLGksanhzUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uID0gZ2V0VmFyKCdkbi5qeG1fb3B0aW9uJywn6YCJ5oupJyk7XFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5a+85Ye6JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5vd0p4Q29kZSA9IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeShub3dKeCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gc2hhcmVQYXN0ZShub3dKeENvZGUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9ICfprZTmlq3op6PmnpDphY3nva5AJytub3dKeC5uYW1lKydAJyt1cmw7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkoY29kZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Llr7zlh7rkuLrkupHlj6Pku6TlubblpI3liLbliLDliarliIfmnb8nXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5L+u5pS5JzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYobm93SngubmFtZT09PU15SmlleGkubm93KXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiAndG9hc3Q6Ly/mraTop6PmnpDphY3nva7lvZPliY3mraPlnKjkvb/nlKjkuK3vvIzkuI3lhYHorrjkv67mlLkhJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9qeEVkaXQ/cnVsZT1NeUZpZWxk4bSw4oG/J1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL2p4RWRpdD9ydWxlPU15RmllbGThtLDigb8nXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAn5Yig6ZmkJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ+ehruiupOWIoOmZpOino+aekOmFjee9rjonK25vd0p4Lm5hbWUrJz8nKS5jb25maXJtKChub3dKeCxNeUppZXhpLGksanhzUm91dGUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihub3dKeC5uYW1lPT09TXlKaWV4aS5ub3cpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mraTop6PmnpDphY3nva7lvZPliY3mraPlnKjkvb/nlKjkuK3vvIzkuI3lhYHorrjliKDpmaQhJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXMuc3BsaWNlKGksMSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5Yig6ZmkJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LG5vd0p4LE15SmlleGksaSxqeHNSb3V0ZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLm5vdz1ub3dKeC5uYW1lO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S9oOmAieaLqeS6hicrbm93SngubmFtZSsn5L2c5Li65b2T5YmN6Kej5p6Q6YWN572uJztcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSxub3dKeCxNeUppZXhpLGksanhzUm91dGUpLFxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICB9XFxuJC5leHBvcnRzLmp4TWFuYWdlPWp4TWFuYWdlO1wifSx7XCJuYW1lXCI6XCLop6PmnpDnvJbovpFcIixcInBhdGhcIjpcImp4RWRpdFwiLFwicnVsZVwiOlwianM6XFxubGV0IHtub3dKeCxNeUppZXhpLGp4c1JvdXRlfSA9IE1ZX1BBUkFNUztcXG5sZXQgbm93SnhUID0gSlNPTi5wYXJzZShnZXRWYXIoJ2RuLm5vd0p4Jyl8fCd7fScpO1xcbm5vd0p4ID0gbm93SnhULm5hbWU/bm93SnhUOm5vd0p4O1xcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoKT0+e1xcbiAgICBjbGVhclZhcihcXFwiZG4uanhfdGl0bGVzXFxcIik7XFxuICAgIGNsZWFyVmFyKFxcXCJkbi5ub3dKeFxcXCIpO1xcbiAgICBjbGVhclZhcihcXFwiZG4uanhtX25hbWVcXFwiKTtcXG59KSk7XFxubGV0IGlkID0gbnVsbDtcXG5mb3IobGV0IGogaW4gTXlKaWV4aS5qaWV4aXMpe1xcbiAgICBpZihNeUppZXhpLmppZXhpc1tqXS5uYW1lID09PSBub3dKeC5uYW1lKXtcXG4gICAgICAgIGlkID0gajtcXG4gICAgICAgIGJyZWFrO1xcbiAgICB9XFxufVxcbmxldCBkID0gW107XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfphY3nva7lkI3np7AnLFxcbiAgICBkZXNjOiBcXFwi6Kej5p6Q6YWN572u5ZCN56ewLOWmgumBk+mVv+aOqOiNkFxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBvbkNoYW5nZTogXFxcInB1dFZhcignZG4uanhtX25hbWUnLGlucHV0KVxcXCIsXFxuICAgICAgICB0aXRsZVZpc2libGU6IHRydWUsXFxuICAgICAgICBkZWZhdWx0VmFsdWU6Z2V0VmFyKCdkbi5qeG1fbmFtZScsJycpfHxub3dKeC5uYW1lXFxuICAgIH0sXFxuICAgIGNvbF90eXBlOidpbnB1dCdcXG59KTtcXG4vLyBsZXQgb3B0aW9ucyA9IFsn6YCJ5oupJywn5paw5aKeJywn5Yig6ZmkJywn5om56YeP5Yig6ZmkJywn56e75YqoJ107XFxubGV0IG9wdGlvbnMgPSBbJ+aWsOWinicsJ+WIoOmZpCcsJ+enu+WKqCddO1xcblxcbmZvcihsZXQgaSBpbiBvcHRpb25zKXtcXG4gICAgbGV0IG9wdGlvbiA9IG9wdGlvbnNbaV07XFxuICAgIGxldCBmbGFnID0gZ2V0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywn5paw5aKeJyk9PT1vcHRpb24/J/CfkYknOicnO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ZmxhZytvcHRpb24sXFxuICAgICAgICAvLyBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICBjb2xfdHlwZTonZmxleF9idXR0b24nLFxcbiAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG9wdGlvbik9PntcXG4gICAgICAgICAgICBwdXRWYXIoJ2RuLmp4bV93cml0ZU1vZGUnLCBvcHRpb24pO1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxuICAgICAgICB9LG9wdGlvbiksXFxuICAgIH0pO1xcbn1cXG5kLnB1c2goe1xcbiAgICAvLyBjb2xfdHlwZTonbGluZScsXFxuICAgIGNvbF90eXBlOidibGFua19ibG9jaydcXG59KTtcXG4vL+iOt+WPluaWreaPkuWIl+ihqFxcbmlmKCFnZXRWYXIoXFxcImRuLmp4X3RpdGxlc1xcXCIpKXtcXG4gICAgbGV0IHRpdGxlQXJyID0gW10sIHVybEFyciA9IFtdO1xcbiAgICB2YXIganNvbj17dGl0bGU6W10sY29kZXM6e319O1xcbiAgICBsZXQgc2V0RmlsZSA9IHJlcXVlc3QoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJyk7XFxuICAgIHRyeSB7XFxuICAgICAgICBldmFsKCdqc29uPScrc2V0RmlsZSk7XFxuICAgIH1jYXRjaCAoZSkge1xcbiAgICAgICAgbG9nKCdKc29u6Kej5p6Q5Y+R55Sf5LqG6ZSZ6K+vOicrZS5tZXNzYWdlKTtcXG4gICAgfVxcbiAgICB0aXRsZUFyciA9IGpzb24udGl0bGU7XFxuICAgIHRpdGxlQXJyLmZvckVhY2goKGl0KSA9PiB7XFxuICAgICAgICB1cmxBcnIucHVzaChqc29uLmNvZGVzW2l0XSk7XFxuICAgIH0pO1xcbiAgICBwdXRWYXIoJ2RuLmp4X3RpdGxlcycsSlNPTi5zdHJpbmdpZnkodGl0bGVBcnIpKTtcXG59XFxuXFxubGV0IHRpdGxlcyA9IEpTT04ucGFyc2UoZ2V0VmFyKCdkbi5qeF90aXRsZXMnKXx8J1tdJyk7XFxubGV0IHRpdGxlRGljID0ge1xcbiAgICBibDon5ZOU5ZOp5ZOU5ZOpJyxmdW46J+mjjuihjCcsbGU6J+S5kOinhicsbWc6J+iKkuaenCcsbWk6J+WSquWSlScscHA6J1BQVFYnLHF5OifniLHlpYfoibonLHNoOifmkJzni5AnLFxcbiAgICB0eDon6IW+6K6vJyx4Zzon6KW/55OcJyx5azon5LyY6YW3JyxvbmU6JzE5MDUnLGx0Oifpvpnohb4nLHJyOifkurrkurrov7cnLHdkOifkupTmr5InLG90aDon5YW25LuWJ1xcbn1cXG5sZXQgdGl0bGVPcmRlciA9IHtcXG4gICAgcXk6MSx5azoyLHR4OjMsbWc6NCxibDo1LHNoOjYseGc6NyxwcDo4LG1pOjksbGU6MTAsb25lOjExLGZ1bjoxMixsdDoxMyxycjoxNCx3ZDoxNSxvdGg6MTYsXFxufTtcXG5cXG5mdW5jdGlvbiBjb21wYXJlT2QodGl0bGVPcmRlcil7XFxuICAgIHJldHVybiBmdW5jdGlvbiAoYSwgYil7XFxuICAgICAgICBsZXQgeCA9IHRpdGxlT3JkZXJbYV07XFxuICAgICAgICBsZXQgeSA9IHRpdGxlT3JkZXJbYl07XFxuICAgICAgICByZXR1cm4geC15O1xcbiAgICB9XFxufVxcbi8vLS0tLS0tLS0tLS0tLS0tLS1cXG4vLyBsZXQgamRzID0gT2JqZWN0LmtleXMobm93SngpLmZpbHRlcihpdD0+aXQhPT0nbmFtZScmJml0IT09J290aCcpO1xcbmxldCBmbGFncyA9IE9iamVjdC5rZXlzKHRpdGxlT3JkZXIpO1xcbmxldCBqZHMgPSBPYmplY3Qua2V5cyhub3dKeCkuZmlsdGVyKGl0PT5pdCE9PSduYW1lJyYmZmxhZ3MuaW5jbHVkZXMoaXQpKTtcXG4vL2xvZyhqZHMpO1xcbmZvcihsZXQgayBvZiBmbGFncyl7XFxuICAgIGlmKCFqZHMuaW5jbHVkZXMoaykpe1xcbiAgICAgICAgamRzLnB1c2goaylcXG4gICAgfVxcbn1cXG5qZHMgPSBqZHMuc29ydChjb21wYXJlT2QodGl0bGVPcmRlcikpO1xcbmZvcihsZXQgaiBpbiBqZHMpe1xcbiAgICBsZXQganhzID0gbm93SnhbamRzW2pdXXx8W107XFxuICAgIGxldCB0aXRsZSA9IGpkc1tqXTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOnRpdGxlRGljW3RpdGxlXXx8dGl0bGUsXFxuICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodGl0bGVzLHRpdGxlLGp4cyxqeHNSb3V0ZSxNeUppZXhpLG5vd0p4KT0+e1xcbiAgICAgICAgICAgIHZhciBqc29uPXt0aXRsZTpbXSxjb2Rlczp7fX07XFxuICAgICAgICAgICAgbGV0IHNldEZpbGUgPSByZXF1ZXN0KCdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicpO1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIGV2YWwoJ2pzb249JytzZXRGaWxlKTtcXG4gICAgICAgICAgICB9Y2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgbG9nKCdKc29u6Kej5p6Q5Y+R55Sf5LqG6ZSZ6K+vOicrZS5tZXNzYWdlKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYoZ2V0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywn5paw5aKeJyk9PT0n5paw5aKeJyl7XFxuICAgICAgICAgICAgICAgIGxldCBzZWxfdGl0bGUgPSB0aXRsZXMuZmlsdGVyKGl0PT4hanhzLmluY2x1ZGVzKGl0KSk7XFxuICAgICAgICAgICAgICAgIHNlbF90aXRsZSA9IHNlbF90aXRsZS5tYXAoKGl0KT0+e1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZsYWcgPSAn4oCY4oCY4pOK4oCZ4oCZJztcXG4gICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZihqc29uLmNvZGVzW2l0XSk9PT0nZnVuY3Rpb24nKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICBmbGFnID0gJ+KAnOKAnOKSv+KAneKAnSc7XFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZih0eXBlb2YoanNvbi5jb2Rlc1tpdF0pPT09J3VuZGVmaW5lZCcpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgPSAnJztcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmbGFnK2l0XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJChzZWxfdGl0bGUsMikuc2VsZWN0KChNeUppZXhpLGp4cyxub3dKeCx0aXRsZSxqeHNSb3V0ZSk9PntcXG4gICAgICAgICAgICAgICAgICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZSgv4oCY4oCY4pOK4oCZ4oCZfOKAnOKAnOKSv+KAneKAnS9nLCcnKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZCA9IG51bGw7XFxuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGogaW4gTXlKaWV4aS5qaWV4aXMpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKE15SmlleGkuamlleGlzW2pdLm5hbWUgPT09IG5vd0p4Lm5hbWUpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGo7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGlmKCFpZCl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+e0ouW8lemUmeivr+aXoOazleS/neWtmDpcXFxcbicraWRcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGp4cy5wdXNoKGlucHV0KTtcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhqeHMpO1xcbiAgICAgICAgICAgICAgICAgICAgbm93SnhbdGl0bGVdID0ganhzO1xcbiAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdID0gbm93Sng7XFxuICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RuLm5vd0p4JyxKU09OLnN0cmluZ2lmeShub3dKeCkpO1xcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICB9LE15SmlleGksanhzLG5vd0p4LHRpdGxlLGp4c1JvdXRlKTtcXG4gICAgICAgICAgICB9ZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LHRpdGxlcyx0aXRsZSxqeHMsanhzUm91dGUsTXlKaWV4aSxub3dKeClcXG4gICAgfSk7XFxuICAgIGZvcihsZXQgayBpbiBqeHMpe1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpqeHNba10sXFxuICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0aXRsZXMsdGl0bGUsanhzLGp4c1JvdXRlLE15SmlleGksbm93Sngsbmp4LGlkLGssbWF4KT0+e1xcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGdldFZhcignZG4uanhtX3dyaXRlTW9kZScsJ+aWsOWinicpKXtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WIoOmZpCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHZhbCkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmluZGV4T2YodmFsKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ID4gLTEpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BsaWNlKGluZGV4LCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgICAgICAgICAgICAganhzLnJlbW92ZShuangpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG5vd0p4W3RpdGxlXSA9IGp4cztcXG4gICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpc1tpZF0gPSBub3dKeDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RuLm5vd0p4JyxKU09OLnN0cmluZ2lmeShub3dKeCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn56e75YqoJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChrLCfnp7vliqjliLDntKLlvJXlpJrlsJE/JykuaW5wdXQoKGssbWF4LGp4cyxub3dKeCxNeUppZXhpLGlkLHRpdGxlLGp4c1JvdXRlKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBNb3ZlKGFyciwgZnJvbUluZGV4LCB0b0luZGV4KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZWxlbWVudCA9IGFycltmcm9tSW5kZXhdO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZShmcm9tSW5kZXgsIDEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZSh0b0luZGV4LCAwLCBlbGVtZW50KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihwYXJzZUludChpbnB1dCk9PT1rKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/llaXkuZ/msqHlgZonXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHBhcnNlSW50KGlucHV0KT5tYXgtMXx8cGFyc2VJbnQoaW5wdXQpPC0xKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kvaDmnIDlpKfnp7vliqjojIPlm7QwLScrcGFyc2VJbnQobWF4LTEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxldCBuZXdBciA9IGp4cy5zcGxpY2UoaywgMSk7IC8vIOWIoOaOiVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBqeHMudW5zaGlmdChuZXdBclswXSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vdmUoanhzLGsscGFyc2VJbnQoaW5wdXQpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm93SnhbdGl0bGVdID0ganhzO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpc1tpZF0gPSBub3dKeDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdkbi5ub3dKeCcsSlNPTi5zdHJpbmdpZnkobm93SngpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LGssbWF4LGp4cyxub3dKeCxNeUppZXhpLGlkLHRpdGxlLGp4c1JvdXRlKVxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5q2k5YWD57Sg5LiN5pSv5oyB6L+b6KGMOicrZ2V0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywn5paw5aKeJylcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0sdGl0bGVzLHRpdGxlLGp4cyxqeHNSb3V0ZSxNeUppZXhpLG5vd0p4LGp4c1trXSxpZCxrLGp4cy5sZW5ndGgpXFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgLy8gY29sX3R5cGU6J2xpbmUnLFxcbiAgICAgICAgY29sX3R5cGU6J2JsYW5rX2Jsb2NrJ1xcbiAgICB9KVxcbn1cXG5kLnB1c2goe1xcbiAgICBjb2xfdHlwZTonbGluZScsXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6J+S/neWtmCcsXFxuICAgIGNvbF90eXBlOid0ZXh0X2NlbnRlcl8xJyxcXG4gICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKE15SmlleGksaWQsanhzUm91dGUpPT57XFxuICAgICAgICBpZihnZXRWYXIoJ2RuLmp4bV9uYW1lJywnJykhPT1NeUppZXhpLmppZXhpc1tpZF0ubmFtZSl7XFxuICAgICAgICAgICAgaWZIYXMgPSBNeUppZXhpLmppZXhpcy5maWx0ZXIoaXQ9Pml0Lm5hbWU9PT1nZXRWYXIoJ2RuLmp4bV9uYW1lJywnJykpLmxlbmd0aD4wO1xcbiAgICAgICAgICAgIGlmKGlmSGFzKXtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W+heS/ruaUueeahOWQjeensOmHjeWkjSzkuI3lhYHorrjkv53lrZgnXFxuICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzW2lkXS5uYW1lID0gIGdldFZhcignZG4uanhtX25hbWUnLCcnKTtcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBiYWNrKHRydWUpO1xcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suS/neWtmCdcXG4gICAgfSxNeUppZXhpLGlkLGp4c1JvdXRlKVxcbn0pO1xcbnNldFJlc3VsdChkKTtcIn0se1wibmFtZVwiOlwi5bCP55m95qih5byPXCIsXCJwYXRoXCI6XCJzbWFsbFdoaXRlXCIsXCJydWxlXCI6XCJqczpcXG5zZXRQYWdlVGl0bGUoJ+mBk+mVv+e7meWwj+eZveeahOWFs+eIsScpO1xcbmNvbnN0IHtjb2xvciwgc21hbGwsYXBpfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3V0aWxpeT9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXCIpO1xcbmxldCBmaWxlUm9vdCA9IGFwaS5ob3N0KycvaGlrZXJ1bGUvenl3X2RhdGEvJztcXG4vLyBsb2coZmlsZVJvb3QpO1xcbmxldCBkID0gW107XFxudmFyIHRoZW1lUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVRoZW1lLmpzb25cXFwiO1xcbnZhciB0aGVtZU9ubGluZSA9IGZpbGVSb290KycxMSc7XFxudmFyIG9sZFJvdXRlID0gXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uXFxcIjtcXG52YXIgb2xkT25saW5lID0gZmlsZVJvb3QrJzEyJztcXG52YXIgbmV3Um91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb25cXFwiO1xcbnZhciBuZXdPbmxpbmUgPSBmaWxlUm9vdCsnMTMnO1xcbnZhciBqeHNSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015SmlleGkuanNvblxcXCI7XFxudmFyIGp4T25saW5lID0gZmlsZVJvb3QrJzE0JztcXG52YXIgZG1PbmxpbmUgPSBmaWxlUm9vdCsnMzAnO1xcbnZhciBjamNhY2hlID0gJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnO1xcbnZhciB4NWNhY2hlID0gJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uaHRtbCc7XFxudmFyIGRtUGF0aCA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL2RpYW9tYW8udHh0XFxcIjtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTpzbWFsbCgn5L2g5aW9LOWwj+eZvSzljbPkvb/llaXkuZ/kuI3kvJos5Lmf5Y+v5Lul55yL5piO55m95LiL6Z2i55qE5a2X5ZCnPycpLFxcbiAgICBkZXNjOiflpoLmnpzov5jmmK/kuI3kvJos6K+35Yig5Lul5rC45rK7LOWRiui+nuS4jeiwoicsXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcbiAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKT0+e1xcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+aNruivtOS9oOS4jeacjeawlCzkuI3mib/orqToh6rlt7HmmK/lsI/nmb0/XFxcXG7ngrnmiJHlj6rmmK/kuLrkuoblrqPms4TkuIDkuIvkvaDnmoTmhKTmgJI/5ZWl5Lmf5Yir6K+05LqGLOS4i+WOu+aQniEnXFxuICAgIH0pXFxufSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6c21hbGwoJ+WNlemhueino+aekOmAieaLqeeVjOmdouS4u+mimOaYr+S7gOS5iD8nKStjb2xvcign5LiN55+l6YGTLOadpeS4gOS7vemBk+mVv+eahCcsJyM1RkI4NzgnKSxcXG4gICAgZGVzYzon6Ieq5Yqo5ouJ5Y+W6YGT6ZW/55qE5Li76aKY6YWN572u5Lul5Y+K572R6aG15o+S5Lu25ZKM6Z2Z5oCB6aG16Z2iJyxcXG4gICAgY29sX3R5cGU6J3RleHRfMScsXFxuICAgIHVybDokKCfnoa7orqTlkJc/5aaC5p6c5L2g5LiN5piv5bCP55m977yM5oC76K+l5Lya5o+Q5YmN5aSH5Lu96Ieq5bex5Li76aKY55qE5ZCnIVxcXFxuJyt0aGVtZVJvdXRlKS5jb25maXJtKChjamNhY2hlLHg1Y2FjaGUsdGhlbWVSb3V0ZSx0aGVtZU9ubGluZSk9PntcXG4gICAgICAgIGxldCB0aGVtZUNvZGUgPSBmZXRjaCh0aGVtZU9ubGluZSk7XFxuICAgICAgICBpZighL25vd190aGVtZS8udGVzdCh0aGVtZUNvZGUpKXtcXG4gICAgICAgICAgICBsb2codGhlbWVDb2RlKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxuICAgICAgICB9XFxuICAgICAgICBsZXQgY2pGcm9tID0gXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb9cXFwiO1xcbiAgICAgICAgbGV0IHg1RnJvbSA9IFxcXCJoaWtlcjovL3BhZ2UvUGFyc2VfRG4uaHRtbD9ydWxlPU15RmllbGThtLDigb9cXFwiO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICBsZXQgY2pGaWxlID0gSlNPTi5wYXJzZShmZXRjaChjakZyb20pKS5ydWxlO1xcbiAgICAgICAgICAgIGxldCB4NUZpbGUgPSBKU09OLnBhcnNlKGZldGNoKHg1RnJvbSkpLnJ1bGU7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKGNqY2FjaGUsIGNqRmlsZSk7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKHg1Y2FjaGUsIHg1RmlsZSk7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsIHRoZW1lQ29kZSk7XFxuICAgICAgICAgICAgY2xlYXJWYXIoXFxcImp4T2xkVlxcXCIpO1xcbiAgICAgICAgICAgIGNsZWFyVmFyKFxcXCJqeE5ld1ZcXFwiKTtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S4u+mimOW3suaIkOWKn+W6lOeUqCdcXG4gICAgICAgIH1cXG4gICAgICAgIGNhdGNoKGUpe1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kuLvpopjlupTnlKjlpLHotKVcXFxcbuacquacn+acm+eahOmUmeivrzonK2UubWVzc2FnZTtcXG4gICAgICAgIH1cXG4gICAgfSxjamNhY2hlLHg1Y2FjaGUsdGhlbWVSb3V0ZSx0aGVtZU9ubGluZSlcXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTpzbWFsbCgn5pat5o+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+vOicrZS5tZXNzYWdlO1xcbiAgICAgICAgfVxcbiAgICB9LGp4c1JvdXRlLGp4T25saW5lKVxcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOnNtYWxsKCflkIrmr5vov4fmu6Tmlofku7bmmK/ku4DkuYg/JykrY29sb3IoJ+S4jeefpemBkyzmnaXkuIDku73pgZPplb/nmoQnLCcjNUZCODc4JyksXFxuICAgIGRlc2M6J+iHquWKqOaLieWPlumBk+mVv+WcqOeUqOeahGRpYW9tYW8udHh05paH5Lu2JyxcXG4gICAgY29sX3R5cGU6J3RleHRfMScsXFxuICAgIHVybDokKCfnoa7orqTlkJc/5aaC5p6c5L2g5LiN5piv5bCP55m977yM5oC76K+l5Lya5o+Q5YmN5aSH5Lu96Ieq5bex55qE5ZCK5q+b6L+H5ruk5paH5Lu25ZCnIVxcXFxuJytkbVBhdGgpLmNvbmZpcm0oKGRtUGF0aCxkbU9ubGluZSk9PntcXG4gICAgICAgIGxldCBkbUNvZGUgPSBmZXRjaChkbU9ubGluZSk7XFxuICAgICAgICBpZighZG1Db2RlfHwhL21wNHxtM3U4Ly50ZXN0KGRtQ29kZSkpe1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXG4gICAgICAgIH1cXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgd3JpdGVGaWxlKGRtUGF0aCwgZG1PbmxpbmUpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lkIrmr5vov4fmu6Tmlofku7blt7LphY3nva7miJDlip8nXFxuICAgICAgICB9XFxuICAgICAgICBjYXRjaChlKXtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ZCK5q+b6L+H5ruk5paH5Lu25bqU55So5aSx6LSlXFxcXG7mnKrmnJ/mnJvnmoTplJnor686JytlLm1lc3NhZ2U7XFxuICAgICAgICB9XFxuICAgIH0sZG1QYXRoLGRtT25saW5lKVxcbn0pO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOnNtYWxsKCfnnJ/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+ihjOatpOaTjeS9nCcpLmlucHV0KChjamNhY2hlLHg1Y2FjaGUsdGhlbWVSb3V0ZSxvbGRSb3V0ZSxuZXdSb3V0ZSxqeHNSb3V0ZSx0aGVtZU9ubGluZSxvbGRPbmxpbmUsbmV3T25saW5lLGp4T25saW5lLGRtUGF0aCxkbU9ubGluZSk9PntcXG4gICAgICAgIGlmKGlucHV0IT09J+mBk+mVv+S/ruS7meazleWKm+aXoOi+uScpe1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKzmrKHlj5bmtojmiafooYwnXFxuICAgICAgICB9XFxuICAgICAgICBsZXQgdGhlbWVDb2RlID0gZmV0Y2godGhlbWVPbmxpbmUpO1xcbiAgICAgICAgaWYoIS9ub3dfdGhlbWUvLnRlc3QodGhlbWVDb2RlKSl7XFxuICAgICAgICAgICAgbG9nKCd0aGVtZUNvZGU6Jyt0aGVtZUNvZGUpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mi4nkuLvpopjlpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBjakZyb20gPSBcXFwiaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmpzP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCI7XFxuICAgICAgICBsZXQgeDVGcm9tID0gXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5odG1sP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCI7XFxuICAgICAgICBsZXQgY2pGaWxlID0gSlNPTi5wYXJzZShmZXRjaChjakZyb20pKS5ydWxlO1xcbiAgICAgICAgbGV0IHg1RmlsZSA9IEpTT04ucGFyc2UoZmV0Y2goeDVGcm9tKSkucnVsZTtcXG4gICAgICAgIGxldCBvbGRDb2RlID0gZmV0Y2gob2xkT25saW5lKTtcXG4gICAgICAgIGxldCBuZXdDb2RlID0gZmV0Y2gobmV3T25saW5lKTtcXG4gICAgICAgIGxldCBkbUNvZGUgPSBmZXRjaChkbU9ubGluZSk7XFxuICAgICAgICBpZighL1BhcnNlX0RuXFxcXC5qcy8udGVzdChvbGRDb2RlKXx8IS9QYXJzZV9EblxcXFwuanMvLnRlc3QobmV3Q29kZSkpe1xcbiAgICAgICAgICAgIC8vIGxvZygnb2xkQ29kZTonK29sZENvZGUpO1xcbiAgICAgICAgICAgIC8vIGxvZygnbmV3Q29kZTonK25ld0NvZGUpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXG4gICAgICAgIH1cXG4gICAgICAgIGxldCBqeENvZGUgPSBmZXRjaChqeE9ubGluZSk7XFxuICAgICAgICBpZighL2ppZXhpcy8udGVzdChqeENvZGUpKXtcXG4gICAgICAgICAgICAvLyBsb2coJ2p4Q29kZTonK2p4Q29kZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+Wksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcbiAgICAgICAgfVxcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB3cml0ZUZpbGUoY2pjYWNoZSwgY2pGaWxlKTsgLy8g5ouJ5o+S5Lu2XFxuICAgICAgICAgICAgd3JpdGVGaWxlKHg1Y2FjaGUsIHg1RmlsZSk7IC8v5ouJ572R6aG15paH5Lu2XFxuICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsIHRoZW1lQ29kZSk7IC8v5ouJ5Li76aKY5paH5Lu2XFxuICAgICAgICAgICAgY2xlYXJWYXIoXFxcImp4T2xkVlxcXCIpO1xcbiAgICAgICAgICAgIGNsZWFyVmFyKFxcXCJqeE5ld1ZcXFwiKTtcXG4gICAgICAgICAgICB3cml0ZUZpbGUob2xkUm91dGUsIG9sZENvZGUpOyAvL+aLieaWreaPkum7mOiupOmAieaLqeeVjOmdoueahOmFjee9rlxcbiAgICAgICAgICAgIHdyaXRlRmlsZShuZXdSb3V0ZSwgbmV3Q29kZSk7IC8v5ouJ5pat5o+S5YaF55qE6Kej5p6QXFxuICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLCBqeENvZGUpOyAvLyDmi4noh6rliqjmoaPmlofku7ZcXG4gICAgICAgICAgICBpZihkbUNvZGUmJi9tcDR8bTN1OC8udGVzdChkbUNvZGUpKSB7Ly/pqozor4HlkIrmr5vmlofku7blkIjms5XmgKdcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGRtUGF0aCwgZG1Db2RlKTsgLy8g5ouJ5ZCK5q+b6L+H5ruk5paH5Lu2XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGJhY2sodHJ1ZSk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWreaPkuino+aekOmFjee9ruWPium7mOiupOWIl+ihqOW3sue7j+mFjee9ruaIkOWKnydcXG4gICAgICAgIH1cXG4gICAgICAgIGNhdGNoKGUpe1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kuIDplK7mqKHlvI/lupTnlKjlpLHotKVcXFxcbuacquacn+acm+eahOmUmeivrzonK2UubWVzc2FnZTtcXG4gICAgICAgIH1cXG4gICAgfSxjamNhY2hlLHg1Y2FjaGUsdGhlbWVSb3V0ZSxvbGRSb3V0ZSxuZXdSb3V0ZSxqeHNSb3V0ZSx0aGVtZU9ubGluZSxvbGRPbmxpbmUsbmV3T25saW5lLGp4T25saW5lLGRtUGF0aCxkbU9ubGluZSlcXG59KTtcXG5sZXQgZGVzY0luZm8gPSAn5Li76aKY5paH5Lu2OicrdGhlbWVSb3V0ZSsnXFxcXG7kuLvnlYzpnaLphY3nva46JytvbGRSb3V0ZSsnXFxcXG7lq5bliLDnmoTop6PmnpA6JytuZXdSb3V0ZSsnXFxcXG7oh6rliqjmoaPop6PmnpA6JytqeHNSb3V0ZTtcXG5kZXNjSW5mbys9J1xcXFxu5Li75o+S5Lu2OicrY2pjYWNoZSsnXFxcXG7kuLvphY3nva7pgInmi6nnlYzpnaLmlofku7Y6Jyt4NWNhY2hlKydcXFxcbuWQiuavm+i/h+a7pOaWh+S7tjonK2RtUGF0aDtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTon5paH5Lu25o+P6L+wOlxcXFxuJytkZXNjSW5mbyxcXG4gICAgY29sX3R5cGU6J2xvbmdfdGV4dCcsXFxuICAgIGV4dHJhOnt0ZXh0U2l6ZTogMTMsbGluZVZpc2libGU6ZmFsc2V9XFxufSk7XFxuc2V0UmVzdWx0KGQpO1wifV0sXCJzYXZlZFwiOmZhbHNlLFwidGl0bGVcIjpcIk15RmllbGThtLDigb9cIixcInZlcnNpb25cIjowLFwidXJsXCI6XCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU957yW6L6RI25vSGlzdG9yeSNcIixcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJmaW5kX3J1bGVcIjpcImpzOlxcbmNvbnN0IGQgPSBbXTtcXG5jb25zdCBkYXRhID0ge307XFxuXFxuZGF0YS5vbGRDb25maWcgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFwiO1xcbmRhdGEuY2pSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzXFxcIjtcXG5kYXRhLng1Um91dGUgPVxcbmdldFBhdGgoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uaHRtbCcpO1xcblxcbmRhdGEuanhMYXp5ID0gXFxcImV2YWwoJ3ZhciBjb25maWcgPScgKyBmZXRjaCgnXFxcIiArIGRhdGEub2xkQ29uZmlnICsgXFxcIicpKTtldmFsKGZldGNoKGNvbmZpZy5jaikpO2F5dG1QYXJzZShpbnB1dClcXFwiO1xcblxcbmRhdGEuc3pQYXJzZSA9IFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXCI7XFxuXFxuZGF0YS5zZXRQYXJzZSA9IGZ1bmN0aW9uKCkge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgZGVzYzogJzc5NScsXFxuICAgICAgICB1cmw6IHRoaXMueDVSb3V0ZSxcXG4gICAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnXFxuICAgIH0pO1xcbiAgICB2YXIgb2xkViA9IGdldFZhcignanhPbGRWJyk7XFxuICAgIHZhciBuZXdWID0gZ2V0VmFyKCdqeE5ld1YnKTtcXG4gICAgdmFyIHZlcnNpb25UaXBzID0gcGFyc2VGbG9hdChuZXdWKSA+IHBhcnNlRmxvYXQob2xkVikgPyAn4oCY4oCY5pyJ5paw54mI5pysOiB2JyArIG5ld1YgOiAn4oCY4oCYJztcXG4gICAgdmFyIHBpY3MgPSBbXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9zZW92eC0yMC0xMCUyMCg5MikuanBnJyxcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL21vbTIwMTglMjAoMjA3KS5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vdHZhNC5zaW5haW1nLmNuL2xhcmdlLzliZDliMTY3Z3kxZndyaDV4b2x0ZGoyMWhjMHUwdGF4LmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly90dmExLnNpbmFpbWcuY24vbGFyZ2UvMDA1QllxcGdneTFmd3JleXU0bmw2ajMxaGMwdTBhaHIuanBnJyxcXG4gICAgICAgICdodHRwczovL3MzLmJtcC5vdmgvaW1ncy8yMDIxLzEwL2Q3ZTYwYjk5MDc0MjA5M2QuanBlZycsXFxuICAgICAgICAnaHR0cHM6Ly9zMy5ibXAub3ZoL2ltZ3MvMjAyMS8xMC85MWFkNmQ2NTM4YmY4Njg5LmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly90dmExLnNpbmFpbWcuY24vbGFyZ2UvMDA1QllxcGdneTFmd3Jlc2w1cG1sajMxaGMweGN3a2EuanBnJyxcXG4gICAgICAgICdodHRwczovL3R2YTMuc2luYWltZy5jbi9sYXJnZS8wMDVCWXFwZ2d5MWZ3cmdqZGs3NG9qMzFoYzB1MGRxbi5qcGcnLFxcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnNlb3Z4LmNvbS9pbWcvbW9tMjAxOCUyMCgzMjApLmpwZycsXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9tb20yMDE4JTIwKDgwMykuanBnJ1xcbiAgICBdO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgaW1nOiBwaWNzW01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwKV0sXFxuICAgICAgICB0aXRsZTogdmVyc2lvblRpcHMgKyAn4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXCJjb2xvcjojNkVCODk3XFxcIj48YnI+44CA44CA54K55Ye75LiK5pa55aS05YOP6L+b5YWl57yW6L6RPGJyPueCueatpOi/m+WFpeiuuuWdm+W4luWtkOWIl+ihqCcsXFxuICAgICAgICBkZXNjOiAn5b2T5YmN54mI5pysOiB2JyArIG9sZFYsXFxuICAgICAgICB1cmw6ICdodHRwczovL2hhaWt1b3NoaWppZS5jbi91c2VyLzE5NTgnLFxcbiAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xJ1xcbiAgICB9KTtcXG4gIHNldFJlc3VsdChkKTtcXG59XFxuXFxuc3dpdGNoIChnZXRQYXJhbShcXFwidHlwZVxcXCIpKSB7XFxuICAgIGNhc2UgXFxcIuiuvue9rlxcXCI6XFxuICAgICAgICBkYXRhLnNldFBhcnNlKCk7XFxuICAgICAgICAvL3NldFJlc3VsdChkKTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlIFxcXCLnvJbovpFcXFwiOlxcbiAgICAgICAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvanhJdGVtP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLmp4TGlzdCgpO1xcbiAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgYnJlYWs7XFxuXFx0Y2FzZSBcXFwi5Li76aKYXFxcIjpcXG5cXHQgICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3RoZW1lP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLnRoZW1lSW5pdCgpO1xcbiAgICAgICAgYnJlYWs7XFxuXFx0Y2FzZSBcXFwi6Kej5p6QXFxcIjpcXG5cXHQgICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2p4TWFuYWdlP3J1bGU9TXlGaWVsZOG0sOKBv1xcXCIpLmp4TWFuYWdlKCk7XFxuICAgICAgICBicmVhaztcXG4gICAgZGVmYXVsdDpcXG4gICAgICAgICQuZXhwb3J0cyA9IGRhdGE7XFxuICAgICAgICBicmVhaztcXG59XCIsXCJncm91cFwiOlwiI++4j+KDo+Wbm+Wkp+eahuepulwiLFwidWFcIjpcIm1vYmlsZVwiLFwicHJlUnVsZVwiOlwiXCIsXCJwYWdlc1wiOlwiW3tcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIlBhcnNlX0RuLXZ1ZS5odG1sXFxcIixcXFwicGF0aFxcXCI6XFxcIlBhcnNlX0RuLmh0bWxcXFwiLFxcXCJydWxlXFxcIjpcXFwiPCFET0NUWVBFIGh0bWw+XFxcXG48aHRtbD5cXFxcbjxoZWFkPlxcXFxuICAgIDxtZXRhIGNoYXJzZXQ9XFxcXFxcXCJ1dGYtOFxcXFxcXFwiPlxcXFxuICAgIDxtZXRhIG5hbWU9XFxcXFxcXCJ2aWV3cG9ydFxcXFxcXFwiIGNvbnRlbnQ9XFxcXFxcXCJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xLG1pbmltdW0tc2NhbGU9MSxtYXhpbXVtLXNjYWxlPTEsdXNlci1zY2FsYWJsZT1ub1xcXFxcXFwiIC8+XFxcXG4gICAgPHRpdGxlPlBhcnNlX0RuX3Z1ZTwvdGl0bGU+XFxcXG4gICAgPHNjcmlwdD5cXFxcbiAgICAgICAgY29uc3QgdnVlUGF0aCA9ICdoaWtlcjovL2ZpbGVzL3J1bGVzL2R6SG91c2UvanMvdnVlLmpzJztcXFxcbiAgICAgICAgaWYodHlwZW9mKGZiYSk9PSd1bmRlZmluZWQnfHwhZmJhKXtcXFxcbiAgICAgICAgICAgIHZhciBmYmEgPSBmeV9icmlkZ2VfYXBwO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICBpZih0eXBlb2YocmVxdWVzdCk9PSd1bmRlZmluZWQnfHwhcmVxdWVzdCl7XFxcXG4gICAgICAgICAgICAgICAgZXZhbChmYmEuZ2V0SW50ZXJuYWxKcygpKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIC8vIGZiYS5sb2codnVlUGF0aCk7XFxcXG4gICAgICAgICAgICBpZighcmVxdWVzdCh2dWVQYXRoKSl7XFxcXG4gICAgICAgICAgICAgICAgZmJhLndyaXRlRmlsZSh2dWVQYXRoLHJlcXVlc3QoJ2h0dHA6Ly9oaWtlci5ub2tpYS5wcmVzcy9oaWtlcnVsZS9ydWxlbGlzdC5qc29uP2lkPTE4MjMnKSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgIGV2YWwoZmJhLmZldGNoKHZ1ZVBhdGgpKTtcXFxcbiAgICAgICAgICAgIH1jYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgIC8vIGNvbnNvbGUubG9nKGUubWVzc2FnZSk7XFxcXG4gICAgICAgICAgICAgICAgZmJhLmxvZyhlLm1lc3NhZ2UpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgLy8gZmJhLmxvZygn5Yqg6L29dnVl57uE5Lu25a6M5q+VJyk7XFxcXG4gICAgICAgIH1jYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgYWxlcnQoZS5tZXNzYWdlKTtcXFxcbiAgICAgICAgfVxcXFxuICAgIDwvc2NyaXB0PlxcXFxuICAgIDwhLS0gICAgPHNjcmlwdCBzcmM9XFxcXFxcXCJodHRwczovL3VucGtnLmNvbS92dWVAbmV4dFxcXFxcXFwiPjwvc2NyaXB0Pi0tPlxcXFxuICAgIDwhLS0gICAgPHNjcmlwdCBzcmM9XFxcXFxcXCJmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9ydWxlcy9kekhvdXNlL2pzL3Z1ZS5qc1xcXFxcXFwiPjwvc2NyaXB0Pi0tPlxcXFxuICAgIDxzdHlsZT5cXFxcbiAgICAgICAgYm9keSB7XFxcXG4gICAgICAgICAgICBtYXJnaW46IDAgNXB4IDAgNXB4O1xcXFxuICAgICAgICAgICAgcGFkZGluZzogMCAwcHggMCAwcHg7XFxcXG4gICAgICAgICAgICAvKiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGOUYwREE7Ki9cXFxcbiAgICAgICAgICAgIGZvbnQtd2VpZ2h0OiAwO1xcXFxuICAgICAgICAgICAgZm9udC1mYW1pbHk6IFxcXFxcXFwiTWljcm9zb2Z0IFlhSGVpXFxcXFxcXCIsXFxcXFxcXCLlrovkvZNcXFxcXFxcIixcXFxcXFxcIlNlZ29lIFVJXFxcXFxcXCIsIFxcXFxcXFwiTHVjaWRhIEdyYW5kZVxcXFxcXFwiLCBIZWx2ZXRpY2EsIEFyaWFsLHNhbnMtc2VyaWYsIEZyZWVTYW5zLCBBcmltbztcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAjYXBwe1xcXFxuICAgICAgICAgICAgbWFyZ2luLXRvcDotMTBweDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAjdGlwc3tcXFxcbiAgICAgICAgICAgIG1hcmdpbi10b3A6LTEwcHg7XFxcXG4gICAgICAgICAgICBtYXJnaW4tYm90dG9tOjVweDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAuZnVuZ3tcXFxcbiAgICAgICAgICAgIHRleHQtYWxpZ246Y2VudGVyXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgZGl2LmJveCB7XFxcXG4gICAgICAgICAgICBtYXJnaW4tdG9wOi0xcHg7XFxcXG4gICAgICAgICAgICBoZWlnaHQ6IDQzcHg7XFxcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMjBweDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvKui+k+WFpeahhuWwuuWvuCovXFxcXG4gICAgICAgIGZvcm0ge1xcXFxuICAgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7XFxcXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxcXG4gICAgICAgICAgICB3aWR0aDogMTAwJTtcXFxcbiAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgIGlucHV0LCBsYWJlbCwgc2VsZWN0IHtcXFxcbiAgICAgICAgICAgIGJvcmRlcjogbm9uZTtcXFxcbiAgICAgICAgICAgIG91dGxpbmU6IG5vbmU7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLyrlrZfkvZPkvY3nva4qL1xcXFxuICAgICAgICBpbnB1dCB7XFxcXG4gICAgICAgICAgICB3aWR0aDogNzclO1xcXFxuICAgICAgICAgICAgaGVpZ2h0OiAzMnB4O1xcXFxuICAgICAgICAgICAgcGFkZGluZy1sZWZ0OiA2NnB4O1xcXFxuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMHB4O1xcXFxuICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgbGFiZWwge1xcXFxuICAgICAgICAgICAgdGV4dC1hbGlnbjpjZW50ZXI7XFxcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogNDNweDtcXFxcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcXFxcbiAgICAgICAgICAgIHdpZHRoOiA2MHB4O1xcXFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcXFxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcXFxuICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgLyrlsI/moYYqL1xcXFxuICAgICAgICAuYmFyIGxhYmVsIHtcXFxcbiAgICAgICAgICAgIC8qYmFja2dyb3VuZDogI0QwNkI2QzsqL1xcXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNXB4IDU1NXB4IDU1NXB4IDVweDtcXFxcbiAgICAgICAgICAgIHdpZHRoOiA2MHB4O1xcXFxuICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xcXFxuICAgICAgICAgICAgdG9wOiAwO1xcXFxuICAgICAgICAgICAgbGVmdDogM3B4O1xcXFxuICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgLyrovpPlhaXmoYbmoLflvI8qL1xcXFxuICAgICAgICAuYmFyIGlucHV0IHtcXFxcbiAgICAgICAgICAgIC8qYm9yZGVyLXJhZGl1czogNXB4IDU1NXB4IDU1NXB4IDVweDtcXFxcbiAgICAgICAgICAgICAqL1xcXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xcXFxuICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgLyrliJfooagqL1xcXFxuICAgICAgICBzZWxlY3Qge1xcXFxuICAgICAgICAgICAgdGV4dC1hbGlnbjpjZW50ZXI7XFxcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDo0MHB4O1xcXFxuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xcXFxuICAgICAgICAgICAgd2lkdGg6IDIwcHg7XFxcXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxcXG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxcXG4gICAgICAgIH1cXFxcblxcXFxuICAgICAgICAvKuWIl+ihqCovXFxcXG4gICAgICAgIC5saWViIHNlbGVjdHtcXFxcbiAgICAgICAgICAgIC8qYm9yZGVyLXJhZGl1czogNHB4OyovXFxcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA1NTVweCA1cHggNXB4IDU1NXB4O1xcXFxuICAgICAgICAgICAgd2lkdGg6IDgwcHg7XFxcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjtcXFxcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDtcXFxcbiAgICAgICAgICAgIHRvcDogMDtcXFxcbiAgICAgICAgICAgIHJpZ2h0OiAycHg7XFxcXG4gICAgICAgIH1cXFxcblxcXFxuICAgICAgICAvKuWktOWDjyovXFxcXG4gICAgICAgIC5yb3VuZF9pY29ue1xcXFxuICAgICAgICAgICAgd2lkdGg6IDQwcHg7XFxcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxcXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xcXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xcXFxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXFxcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcXFxuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXFxcbiAgICAgICAgfVxcXFxuICAgIDwvc3R5bGU+XFxcXG48L2hlYWQ+XFxcXG48Ym9keT5cXFxcbjxkaXYgY2xhc3M9XFxcXFxcXCJmdW5nXFxcXFxcXCI+XFxcXG4gICAgPGEgc3R5bGU9XFxcXFxcXCJmbG9hdDpsZWZ0O1xcXFxcXFwiPlxcXFxuICAgICAgICA8YnV0dG9uICA6c3R5bGU9XFxcXFxcXCInYm9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiAnK3RoZW1lcy5jbG9zZUJ0bi5iYWNrZ3JvdW5kKyc7d2lkdGg6IDgwcHg7IGZvbnQtc2l6ZTogMThweDtjb2xvcjogJyt0aGVtZXMuY2xvc2VCdG4uY29sb3JcXFxcXFxcIiBvbmNsaWNrPVxcXFxcXFwiY2FuY2VsKCk7XFxcXFxcXCI+5YWzIOmXrTwvYnV0dG9uPlxcXFxuICAgIDwvYT5cXFxcbiAgICA8YSBjbGFzcz1cXFxcXFxcImJ0biBidG4tcHJpbWFyeVxcXFxcXFwiPlxcXFxuPCEtLSAgICAgICAgPGJ1dHRvbiAgOnN0eWxlPVxcXFxcXFwiJ2JvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogJyt0aGVtZXMudGlwc0J0bi5iYWNrZ3JvdW5kKyc7d2lkdGg6IDEyMHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICcrdGhlbWVzLnRpcHNCdG4uY29sb3JcXFxcXFxcIiBAY2xpY2s9XFxcXFxcXCJzaG93VGlwcz0hc2hvd1RpcHNcXFxcXFxcIj57e3Nob3dUaXBzP1xcXFxcXFwi6ZqQ6JeP5o+Q56S6XFxcXFxcXCI6XFxcXFxcXCLmmL7npLrmj5DnpLpcXFxcXFxcIn19PC9idXR0b24+LS0+XFxcXG4gICAgICAgIDxidXR0b24gIDpzdHlsZT1cXFxcXFxcIidib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6ICcrdGhlbWVzLnRpcHNCdG4uYmFja2dyb3VuZCsnO3dpZHRoOiAxMjBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAnK3RoZW1lcy50aXBzQnRuLmNvbG9yXFxcXFxcXCIgQGNsaWNrPVxcXFxcXFwic2hvd1RpcHM9IXNob3dUaXBzXFxcXFxcXCIgdi10ZXh0PVxcXFxcXFwic2hvd1RpcHM/J+makOiXj+aPkOekuic6J+aYvuekuuaPkOekuidcXFxcXFxcIj48L2J1dHRvbj5cXFxcbiAgICA8L2E+XFxcXG4gICAgPGEgc3R5bGU9XFxcXFxcXCJmbG9hdDpyaWdodFxcXFxcXFwiPlxcXFxuICAgICAgICA8YnV0dG9uIDpzdHlsZT1cXFxcXFxcIidib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6ICcrdGhlbWVzLnNhdmVCdG4uYmFja2dyb3VuZCsnO3dpZHRoOiA4MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICcrdGhlbWVzLnNhdmVCdG4uY29sb3JcXFxcXFxcIiBvbmNsaWNrPVxcXFxcXFwiY2xpY2ttZSgn6YWNIOe9riDlt7Ig5L+dIOWtmCDvvIEnLCAxMDAwLCAn5byAJyk7XFxcXFxcXCI+5L+dIOWtmDwvYnV0dG9uPlxcXFxuICAgIDwvYT5cXFxcblxcXFxuPC9kaXY+XFxcXG48YnI+XFxcXG48ZGl2IGlkPVxcXFxcXFwiYXBwXFxcXFxcXCI+XFxcXG4gICAgPGg2IGlkPVxcXFxcXFwidGlwc1xcXFxcXFwiIHYtaHRtbD1cXFxcXFxcInRpcHNcXFxcXFxcIiB2LXNob3c9XFxcXFxcXCJzaG93VGlwc1xcXFxcXFwiPjwvaDY+XFxcXG4gICAgPGRpdiBjbGFzcz1cXFxcXFxcImJveCBiYXJcXFxcXFxcIiB2LWZvcj1cXFxcXFxcIm9wdGlvbiBpbiBvcHRpb25zXFxcXFxcXCI+XFxcXG4gICAgICAgIDxmb3JtPlxcXFxuPCEtLSAgICAgICAgICAgIDxsYWJlbCB0eXBlPVxcXFxcXFwic3VibWl0XFxcXFxcXCIgOnN0eWxlPVxcXFxcXFwiJ2JhY2tncm91bmQ6Jyt0aGVtZXMuYmFybGFiZWwuYmFja2dyb3VuZCsnO2NvbG9yOicrdGhlbWVzLmJhcmxhYmVsLmNvbG9yXFxcXFxcXCI+e3sgb3B0aW9uLm5hbWUgfX08L2xhYmVsPi0tPlxcXFxuICAgICAgICAgICAgPGxhYmVsIHR5cGU9XFxcXFxcXCJzdWJtaXRcXFxcXFxcIiA6c3R5bGU9XFxcXFxcXCInYmFja2dyb3VuZDonK3RoZW1lcy5iYXJsYWJlbC5iYWNrZ3JvdW5kKyc7Y29sb3I6Jyt0aGVtZXMuYmFybGFiZWwuY29sb3JcXFxcXFxcIiB2LXRleHQ9XFxcXFxcXCJvcHRpb24ubmFtZVxcXFxcXFwiPjwvbGFiZWw+XFxcXG4gICAgICAgICAgICA8aW5wdXQgOnN0eWxlPVxcXFxcXFwiJ2JhY2tncm91bmQ6Jyt0aGVtZXMuYmFySW5wdXQuYmFja2dyb3VuZCsnO2JvcmRlcjogM3B4IHNvbGlkICcrdGhlbWVzLmJhcklucHV0LmNvbG9yXFxcXFxcXCIgdHlwZT1cXFxcXFxcInRleHRcXFxcXFxcIiBvbmNsaWNrPVxcXFxcXFwicmVzZXRTZWxlY3QodGhpcy5pZClcXFxcXFxcIiA6cGxhY2Vob2xkZXI9XFxcXFxcXCJvcHRpb24ucGxhY2Vob2xkZXJ8fHBsYWNlaG9sZGVyXFxcXFxcXCIgdi1tb2RlbD1cXFxcXFxcIm9wdGlvbi52YWx1ZVxcXFxcXFwiIHYtYmluZDppZD1cXFxcXFxcIm9wdGlvbi5pZFxcXFxcXFwiPlxcXFxuICAgICAgICAgICAgPGRpdiBjbGFzcz1cXFxcXFxcImxpZWJcXFxcXFxcIj5cXFxcbiAgICAgICAgICAgICAgICA8c2VsZWN0IDpzdHlsZT1cXFxcXFxcIidiYWNrZ3JvdW5kOicrdGhlbWVzLnNlbGVjdC5iYWNrZ3JvdW5kKyc7Y29sb3I6Jyt0aGVtZXMuc2VsZWN0LmNvbG9yXFxcXFxcXCIgOmNsZWFyYWJsZT1cXFxcXFxcInRydWVcXFxcXFxcIiBzaXplPVxcXFxcXFwiMlxcXFxcXFwiIDppZD1cXFxcXFxcIm9wdGlvbi5pZCsnU2VsZWN0J1xcXFxcXFwiIDpuYW1lPVxcXFxcXFwib3B0aW9uLmlkXFxcXFxcXCIgb25jaGFuZ2U9XFxcXFxcXCJnZXRPcHRpb24odGhpcy5pZCx0aGlzLm5hbWUpXFxcXFxcXCIgIHYtbW9kZWw9XFxcXFxcXCJvcHRpb24udmFsdWVcXFxcXFxcIj5cXFxcbjwhLS0gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdi1pZj1cXFxcXFxcIm9wdGlvbi5pZCE9PSdxanUnJiZvcHRpb24uaWQhPT0nY2onXFxcXFxcXCIgOnZhbHVlPVxcXFxcXFwic2VsXFxcXFxcXCIgOmtleT1cXFxcXFxcImluZGV4XFxcXFxcXCIgdi1mb3I9XFxcXFxcXCIoc2VsLGluZGV4KSBpbiBteVNlbGVjdFxcXFxcXFwiPnt7IHNlbCB9fTwvb3B0aW9uPi0tPlxcXFxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHYtaWY9XFxcXFxcXCJvcHRpb24uaWQhPT0ncWp1JyYmb3B0aW9uLmlkIT09J2NqJ1xcXFxcXFwiIDp2YWx1ZT1cXFxcXFxcInNlbFxcXFxcXFwiIDprZXk9XFxcXFxcXCJpbmRleFxcXFxcXFwiIHYtZm9yPVxcXFxcXFwiKHNlbCxpbmRleCkgaW4gbXlTZWxlY3RcXFxcXFxcIiB2LXRleHQ9XFxcXFxcXCJzZWxcXFxcXFxcIj48L29wdGlvbj5cXFxcbjwhLS0gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gdi1lbHNlLWlmPVxcXFxcXFwib3B0aW9uLmlkPT09J3FqdSdcXFxcXFxcIiA6dmFsdWU9XFxcXFxcXCJzZWxcXFxcXFxcIiA6a2V5PVxcXFxcXFwiaW5kZXhcXFxcXFxcIiB2LWZvcj1cXFxcXFxcIihzZWwsaW5kZXgpIGluIFsn6buY6K6kJ10uY29uY2F0KG15U2VsZWN0KVxcXFxcXFwiPnt7IHNlbCB9fTwvb3B0aW9uPi0tPlxcXFxuICAgICAgICAgICAgICAgICAgICA8b3B0aW9uIHYtZWxzZS1pZj1cXFxcXFxcIm9wdGlvbi5pZD09PSdxanUnXFxcXFxcXCIgOnZhbHVlPVxcXFxcXFwic2VsXFxcXFxcXCIgOmtleT1cXFxcXFxcImluZGV4XFxcXFxcXCIgdi1mb3I9XFxcXFxcXCIoc2VsLGluZGV4KSBpbiBbJ+m7mOiupCddLmNvbmNhdChteVNlbGVjdClcXFxcXFxcIiB2LXRleHQ9XFxcXFxcXCJzZWxcXFxcXFxcIj48L29wdGlvbj5cXFxcbjwhLS0gICAgICAgICAgICAgICAgICAgIDxvcHRpb24gOnZhbHVlPVxcXFxcXFwic2VsXFxcXFxcXCIgOmtleT1cXFxcXFxcImluZGV4XFxcXFxcXCIgdi1lbHNlIHYtZm9yPVxcXFxcXFwiKHNlbCxpbmRleCkgaW4gY2pTZWxcXFxcXFxcIj57eyBzZWwgfX08L29wdGlvbj4tLT5cXFxcbiAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiA6dmFsdWU9XFxcXFxcXCJzZWxcXFxcXFxcIiA6a2V5PVxcXFxcXFwiaW5kZXhcXFxcXFxcIiB2LWVsc2Ugdi1mb3I9XFxcXFxcXCIoc2VsLGluZGV4KSBpbiBjalNlbFxcXFxcXFwiIHYtdGV4dD1cXFxcXFxcInNlbFxcXFxcXFwiPjwvb3B0aW9uPlxcXFxuICAgICAgICAgICAgICAgIDwvc2VsZWN0PlxcXFxuICAgICAgICAgICAgPC9kaXY+XFxcXG4gICAgICAgIDwvZm9ybT5cXFxcbiAgICA8L2Rpdj5cXFxcbjwvZGl2PlxcXFxuPGRpdj5cXFxcbiAgICA8YSB2LWZvcj1cXFxcXFxcInZlciBpbiB2ZXJpbmZvXFxcXFxcXCIgc3R5bGU9XFxcXFxcXCJmbG9hdDpsZWZ0O21hcmdpbi10b3A6MXB4O21hcmdpbi1yaWdodDogMjBweFxcXFxcXFwiIHYtYmluZDppZD0ndmVyLmlkJyBvbmNsaWNrPVxcXFxcXFwiZG9PcHRpb24odGhpcy5pZClcXFxcXFxcIj5cXFxcbiAgICAgICAgPGltZyA6c3JjPVxcXFxcXFwidmVyLmF2YXRhclxcXFxcXFwiIGNsYXNzPVxcXFxcXFwicm91bmRfaWNvblxcXFxcXFwiICBhbHQ9XFxcXFxcXCJcXFxcXFxcIj5cXFxcbjwhLS0gICAgICAgIDxzcGFuIHN0eWxlPVxcXFxcXFwibWFyZ2luLWxlZnQ6MTBweDtsaW5lLWhlaWdodDoxMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiBncmV5O1xcXFxcXFwiPnt7IHZlci5hdXRob3IgfX08L3NwYW4+LS0+XFxcXG4gICAgICAgIDxzcGFuIHN0eWxlPVxcXFxcXFwibWFyZ2luLWxlZnQ6MTBweDtsaW5lLWhlaWdodDoxMHB4O2ZvbnQtc2l6ZToxMnB4O2NvbG9yOiBncmV5O1xcXFxcXFwiIHYtdGV4dD1cXFxcXFxcInZlci5hdXRob3JcXFxcXFxcIj48L3NwYW4+XFxcXG4gICAgPC9hPlxcXFxuICAgIDxhIHN0eWxlPVxcXFxcXFwiZmxvYXQ6cmlnaHQ7bWFyZ2luLXRvcDoxMHB4O1xcXFxcXFwiPlxcXFxuICAgICAgICA8YnV0dG9uIDpzdHlsZT1cXFxcXFxcIidib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6Jyt0aGVtZXMuc2F2ZUNsb3NlQnRuLmJhY2tncm91bmQrJzt3aWR0aDogMTYwcHg7aGVpZ2h0OjQwcHg7IGZvbnQtc2l6ZTogMThweDtjb2xvcjogJyt0aGVtZXMuc2F2ZUNsb3NlQnRuLmNvbG9yXFxcXFxcXCIgb25jbGljaz1cXFxcXFxcImNsaWNrbWUoJ+mFjSDnva4g5beyIOS/nSDlrZgg77yBJywgMTAwMCwgJ+WFsycpO1xcXFxcXFwiPuS/neWtmOW5tuWFs+mXreeVjOmdojwvYnV0dG9uPlxcXFxuICAgIDwvYT5cXFxcbjwvZGl2PlxcXFxuPHNjcmlwdD5cXFxcbiAgICBsZXQgdGlwcyA9IGDmj5DnpLrvvJo8YnI+4pGg5rOo5oSP5o+S5Lu26YCJ6aG577yM5rKh5pyJ5omL5Yqo5a+85YWl5o+S5Lu255qE6K+d5LiN55So5Yqo5a6D44CC5aaC6K6+572u5LiN5b2T5Lya5a+86Ie06KeE5YiZ5peg5rOV5L2/55So77yMPGJyPuino+WGs+WKnuazle+8muinhueVjOaJk+W8gOabtOWkmuiuvue9ruKGkuaWh+S7tueuoeeQhuKGkueCuWNhY2hl4oaS6ZW/5oyJTXlQYXJzZVNldC5qc29u5Yig6Zmk5o6J77ybPGJyPuKRoeWFqOWxgOiuvue9ruWmguaenOmAieaLqeS6humdnum7mOiupOmCo+S5iOWFqOmDqOeahOino+aekOS8muS9v+eUqOi/meS4gOiuvue9ru+8jOS4jeaDs+i/meagt+eahOivneivt+Whq+WFpem7mOiupO+8mzxicj7ikaLnu7/oibLkv53lrZjmjInpkq7ku4Xku4Xkv53lrZjphY3nva7kuI3kvJrlhbPpl63orr7nva7pobXpnaLvvIzphY3nva7lkI7mg7Pkv53lrZjlubblhbPpl63orr7nva7pobXpnaLnmoTor53or7fngrnok53oibLmjInpkq7vvJs8YnI+4pGj5aaC5p6c6YGH5Yiw5L+d5a2Y5oyJ6ZKu54K55LiN5Yqo5oiW6ICF5oql6ZSZ55qE5oOF5Ya177yM5Lul5LiL6Lev5b6E5oyo552A5Yig6Zmk5LiA6YGN77yM54S25ZCO6YeN5paw5ouJ5Y+W5o+S5Lu277yM572R6aG15YaN5omT5byA5q2k572R6aG1W+S4jeimgeWFiOaLieS7o+eggV3jgILorrDlvpflpIfku708YnI+XFxcXG7kuLvmj5Lku7blrZjmlL7ot6/lvoQ6IC9jYWNoZS9QYXJzZV9Ebi5qczxicj5cXFxcbue9kemhteiEmuacrOWtmOaUvui3r+W+hDogL2NhY2hlL1BhcnNlX0RuLmh0bWw8YnI+XFxcXG7ml6fmlq3mj5LphY3nva7ot6/lvoQ6L2NhY2hlL015UGFyc2VTZXQuanNvbjxicj5cXFxcbuaWsOaWreaPkumFjee9rui3r+W+hC9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb248YnI+XFxcXG7kuLvpopjmlofku7Y6L2NhY2hlL015VGhlbWUuanNvbjxicj5cXFxcbuS4u+mimOaWh+S7tjovY2FjaGUvTXlUaGVtZS5qc29uPGJyPlxcXFxu6Ieq5Yqo5qGj6Kej5p6QOi9jYWNoZS9NeUppZXhpLmpzb248YnI+XFxcXG4gICAg4pGk6ZiF6K+75a6M5o+Q56S654K55YWz6Zet5Yqg6L295a6M5pW06K6+572u6aG16Z2i77yM5aaC5Ye66Zeu6aKY5peg5rOV6Ieq6KGM6Kej5Yaz54K55Zu+54mH6L+b5YWl6K665Z2b5ZCR5oiR5Y+N6aaI44CCPGJyPmA7XFxcXG4gICAgbGV0IHBsYWNlaG9sZGVyPSfovpPlhaXop6PmnpDlkI3miJbogIVVUkwuLi4uLi4nO1xcXFxuICAgIC8vI2FhOTZkYSAjZmM1MTg1XFxcXG4gICAgbGV0IHRoZW1lcyA9IHtcXFxcbiAgICAgICAgbmFtZTon6buY6K6k5Li76aKYJyxcXFxcbiAgICAgICAgY2xvc2VCdG46e2NvbG9yOicjZjZmNmY2JyxiYWNrZ3JvdW5kOicjYWE5NmRhJ30sXFxcXG4gICAgICAgIHNhdmVCdG46e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjMDY4MDA2J30sXFxcXG4gICAgICAgIHNhdmVDbG9zZUJ0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNUJGQzUnfSxcXFxcbiAgICAgICAgdGlwc0J0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNUJGQzUnfSxcXFxcbiAgICAgICAgYmFybGFiZWw6e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjYWE5NmRhJ30sXFxcXG4gICAgICAgIGJhcklucHV0Ontjb2xvcjonI2FhOTZkYScsYmFja2dyb3VuZDonI2ZmZmZkMid9LFxcXFxuICAgICAgICBzZWxlY3Q6e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjYWE5NmRhJ30sXFxcXG4gICAgfTtcXFxcbiAgICBsZXQgdGhlbWVEZWYgPSB7XFxcXFxcXCJuYW1lXFxcXFxcXCI6XFxcXFxcXCLmlq3lv7Xljp/nmq5cXFxcXFxcIixcXFxcXFxcImNsb3NlQnRuXFxcXFxcXCI6e1xcXFxcXFwiY29sb3JcXFxcXFxcIjpcXFxcXFxcIiNGOUYwREFcXFxcXFxcIixcXFxcXFxcImJhY2tncm91bmRcXFxcXFxcIjpcXFxcXFxcIiNjNTQ2NGFcXFxcXFxcIn0sXFxcXFxcXCJzYXZlQnRuXFxcXFxcXCI6e1xcXFxcXFwiY29sb3JcXFxcXFxcIjpcXFxcXFxcIiNGOUYwREFcXFxcXFxcIixcXFxcXFxcImJhY2tncm91bmRcXFxcXFxcIjpcXFxcXFxcIiMwNjgwMDZcXFxcXFxcIn0sXFxcXFxcXCJzYXZlQ2xvc2VCdG5cXFxcXFxcIjp7XFxcXFxcXCJjb2xvclxcXFxcXFwiOlxcXFxcXFwiI0Y5RjBEQVxcXFxcXFwiLFxcXFxcXFwiYmFja2dyb3VuZFxcXFxcXFwiOlxcXFxcXFwiIzA1QkZDNVxcXFxcXFwifSxcXFxcXFxcInRpcHNCdG5cXFxcXFxcIjp7XFxcXFxcXCJjb2xvclxcXFxcXFwiOlxcXFxcXFwiI0Y5RjBEQVxcXFxcXFwiLFxcXFxcXFwiYmFja2dyb3VuZFxcXFxcXFwiOlxcXFxcXFwiIzA1QkZDNVxcXFxcXFwifSxcXFxcXFxcImJhcmxhYmVsXFxcXFxcXCI6e1xcXFxcXFwiY29sb3JcXFxcXFxcIjpcXFxcXFxcIiNGOUYwREFcXFxcXFxcIixcXFxcXFxcImJhY2tncm91bmRcXFxcXFxcIjpcXFxcXFxcIiNEMDZCNkNcXFxcXFxcIn0sXFxcXFxcXCJiYXJJbnB1dFxcXFxcXFwiOntcXFxcXFxcImNvbG9yXFxcXFxcXCI6XFxcXFxcXCIjRDA2QjZDXFxcXFxcXCIsXFxcXFxcXCJiYWNrZ3JvdW5kXFxcXFxcXCI6XFxcXFxcXCIjRjlGMERBXFxcXFxcXCJ9LFxcXFxcXFwic2VsZWN0XFxcXFxcXCI6e1xcXFxcXFwiY29sb3JcXFxcXFxcIjpcXFxcXFxcIiNGOUYwREFcXFxcXFxcIixcXFxcXFxcImJhY2tncm91bmRcXFxcXFxcIjpcXFxcXFxcIiNEMDZCNkNcXFxcXFxcIn19O1xcXFxuICAgIHZhciB0aGVtZVJvdXRlID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015VGhlbWUuanNvblxcXFxcXFwiO1xcXFxuICAgIGlmKCFmYmEuZmV0Y2godGhlbWVSb3V0ZSkpe1xcXFxuICAgICAgICBmYmEud3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkoe25vd190aGVtZTon6buY6K6k5Li76aKYJyx0aGVtZXM6W3RoZW1lcyx0aGVtZURlZl19KSlcXFxcbiAgICB9XFxcXG4gICAgdHJ5IHtcXFxcbiAgICAgICAgbGV0IG15VGhlbWVzID0gSlNPTi5wYXJzZShmYmEuZmV0Y2godGhlbWVSb3V0ZSkpO1xcXFxuICAgICAgICBsZXQgbm93VGhlbWUgPSBteVRoZW1lcy50aGVtZXMuZmlsdGVyKGl0PT5pdC5uYW1lID09PSBteVRoZW1lcy5ub3dfdGhlbWUpO1xcXFxuICAgICAgICB0aGVtZXMgPSBub3dUaGVtZT9ub3dUaGVtZVswXTpteVRoZW1lcy50aGVtZXNbMF07XFxcXG4gICAgfWNhdGNoIChlKSB7fVxcXFxuXFxcXG4gICAgLy8g5pat5b+15Yid5aeL5YyW6YOo5YiGXFxcXG4gICAgY29uc3QgYWxsQXBpPVsnaHR0cHM6Ly90ZXN0LnJvbmd4aW5ndnIuY29tL3Rlc3QvP3VybD0nLCdodHRwOi8vY2FjaGUubGFuZ3VhbmcuaWN1Ojg4L2RpZGkucGhwP3VybD0nXTtcXFxcbiAgICB2YXIgc2V0dGluZ3MgPSB7XFxcXG4gICAgICAgIHF5OiAn5LiH6IO96Kej5p6Q4pK/JyxcXFxcbiAgICAgICAgeWs6ICfkuIfog73op6PmnpDikr8nLFxcXFxuICAgICAgICB0eDogJ+S4h+iDveino+aekOKSvycsXFxcXG4gICAgICAgIG1nOiAn5LiH6IO96Kej5p6Q4pK/JyxcXFxcbiAgICAgICAgYmw6ICfkuIfog73op6PmnpDikr8nLFxcXFxuICAgICAgICBzaDogJ+S4h+iDveino+aekOKSvycsXFxcXG4gICAgICAgIHhnOiAn5LiH6IO96Kej5p6Q4pK/JyxcXFxcbiAgICAgICAgLy8gYWw6ICfkuIfog73op6PmnpDikr8nLFxcXFxuICAgICAgICBwcDogJ+S4h+iDveino+aekOKSvycsXFxcXG4gICAgICAgIG1pOiAn5LiH6IO96Kej5p6Q4pK/JyxcXFxcbiAgICAgICAgbGU6ICfkuIfog73op6PmnpDikr8nLFxcXFxuICAgICAgICBsdDogJ+S4h+iDveino+aekOKSvycsLy/pvpnohb5cXFxcbiAgICAgICAgcnI6J+S4h+iDveino+aekOKSvycsLy/kurrkurrov7dcXFxcbiAgICAgICAgd2Q6J+S4h+iDveino+aekOKSvycsLy/kupTmr5LkupFcXFxcbiAgICAgICAgb3RoOiAn6YGT6ZW/5LuT5bqT6YCa5YWNJyxcXFxcbiAgICAgICAgb25lOiAnMTA4MCcsXFxcXG4gICAgICAgIGZ1bjogJ+iejeWFtCcsXFxcXG4gICAgICAgIHFqdTogJ+m7mOiupCcsXFxcXG4gICAgICAgIGNqOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcydcXFxcbiAgICB9O1xcXFxuICAgIHZhciBvbGRSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFxcXFxcIjtcXFxcbiAgICB2YXIgbXlTZXQgPSBmYmEuZmV0Y2gob2xkUm91dGUpO1xcXFxuICAgIHZhciBuZXdSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb25cXFxcXFxcIjtcXFxcbiAgICBpZighZmJhLmZldGNoKG5ld1JvdXRlKSl7XFxcXG4gICAgICAgIGZiYS53cml0ZUZpbGUobmV3Um91dGUsSlNPTi5zdHJpbmdpZnkoe3NldHRpbmdzOnNldHRpbmdzLHRpdGxlOltcXFxcXFxcInl1bjE3MTdcXFxcXFxcIixcXFxcXFxcIuS9oOeIueenkeaKgFxcXFxcXFwiLFxcXFxcXFwi6J6N5YW0XFxcXFxcXCIsXFxcXFxcXCLkurrkurrov7ct5LyY6YW3XFxcXFxcXCJdLGNvZGVzOntcXFxcXFxcIuS9oOeIueenkeaKgFxcXFxcXFwiOlxcXFxcXFwiaHR0cDovL2NhY2hlLmxhbmd1YW5nLmljdTo4OC9kaWRpLnBocD91cmw9XFxcXFxcXCIsXFxcXFxcXCLono3lhbRcXFxcXFxcIjpcXFxcXFxcImh0dHBzOi8vdGVzdC5yb25neGluZ3ZyLmNvbS90ZXN0Lz91cmw9XFxcXFxcXCIsXFxcXFxcXCLkurrkurrov7ct5LyY6YW3XFxcXFxcXCI6XFxcXFxcXCJodHRwczovL3N2aXAucmVucmVubWkuY2M6MjIyMi9hcGkvP2tleT1ubjRqOHJ1a1BYU1Z6Ujc4RTkmdXJsPVxcXFxcXFwifX0pKVxcXFxuICAgIH1cXFxcbiAgICB2YXIgbmV3Q29uZmlnID0gZmJhLmZldGNoKG5ld1JvdXRlKTtcXFxcbiAgICB2YXIgbXlTZWxlY3QgPSBbXTtcXFxcbiAgICBmdW5jdGlvbiBjb21wYXJlKGxpc3QpIHtcXFxcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChpdCkge1xcXFxuICAgICAgICAgICAgcmV0dXJuICFsaXN0LmluY2x1ZGVzKGl0KVxcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIGlmKG5ld0NvbmZpZyYmbmV3Q29uZmlnLmxlbmd0aD4yMCl7XFxcXG4gICAgICAgIGV2YWwoXFxcXFxcXCJuZXdDb25maWcgPVxcXFxcXFwiICsgbmV3Q29uZmlnICsgXFxcXFxcXCI7XFxcXFxcXCIpO1xcXFxuICAgICAgICBsZXQgbmV3S2V5cyA9IE9iamVjdC5rZXlzKG5ld0NvbmZpZy5zZXR0aW5ncyk7XFxcXG4gICAgICAgIGxldCBub3dLZXlzID0gT2JqZWN0LmtleXMoc2V0dGluZ3MpO1xcXFxuICAgICAgICBmb3IobGV0IGkgaW4gbmV3S2V5cyl7Ly/muIXpmaTlpJrkvZnnmoToioLngrlcXFxcbiAgICAgICAgICAgIGlmKCFub3dLZXlzLmluY2x1ZGVzKG5ld0tleXNbaV0pKXtcXFxcbiAgICAgICAgICAgICAgICBkZWxldGUgbmV3Q29uZmlnLnNldHRpbmdzW25ld0tleXNbaV1dXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgc2V0dGluZ3MgPSBPYmplY3QuYXNzaWduKHNldHRpbmdzLG5ld0NvbmZpZy5zZXR0aW5ncyk7XFxcXG4gICAgICAgIHZhciB5Y1RpdGxlID0gWydkZWZhdWx0UGFyc2UnLCAnZGVmYXVsdFBhcnNlV2ViJywnbWFvc3MnLCAnQ2l0eUlQJywgJ2NhY2hlTTN1OCcsICdwY1VBJywgJ3BhcnNlTGMnLCAnZ3BhcnNlJywgJ25wYXJzZSddO1xcXFxuICAgICAgICBteVNlbGVjdCA9IG5ld0NvbmZpZy50aXRsZS5maWx0ZXIoY29tcGFyZSh5Y1RpdGxlKSk7XFxcXG4gICAgICAgIC8vIG15U2VsZWN0ID0gbXlTZWxlY3QubWFwKChpdCk9PntcXFxcbiAgICAgICAgLy8gICAgIGxldCBmbGFnID0gJ+KTiic7XFxcXG4gICAgICAgIC8vICAgICBpZih0eXBlb2YobmV3Q29uZmlnLmNvZGVzW2l0XSk9PT0nZnVuY3Rpb24nKXtcXFxcbiAgICAgICAgLy8gICAgICAgICBmbGFnID0gJ+KSvyc7XFxcXG4gICAgICAgIC8vICAgICB9ZWxzZSBpZih0eXBlb2YobmV3Q29uZmlnLmNvZGVzW2l0XSk9PT0ndW5kZWZpbmVkJyl7XFxcXG4gICAgICAgIC8vICAgICAgICAgZmxhZyA9ICcnO1xcXFxuICAgICAgICAvLyAgICAgfVxcXFxuICAgICAgICAvLyAgICAgcmV0dXJuIGZsYWcraXRcXFxcbiAgICAgICAgLy8gfSk7XFxcXG4gICAgfVxcXFxuICAgIC8vZmJhLmxvZyhKU09OLnN0cmluZ2lmeShteVNlbGVjdCkpO1xcXFxuXFxcXG4gICAgbGV0IG9wdGlvbnMgPSBbXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6J+eIseWlh+iJuicsXFxcXG4gICAgICAgICAgICBpZDoncXknLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MucXksXFxcXG4gICAgICAgICAgICBwbGFjZWhvbGRlcjon6K6+572u54ix5aWH6Im6J1xcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOifkvJjphbcnLFxcXFxuICAgICAgICAgICAgaWQ6J3lrJyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnlrXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6J+iFvuiurycsXFxcXG4gICAgICAgICAgICBpZDondHgnLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MudHhcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTon6IqS5p6cJyxcXFxcbiAgICAgICAgICAgIGlkOidtZycsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5tZ1xcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOiflk5Tlk6nlk5Tlk6knLFxcXFxuICAgICAgICAgICAgaWQ6J2JsJyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLmJsXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6J+aQnOeLkCcsXFxcXG4gICAgICAgICAgICBpZDonc2gnLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Muc2hcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTon6KW/55OcJyxcXFxcbiAgICAgICAgICAgIGlkOid4ZycsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy54Z1xcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOidQUFRWJyxcXFxcbiAgICAgICAgICAgIGlkOidwcCcsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5wcFxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOiflkqrlkpUnLFxcXFxuICAgICAgICAgICAgaWQ6J21pJyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLm1pXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6J+S5kOinhicsXFxcXG4gICAgICAgICAgICBpZDonbGUnLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3MubGVcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTonMTkwNScsXFxcXG4gICAgICAgICAgICBpZDonb25lJyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLm9uZVxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOifpo47ooYwnLFxcXFxuICAgICAgICAgICAgaWQ6J2Z1bicsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5mdW5cXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTon6b6Z6IW+JyxcXFxcbiAgICAgICAgICAgIGlkOidsdCcsXFxcXG4gICAgICAgICAgICB2YWx1ZTpzZXR0aW5ncy5sdFxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOifkurrkurrov7cnLFxcXFxuICAgICAgICAgICAgaWQ6J3JyJyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnJyXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6J+S6lOavkicsXFxcXG4gICAgICAgICAgICBpZDond2QnLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Mud2RcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgbmFtZTon5YW25LuWJyxcXFxcbiAgICAgICAgICAgIGlkOidvdGgnLFxcXFxuICAgICAgICAgICAgdmFsdWU6c2V0dGluZ3Mub3RoXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIG5hbWU6J+WFqOWxgCcsXFxcXG4gICAgICAgICAgICBpZDoncWp1JyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLnFqdVxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICB7XFxcXG4gICAgICAgICAgICBuYW1lOifmj5Lku7YnLFxcXFxuICAgICAgICAgICAgaWQ6J2NqJyxcXFxcbiAgICAgICAgICAgIHZhbHVlOnNldHRpbmdzLmNqXFxcXG4gICAgICAgIH0sXFxcXG4gICAgXTtcXFxcblxcXFxuICAgIGZ1bmN0aW9uIERpZChpZCl7XFxcXG4gICAgICAgIHJldHVybiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpZCk7XFxcXG4gICAgfVxcXFxuICAgIGZ1bmN0aW9uIGdldE9wdGlvbihpZCx0aXRsZSkge1xcXFxuICAgICAgICB2YXIgb2JqID0gRGlkKGlkKTtcXFxcbiAgICAgICAgRGlkKHRpdGxlKS52YWx1ZSA9IG9iai5vcHRpb25zW29iai5zZWxlY3RlZEluZGV4XS50ZXh0O1xcXFxuICAgICAgICAvLyBEaWQodGl0bGUpLnZhbHVlID0gb2JqLm9wdGlvbnNbb2JqLnNlbGVjdGVkSW5kZXhdLnRleHQucmVwbGFjZSgv4pOKfOKSvy9nLCcnKTtcXFxcbiAgICB9XFxcXG4gICAgZnVuY3Rpb24gcmVzZXRTZWxlY3QoaWQpe1xcXFxuICAgICAgICBEaWQoaWQrXFxcXFxcXCJTZWxlY3RcXFxcXFxcIikub3B0aW9ucy5zZWxlY3RlZEluZGV4ID0gLTE7XFxcXG4gICAgfVxcXFxuXFxcXG4gICAgLy/lh73mlbDpg6jliIZcXFxcblxcXFxuICAgIGZ1bmN0aW9uIFRvYXN0KG1zZyxkdXJhdGlvbil7XFxcXG4gICAgICAgIGR1cmF0aW9uPWlzTmFOKGR1cmF0aW9uKT8yMDAwOmR1cmF0aW9uO1xcXFxuICAgICAgICB2YXIgbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1xcXFxuICAgICAgICBtLmlubmVySFRNTCA9IG1zZztcXFxcbiAgICAgICAgbS5zdHlsZS5jc3NUZXh0PVxcXFxcXFwid2lkdGg6NDUlOyBtaW4td2lkdGg6MTUwcHg7IGJhY2tncm91bmQ6IzMxMTsgb3BhY2l0eTowLjY7IGhlaWdodDphdXRvO21pbi1oZWlnaHQ6IDQ1cHg7IGNvbG9yOiNmZmY7IGxpbmUtaGVpZ2h0OjQ1cHg7IHRleHQtYWxpZ246Y2VudGVyOyBib3JkZXItcmFkaXVzOjEwcHg7IHBvc2l0aW9uOmZpeGVkOyB0b3A6NjAlOyBsZWZ0OjI2JTsgei1pbmRleDo5OTk5OTk7XFxcXFxcXCI7XFxcXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobSk7XFxcXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XFxcXG4gICAgICAgICAgICB2YXIgZCA9IDAuNTtcXFxcbiAgICAgICAgICAgIG0uc3R5bGUud2Via2l0VHJhbnNpdGlvbiA9ICctd2Via2l0LXRyYW5zZm9ybSAnICsgZCArICdzIGVhc2UtaW4sIG9wYWNpdHkgJyArIGQgKyAncyBlYXNlLWluJztcXFxcbiAgICAgICAgICAgIG0uc3R5bGUub3BhY2l0eSA9ICcwJztcXFxcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobSkgfSwgZCAqIDEwMDApO1xcXFxuICAgICAgICB9LCBkdXJhdGlvbik7XFxcXG4gICAgfVxcXFxuXFxcXG4gICAgZnVuY3Rpb24gb3BlbkRuUGFnZSgpe1xcXFxuICAgICAgICBmYmEub3BlbihKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICBydWxlOiBcXFxcXFxcIj1eX149XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLnvJbovpHop6PmnpBcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU957yW6L6RI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZ3JvdXA6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIC8vZmluZFJ1bGU6IFxcXFxcXFwianM6dGhpcy5kPVtdOyQucmVxdWlyZShcXFxcXFxcXFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmpzP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFxcXFxcXFxcXCIpLmVkaXQoKTtzZXRSZXN1bHQoZCk7XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBwcmVSdWxlOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHt9XFxcXG4gICAgICAgIH0pKTtcXFxcbiAgICB9XFxcXG4gICAgZnVuY3Rpb24gb3BlblRoZW1lKCl7XFxcXG4gICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgIHJ1bGU6IFxcXFxcXFwiPV5fXj1cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuS4u+mimOeuoeeQhlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3kuLvpopgjbm9IaXN0b3J5IyNub1JlY29yZEhpc3RvcnkjXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBncm91cDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgcHJlUnVsZTogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7fVxcXFxuICAgICAgICB9KSk7XFxcXG4gICAgfVxcXFxuICAgIGZ1bmN0aW9uIG9wZW5KeE1hbmFnZSgpe1xcXFxuICAgICAgICBmYmEub3BlbihKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICBydWxlOiBcXFxcXFxcIj1eX149XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLop6PmnpDphY3nva7nrqHnkIZcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96Kej5p6QI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZ3JvdXA6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHByZVJ1bGU6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBleHRyYToge31cXFxcbiAgICAgICAgfSkpO1xcXFxuICAgIH1cXFxcbiAgICBmdW5jdGlvbiBjYW5jZWwoKXtcXFxcbiAgICAgICAgaWYoIW15U2V0KXtcXFxcbiAgICAgICAgICAgIGZiYS53cml0ZUZpbGUob2xkUm91dGUsIEpTT04uc3RyaW5naWZ5KHNldHRpbmdzLCBudWxsLCA0KSk7XFxcXG4gICAgICAgICAgICBmYmEucmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgZmJhLmJhY2soZmFsc2UpO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuICAgIGZ1bmN0aW9uIGNsaWNrbWUobXNnLGR1cmF0aW9uLHRpdGxlKXtcXFxcbiAgICAgICAgdHJ5e1xcXFxuICAgICAgICAgICAgZm9yKGxldCBrZXkgaW4gc2V0dGluZ3Mpe1xcXFxuICAgICAgICAgICAgICAgIC8vIGZiYS5sb2coRGlkKGtleSkrJycra2V5KTtcXFxcbiAgICAgICAgICAgICAgICB0cnl7XFxcXG4gICAgICAgICAgICAgICAgICAgIC8vc2V0dGluZ3Nba2V5XSA9IERpZChrZXkpLnZhbHVlLnJlcGxhY2UoL+KTinzikr8vZywnJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHNldHRpbmdzW2tleV0gPSBEaWQoa2V5KS52YWx1ZTtcXFxcbiAgICAgICAgICAgICAgICB9Y2F0Y2goZSl7XFxcXG4gICAgICAgICAgICAgICAgICAgIGFsZXJ0KFxcXFxcXFwi5pyq6I635Y+W5Yiw6IqC54K5OlxcXFxcXFwiK2tleStcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiK2UubWVzc2FnZSk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZihteVNlbGVjdCl7XFxcXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihuZXdDb25maWcuc2V0dGluZ3MsIHNldHRpbmdzKTtcXFxcbiAgICAgICAgICAgICAgICBmYmEud3JpdGVGaWxlKG5ld1JvdXRlLCAkJCQuc3RyaW5naWZ5KG5ld0NvbmZpZykpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgZmJhLndyaXRlRmlsZShvbGRSb3V0ZSwgJCQkLnN0cmluZ2lmeShzZXR0aW5ncykpO1xcXFxuICAgICAgICAgICAgVG9hc3QobXNnLGR1cmF0aW9uKTtcXFxcbiAgICAgICAgICAgIGlmKHRpdGxlPT09XFxcXFxcXCLlhbNcXFxcXFxcIil7XFxcXG4gICAgICAgICAgICAgICAgZmJhLmJhY2soKTtcXFxcbiAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgIGZiYS5yZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfWNhdGNoKGUpe1xcXFxuICAgICAgICAgICAgYWxlcnQoZS5tZXNzYWdlKVxcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuXFxcXG4gICAgLy9sZXQgd2lkdGg9d2luZG93LnNjcmVlbi5hdmFpbFdpZHRoO1xcXFxuICAgIC8vbGV0IHdpZHRoUHg9d2lkdGgtMzkzKzUyO1xcXFxuICAgIC8vYWxlcnQoXFxcXFxcXCLlvZPliY3liIbovqjnjoc6XFxcXFxcXCIrd2luZG93LnNjcmVlbi5hdmFpbFdpZHRoK1xcXFxcXFwiKlxcXFxcXFwiK3dpbmRvdy5zY3JlZW4uaGVpZ2h0KTtcXFxcbiAgICB2YXIgdmVyaW5mbyA9IFt7XFxcXG4gICAgICAgIGlkOidkbicsXFxcXG4gICAgICAgIGF1dGhvcjon5pat5b+1JyxcXFxcbiAgICAgICAgYXZhdGFyOidodHRwczovL3MzLmF4MXguY29tLzIwMjEvMDIvMjIveTd3YjlPLmpwZycsXFxcXG4gICAgICAgIG9wdGlvbjpvcGVuRG5QYWdlLFxcXFxuICAgIH0sXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIGlkOidkeicsXFxcXG4gICAgICAgICAgICBhdXRob3I6J+mBk+mVvycsXFxcXG4gICAgICAgICAgICBhdmF0YXI6J2h0dHA6Ly9xMS5xbG9nby5jbi9nP2I9cXEmbms9NDM0ODU3MDA1JnM9NjQwJyxcXFxcbiAgICAgICAgICAgIG9wdGlvbjpvcGVuVGhlbWVcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAge1xcXFxuICAgICAgICAgICAgaWQ6J2xtJyxcXFxcbiAgICAgICAgICAgIGF1dGhvcjogJ+iTneiOkycsXFxcXG4gICAgICAgICAgICBhdmF0YXI6ICdodHRwOi8vcTEucWxvZ28uY24vZz9iPXFxJm5rPTI1Nzk5NDkzNzgmcz02NDAnLFxcXFxuICAgICAgICAgICAgb3B0aW9uOm9wZW5KeE1hbmFnZVxcXFxuICAgICAgICB9XFxcXG4gICAgXTtcXFxcblxcXFxuICAgIGZ1bmN0aW9uIGRvT3B0aW9uKG9wdGlvbl9pZCl7XFxcXG4gICAgICAgIGxldCB2ZXIgPSB2ZXJpbmZvLmZpbHRlcihpdD0+aXQuaWQ9PT1vcHRpb25faWQpWzBdO1xcXFxuICAgICAgICB2ZXIub3B0aW9uKCk7XFxcXG4gICAgfVxcXFxuXFxcXG4gICAgY29uc3QgUmVuZGVySHRtbEFwcCA9IHtcXFxcbiAgICAgICAgZGF0YSgpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiB7XFxcXG4gICAgICAgICAgICAgICAgLy8gcmF3SHRtbDogJzxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IHJlZFxcXFxcXFwiPui/memHjOS8muaYvuekuue6ouiJsu+8gTwvc3Bhbj4nLFxcXFxuICAgICAgICAgICAgICAgIG9wdGlvbnM6b3B0aW9ucyxcXFxcbiAgICAgICAgICAgICAgICB2ZXJpbmZvOnZlcmluZm8sXFxcXG4gICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI6cGxhY2Vob2xkZXIsXFxcXG4gICAgICAgICAgICAgICAgdGlwczp0aXBzLFxcXFxuICAgICAgICAgICAgICAgIHRoZW1lczp0aGVtZXMsXFxcXG4gICAgICAgICAgICAgICAgbXlTZWxlY3Q6bXlTZWxlY3QsXFxcXG4gICAgICAgICAgICAgICAgLy8gY2pTZWw6Wyfor7fpgInmi6nmj5Lku7YgKOWPquS9nOeUqGxhenlSdWxlKScsJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnLCdoaWtlcjovL2ZpbGVzL3J1bGVzL2R6SG91c2UvanMvc3JjYXV0by5qcycsJ2hpa2VyOi8vZmlsZXMvcnVsZXMvanMvUGFyc2UtVjJfRG4uanMnXSxcXFxcbiAgICAgICAgICAgICAgICBjalNlbDpbJ+ivt+mAieaLqeaPkuS7tiAo5Y+q5L2c55SobGF6eVJ1bGUpJywnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcycsJ2hpa2VyOi8vZmlsZXMvcnVsZXMvZHpIb3VzZS9qcy9zcmNhdXRvLmpzJ10sXFxcXG4gICAgICAgICAgICAgICAgc2V0dGluZ3M6c2V0dGluZ3MsXFxcXG4gICAgICAgICAgICAgICAgc2hvd1RpcHM6ZmFsc2UsXFxcXG4gICAgICAgICAgICAgICAgLy93aWR0aFB4OndpZHRoUHhcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAgbWV0aG9kczp7XFxcXG4gICAgICAgICAgICAvLyBjaGFuZ2VWYWw6ZnVuY3Rpb24oZXZlbnQpe1xcXFxuICAgICAgICAgICAgLy8gICAgIGdldE9wdGlvbih0aGlzLmlkLHRoaXMubmFtZSk7XFxcXG4gICAgICAgICAgICAvLyAgICAgdGhpcy5zZWxPcHRpb24gPSBldmVudC50YXJnZXQudmFsdWU7XFxcXG4gICAgICAgICAgICAvLyAgICAgYWxlcnQoXFxcXFxcXCLkvaDpgInkuK3kuoZcXFxcXFxcIitldmVudC50YXJnZXQudmFsdWUpO1xcXFxuICAgICAgICAgICAgLy8gfVxcXFxuICAgICAgICAgICAgZG9PcHRpb246ZG9PcHRpb25cXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICB0cnkge1xcXFxuICAgICAgICBjb25zdCBhcHA9VnVlLmNyZWF0ZUFwcChSZW5kZXJIdG1sQXBwKTtcXFxcbiAgICAgICAgYXBwLm1vdW50KCdib2R5Jyk7XFxcXG4gICAgfWNhdGNoIChlKSB7XFxcXG4gICAgICAgIGNvbnNvbGUubG9nKGUubWVzc2FnZSlcXFxcbiAgICB9XFxcXG5cXFxcbjwvc2NyaXB0PlxcXFxuXFxcXG48L2JvZHk+XFxcXG48L2h0bWw+XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwiUGFyc2VfRG4uanNcXFwiLFxcXCJwYXRoXFxcIjpcXFwiUGFyc2VfRG4uanNcXFwiLFxcXCJydWxlXFxcIjpcXFwiLy89PT09PT09PT09PT3lhY3ll4XosIPnlKg9PT09PT09PT09PT1cXFxcbi8v77yN77yN77yNPV5fXj1cXFxcblxcXFxudmFyIHZlcnNpb24gPSBcXFxcXFxcIjMuNDkyMjA1MDlcXFxcXFxcIjsvLzA1MDlcXFxcblxcXFxudmFyIHVwZGF0ZURhdGUgPSAnMjAyMi8wNS8wOS8gMTA6MzAnO1xcXFxudmFyIF9teVNldCA9IHtcXFxcbiAgICBxanU6ICfpu5jorqQnLFxcXFxuICAgIG90aDon6YGT6ZW/5LuT5bqT6YCa5YWNJyxcXFxcbiAgICBjamNhY2hlOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcycsXFxcXG4gICAgdGhlbWVjYWNoZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvTXlUaGVtZS5qc29uJyxcXFxcbiAgICBqaWV4aWNhY2hlOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9NeUppZXhpLmpzb24nLFxcXFxuICAgIHg1Y2FjaGU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmh0bWwnLFxcXFxuICAgIG9sZENvbmZpZzogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uJyxcXFxcbiAgICBja0xpbms6ICdodHRwczovL2NvZGUuYWxpeXVuLmNvbS9BSTk1Ny9IaWtlci9yYXcvbWFzdGVyL3YvJyxcXFxcbiAgICAvLyBjajogJ2h0dHBzOi8vY29kZS5hbGl5dW4uY29tL0FJOTU3L0hpa2VyL3Jhdy9tYXN0ZXIvdi9DbG91ZFBhcnNlLVYyX0RuLmpzJyxcXFxcbiAgICBjajogJ2h0dHBzOi8vaGpkaG54LmNvZGluZy5uZXQvcC9oaWtlci9kL2RyL2dpdC9yYXcvbWFzdGVyL2pzL1BhcnNlX0RuLmpzJyxcXFxcbiAgICAvLyB4NVVybDogJ2h0dHBzOi8vY29kZS5hbGl5dW4uY29tL0FJOTU3L0hpa2VyL3Jhdy9tYXN0ZXIvdi9QYXJzZV9Ebi5odG1sJyxcXFxcbiAgICB4NVVybDogJ2h0dHA6Ly9kci5ub2tpYS5wcmVzcy9odG1sL1BhcnNlX0RuLXZ1ZS5odG1sJyxcXFxcbiAgICBwYXJzZVJvdXRlOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nLFxcXFxuICAgIC8vIHg1Um91dGU6ICdmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9jYWNoZS9QYXJzZV9Ebi5odG1sJ1xcXFxuICAgIHg1Um91dGU6IGdldFBhdGgoJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uaHRtbCcpLFxcXFxuICAgIGJhdGNoUm91dGU6Z2V0UGF0aCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9wbHNjUGFyc2UuaHRtbCcpXFxcXG5cXFxcbn07XFxcXG52YXIgTXlQYXJzZVMgPSB7fTtcXFxcbnZhciBteVNldCA9IF9teVNldDtcXFxcbmlmIChmaWxlRXhpc3QoX215U2V0LnBhcnNlUm91dGUpKSB7XFxcXG4gICAgZXZhbCgndmFyIHBhcnNlRmlsZSA9JyArIGZldGNoKF9teVNldC5wYXJzZVJvdXRlKSk7XFxcXG4gICAgTXlQYXJzZVMgPSBwYXJzZUZpbGUuY29kZXM7XFxcXG4gICAgbXlTZXQgPSBwYXJzZUZpbGUuc2V0dGluZ3M7XFxcXG59XFxcXG52YXIgcGFyc2VUaXRsZSA9IFtcXFxcbiAgICBcXFxcXFxcInl1bjE3MTdcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcIlBhbkd1XFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJGdVhpbmdcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImlzVmlkZW9cXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImRlZmF1bHRQYXJzZVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwi6YGT6ZW/5LuT5bqT6YCa5YWNXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJkZWZhdWx0UGFyc2VXZWJcXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcIk9L6Kej5p6QXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJNM1U4VFZcXFxcXFxcIixcXFxcbl07XFxcXG4vL++8je+8je+8jT1eX149XFxcXG5cXFxcbi8v5o6l5Y+j6K6+572uLlxcXFxuXFxcXG52YXIgc2V0VXJsID0gXFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vUmVjb3JkSGlzdG9yeSNcXFxcXFxcIjtcXFxcbnZhciBzZXRfc3dpdGNoID0gc2V0VXJsO1xcXFxudmFyIGxhenkgPSBgZXZhbCgndmFyIGNvbmZpZ19kcCA9JyArIGZldGNoKGdldFZhcignb2xkQ29uZmlnJykpKTtldmFsKGZldGNoKGNvbmZpZ19kcC5jaikpO2F5dG1QYXJzZShpbnB1dClgO1xcXFxuXFxcXG4vL3ZhciBwYXJ3aXggPSBgdmFyIHl1cmw9J2h0dHBzOi8vZGFpbGkubWF5aXhpb25nZGkuY24vP3VybD0nO1JlZmVyZXInOiAnaHR0cHM6Ly93d3cubWF5aXhpb25nZGkuY24veXM/aWQ9JzsnaHR0cHM6Ly9kYWlsaS5tYXlpeGlvbmdkaS5jbi9hcGkucGhwJywgJ1JlZmVyZXInOidodHRwczovL2RhaWxpLm1heWl4aW9uZ2RpLmNuJztcXFxcbi8vIOWFqOawkWh0dHBzOi8vcGN2aWRlb2FsaXl1bi50aWFuc2hhbmdyZW5qaWFuLm1ndHYuY29tLjg4d3VtYS5jb20vP3VybD1cXFxcblxcXFxuLy/vvI3vvI3vvI3lpIcg55So77yN77yN77yNXFxcXG4vKlxcXFxuICog5b2x6KeG5bel5Zy677yaIGh0dHBzOi8veXNnYy5jYy9cXFxcbiAqIOaxn+a5ljogNTU155S15b2xIGh0dHBzOi8vd3d3LjU1NWR5Mi5jb20vcGhvbmUuaHRtbCDvvZwgMTfnnIsgaHR0cDovLzE3a2FueXkuY24vIGh0dHA6Ly9qaGppZXhpLjMwdnIuY24vP3VybD0g772cIGh0dHA6Ly9hcGkubWFpemltYWxsLmNvbS9pbmRleC5waHA/dXJsPVxcXFxuICog5rGf5rmWOiBodHRwOi8vd3d3LnRpYW5zaHV5dW4ubmV0L2luZGV4LnBocC92b2QvcGxheS9pZC80NDgzNzcvc2lkLzEvbmlkLzEuaHRtbFxcXFxuICog5rGf5rmWMjogaHR0cDovLzk4aHlrLmNuL2luZGV4LnBocC92b2QvcGxheS9pZC83Mjg0MS9zaWQvMS9uaWQvMS5odG1sXFxcXG4gKiDkurrkurrov7c6IGh0dHBzOi8vdmlwLnN1c291LnR2L3BsYXllci8/dXJsPSDvvZwgaHR0cHM6Ly93d3cubW9tZG0uY2MvXFxcXG4gKlxcXFxuICogd3VpZ2VuOiBodHRwczovL3d3dy41aWdlbi5jb20vZG1wbGF5ZXIvcGxheWVyLz91cmw9XFxcXG4gKiDlubLppa0o5Lq65Lq66L+3KTogaHR0cHM6Ly9qeC56dWkuY20vP3VybD1cXFxcbiAqIGh0dHBzOi8vMi42Nm1vdmllLnRvcC9wbGF5ZXIvP3VybD1cXFxcbiAqXFxcXG4gKi9cXFxcblxcXFxuXFxcXG52YXIgdG9vbHMgPSB7XFxcXG4gICAgTUQ1OiBmdW5jdGlvbihkYXRhKSB7XFxcXG4gICAgICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5NRDUoZGF0YSkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleCk7XFxcXG4gICAgfSxcXFxcbiAgICBBRVM6IGZ1bmN0aW9uKHRleHQsIGtleSwgaXYsIGlzRW5jcnlwdCkge1xcXFxuICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcXFxuICAgICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2Uoa2V5KTtcXFxcbiAgICAgICAgdmFyIGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoaXYpO1xcXFxuICAgICAgICBpZiAoaXNFbmNyeXB0KSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gQ3J5cHRvSlMuQUVTLmVuY3J5cHQodGV4dCwga2V5LCB7XFxcXG4gICAgICAgICAgICAgICAgaXY6IGl2LFxcXFxuICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcXFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcXFxuICAgICAgICAgICAgfSkudG9TdHJpbmcoKTtcXFxcbiAgICAgICAgfTtcXFxcbiAgICAgICAgcmV0dXJuIENyeXB0b0pTLkFFUy5kZWNyeXB0KHRleHQsIGtleSwge1xcXFxuICAgICAgICAgICAgaXY6IGl2LFxcXFxuICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxcXG4gICAgICAgIH0pLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXFxcbiAgICB9LFxcXFxuICAgIC8vYXNjaWlcXFxcbiAgICBuZXh0Q2hhcmFjdGVyOiBmdW5jdGlvbihhc2NpaVZhbHVlLCBrKSB7XFxcXG4gICAgICAgIHZhciBzID0gYXNjaWlWYWx1ZTtcXFxcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocyArIGspO1xcXFxuICAgIH0sXFxcXG4gICAgLy/lh6/mkpJcXFxcbiAgICBjYWVzYXJDaXBoZXI6IGZ1bmN0aW9uKHN0cmluZ1ZhbHVlLCBrKSB7XFxcXG4gICAgICAgIHZhciBuZXdTdHJpbmcgPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZ1ZhbHVlLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgICAgICBuZXdTdHJpbmcgKz0gdGhpcy5uZXh0Q2hhcmFjdGVyKHN0cmluZ1ZhbHVlW2ldLmNoYXJDb2RlQXQoKSwgayk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIG5ld1N0cmluZztcXFxcbiAgICB9LFxcXFxuICAgIG5vd0RhdGU6IGZ1bmN0aW9uKCkge1xcXFxuICAgICAgICB2YXIgZGF0ZTEgPSBuZXcgRGF0ZSgpO1xcXFxuICAgICAgICB2YXIgZGF0ZVN0ciA9IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgICAgIGlmIChkYXRlMSkge1xcXFxuICAgICAgICAgICAgZGF0ZVN0ciA9IGRhdGUxLmdldEZ1bGxZZWFyKCk7XFxcXG4gICAgICAgICAgICB2YXIgbW9udGggPSBkYXRlMS5nZXRNb250aCgpICsgMTtcXFxcbiAgICAgICAgICAgIHZhciBkYXkgPSBkYXRlMS5nZXREYXRlKCk7XFxcXG4gICAgICAgICAgICBpZiAobW9udGggPCAxMCkge1xcXFxuICAgICAgICAgICAgICAgIGRhdGVTdHIgKz0gXFxcXFxcXCItMFxcXFxcXFwiICsgbW9udGg7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIGRhdGVTdHIgKz0gXFxcXFxcXCItXFxcXFxcXCIgKyBtb250aDtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGlmIChkYXkgPCAxMCkge1xcXFxuICAgICAgICAgICAgICAgIGRhdGVTdHIgKz0gXFxcXFxcXCItMFxcXFxcXFwiICsgZGF5O1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBkYXRlU3RyICs9IFxcXFxcXFwiLVxcXFxcXFwiICsgZGF5O1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiBkYXRlU3RyO1xcXFxuICAgIH0sXFxcXG4gICAgbm93RGF0ZVN0cjpmdW5jdGlvbiAoKXsgLy8g5Yip55SoJOW3peWFt+iOt+WPluagvOW8j+WMluWQjueahOW9k+WJjeaXtumXtFxcXFxuICAgICAgICByZXR1cm4gICQuZGF0ZUZvcm1hdChuZXcgRGF0ZSgpLFxcXFxcXFwieXl5eS1NTS1kZCBISDptbTpzc1xcXFxcXFwiKTtcXFxcbiAgICB9LFxcXFxuICAgIHRvSlNPTjogZnVuY3Rpb24oanNvbikge1xcXFxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoanNvbiwgKGtleSwgdmFsdWUpID0+IHtcXFxcbiAgICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUgPT0gJ2Z1bmN0aW9uJykge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiB2YWx1ZS50b1N0cmluZygpO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gdmFsdWU7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0sIDQpO1xcXFxuICAgIH0sXFxcXG4gICAgdG9WTnVtOiBmdW5jdGlvbihhKSB7XFxcXG4gICAgICAgIHZhciBhID0gYS50b1N0cmluZygpO1xcXFxuICAgICAgICB2YXIgYyA9IGEuc3BsaXQoJy4nKTtcXFxcbiAgICAgICAgdmFyIG51bV9wbGFjZSA9IFtcXFxcXFxcIlxcXFxcXFwiLCBcXFxcXFxcIjBcXFxcXFxcIiwgXFxcXFxcXCIwMFxcXFxcXFwiLCBcXFxcXFxcIjAwMFxcXFxcXFwiLCBcXFxcXFxcIjAwMDBcXFxcXFxcIl0sXFxcXG4gICAgICAgICAgICByID0gbnVtX3BsYWNlLnJldmVyc2UoKTtcXFxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgICAgICB2YXIgbGVuID0gY1tpXS5sZW5ndGg7XFxcXG4gICAgICAgICAgICBjW2ldID0gcltsZW5dICsgY1tpXTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICB2YXIgcmVzID0gYy5qb2luKCcnKTtcXFxcbiAgICAgICAgcmV0dXJuIHJlcztcXFxcbiAgICB9LFxcXFxuICAgIGNwclZlcnNpb246IGZ1bmN0aW9uKGEsIGIpIHtcXFxcbiAgICAgICAgdmFyIF9hID0gcGFyc2VJbnQodGhpcy50b1ZOdW0oYSkpLFxcXFxuICAgICAgICAgICAgX2IgPSBwYXJzZUludCh0aGlzLnRvVk51bShiKSk7XFxcXG4gICAgICAgIGIgPSBpc05hTihfYikgPyB2ZXJzaW9uIDogYjtcXFxcbiAgICAgICAgaWYgKF9hID4gX2IpIHtcXFxcbiAgICAgICAgICAgIHB1dFZhcignanhOZXdWJywgJ+acieaWsOeJiOacrDogJyArIGEpO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgY2xlYXJWYXIoJ2p4TmV3VicpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHB1dFZhcignanhPbGRWJywgYik7XFxcXG4gICAgfSxcXFxcbiAgICBhdG9iOmZ1bmN0aW9uIChzdHIpe1xcXFxuICAgICAgICByZXF1aXJlKCdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2pzLWJhc2U2NEAzLjcuMi9iYXNlNjQubWluLmpzJyk7XFxcXG4gICAgICAgIHJldHVybiBCYXNlNjQuYXRvYihzdHIpO1xcXFxuICAgIH0sXFxcXG4gICAgYnRvYTpmdW5jdGlvbiAoc3RyKXtcXFxcbiAgICAgICAgcmVxdWlyZSgnaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9qcy1iYXNlNjRAMy43LjIvYmFzZTY0Lm1pbi5qcycpO1xcXFxuICAgICAgICByZXR1cm4gQmFzZTY0LmJ0b2Eoc3RyKTtcXFxcbiAgICB9LFxcXFxuICAgIOaxn+a5ljpmdW5jdGlvbiAoY29uZmlnX3VybCwgdGVtLCB0b2tlbikge1xcXFxuICAgICAgICByZXF1aXJlKCdodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL2pzLWJhc2U2NEAzLjcuMi9iYXNlNjQubWluLmpzJyk7XFxcXG4gICAgICAgIHZhciBhdG9iPUJhc2U2NC5hdG9iO1xcXFxuICAgICAgICB2YXIgYnRvYT1CYXNlNjQuYnRvYTtcXFxcbiAgICAgICAgdmFyIGNvbmZpZ19hID0gdGVtIHx8IFxcXFxcXFwiZmZzaXJsbHFcXFxcXFxcIjtcXFxcbiAgICAgICAgdmFyIHZpZGVvID0gJyc7XFxcXG4gICAgICAgIHZhciB0ZW0gPSBbXTtcXFxcbiAgICAgICAgdmFyIGNvbmZpZ19hcnJ5ID0gW107XFxcXG4gICAgICAgIHZhciBjb25maWdfYiA9IGNvbmZpZ19hLmxlbmd0aDtcXFxcbiAgICAgICAgaWYgKHRva2VuID09IDB4MSkge1xcXFxuICAgICAgICAgICAgdmFyIGNvbmZpZ191cmwgPSBhdG9iKGNvbmZpZ191cmwpO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgdmFyIGNvbmZpZ191cmwgPSBlbmNvZGVVUklDb21wb25lbnQoY29uZmlnX3VybCk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgdmFyIGNvbmZpZ19jID0gY29uZmlnX3VybC5sZW5ndGg7XFxcXG4gICAgICAgIGZvciAoaSA9IDB4MDsgaSA8IDB4MTAwOyBpKyspIHtcXFxcbiAgICAgICAgICAgIHRlbVtpXSA9IGNvbmZpZ19hW2kgJSBjb25maWdfYl0uY2hhckNvZGVBdCgpO1xcXFxuICAgICAgICAgICAgY29uZmlnX2FycnlbaV0gPSBpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGZvciAoaiA9IGkgPSAweDA7IGkgPCAweDEwMDsgaSsrKSB7XFxcXG4gICAgICAgICAgICBqID0gKGogKyBjb25maWdfYXJyeVtpXSArIHRlbVtpXSkgJSAweDEwMDtcXFxcbiAgICAgICAgICAgIHRtcCA9IGNvbmZpZ19hcnJ5W2ldO1xcXFxuICAgICAgICAgICAgY29uZmlnX2FycnlbaV0gPSBjb25maWdfYXJyeVtqXTtcXFxcbiAgICAgICAgICAgIGNvbmZpZ19hcnJ5W2pdID0gdG1wO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGZvciAoYSA9IGogPSBpID0gMHgwOyBpIDwgY29uZmlnX2M7IGkrKykge1xcXFxuICAgICAgICAgICAgYSA9IChhICsgMHgxKSAlIDB4MTAwO1xcXFxuICAgICAgICAgICAgaiA9IChqICsgY29uZmlnX2FycnlbYV0pICUgMHgxMDA7XFxcXG4gICAgICAgICAgICB0bXAgPSBjb25maWdfYXJyeVthXTtcXFxcbiAgICAgICAgICAgIGNvbmZpZ19hcnJ5W2FdID0gY29uZmlnX2Fycnlbal07XFxcXG4gICAgICAgICAgICBjb25maWdfYXJyeVtqXSA9IHRtcDtcXFxcbiAgICAgICAgICAgIGsgPSBjb25maWdfYXJyeVsoY29uZmlnX2FycnlbYV0gKyBjb25maWdfYXJyeVtqXSkgJSAweDEwMF07XFxcXG4gICAgICAgICAgICB2aWRlbyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvbmZpZ191cmxbaV0uY2hhckNvZGVBdCgpIF4gayk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbG9nKGRlY29kZVVSSUNvbXBvbmVudCh2aWRlbykpO1xcXFxuICAgICAgICBpZiAodG9rZW4gPT0gMHgxKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHZpZGVvKTtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBidG9hKHZpZGVvKTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbn07XFxcXG5pZiAoZ2V0VmFyKFxcXFxcXFwianhPbGRWXFxcXFxcXCIsIFxcXFxcXFwiMFxcXFxcXFwiKSAhPSB2ZXJzaW9uKSB7XFxcXG4gICAgcHV0VmFyKCdjakNhY2hlJywgX215U2V0LmNqY2FjaGUpO1xcXFxuICAgIHB1dFZhcigneDVDYWNoZScsIF9teVNldC54NUNhY2hlKTtcXFxcbiAgICBwdXRWYXIoJ29sZENvbmZpZycsIF9teVNldC5vbGRDb25maWcpO1xcXFxuICAgIHB1dFZhcigncGFyc2VSb3V0ZScsIF9teVNldC5wYXJzZVJvdXRlKTtcXFxcbiAgICAvLyBsZXQganhOZXdWID0gZmV0Y2goJ2h0dHBzOi8vZ2l0ZWUuY29tL0R1YW4tTmlhbi9Ebi9yYXcvbWFzdGVyL2hpa2Vydmlldy9QYXJzZVZlcnNpb24udHh0Jyk7XFxcXG4gICAgbGV0IGp4TmV3ViA9IGZldGNoKCdodHRwczovL2hqZGhueC5jb2RpbmcubmV0L3AvaGlrZXIvZC9kci9naXQvcmF3L21hc3Rlci9qcy9QYXJzZVZlcnNpb24udHh0Jyk7XFxcXG4gICAgbGV0IGp4T2xkViA9IChmZXRjaChfbXlTZXQuY2pjYWNoZSkuc3BsaXQoJ3ZlcnNpb24gPSBcXFxcXFxcIicpWzFdICsgJycpLnNwbGl0KCdcXFxcXFxcIicpWzBdO1xcXFxuICAgIHRvb2xzLmNwclZlcnNpb24oanhOZXdWLCBqeE9sZFYpO1xcXFxufVxcXFxuXFxcXG52YXIgUGFyc2VTID0ge307XFxcXG52YXIgb3JpZ2luYWxQYXJzZVMgPSB7XFxcXG4gICAgLy8gdXBkYXRlRGF0ZTogdXBkYXRlRGF0ZSxcXFxcbiAgICBwYXJzZUxjOidodHRwczovL2NvZGUuYWxpeXVuLmNvbS9BSTk1Ny9IaWtlci9yYXcvbWFzdGVyL3AvcGFyc2VMYy5qcycsXFxcXG4gICAgQ2l0eUlQOiAnaHR0cDovL3B2LnNvaHUuY29tL2NpdHlqc29uJyxcXFxcbiAgICBwY1VBOiAnVXNlci1BZ2VudEBNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wXFxcXFxcXFzvvJtcXFxcXFxcXO+8myBXT1c2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzQ5LjAuMjYyMy44NyBTYWZhcmkvNTM3LjM2JyxcXFxcbiAgICBjYWNoZU0zdTg6IGZ1bmN0aW9uKHZVcmwsIHJlZikge1xcXFxuICAgICAgICBsZXQgcGFyYW1hcyA9IHJlZj97aGVhZGVyczp7UmVmZXJlcjpyZWZ9fTp7fTtcXFxcbiAgICAgICAgcmV0dXJuIGNhY2hlTTN1OCh1cmwsIHBhcmFtYXMpXFxcXG4gICAgfSxcXFxcbiAgICBpc1ZpZGVvOmZ1bmN0aW9uKHBsYXlVcmwpe1xcXFxuICAgICAgICBjb25zdCB7aXNWaWRlb30gPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9nbG9iYWxQYXJzZT9ydWxlPemBk+mVv+S7k+W6k1BybycpO1xcXFxuICAgICAgICByZXR1cm4gaXNWaWRlbyhwbGF5VXJsKVxcXFxuICAgIH0sXFxcXG4gICAgZGVmYXVsdFBhcnNlOiBmdW5jdGlvbih1cmwsdGltZW91dCkge1xcXFxuICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYih1cmwsdGltZW91dCk7XFxcXG4gICAgfSxcXFxcbiAgICBkZWZhdWx0UGFyc2VXZWI6IGZ1bmN0aW9uKHBsYXlVcmwsdGltZW91dCxleHRyYSkge1xcXFxuICAgICAgICAvLyBsb2coJ+S8oOWFpWRlZmF1bHRQYXJzZVdlYueahOi2heaXtjonK3RpbWVvdXQpO1xcXFxuICAgICAgICB0aW1lb3V0ID0gcGFyc2VJbnQodGltZW91dCl8fHBhcnNlSW50KGdldFZhcignZHAuanhUaW1lb3V0JywnNTAwMCcpKXx8NTAwMDtcXFxcbiAgICAgICAgZXh0cmEgPSBleHRyYXx8e307XFxcXG4gICAgICAgIGxldCBwbGF5VXJsTGlzdCA9IGV4dHJhLnBsYXlVcmxMaXN0fHxbXTtcXFxcbiAgICAgICAgaWYodHlwZW9mKHBsYXlVcmxMaXN0KT09PSdvYmplY3QnJiZwbGF5VXJsTGlzdC5sZW5ndGg+MCl7XFxcXG4gICAgICAgICAgICBwbGF5VXJsTGlzdC51bnNoaWZ0KHBsYXlVcmwpO1xcXFxuICAgICAgICAgICAgbGV0IHBsYXlVcmxzPXBsYXlVcmxMaXN0LnNsaWNlKDAsNCk7XFxcXG4gICAgICAgICAgICBsZXQgbmFtZXM9ZXh0cmEubmFtZUxpc3Quc2xpY2UoMCw0KTtcXFxcbiAgICAgICAgICAgIC8vIGxvZygn5byA5aeL5om56YeP6Kej5p6QKOW3suWOu+mHjSzlj6rlj5bliY0z5Liq5aSH6IOO77yM5Yqg6YGT6ZW/576kOjQ4NjcyMjMyOOiOt+WPluacgOaWsOmtlOaWreWKqOaAgSk6JytuYW1lcyk7XFxcXG4gICAgICAgICAgICBwbGF5VXJscz1wbGF5VXJscy5tYXAoKGl0LGlkKT0+aXQrXFxcXFxcXCI7XFxcXFxcXCIrbmFtZXNbaWRdKTtcXFxcbiAgICAgICAgICAgIC8vbG9nKHBsYXlVcmxzKTtcXFxcbiAgICAgICAgICAgIGNvbnN0IHtMYXp5UGFyc2VGYXN0fSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2dsb2JhbFBhcnNlP3J1bGU96YGT6ZW/5LuT5bqTUHJvJyk7XFxcXG4gICAgICAgICAgICBsZXQgcmV0ID0gTGF6eVBhcnNlRmFzdChwbGF5VXJscyx0aW1lb3V0LHRpbWVvdXQpO1xcXFxuICAgICAgICAgICAgaWYodHlwZW9mKHJldCk9PT0nb2JqZWN0JyYmcmV0Lmxlbmd0aD4wKXtcXFxcbiAgICAgICAgICAgICAgICAvL3JldHVybiByZXRbMF1cXFxcbiAgICAgICAgICAgICAgICAvL2xvZyhyZXQpO1xcXFxuICAgICAgICAgICAgICAgIGxldCB2ID0gZ2V0QXBwVmVyc2lvbigpO1xcXFxuICAgICAgICAgICAgICAgIGlmKHBhcnNlSW50KHYpPj0yMTk0JiZyZXQubGVuZ3RoPjEpe1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgdXJscyA9IEFycmF5LmZyb20obmV3IFNldChyZXQpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbmFtZXM9dXJscy5tYXAoKGl0LGlkKT0+aXQuc3BsaXQoXFxcXFxcXCLimIVcXFxcXFxcIikubGVuZ3RoPjE/aXQuc3BsaXQoXFxcXFxcXCLimIVcXFxcXFxcIilbMV06XFxcXFxcXCLnur/ot686XFxcXFxcXCIrcGFyc2VJbnQoaWQrMSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICB1cmxzPXVybHMubWFwKGl0PT5pdC5zcGxpdChcXFxcXFxcIuKYhVxcXFxcXFwiKVswXSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBoZWFkZXJzID0gdXJscy5tYXAoKGl0KT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIS87Ly50ZXN0KGl0KXx8aXQuc3BsaXQoJzsnKS5sZW5ndGg8Mil7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaGVhZCA9IGl0LnNwbGl0KCc7JylbMV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIS9ALy50ZXN0KGhlYWQpfHwhL3t8fS8udGVzdChoZWFkKSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7fVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkPWhlYWQuc3BsaXQoXFxcXFxcXCJ7XFxcXFxcXCIpWzFdLnNwbGl0KFxcXFxcXFwifVxcXFxcXFwiKVswXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2hlYWQgPSBoZWFkLnJlcGxhY2UoL3t8fS9nLCcnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkID0gaGVhZC5zcGxpdCgnJiYnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2JqID0ge307XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBpIGluIGhlYWQpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQga2V5ID0gaGVhZFtpXS5zcGxpdCgnQCcpWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBoZWFkW2ldLnNwbGl0KCdAJylbMV0ucmVwbGFjZSgvOy8sJ++8m++8mycpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvYmpba2V5XSA9IHZhbHVlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICB1cmxzID0gdXJscy5tYXAoKGl0KT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHR1cmw9aXQuc3BsaXQoJzsnKVswXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGl0LmluY2x1ZGVzKFxcXFxcXFwiI2lzVmlkZW89dHJ1ZSNcXFxcXFxcIikmJiF0dXJsLmluY2x1ZGVzKFxcXFxcXFwiI2lzVmlkZW89dHJ1ZSNcXFxcXFxcIikpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR1cmwrPVxcXFxcXFwiI2lzVmlkZW89dHJ1ZSNcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0dXJsXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe3VybHM6dXJscyxoZWFkZXJzOmhlYWRlcnMsbmFtZXM6bmFtZXN9KTtcXFxcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJldFswXS5zcGxpdChcXFxcXFxcIuKYhVxcXFxcXFwiKVswXVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiByZXRcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICBjb25zdCB7bGF6eVBhcnNlfSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2dsb2JhbFBhcnNlP3J1bGU96YGT6ZW/5LuT5bqTUHJvJyk7XFxcXG4gICAgICAgICAgICBsZXQgeDVQbGF5PWxhenlQYXJzZShwbGF5VXJsLHRpbWVvdXQpO1xcXFxuICAgICAgICAgICAgaWYodHlwZW9mKHg1UGxheSk9PVxcXFxcXFwidW5kZWZpbmVkXFxcXFxcXCJ8fCF4NVBsYXkpe1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v6YGT6ZW/5LuT5bqT6Kej5p6Q5aSx6LSlXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGxldCB0aXBzPS94NVJ1bGV8d2ViUnVsZS8udGVzdCh4NVBsYXkpP1xcXFxcXFwieDUvd2Vi5YWN5ZeF5byA5aeLXFxcXFxcXCI6XFxcXFxcXCLmnoHpgJ/lhY3ll4XmjqLlrozmr5XvvIzlnLDlnYA6XFxcXFxcXCIrKC9eaHR0cC8udGVzdCh4NVBsYXkpP3g1UGxheTon6Z2e5q2j5bi46ZO+5o6lJyk7XFxcXG4gICAgICAgICAgICBsb2codGlwcyk7XFxcXG4gICAgICAgICAgICByZXR1cm4geDVQbGF5O1xcXFxuICAgICAgICB9XFxcXG4gICAgfSxcXFxcbiAgICBcXFxcXFxcIm1hb3NzXFxcXFxcXCI6XFxcXG4gICAgICAgIGZ1bmN0aW9uIChqeHVybCwgcmVmLCBrZXkpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiB0aGlzLueMqyhqeHVybCwgcmVmLCBrZXkpXFxcXG4gICAgICAgIH0sXFxcXG4gICAg5YWN5ZeFOmZ1bmN0aW9uKHZpcFVybCxrKXtcXFxcbiAgICAgICAgaz1rfHxcXFxcXFxcInVybFxcXFxcXFwiO1xcXFxuICAgICAgICB0cnl7XFxcXG4gICAgICAgICAgICBsZXQgcmVhbFVybD1KU09OLnBhcnNlKGZldGNoKHZpcFVybCkpW2tdO1xcXFxuICAgICAgICAgICAgaWYocmVhbFVybC5zdGFydHNXaXRoKCcvJykpe1xcXFxuICAgICAgICAgICAgICAgIHJlYWxVcmwgPSAnaHR0cHM6Ly8nK3JlYWxVcmw7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5pc1ZpZGVvKHJlYWxVcmwpfHxcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICB9Y2F0Y2goZSl7XFxcXG4gICAgICAgICAgICAvL2xvZyhlLm1lc3NhZ2UpO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiXFxcXFxcXCJcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sXFxcXG4gICAgWDU6ZnVuY3Rpb24odmlwVXJsLHJlZil7Ly8gaHR0cHM6Ly9hcGkuNTJ3eWIuY29tL3dlYmNsb3VkLz92PWh0dHA6Ly92aXAuMTkwNS5jb20vcGxheS82OTE5NDAuc2h0bWwgaHR0cDovL3d3dy5jZGNlci5uZXQvXFxcXG4gICAgICAgIGxldCBfeDUgPSAkLnRvU3RyaW5nKCh2aXBVcmwpID0+IHtcXFxcbiAgICAgICAgICAgIGlmKCFsb2NhdGlvbi5ocmVmLmluY2x1ZGVzKHZpcFVybCkpe1xcXFxuICAgICAgICAgICAgICAgIGxvY2F0aW9uLmhyZWYgPSB2aXBVcmw7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZih3aW5kb3cuY291bnQgPT0gbnVsbCl7XFxcXG4gICAgICAgICAgICAgICAgd2luZG93LmNvdW50PTE7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB3aW5kb3cuY291bnQrKztcXFxcbiAgICAgICAgICAgIGlmKCB3aW5kb3cuY291bnQgPj0gMjApe1xcXFxuICAgICAgICAgICAgICAgIGZiYS5sb2coXFxcXFxcXCLmnKrojrflj5bliLDotYTmupDlnLDlnYDvvIzot7PliLDop6PmnpDpobVcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZpcFVybFxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgdmFyIHVybHMgPSBfZ2V0VXJscygpO1xcXFxuICAgICAgICAgICAgZm9yICh2YXIgaSBpbiB1cmxzKSB7XFxcXG4gICAgICAgICAgICAgICAgaWYgKCEvcGxheW0zdTh8bTN1OFxcXFxcXFxcLnR2Ly50ZXN0KHVybHNbaV0pICYmIHVybHNbaV0ubWF0Y2goL1xcXFxcXFxcLm1wM3xcXFxcXFxcXC5tcDR8XFxcXFxcXFwubTN1OHxcXFxcXFxcXC5mbHYvKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBmYmEubG9nKHVybHNbaV0pO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdXJsc1tpXVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSx2aXBVcmwpO1xcXFxuICAgICAgICBsZXQgcGxheVVybCA9IHJlZj9yZWY6dmlwVXJsO1xcXFxuICAgICAgICBsZXQgeDVVcmwgPSAnd2ViUnVsZTovLycrcGxheVVybCsgJ0AnICtfeDU7XFxcXG4gICAgICAgIHNob3dMb2FkaW5nKCfprZTmlq0uanPll4XmjqLkuK0uLi4nKTtcXFxcbiAgICAgICAgcmV0dXJuIHg1VXJsXFxcXG4gICAgfSxcXFxcbiAgICAn6YGT6ZW/JzpmdW5jdGlvbiAodmlwVXJsKXtcXFxcbiAgICAgICAgZXZhbFByaXZhdGVKUygnelNXdmUrZWVBNmlMK2YyZkdUSSsxcFI4am5MZDBTaXlWNnl2Z2NQTVd3Qk1QNWFZcHFoVEZiSVN4bnZoYjBiZDVWZ2l6eVVNSGU0ZG1zbkdoV0xCa3FmYjVIZk5iSVc0TUJNeHpMcFAvOVRqTlQ4U0lRQWZqZFRqNFA4b1gzNWVrS052R1Z4RG9seWZjWXJwb0t3Tm9RPT0nKTtcXFxcbiAgICAgICAgcmV0dXJuIHRoaXMu5YWN5ZeFKHZpcFVybCsnJnNlY3JldD0nK3NlY3JldClcXFxcbiAgICB9LFxcXFxuICAgICfnjKsnOmZ1bmN0aW9uIChqeHVybCwgcmVmLCBrZXkpIHtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIHZhciBnZXRWaWRlb0luZm8gPSBmdW5jdGlvbiAodGV4dCkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiB0b29scy5BRVModGV4dCwga2V5LCBpdik7XFxcXG4gICAgICAgICAgICB9O1xcXFxuICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSB7aGVhZGVyczoge1xcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiByZWZ8fCcnfX07XFxcXG4gICAgICAgICAgICBrZXkgPSBrZXkgPT0gdW5kZWZpbmVkID8gXFxcXFxcXCJkdnlZUlFsblBSQ01kUVNlXFxcXFxcXCIgOiBrZXk7XFxcXG4gICAgICAgICAgICB2YXIgaHRtbCA9IHJlZj9yZXF1ZXN0KGp4dXJsLCBoZWFkZXJzKTpyZXF1ZXN0KGp4dXJsKTtcXFxcbiAgICAgICAgICAgIGlmICgvJmJ0d2FmPS8udGVzdChodG1sKSkge1xcXFxuICAgICAgICAgICAgICAgIGh0bWwgPSByZXF1ZXN0KGp4dXJsICsgXFxcXFxcXCImYnR3YWZcXFxcXFxcIiArIGh0bWwubWF0Y2goLyZidHdhZiguKj8pXFxcXFxcXCIvKVsxXSwgaGVhZGVycyk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB2YXIgaXYgPSBodG1sLnNwbGl0KFxcXFxcXFwiX3Rva2VuID0gXFxcXFxcXFxcXFxcXFxcIlxcXFxcXFwiKVsxXS5zcGxpdChcXFxcXFxcIlxcXFxcXFxcXFxcXFxcXCJcXFxcXFxcIilbMF07XFxcXG4gICAgICAgICAgICBldmFsKGh0bWwubWF0Y2goL3ZhciBjb25maWcgPSB7W1xcXFxcXFxcc1xcXFxcXFxcU10qP30vKVswXSArIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgaWYgKCEvXmh0dHAvLnRlc3QoY29uZmlnLnVybCkpIHtcXFxcbiAgICAgICAgICAgICAgICBjb25maWcudXJsID0gZGVjb2RlVVJJQ29tcG9uZW50KHRvb2xzLkFFUyhjb25maWcudXJsLCBrZXksIGl2KSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLnVybDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgLy8gcmV0dXJuIFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICByZXR1cm4ganh1cmw7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LFxcXFxuICAgIExMUTogZnVuY3Rpb24oanh1cmwpIHtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIHZhciBhcGkgPSBqeHVybC5zcGxpdCgnP3VybD0nKVswXSArIFxcXFxcXFwiYXBpLnBocFxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgdmFyIGI2NGlkID0gYmFzZTY0RW5jb2RlKGp4dXJsLnNwbGl0KCd1cmw9JylbMV0pO1xcXFxuICAgICAgICAgICAgdmFyIHBhcnNlaWQgPSB0b29scy5jYWVzYXJDaXBoZXIoYjY0aWQsIC0xKTtcXFxcbiAgICAgICAgICAgIHZhciBqc29uID0gSlNPTi5wYXJzZShyZXF1ZXN0KGFwaSwge1xcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiBqeHVybFxcXFxuICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCcsXFxcXG4gICAgICAgICAgICAgICAgYm9keTogJ3VybD0nICsgcGFyc2VpZFxcXFxuICAgICAgICAgICAgfSkpO1xcXFxuICAgICAgICAgICAgdXJsID0gKGpzb24uY29kZSA9PSAyMDAgPyBiYXNlNjREZWNvZGUodG9vbHMuY2Flc2FyQ2lwaGVyKGpzb24udXJsLCAtMSkpIDogJycpO1xcXFxuICAgICAgICAgICAgcmV0dXJuIHVybDtcXFxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuICcnO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSxcXFxcbiAgICBQYW5HdTogZnVuY3Rpb24odmlwVXJsLCBkYXRhKSB7XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAvKnZhciByZWYgPSAnaHR0cHM6Ly93d3cucGFuZ3VqaWV4aS5jb20vJztcXFxcbiAgICAgICAgICAgIHZhciBwYXJzZSA9ICdodHRwczovL3Bhbmd1YXBpLm50cnlqZC5uZXQvamlleGkvP3VybD0nICsgdmlwVXJsO1xcXFxuICAgICAgICAgICAgdmFyIGFwaSA9ICdodHRwczovL3Bhbmd1YXBpLm50cnlqZC5uZXQvamlleGkvYXBpLnBocCc7XFxcXG4gICAgICAgICAgICAqL1xcXFxuICAgICAgICAgICAgLy92YXIgcmVmID0gJ2h0dHBzOi8veG15c3R2LmNvbS8nO1xcXFxuICAgICAgICAgICAgLy92YXIgcGFyc2UgPSAnaHR0cHM6Ly93d3cuOTlrcHcuY29tL3Bhbmd1L2luZGV4LnBocD91cmw9JyArIHRhaWxVcmw7XFxcXG4gICAgICAgICAgICAvL3ZhciBhcGkgPSAnaHR0cHM6Ly93d3cuOTlrcHcuY29tL3Bhbmd1L2FwaS5waHAnO1xcXFxuICAgICAgICAgICAgdmFyIHBhcnNlID0gJ2h0dHBzOi8vd3d3LnBhbmd1amlleGkuY29tL3Bhbmd1Lz91cmw9JyArIHZpcFVybDtcXFxcbiAgICAgICAgICAgIHZhciBhcGkgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L3Bhbmd1MjAyMS9hcGkucGhwJztcXFxcbiAgICAgICAgICAgIGlmIChkYXRhKSB7XFxcXG4gICAgICAgICAgICAgICAgcmVmID0gZGF0YVswXTtcXFxcbiAgICAgICAgICAgICAgICBwYXJzZSA9IGRhdGFbMV07XFxcXG4gICAgICAgICAgICAgICAgYXBpID0gZGF0YVsyXTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHZhciBUaW1lID0gKE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSAqIDEpLnRvU3RyaW5nKCk7XFxcXG4gICAgICAgICAgICB2YXIgdXJsID0gSlNPTi5wYXJzZShyZXF1ZXN0KGFwaSwge1xcXFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiBwYXJzZVxcXFxuICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgYm9keTogJ3VybD0nICsgdmlwVXJsICsgJyZyZWZlcmVyPScgKyBiYXNlNjRFbmNvZGUocGFyc2UpICsgJyZyZWY9MSZ0aW1lPScgKyBUaW1lICsgJyZ0eXBlPSZvdGhlcj0nICsgYmFzZTY0RW5jb2RlKHZpcFVybCkgKyAnJmlvcz0wJyxcXFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJ1xcXFxuICAgICAgICAgICAgfSkpLnVybDtcXFxcbiAgICAgICAgICAgIHJldHVybiB1cmw7XFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAnJztcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sXFxcXG4gICAgeXVuMTcxNzogZnVuY3Rpb24gKHZpcFVybCkge1xcXFxuICAgICAgICB2YXIgaXN5ayA9IHZpcFVybC5pbmRleE9mKCd5b3VrdScpO1xcXFxuICAgICAgICB2YXIgcmVmID0gXFxcXFxcXCJodHRwczovL3d3dy4xNzE3eXVuLmNvbS9qeC90eS5waHA/dXJsPVxcXFxcXFwiICsgdmlwVXJsO1xcXFxuICAgICAgICB2YXIgcGFyc2UgPSBcXFxcXFxcImh0dHBzOi8vMTcxN3l1bi5jb20uemgxODgubmV0LzA4MjgvP3VybD1cXFxcXFxcIiArIHZpcFVybDtcXFxcbiAgICAgICAgdmFyIGFwaSA9IFxcXFxcXFwiaHR0cHM6Ly8xNzE3eXVuLmNvbS56aDE4OC5uZXQvMTAwNC8uLmluZGV4Li5waHBcXFxcXFxcIjtcXFxcbiAgICAgICAgcmV0dXJuIGlzeWsgPT0gLTEgPyB0aGlzLlBhbkd1KHZpcFVybCwgW3JlZiwgcGFyc2UsIGFwaV0pIDogdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYgKyAnLHZpcDonLCBwYXJzZSArICcsdmlwOicsIGFwaV0pO1xcXFxuICAgIH0sXFxcXG4gICAgT0vop6PmnpA6J2h0dHBzOi8vb2tqeC5jYy8/dXJsPScsXFxcXG4gICAgTTNVOFRWOidodHRwczovL2p4Lm0zdTgudHYvamlleGkvP3VybD0nLFxcXFxuICAgIOmBk+mVv+S7k+W6k+mAmuWFjTpmdW5jdGlvbiAodXJsLHRpbWVvdXQpe1xcXFxuICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYih1cmwsdGltZW91dCk7XFxcXG4gICAgfSxcXFxcbiAgICBGdVhpbmc6IGZ1bmN0aW9uKHZpcFVybCkge1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgLy9pZih2aXBVcmwuaW5kZXhPZigndi55b3VrdScpIT0tMSl7XFxcXG4gICAgICAgICAgICAvLyAgICB2aXBVcmwgPSAoSlNPTi5wYXJzZShyZXF1ZXN0KHZpcFVybCwge3JlZGlyZWN0OmZhbHNlLCB3aXRoSGVhZGVyczp0cnVlfSkpLmhlYWRlcnMubG9jYXRpb24gKyAnJykucmVwbGFjZSgvXFxcXFxcXFw/LiovLCcnKTtcXFxcbiAgICAgICAgICAgIC8vfVxcXFxuICAgICAgICAgICAgdmFyIHJlZiA9ICdodHRwczovL2p4Lnh1ZXR1aWd1YW5nLmNuL2ppZXhpLz91cmw9JyArIHZpcFVybDtcXFxcbiAgICAgICAgICAgIHZhciBwYXJzZSA9IHJlZjtcXFxcbiAgICAgICAgICAgIHZhciBhcGkgPSAnaHR0cHM6Ly9qeC54dWV0dWlndWFuZy5jbi9qaWV4aS9hcGl1X2Z4LnBocCc7XFxcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYsIHBhcnNlLCBhcGldKTtcXFxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuICcnO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSxcXFxcbn07XFxcXG5cXFxcbk9iamVjdC5hc3NpZ24oUGFyc2VTLCBvcmlnaW5hbFBhcnNlUywgTXlQYXJzZVMpO1xcXFxuLy/opobnm5bpobrluo/vvIznrKzkuInkuKropobnm5bnrKzkuozkuKrnhLblkI7opobnm5bnrKzkuIDkuKpcXFxcblxcXFxuXFxcXG5mdW5jdGlvbiBheXRtUGFyc2UodmlwVXJsLHN0clRpdGxlLHRpbWVvdXQscGxheVVybCkge1xcXFxuICAgIC8vIOWPguaVsDE65q2j54mI572R5Z2A5Zyw5Z2AIOWPguaVsDIg5a6a5ZCR6Kej5p6Q5o6l5Y+j5ZCN56ewIOWPguaVsDMgeDXop6PmnpDotoXml7Yg5Y+C5pWwNCDlrozmlbTnmoTmkq3mlL7pk77mjqVcXFxcbiAgICBzdHJUaXRsZSA9IHN0clRpdGxlfHwnJztcXFxcbiAgICB2aXBVcmwgPSBkZWNvZGVVUklDb21wb25lbnQodmlwVXJsKTtcXFxcbiAgICBpZighL21pZ3V2aWRlby8udGVzdCh2aXBVcmwpKXtcXFxcbiAgICAgICAgdmlwVXJsPXZpcFVybC5zcGxpdCgnIycpWzBdLnNwbGl0KCc/JylbMF07XFxcXG4gICAgfVxcXFxuICAgIHBsYXlVcmw9ZGVjb2RlVVJJQ29tcG9uZW50KHBsYXlVcmwpfHx2aXBVcmx8fCcnO1xcXFxuICAgIC8vIGxvZygn5Lyg5YWlYXl0bVBhcnNl55qE6LaF5pe2OicrdGltZW91dCk7XFxcXG4gICAgdGltZW91dCA9IHBhcnNlSW50KHRpbWVvdXQpfHxwYXJzZUludChnZXRWYXIoJ2RwLmp4VGltZW91dCcsJzUwMDAnKSl8fDUwMDA7XFxcXG5cXFxcbiAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cXFxcbiAgICBsZXQganhzUm91dGUgPSBcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlKaWV4aS5qc29uXFxcXFxcXCI7XFxcXG4gICAgbGV0IE15SmlleGkgPSB7fTtcXFxcbiAgICBsZXQgamlleGlzID0ge307XFxcXG4gICAgdHJ5IHtcXFxcbiAgICAgICAgTXlKaWV4aSA9IEpTT04ucGFyc2UoZmV0Y2goanhzUm91dGUpKTtcXFxcbiAgICAgICAgamlleGlzID0gTXlKaWV4aS5qaWV4aXMuZmlsdGVyKGl0PT5pdC5uYW1lPT09TXlKaWV4aS5ub3cpWzBdO1xcXFxuICAgIH1jYXRjaCAoZSkge31cXFxcbiAgICBmdW5jdGlvbiBnZXRQbGF5Sngoa2V5KXtcXFxcbiAgICAgICAgbGV0IHBsYXlVcmxMaXN0ID0gW107Ly/mibnph4/mkq3mlL7lnLDlnYDliJfooahcXFxcbiAgICAgICAgbGV0IG5hbWVMaXN0ID0gW107XFxcXG4gICAgICAgIGxldCBqeHMgPSBqaWV4aXNba2V5XTsgLy8g6YCC55So5LqO6L+Z5Liq572R56uZ55qE6Kej5p6Q5YiX6KGoXFxcXG4gICAgICAgIGlmKGp4cyl7XFxcXG4gICAgICAgICAgICBmb3IobGV0IGkgaW4ganhzKXtcXFxcbiAgICAgICAgICAgICAgICBpZih0eXBlb2YgUGFyc2VTW2p4c1tpXV0gPT0gJ3N0cmluZycmJlBhcnNlU1tqeHNbaV1dLm1hdGNoKC9odHRwLio/PS8pKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgcGxheVVybExpc3QucHVzaChQYXJzZVNbanhzW2ldXSt2aXBVcmwpO1xcXFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKGp4c1tpXSk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC8vIHJldHVybiBwbGF5VXJsTGlzdFxcXFxuICAgICAgICByZXR1cm4ge3BsYXlVcmxMaXN0OnBsYXlVcmxMaXN0LG5hbWVMaXN0Om5hbWVMaXN0fVxcXFxuICAgIH1cXFxcbiAgICBmdW5jdGlvbiBnZXRMYXp5TGlzdChrZXkpey8v5Y+q6I635Y+W5aSH6IOO5YiX6KGo55qE5YWN5ZeF5o6i6Kej5p6Q5YiX6KGoXFxcXG4gICAgICAgIGxldCBwYXJzZXMgPSBbXTtcXFxcbiAgICAgICAgbGV0IGp4cyA9IGppZXhpc1trZXldfHxbXTsgLy8g6YCC55So5LqO6L+Z5Liq572R56uZ55qE6Kej5p6Q5YiX6KGoXFxcXG4gICAgICAgIC8vIGxvZyhqeHMpO1xcXFxuICAgICAgICBpZihqeHMpe1xcXFxuICAgICAgICAgICAgZm9yKGxldCBpIGluIGp4cyl7XFxcXG4gICAgICAgICAgICAgICAgaWYodHlwZW9mIFBhcnNlU1tqeHNbaV1dID09ICdmdW5jdGlvbicmJiEv6YCa5YWNLy50ZXN0KFBhcnNlU1tqeHNbaV1dLnRvU3RyaW5nKCkpKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgcGFyc2VzLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTpqeHNbaV0sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBydWxlOlBhcnNlU1tqeHNbaV1dXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiBwYXJzZXNcXFxcbiAgICB9XFxcXG4gICAgdmFyIGV4dHJhID0ge307XFxcXG4gICAgdmFyIHBhcnNlcyA9IFtdOyAvL+WFjeWXheaOouWIl+ihqFxcXFxuICAgIC8vLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcXFxuICAgIGlmKCFzdHJUaXRsZSl7XFxcXG4gICAgICAgIGlmKC9MVC8udGVzdCh2aXBVcmwpKXtcXFxcbiAgICAgICAgICAgIHN0ciA9IG15U2V0Lmx0O1xcXFxuICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ2x0Jyk7XFxcXG4gICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgnbHQnLHN0cik7XFxcXG4gICAgICAgIH0gZWxzZSBpZigvcmVucmVubWkvLnRlc3QodmlwVXJsKSl7XFxcXG4gICAgICAgICAgICBzdHIgPSBteVNldC5ycjtcXFxcbiAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdycicpO1xcXFxuICAgICAgICAgICAgcGFyc2VzID0gZ2V0TGF6eUxpc3QoJ3JyJyxzdHIpO1xcXFxuICAgICAgICB9ZWxzZSBpZigvd3VkdXl1bi8udGVzdCh2aXBVcmwpKXtcXFxcbiAgICAgICAgICAgIHN0ciA9IG15U2V0LndkO1xcXFxuICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ3dkJyk7XFxcXG4gICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgnd2QnLHN0cik7XFxcXG4gICAgICAgIH1lbHNlIGlmKC94aW5sdWFufExUfHJ1aWZlbmdsYnxzdW95b3x4Znl8cmVucmVubWl8Um9uZ1hpbmdWUnx4dWVyZW58d3VkdXl1bnxsYW9kaXxOYWlmZWltaXxkYW9kbXxYTU1UfHYwMjBjLy50ZXN0KHZpcFVybCkpe1xcXFxuICAgICAgICAgICAgc3RyID0gbXlTZXQub3RoO1xcXFxuICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ290aCcpO1xcXFxuICAgICAgICAgICAgcGFyc2VzID0gZ2V0TGF6eUxpc3QoJ290aCcsc3RyKTtcXFxcbiAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICB2YXIgaG9zdDtcXFxcbiAgICAgICAgICAgIHRyeXtcXFxcbiAgICAgICAgICAgICAgICBob3N0ID0gdmlwVXJsLm1hdGNoKC9cXFxcXFxcXC4oLio/KVxcXFxcXFxcLy8pWzFdO1xcXFxuICAgICAgICAgICAgfWNhdGNoKGUpe1xcXFxuICAgICAgICAgICAgICAgIGlmKCEvXmh0dHAvLnRlc3QocGxheVVybCkpe1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCLmlq3mj5LosIPnlKjlpLHotKXvvIFcXFxcXFxcXG7pnZ7mraPluLjnmoR2aXDmraPniYjlnLDlnYDkuJTmnKror4bliKvljp/nq5nop6PmnpDmkq3mlL7lnLDlnYBcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlUy7pgZPplb/ku5PlupPpgJrlhY0ocGxheVVybCx0aW1lb3V0KVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIC8vaG9zdCA9IGRlY29kZVVSSUNvbXBvbmVudChob3N0KTtcXFxcbiAgICAgICAgICAgIHN3aXRjaCAobXlTZXQucWp1KSB7XFxcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIum7mOiupFxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKGhvc3QpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJxcS5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC50eDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgndHgnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgndHgnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJpcWl5aS5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5xeTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgncXknKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgncXknKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJ5b3VrdS5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC55aztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgneWsnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgneWsnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJhbGl6eVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmFsO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdhbCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcyA9IGdldExhenlMaXN0KCdhbGl6eScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIm1ndHYuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQubWc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ21nJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VzID0gZ2V0TGF6eUxpc3QoJ21nJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwiYmlsaWJpbGkuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQuYmw7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ2JsJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VzID0gZ2V0TGF6eUxpc3QoJ2JsJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwic29odS5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5zaDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnc2gnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgnc2gnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJ0di5zb2h1LmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnNoO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdzaCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcyA9IGdldExhenlMaXN0KCdzaCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIml4aWd1YS5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC54ZztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgneGcnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgneGcnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJwcHR2LmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnBwO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhID0gZ2V0UGxheUp4KCdwcCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcyA9IGdldExhenlMaXN0KCdwcCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIm1pZ3V2aWRlby5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5taTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnbWknKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgnbWknKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJsZS5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5sZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnbGUnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZXMgPSBnZXRMYXp5TGlzdCgnbGUnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCIxOTA1LmNvbVxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0Lm9uZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnb25lJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VzID0gZ2V0TGF6eUxpc3QoJ29uZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcImZ1bi50dlxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmZ1bjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYSA9IGdldFBsYXlKeCgnZnVuJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VzID0gZ2V0TGF6eUxpc3QoJ2Z1bicpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5vdGg7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmEgPSBnZXRQbGF5SngoJ290aCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlcyA9IGdldExhenlMaXN0KCdvdGgnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICBkZWZhdWx0OlxcXFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5xanU7XFxcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgfWVsc2V7XFxcXG4gICAgICAgIGxvZygn6a2U5pat5omn6KGM5a6a5ZCR6Kej5p6Q57q/6Lev5aS0Oicrc3RyVGl0bGUpO1xcXFxuICAgICAgICBzdHIgPSBzdHJUaXRsZTtcXFxcbiAgICB9XFxcXG4gICAgbGV0IHdpdGhCYXRjaCA9ICEhKE15SmlleGkuaXNBdXRvICYmIE15SmlleGkuYXV0b01vZGUgPT09ICfpgJ/luqbkvJjlhYgnKTtcXFxcbiAgICBsZXQgd2l0aEJhdGNoT3JkZXIgPSAhIShNeUppZXhpLmlzQXV0byAmJiBNeUppZXhpLmF1dG9Nb2RlID09PSAn6aG65bqP5LyY5YWIJyk7XFxcXG4gICAgbGV0IHNpbmdsZUJhY2sgPSBNeUppZXhpLnNpbmdsZUJhY2t8fGZhbHNlOyAvL+WQiuavm+aooeW8j+OAguWNleS4que7k+aenOebtOaOpei/lOWbnu+8jOWBnOatouWQjumdoueahFxcXFxuICAgIGxldCBkbVBhdGggPSAnaGlrZXI6Ly9maWxlcy9jYWNoZS9kaWFvbWFvLnR4dCc7Ly/lkIrmr5vmqKHlvI/ov4fmu6Tmlofku7bot6/lvoRcXFxcbiAgICBsZXQgZG1VcmxzO1xcXFxuICAgIHRyeSB7XFxcXG4gICAgICAgIGRtVXJscyA9IGZldGNoKGRtUGF0aCkudHJpbSgpLnNwbGl0KCdcXFxcXFxcXG4nKS5maWx0ZXIoaXQ9Pml0JiYhaXQuc3RhcnRzV2l0aCgnLy8nKSk7XFxcXG4gICAgfWNhdGNoIChlKSB7XFxcXG4gICAgICAgIGRtVXJscyA9IFtdO1xcXFxuICAgIH1cXFxcbiAgICBmdW5jdGlvbiBoYXNEbSh2aWRlb1VybCxkbVVybHMpey8v5pKt5pS+5Zyw5Z2A5piv5ZCm5Li65ZCK5q+b6KeG6aKRXFxcXG4gICAgICAgIGlmKGRtVXJscy5sZW5ndGg8MSl7XFxcXG4gICAgICAgICAgICByZXR1cm4gZmFsc2VcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBmb3IobGV0IGRtVXJsIG9mIGRtVXJscyl7XFxcXG4gICAgICAgICAgICBpZigobmV3IFJlZ0V4cChkbVVybCkpLnRlc3QodmlkZW9VcmwpKXsvL+aSreaUvuWcsOWdgOWMheWQq+WQiuavm+agh+W/l+eahOWcsOWdgFxcXFxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIGZhbHNlXFxcXG4gICAgfVxcXFxuXFxcXG4gICAgZnVuY3Rpb24gdW5pcXVlMihhcnJheSl7Ly/ljrvph43lh73mlbBcXFxcbiAgICAgICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChhcnJheSkpO1xcXFxuICAgIH1cXFxcbiAgICBmdW5jdGlvbiBBcnJTZXQoQXJyLCBpZCkgey8v5a+56LGh5pWw57uE5Y676YeNXFxcXG4gICAgICAgIHZhciBvYmogPSB7fTtcXFxcbiAgICAgICAgY29uc3QgYXJyYXlzID0gQXJyLnJlZHVjZSgoc2V0QXJyLCBpdGVtKSA9PiB7XFxcXG4gICAgICAgICAgICBvYmpbaXRlbVtpZF1dID8gJycgOiBvYmpbaXRlbVtpZF1dID0gdHJ1ZSAmJiBzZXRBcnIucHVzaChpdGVtKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBzZXRBcnI7XFxcXG4gICAgICAgIH0sIFtdKTtcXFxcbiAgICAgICAgcmV0dXJuIGFycmF5cztcXFxcbiAgICB9XFxcXG4gICAgZnVuY3Rpb24gc29ydEJ5S2V5KGFycmF5LCBrZXksIG9yZGVyKSB7Ly/lr7nosaHmlbDnu4TmjInmn5DkuKrplK7lgLzmjpLluo9cXFxcbiAgICAgICAgcmV0dXJuIGFycmF5LnNvcnQoZnVuY3Rpb24oYSwgYikge1xcXFxuICAgICAgICAgICAgdmFyIHggPSBhW2tleV0ubWF0Y2goLyhcXFxcXFxcXGQrKS8pWzFdO1xcXFxuICAgICAgICAgICAgdmFyIHkgPSBiW2tleV0ubWF0Y2goLyhcXFxcXFxcXGQrKS8pWzFdO1xcXFxuICAgICAgICAgICAgLy8gbG9nKCd4OicreCtcXFxcXFxcIix5OlxcXFxcXFwiK3kpO1xcXFxuICAgICAgICAgICAgaWYgKG9yZGVyKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICgoeCA8IHkpID8gLTEgOiAoKHggPiB5KSA/IDEgOiAwKSlcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICgoeCA8IHkpID8gKCh4ID4geSkgPyAxIDogMCkgOiAtMSlcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiAgICB9XFxcXG4gICAgaWYgKHR5cGVvZiBQYXJzZVNbc3RyXSA9PSAnZnVuY3Rpb24nKSB7XFxcXG4gICAgICAgIGlmKC/pgJrlhY0vLnRlc3Qoc3RyKSl7XFxcXG4gICAgICAgICAgICByZXR1cm4gUGFyc2VTW3N0cl0odmlwVXJsLHRpbWVvdXQpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHZhciB1cmw7XFxcXG4gICAgICAgIHZhciB0YXNrID0gZnVuY3Rpb24ob2JqKSB7XFxcXG4gICAgICAgICAgICBldmFsKCd2YXIgY29uZmlnX2RwID0nICsgZmV0Y2goZ2V0VmFyKCdvbGRDb25maWcnKSkpO1xcXFxuICAgICAgICAgICAgZXZhbChmZXRjaChjb25maWdfZHAuY2opKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2Uob2JqLnZpcFVybCxvYmoubmFtZSxvYmoudGltZW91dCk7XFxcXG4gICAgICAgIH07XFxcXG4gICAgICAgIGlmKCF3aXRoQmF0Y2hPcmRlcnx8c3RyVGl0bGUpIHsvL+S4jeW8gOWkmue6v+i3r+mhuuW6j+S8mOWFiOaIluiAheaMh+WumuS6huino+aekFxcXFxuICAgICAgICAgICAgdXJsID0gUGFyc2VTW3N0cl0odmlwVXJsLHRpbWVvdXQpO1xcXFxuICAgICAgICB9ZWxzZXsvL+W8gOS6huWkmue6v+i3r+mhuuW6j+S8mOWFiOaJp+ihjOWFjeWXheWkmuS7u+WKoVxcXFxuICAgICAgICAgICAgcGFyc2VzLnVuc2hpZnQoe25hbWU6c3RyfSk7IC8v5oqK5Li76YWN572u55qE5YWN5ZeF5o6i5Yqg5YWl5Yiw5aSa5Lu75Yqh5YiX6KGoXFxcXG4gICAgICAgICAgICBwYXJzZXMgPSBBcnJTZXQocGFyc2VzLCduYW1lJyk7IC8v5Y676YeNXFxcXG4gICAgICAgICAgICB2YXIgY291bnQgPSBwYXJzZXMubGVuZ3RoOyAvL+iuvue9ruS7u+WKoeaVsOmHj1xcXFxuICAgICAgICAgICAgbG9nKCfprZTmlq3lvIDlkK/lpJrku7vliqHop6PmnpAs5Lu75Yqh5pWw6YePOicrY291bnQpO1xcXFxuICAgICAgICAgICAgbG9nKCfop6PmnpDliJfooag6JytKU09OLnN0cmluZ2lmeShwYXJzZXMpKTtcXFxcbiAgICAgICAgICAgIHZhciBwYXJzZVJldCA9IFtdOyAvL+ino+aekOe7k+aenOWIl+ihqFxcXFxuICAgICAgICAgICAgbGV0IHRhc2tzID0gcGFyc2VzLm1hcCgoaXQsaWRleCk9PntcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBmdW5jOiB0YXNrLFxcXFxuICAgICAgICAgICAgICAgICAgICBwYXJhbToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTppdC5uYW1lLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gcnVsZTppdC5ydWxlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlwVXJsOiB2aXBVcmwsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aW1lb3V0OiB0aW1lb3V0XFxcXG4gICAgICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgICAgIGlkOiBcXFxcXFxcInRhc2tcXFxcXFxcIitpZGV4XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICBzaG93TG9hZGluZyhcXFxcXFxcIumtlOaWreW5tuWPkeino+aekOS4re+8jOWJqeS9meino+aekDpcXFxcXFxcIitjb3VudCk7XFxcXG4gICAgICAgICAgICBmdW5jdGlvbiBpc0RtKHJldCl7XFxcXG4gICAgICAgICAgICAgICAgaWYoIXJldCl7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIHJldHVybiBoYXNEbShyZXQuc3BsaXQoJyMnKVswXS5zcGxpdCgnOycpWzBdLGRtVXJscylcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGJlKHRhc2tzLHtcXFxcbiAgICAgICAgICAgICAgICBmdW5jOiBmdW5jdGlvbihvYmosIGlkLCBlcnJvcixyZXQpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbG9nKFxcXFxcXFwi55uR5ZCs5Yiw5Lu75YqhXFxcXFxcXCIgKyBpZCsn5bey57uT5p2fLGVycm9yOicrZXJyb3IrJyxyZXQ6JytyZXQpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXQgPSByZXR8fCcnO1xcXFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVJldC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhc2s6aWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXQ6cmV0LFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZTp0YXNrcy5maWx0ZXIoaXQ9Pml0LmlkPT09aWQpWzBdLnBhcmFtLm5hbWVcXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG5cXFxcbiAgICAgICAgICAgICAgICAgICAgaWYoc2luZ2xlQmFjayl7Ly/lkIrmr5vmqKHlvI/lvIDlp4vnmoTor50s5Yik5patcmV05pyJ5pWI5oCnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2coJ+S7u+WKoScraWQrJ+e7k+aenOaYr+WQiuavmz8nK2lzRG0ocmV0KSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZighaXNEbShyZXQpJiZQYXJzZVMuaXNWaWRlbyhyZXQuc3BsaXQoJyMnKVswXS5zcGxpdCgnOycpWzBdKSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaGlkZUxvYWRpbmcoKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coJ+WQiuavm+aooeW8j+S4reaWreino+aekOW5tui/lOWbnuinhumikScrcmV0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2JyZWFrJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIGNvdW50IC09IDE7IC8v5a6M5oiQ5LqG5Lu75Yqh77yM5Lu75Yqh5pWw6YePLTFcXFxcbiAgICAgICAgICAgICAgICAgICAgLy9sb2cob2JqKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNvdW50ID4gMCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2hvd0xvYWRpbmcoXFxcXFxcXCLprZTmlq3lubblj5Hop6PmnpDkuK3vvIzliankvZnop6PmnpA6XFxcXFxcXCIgKyBjb3VudClcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGhpZGVMb2FkaW5nKCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgIHBhcmFtOiB7Ly/kvKDliLDnm5HlkKzlh73mlbDnmoRvYmrlj4LmlbDph4xcXFxcbiAgICAgICAgICAgICAgICAgICAgaGk6IFxcXFxcXFwiY2NjXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSk7Ly/miafooYzlpJrku7vliqFcXFxcbiAgICAgICAgICAgIC8vIGxldCB2YWx1YWJsZSA9IHBhcnNlUmV0LmZpbHRlcihpdD0+L20zdTh8bXA0Ly50ZXN0KGl0LnJldCkpO1xcXFxuICAgICAgICAgICAgbG9nKFxcXFxcXFwi5aSa5Lu75Yqh5omn6KGM57uT5p6c5pWwOlxcXFxcXFwiK3BhcnNlUmV0Lmxlbmd0aCk7XFxcXG4gICAgICAgICAgICBsZXQgdmFsdWFibGUgPSBwYXJzZVJldC5maWx0ZXIoaXQ9Pml0LnJldCYmUGFyc2VTLmlzVmlkZW8oaXQucmV0LnNwbGl0KCcjJylbMF0uc3BsaXQoJzsnKVswXSkpO1xcXFxuICAgICAgICAgICAgdmFsdWFibGUgPSB2YWx1YWJsZS5maWx0ZXIoaXQ9PiFpc0RtKGl0LnJldCkpOy8v6L+H5ruk5ZCK5q+b6KeG6aKRXFxcXG4gICAgICAgICAgICBsb2coJ+WkmuS7u+WKoemhuuW6j+aJp+ihjOacieaViOe7k+aenDonK0pTT04uc3RyaW5naWZ5KHZhbHVhYmxlKSk7XFxcXG4gICAgICAgICAgICBpZih2YWx1YWJsZS5sZW5ndGg+MSl7Ly/lpJrnur/ot69cXFxcbiAgICAgICAgICAgICAgICB2YWx1YWJsZSA9IHNvcnRCeUtleSh2YWx1YWJsZSwndGFzaycsdHJ1ZSk7Ly/ljYfluo/mjpLliJdcXFxcbiAgICAgICAgICAgICAgICBsZXQgdXJscz12YWx1YWJsZS5tYXAoaXQ9Pml0LnJldCk7Ly/lj5blh7rpk77mjqUs57yT5a2Y5YmN55qEXFxcXG4gICAgICAgICAgICAgICAgaWYoZ2V0VmFyKCdkcC5jYWNoZVZpZGVvJywndHJ1ZScpPT09J3RydWUnJiZwYXJzZUludChnZXRBcHBWZXJzaW9uKCkpPj0yMjU1KSB7Ly/lvIDlp4vnvJPlrZhcXFxcbiAgICAgICAgICAgICAgICAgICAgbG9nKFxcXFxcXFwi5bCK5pWs55qE6a2U5pat55So5oi377yM6KeG6aKR57yT5a2Y5bey5ZCv55So77yM6K+35bC95oOF5Lqr5Y+X55yL5Ymn5pe25YWJXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgdmlkZW9zQ2FjaGU9dXJscy5tYXAoKGl0KT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhlYWRlcnM9e307XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihpdC5zcGxpdChcXFxcXFxcIjtcXFxcXFxcIikubGVuZ3RoPjEpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBoZWFkID0gaXQuc3BsaXQoJzsnKVsxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZigvQC8udGVzdChoZWFkKSYmL3t8fS8udGVzdChoZWFkKSl7XFxcXG4vL2hlYWQgPSBoZWFkLnJlcGxhY2UoL3t8fS9nLCcnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZCA9IGhlYWQuc3BsaXQoXFxcXFxcXCJ7XFxcXFxcXCIpWzFdLnNwbGl0KFxcXFxcXFwifVxcXFxcXFwiKVswXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZCA9IGhlYWQuc3BsaXQoJyYmJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaSBpbiBoZWFkKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrZXkgPSBoZWFkW2ldLnNwbGl0KCdAJylbMF07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPWhlYWRbaV0uc3BsaXQoJ0AnKVsxXS5yZXBsYWNlKC87Lywn77yb77ybJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzW2tleV0gPSB2YWx1ZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOml0LnNwbGl0KFxcXFxcXFwiO1xcXFxcXFwiKVswXS5zcGxpdChcXFxcXFxcIiNcXFxcXFxcIilbMF0sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9uczp7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6aGVhZGVyc1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciBkYXRhPWJhdGNoQ2FjaGVNM3U4KHZpZGVvc0NhY2hlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgZGF0YT1kYXRhLm1hcCgoaXQsaWQpPT57XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZXh0cmE9XFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKHVybHNbaWRdLnNwbGl0KFxcXFxcXFwiO1xcXFxcXFwiKS5sZW5ndGg+MSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE9XFxcXFxcXCI7XFxcXFxcXCIrdXJsc1tpZF0uc3BsaXQoXFxcXFxcXCI7XFxcXFxcXCIpWzFdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYodXJsc1tpZF0uc3BsaXQoXFxcXFxcXCLimIVcXFxcXFxcIikubGVuZ3RoPjEpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhPVxcXFxcXFwi4piFXFxcXFxcXCIrdXJsc1tpZF0uc3BsaXQoXFxcXFxcXCLimIVcXFxcXFxcIilbMV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihpdCtcXFxcXFxcIlxcXFxcXFwiIT09XFxcXFxcXCJudWxsXFxcXFxcXCIpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBpdCtleHRyYVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHVybHNbaWRdXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICB1cmxzID0gZGF0YVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAvLyBsb2coJ+aOkuW6j+WujOavleWQjue7k+aenDonK0pTT04uc3RyaW5naWZ5KHZhbHVhYmxlKSk7XFxcXG4gICAgICAgICAgICAgICAgbGV0IG5hbWVzPXZhbHVhYmxlLm1hcChpdD0+aXQubmFtZSk7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGhlYWRlcnMgPSB1cmxzLm1hcCgoaXQpPT57XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmKCEvOy8udGVzdChpdCl8fGl0LnNwbGl0KCc7JykubGVuZ3RoPDIpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9XFxcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhlYWQgPSBpdC5zcGxpdCgnOycpWzFdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoIS9ALy50ZXN0KGhlYWQpfHwhL3t8fS8udGVzdChoZWFkKSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHt9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkPWhlYWQuc3BsaXQoXFxcXFxcXCJ7XFxcXFxcXCIpWzFdLnNwbGl0KFxcXFxcXFwifVxcXFxcXFwiKVswXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vaGVhZCA9IGhlYWQucmVwbGFjZSgve3x9L2csJycpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZCA9IGhlYWQuc3BsaXQoJyYmJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgb2JqID0ge307XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGkgaW4gaGVhZCl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGtleSA9IGhlYWRbaV0uc3BsaXQoJ0AnKVswXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBoZWFkW2ldLnNwbGl0KCdAJylbMV0ucmVwbGFjZSgvOy8sJ++8m++8mycpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9ialtrZXldID0gdmFsdWU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICB1cmxzID0gdXJscy5tYXAoKGl0KT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgdHVybD1pdC5zcGxpdCgnOycpWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZihpdC5pbmNsdWRlcyhcXFxcXFxcIiNpc1ZpZGVvPXRydWUjXFxcXFxcXCIpJiYhdHVybC5pbmNsdWRlcyhcXFxcXFxcIiNpc1ZpZGVvPXRydWUjXFxcXFxcXCIpKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR1cmwrPVxcXFxcXFwiI2lzVmlkZW89dHJ1ZSNcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdHVybFxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7dXJsczp1cmxzLGhlYWRlcnM6aGVhZGVycyxuYW1lczpuYW1lc30pO1xcXFxuXFxcXG4gICAgICAgICAgICB9ZWxzZSBpZih2YWx1YWJsZS5sZW5ndGg9PT0wKXtcXFxcbiAgICAgICAgICAgICAgICAvLyByZXR1cm4gJ3RvYXN0Oi8v6a2U5pat5aSa5Lu75Yqh5YWN5ZeF6Kej5p6Q5YWo5Yab6KaG5rKhJ1xcXFxuICAgICAgICAgICAgICAgIGlmKHR5cGVvZihleHRyYS5wbGF5VXJsTGlzdCk9PT0nb2JqZWN0JyYmZXh0cmEucGxheVVybExpc3QubGVuZ3RoPjApe1xcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYS5wbGF5VXJsTGlzdCA9IGV4dHJhLnBsYXlVcmxMaXN0LmZpbHRlcihpdD0+aXQhPT0oUGFyc2VTW3N0cl18fHN0cikgKyB2aXBVcmwpO1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgbmFtZUxpc3QgPSBleHRyYS5uYW1lTGlzdDtcXFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmEubmFtZUxpc3Q9dW5pcXVlMihuYW1lTGlzdCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhLnBsYXlVcmxMaXN0ID0gdW5pcXVlMihleHRyYS5wbGF5VXJsTGlzdCk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGlmKGV4dHJhLm5hbWVMaXN0Lmxlbmd0aDwxKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgaGlkZUxvYWRpbmcoKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+iKreavlFHkuoYs5aSa5Lu75Yqh5YWN5ZeF6Kej5p6Q5YWo5Yab6KaG5rKh5bm25LiU5rKh5pyJ5Y+v55So55qEanNvbnx4Neino+aekOS6hidcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgc2hvd0xvYWRpbmcoXFxcXFxcXCLprZTmlq3lpJrku7vliqHlhY3ll4XlpLHotKUs5bCd6K+VanNvbnx4NVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAvL+aOkumZpOesrOS4gOS4qlxcXFxuICAgICAgICAgICAgICAgIGxldCBleHRyYTIgPSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0OmV4dHJhLm5hbWVMaXN0LFxcXFxuICAgICAgICAgICAgICAgICAgICBwbGF5VXJsTGlzdDpleHRyYS5wbGF5VXJsTGlzdC5zbGljZSgxKSxcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgLy8gbG9nKGV4dHJhLnBsYXlVcmxMaXN0WzBdKTtcXFxcbiAgICAgICAgICAgICAgICAvLyBsb2coZXh0cmEyKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gUGFyc2VTLmRlZmF1bHRQYXJzZVdlYj9QYXJzZVMuZGVmYXVsdFBhcnNlV2ViKGV4dHJhLnBsYXlVcmxMaXN0WzBdLHRpbWVvdXQsZXh0cmEyKTpleHRyYS5wbGF5VXJsTGlzdFswXTtcXFxcblxcXFxuICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZhbHVhYmxlWzBdLnJldFxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmKC9eaGlrZXI6fF50b2FzdDp8XnJ1bGU6fF54NVJ1bGU6fF53ZWJSdWxlOnxec2VsZWN0Ly50ZXN0KHVybCkpe1xcXFxuICAgICAgICAgICAgcmV0dXJuIHVybDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZighdXJsJiYhL15odHRwLy50ZXN0KHZpcFVybCkpe1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mtlOaWreino+aekOWksei0pT4nK3ZpcFVybFxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC8vIGxvZyh2aXBVcmwrJ+WFjeWXheaOoue7k+aenDonK3VybCk7XFxcXG4gICAgICAgIGlmICgvXlxcXFxcXFxcLy8udGVzdCh1cmwpKSB7XFxcXG4gICAgICAgICAgICB1cmwgPSAnaHR0cHM6JyArIHVybFxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmICgvPWh0dHAvLnRlc3QodXJsKSkge1xcXFxuICAgICAgICAgICAgdXJsID0gLyZ1cmw9Ly50ZXN0KHVybCkgPyB1cmwgOiAnaHR0cCcgKyBkZWNvZGVVUklDb21wb25lbnQodXJsLnNwbGl0KCc9aHR0cCcpWzFdKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvKmlmKHVybC5tYXRjaCgvbWd0di5jb20vZyk9PSdtZ3R2LmNvbScpe1xcXFxuICAgICAgICAgICAgdXJsID0gdXJsICsgJzt7UmVmZXJlckBodHRwczovL3d3dy5tZ3R2LmNvbX0nO1xcXFxuICAgICAgICB9IGVsc2UgKi9cXFxcbiAgICAgICAgaWYgKC9cXFxcXFxcXC5mbHYvLnRlc3QodXJsKSYmIS9Vc2VyLUFnZW50Ly50ZXN0KHVybCkpIHtcXFxcbiAgICAgICAgICAgIHVybCA9IHVybCArICc7e1VzZXItQWdlbnRAYXBwJiZSZWZlcmVyQCcgKyB2aXBVcmwgKyAnfSc7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaWYgKHVybCA9PT0gJycgfHwgdXJsID09PSB2aXBVcmwpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiB2aXBVcmw7XFxcXG4gICAgICAgIH0gZWxzZSBpZighLyNpc1ZpZGVvPXRydWUjLy50ZXN0KHVybCkpe1xcXFxuICAgICAgICAgICAgcmV0dXJuIHVybCArICcjaXNWaWRlbz10cnVlIyc7XFxcXG4gICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgcmV0dXJuIHVybFxcXFxuICAgICAgICB9XFxcXG4gICAgfSBlbHNlIGlmICh0eXBlb2YgUGFyc2VTW3N0cl0gPT0gJ3N0cmluZycmJlBhcnNlU1tzdHJdLm1hdGNoKC9odHRwLio/PS8pKSB7XFxcXG4gICAgICAgIC8vIGxvZyhcXFxcXFxcIuaWreaPkuW8gOWni+mAmueUqOaJp+ihjOWFjeWXhSBkZWZhdWx0UGFyc2VXZWI6XFxcXFxcXCIrdGltZW91dCk7XFxcXG4gICAgICAgIC8vbG9nKFxcXFxcXFwi6buY6K6keDVcXFxcXFxcIitQYXJzZVMuZGVmYXVsdFBhcnNlV2ViKTtcXFxcbiAgICAgICAgaWYod2l0aEJhdGNoKXtcXFxcbiAgICAgICAgICAgIGlmKHR5cGVvZihleHRyYS5wbGF5VXJsTGlzdCk9PT0nb2JqZWN0JyYmZXh0cmEucGxheVVybExpc3QubGVuZ3RoPjApe1xcXFxuICAgICAgICAgICAgICAgIGV4dHJhLnBsYXlVcmxMaXN0ID0gZXh0cmEucGxheVVybExpc3QuZmlsdGVyKGl0PT5pdCE9PShQYXJzZVNbc3RyXXx8c3RyKSArIHZpcFVybCk7XFxcXG4gICAgICAgICAgICAgICAgbGV0IG5hbWVMaXN0ID0gZXh0cmEubmFtZUxpc3Q7XFxcXG4gICAgICAgICAgICAgICAgbmFtZUxpc3QudW5zaGlmdChzdHIpO1xcXFxuXFxcXG4gICAgICAgICAgICAgICAgZXh0cmEubmFtZUxpc3Q9dW5pcXVlMihuYW1lTGlzdCk7XFxcXG4gICAgICAgICAgICAgICAgZXh0cmEucGxheVVybExpc3QgPSB1bmlxdWUyKGV4dHJhLnBsYXlVcmxMaXN0KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICBleHRyYSA9IHt9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIFBhcnNlUy5kZWZhdWx0UGFyc2VXZWI/UGFyc2VTLmRlZmF1bHRQYXJzZVdlYigoUGFyc2VTW3N0cl18fHN0cikgKyB2aXBVcmwsdGltZW91dCxleHRyYSk6KFBhcnNlU1tzdHJdfHxzdHIpICsgdmlwVXJsO1xcXFxuICAgIH0gZWxzZSBpZih0eXBlb2Yoc3RyKT09PSdzdHJpbmcnJiZzdHIubGVuZ3RoPjEmJih0eXBlb2YgUGFyc2VTW3N0cl09PSd1bmRlZmluZWQnfHwhUGFyc2VTW3N0cl0pJiYhL15odHRwLy50ZXN0KHN0cikpe1xcXFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v6K+35YWI6L+b6KGM5pat5o+S6YWN572u56Gu5L+d6K+l6Kej5p6Q5a2Y5ZyoIVxcXFxcXFxcbuajgOa1i+WIsOaXoOaViOeahOino+aekOmFjee9rjonK3N0cjtcXFxcbiAgICB9ZWxzZSB7XFxcXG4gICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlKHN0ciArIHZpcFVybCx0aW1lb3V0KTtcXFxcbiAgICB9XFxcXG59XFxcXG5cXFxcbnZhciBwbGF5UGFyc2UgPSB7XFxcXG4gICAgcGxheWVyX3h4OiBmdW5jdGlvbihqdXJsLCBMYWJlbCkge1xcXFxuICAgICAgICByZXR1cm4gJChqdXJsKS5sYXp5UnVsZSgoaykgPT4ge1xcXFxuICAgICAgICAgICAgdmFyIGpzVXJsID0gSlNPTi5wYXJzZShmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKSkuY2o7XFxcXG4gICAgICAgICAgICB2YXIgTGFiZWwgPSBrO1xcXFxuICAgICAgICAgICAgdmFyIGZhID0gWydsZXR2JywgJ3BwdHYnLCAncXEnLCAneW91a3UnLCAncWl5aScsICdpcWl5aScsICdtZ3R2JywgJ2JpbGliaWxpJywgJ3NvaHUnLCAnbWlndScsICdtMTkwNScsICd2aXAnXTtcXFxcbiAgICAgICAgICAgIHZhciBodG1sID0gcGFyc2VEb20ocmVxdWVzdChpbnB1dCksIExhYmVsKTtcXFxcbiAgICAgICAgICAgIGV2YWwoaHRtbC5yZXBsYWNlKC9wbGF5ZXJfLio/PXsvLCAncGRhdGE9eycpKTtcXFxcbiAgICAgICAgICAgIGV2YWwoZmV0Y2goanNVcmwpKTtcXFxcbiAgICAgICAgICAgIGlmIChwZGF0YS51cmwuc3Vic3RyKDAsIDgpLm1hdGNoKC9KVC4uSlQuLi8pKSB7XFxcXG4gICAgICAgICAgICAgICAgcGRhdGEudXJsID0gYmFzZTY0RGVjb2RlKHBkYXRhLnVybCk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZiAocGRhdGEudXJsLnN1YnN0cigwLCA4KS5tYXRjaCgvJS4uJS4uLykpIHtcXFxcbiAgICAgICAgICAgICAgICBwZGF0YS51cmwgPSB1bmVzY2FwZShwZGF0YS51cmwpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgaWYgKGZhLmluY2x1ZGVzKHBkYXRhLmZyb20pKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIGF5dG1QYXJzZShwZGF0YS51cmwpO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gcGRhdGEudXJsICsgJyNpc1ZpZGVvPXRydWUjJztcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSwgTGFiZWwpXFxcXG4gICAgfVxcXFxufTtcXFxcbmZ1bmN0aW9uIG16UG9wdXAoKSB7XFxcXG4gICAgLypcXFxcbiAgICBpZiAoZ2V0VmFyKFxcXFxcXFwiaWprLXR4XFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpID09IFxcXFxcXFwiMVxcXFxcXFwiKSB7XFxcXG4gICAgICAgIHNldEl0ZW0oXFxcXFxcXCJ0aXhpbmdcXFxcXFxcIiwgXFxcXFxcXCIxXFxcXFxcXCIpXFxcXG4gICAgICAgIGNsZWFyVmFyKFxcXFxcXFwiaWprLXR4XFxcXFxcXCIpXFxcXG4gICAgfVxcXFxuICAgIGlmIChnZXRJdGVtKFxcXFxcXFwidGl4aW5nXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpID09IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgY29uZmlybSh7XFxcXG4gICAgICAgICAgICB0aXRsZTogJ+WFjei0o+WjsOaYjicsXFxcXG4gICAgICAgICAgICBjb250ZW50OiAn5pys56iL5bqP5LiN5o+Q5L6b6KeG6aKR6Kej5p6Q5pyN5YqhXFxcXFxcXFxu5omA5pyJ5YaF5a655Z2H5LuO55So5oi35YiG5Lqr5Lit5pS26ZuGXFxcXFxcXFxu5LuF5L6b5rWL6K+V5ZKM5a2m5Lmg5Lqk5rWBXFxcXFxcXFxuXFxcXFxcXFxu56Gu5a6a5Y2z6K6k5Y+v77yM5LiN5YaN5o+Q6YaSJyxcXFxcbiAgICAgICAgICAgIGNvbmZpcm06ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHB1dFZhcihcXFxcXFxcImlqay10eFxcXFxcXFwiLCBcXFxcXFxcIjFcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v54K55Ye75LqG56Gu6K6kXFxcXFxcXCJcXFxcblxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9XFxcXG4gICAgICovXFxcXG59XFxcXG4vKlxcXFxuaWYgKCFnZXRWYXIoXFxcXFxcXCJ0aXhpbmdcXFxcXFxcIikpIHtcXFxcbiAgICBtelBvcHVwKCk7XFxcXG4gICAgcHV0VmFyKCd0aXhpbmcnLCdvaycpO1xcXFxufVxcXFxuKi9cXFxcbmZ1bmN0aW9uIHNhdmVCdXR0b24oY29udGVudCxuYW1lKSB7XFxcXG4gICAgbmFtZSA9IG5hbWV8fCcnO1xcXFxuICAgIHZhciBkYXRhID0gY29udGVudC5zcGxpdCgn4piF4piF4piFJyk7XFxcXG4gICAgaWYgKGRhdGEubGVuZ3RoID09PSAyKSB7XFxcXG4gICAgICAgIHZhciBfZHQgPSBwYXJzZVBhc3RlKGRhdGFbMF0pO1xcXFxuICAgICAgICBjb250ZW50ID0gX2R0LnN1YnN0cigwLCA2KSAhPT0gJ2Vycm9yOicgPyBfZHQgOiAnJztcXFxcbiAgICB9XFxcXG4gICAgZGF0YSA9IGNvbnRlbnQuc3BsaXQoJ+KYhScpO1xcXFxuICAgIHZhciB0eXBlID0gZGF0YVswXTtcXFxcbiAgICB2YXIgYXJyTGlzdCA9IFtdO1xcXFxuICAgIHZhciBvYmpDb2RlID0ge307XFxcXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMiAmJiBkYXRhWzBdICE9PSAn55u06ZO+Jykge1xcXFxuICAgICAgICB2YXIgb2JqS2V5ID0gZGF0YVsxXTtcXFxcbiAgICAgICAgdmFyIG9ialZhbHVlID0gZGF0YVsyXTtcXFxcbiAgICAgICAgaWYgKHR5cGUgPT09ICdNeVBhcnNlUycpIHtcXFxcbiAgICAgICAgICAgIG9ialZhbHVlID0gYmFzZTY0RGVjb2RlKG9ialZhbHVlKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAob2JqVmFsdWUuc3BsaXQoJ2Z1bmN0aW9uJykubGVuZ3RoID4gMSkge1xcXFxuICAgICAgICAgICAgZXZhbCgnb2JqVmFsdWU9JyArIG9ialZhbHVlKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBhcnJMaXN0LnNwbGljZSgwLCAwLCBvYmpLZXkpOyAvL+a3u+WKoOmhueebrumdnuWIoOmZpFxcXFxuICAgICAgICBvYmpDb2RlW29iaktleV0gPSBvYmpWYWx1ZTtcXFxcblxcXFxuICAgIH0gZWxzZSBpZiAodHlwZSA9PT0gJ+ebtOmTvicpIHtcXFxcbiAgICAgICAgYXJyTGlzdCA9IGRhdGE7XFxcXG4gICAgICAgIGFyckxpc3Quc3BsaWNlKDAsIDEpO1xcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIGFyckxpc3QgPSBudWxsO1xcXFxuICAgIH1cXFxcbiAgICBpZiAoYXJyTGlzdCAhPSBudWxsKSB7XFxcXG4gICAgICAgIHZhciBwYXJzZVJvdXRlID0gZ2V0VmFyKCdwYXJzZVJvdXRlJyk7XFxcXG4gICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcXFxuICAgICAgICBBcnJheS5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24odmFsKSB7XFxcXG4gICAgICAgICAgICBsZXQgaW5kZXggPSB0aGlzLmluZGV4T2YodmFsKTtcXFxcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XFxcXG4gICAgICAgICAgICAgICAgdGhpcy5zcGxpY2UoaW5kZXgsIDEpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9O1xcXFxuICAgICAgICBpZihuYW1lKXsvL+WIoOmZpOWQjeensOWIl+ihqOWSjOS7o+eggVxcXFxuICAgICAgICAgICAganNvbi50aXRsZS5yZW1vdmUobmFtZSk7XFxcXG4gICAgICAgICAgICBkZWxldGUganNvbi5jb2Rlc1tuYW1lXTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBhcnJMaXN0ID0gYXJyTGlzdC5jb25jYXQoanNvbi50aXRsZSk7XFxcXG4gICAgICAgIGpzb24udGl0bGUgPSBBcnJheS5mcm9tKG5ldyBTZXQoYXJyTGlzdCkpO1xcXFxuICAgICAgICBPYmplY3QuYXNzaWduKGpzb24uY29kZXMsIG9iakNvZGUpO1xcXFxuICAgICAgICBpZiAodHlwZSA9PT0gJ+a1i+ivlScpIHtcXFxcbiAgICAgICAgICAgIGV2YWwoJ3ZhciBjb25maWcgPScgKyBmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKSk7XFxcXG4gICAgICAgICAgICBldmFsKGZldGNoKGNvbmZpZy5jaikpO1xcXFxuICAgICAgICAgICAgaWYgKHR5cGVvZiBQYXJzZVNbZGF0YVsxXV0gPT0gXFxcXFxcXCJmdW5jdGlvblxcXFxcXFwiKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlU1tkYXRhWzFdXShkYXRhWzJdKTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBhcnNlUy5kZWZhdWx0UGFyc2VXZWIoUGFyc2VTW2RhdGFbMV1dICsgZGF0YVsyXSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgJC5zdHJpbmdpZnkoanNvbikpO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/lt7Lkv53lrZjlhoXlrrlcXFxcXFxcIjtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5peg5rOV6K+G5Yir6L+Z5Liq5YaF5a655ZGiXFxcXFxcXCJcXFxcbiAgICB9XFxcXG59XFxcXG4vLyDku6XkuIvku6PnoIHljYPkuIfkuI3opoHmlL7lh7rmnaXlkKbliJnmiqXplJlcXFxcbmlmIChnZXRJdGVtKCd1cGRhdGVEYXRlJykgIT0gdXBkYXRlRGF0ZSkge1xcXFxuLy8gaWYgKHRydWUpIHtcXFxcbiAgICAvLyDmiopmdW5jdGlvbuWPmOaIkHN0cmluZ1xcXFxuICAgIGxldCBmdW5jdGlvbkNvZGUgPSBzYXZlQnV0dG9uICsgJzsnK216UG9wdXA7XFxcXG4gICAgLy8gd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2NhY2hlL3Bsc2NQYXJzZS5odG1sJywgZmV0Y2goX215U2V0LmNrTGluayArICdwbHNjUGFyc2UuaHRtbCcpKTtcXFxcbiAgICBzZXRJdGVtKCdteUZ1bmN0aW9uJywgZnVuY3Rpb25Db2RlKTtcXFxcbiAgICBzZXRJdGVtKCd1cGRhdGVEYXRlJywgdXBkYXRlRGF0ZSk7XFxcXG59XFxcXG52YXIgYmpJdGVtID0ge1xcXFxuICAgIGhmUGx1Z2luOiBmdW5jdGlvbihwYXJzZVJvdXRlKSB7XFxcXG4gICAgICAgIHJldHVybiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XFxcXG4gICAgICAgICAgICBpZiAoZmlsZUV4aXN0KGspKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGNqY2FjaGUgPSBnZXRWYXIoJ2NqQ2FjaGUnKTtcXFxcbiAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKGspKTtcXFxcbiAgICAgICAgICAgICAgICBqc29uLnNldHRpbmdzLmNqID0gY2pjYWNoZTtcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoaywgJC5zdHJpbmdpZnkoanNvbikpO1xcXFxuICAgICAgICAgICAgICAgIHZhciBvbGRSb3V0ZSA9IGdldFZhcignb2xkQ29uZmlnJyk7XFxcXG4gICAgICAgICAgICAgICAgdmFyIG9sZENvbmZpZyA9IGpzb24uc2V0dGluZ3M7XFxcXG4gICAgICAgICAgICAgICAgb2xkQ29uZmlnLmNqID0gY2pjYWNoZTtcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUob2xkUm91dGUsICQuc3RyaW5naWZ5KG9sZENvbmZpZykpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5oGi5aSN5oiQ5YqfJztcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mcgOimgeWFiOaLieWPluWIl+ihqCdcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSwgcGFyc2VSb3V0ZSlcXFxcbiAgICB9LFxcXFxuICAgIHB1bGxDb2RlOiBmdW5jdGlvbihrKSB7XFxcXG4gICAgICAgIHJldHVybiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XFxcXG4gICAgICAgICAgICB2YXIgcHVsbE1vZGUgPSBrWzBdO1xcXFxuICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBrWzFdO1xcXFxuICAgICAgICAgICAgdmFyIHBhcnNlRmlsZSA9IGZldGNoKHBhcnNlUm91dGUpO1xcXFxuICAgICAgICAgICAgaWYgKCFwYXJzZUZpbGUpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgc2V0dGluZ3MgPSBmZXRjaChnZXRWYXIoJ29sZENvbmZpZycpKTtcXFxcbiAgICAgICAgICAgICAgICBzZXR0aW5ncyA9ICFzZXR0aW5ncyA/IHt9IDogSlNPTi5wYXJzZShzZXR0aW5ncyk7XFxcXG4gICAgICAgICAgICAgICAgdmFyIGpzb24gPSB7fTtcXFxcbiAgICAgICAgICAgICAgICBqc29uLnNldHRpbmdzID0gc2V0dGluZ3M7XFxcXG4gICAgICAgICAgICAgICAganNvbi50aXRsZSA9IFtdO1xcXFxuICAgICAgICAgICAgICAgIGpzb24uY29kZXMgPSB7fTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBwYXJzZUZpbGUpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgdmFyIHBhcnNlVGl0bGUgPSBbXTtcXFxcbiAgICAgICAgICAgIHZhciBwYXJzZUNvZGU9e307XFxcXG4gICAgICAgICAgICB2YXIgY2pMaW5rID0gZ2V0VmFyKCdwbHVnaW5MaW5rJyk7XFxcXG4gICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgIGlmKC9AYmFzZTY0OlxcXFxcXFxcL1xcXFxcXFxcLy8udGVzdChjakxpbmspKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgZXZhbChiYXNlNjREZWNvZGUoY2pMaW5rLnNwbGl0KCdAYmFzZTY0Oi8vJylbMV0pKTtcXFxcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZigv5o+S5Lu25ZCNLy50ZXN0KGNqTGluaykpe1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgcmVhbExpbmsgPSBjakxpbmsuc3BsaXQoJ+aPkuS7tuWQjScpWzBdLnJlcGxhY2UoL1tcXFxcXFxcXHNdL2csJycpO1xcXFxuICAgICAgICAgICAgICAgICAgICBsb2coJ+ino+aekOS6keWJquWIh+advzonK3JlYWxMaW5rKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHlQYXN0ZSA9IHBhcnNlUGFzdGUocmVhbExpbmspO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZigvQGJhc2U2NDpcXFxcXFxcXC9cXFxcXFxcXC8vLnRlc3QoeVBhc3RlKSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoYmFzZTY0RGVjb2RlKHlQYXN0ZS5zcGxpdCgnQGJhc2U2NDovLycpWzFdKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mIFBhcnNlUz09PSd1bmRlZmluZWQnKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieWPluS4qum4oeavm+aPkuS7tizph4zpnaLov55QYXJzZVPlr7nosaHpg73msqHmnIkhJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1jYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/puKHmr5vmj5Lku7bmiafooYzmiqXplJk6XFxcXFxcXFxuJytlLm1lc3NhZ2U7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+acquiDveivhuWIq+S6keWJquWIh+adv+S4reeahOWGheWuuTpcXFxcXFxcXG4nK3lQYXN0ZS5zdWJzdHJpbmcoMCwxMDApO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChjakxpbmsgPT09ICdR56WeJykge1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgamlleGkgPSBmZXRjaCgnaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHQnKS5zcGxpdCgnXFxcXFxcXFxuJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGZvciAoaSBpbiBqaWV4aSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlPWppZXhpW2ldLnNwbGl0KCcmJicpWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGU9amlleGlbaV0uc3BsaXQoJyYmJylbMV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlLnB1c2godGl0bGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb2RlW3RpdGxlXT1jb2RlO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIC8vIH1lbHNlIGlmKC9eI1thLXpBLVowLTldezIsMTB9JC8udGVzdChjakxpbmspKXsvL+emj+WIqeWPo+S7pDLliLAxMOS9jVxcXFxuICAgICAgICAgICAgICAgIGVsc2UgaWYoL14jW1xcXFxcXFxcU117MiwxMH0kLy50ZXN0KGNqTGluaykpey8v56aP5Yip5Y+j5LukMuWIsDEw5L2N5Lu75oSP6Z2e56m65a2X56ym5LiyXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHt0YXNrQ2FsbCwgdGFza1J1bix0YXNrUmVxfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS90YXNrQ2FsbD9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgLy8gbG9nKCflvIDlp4vmiafooYzku7vliqHku5PlupPojrflj5bmlq3lv7Xmj5Lku7bnpo/liKnlj6Pku6QnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJlc3VsdCA9IHRhc2tDYWxsKDE3LCdEbkZ1bGknLFtjakxpbmtdKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5zdGF0dXMgPT09IDApIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByZXQgPSBKU09OLnBhcnNlKHJlc3VsdC5yZXN1bHQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKHJldCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihyZXQub3B0PT09J2Vycm9yJyl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovLycrcmV0Lm1zZztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmKHJldC5vcHQ9PT0ndXJsJyl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGh0bWwgPSBmZXRjaChyZXQucmV0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJyID0gaHRtbC5pbmNsdWRlcygnaHR0cCcpPyBodG1sOmJhc2U2NERlY29kZShodG1sKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgamlleGkgPSBhcnIubWF0Y2goL1tcXFxcXFxcXFNdKj8sLio/W1xcXFxcXFxcc10vZyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSBpbiBqaWV4aSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGU9amlleGlbaV0uc3BsaXQoJywnKVswXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGU9amlleGlbaV0uc3BsaXQoJywnKVsxXS5zcGxpdChcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiKVswXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoIS9eaHR0cHxmdW5jdGlvbi8udGVzdChjb2RlKSYmY29kZS5sZW5ndGg+MjApey8vYmFzZTY057yW56CB55qE5Ye95pWwXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlID0gYmFzZTY0RGVjb2RlKGNvZGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09L2Z1bmN0aW9uLy50ZXN0KGNvZGUpP2V2YWwoY29kZSk6Y29kZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihyZXQub3B0PT09J2p4Jyl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoL1tcXFxcXFxcXFNdKj8saHR0cFtcXFxcXFxcXFNdLy50ZXN0KHJldC5yZXQpKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gcmV0LnJldC5zcGxpdCgnLCcpWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9IHJldC5yZXQuc3BsaXQoJywnKVsxXS5zcGxpdCgnXFxcXFxcXFxuJylbMF07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUucHVzaCh0aXRsZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09Y29kZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZigvXmh0dHAvLnRlc3QocmV0LnJldCkpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdGl0bGUgPSBjakxpbmsuc3BsaXQoJyMnKVsxXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSByZXQucmV0LnNwbGl0KCdcXFxcXFxcXG4nKVswXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUaXRsZS5wdXNoKHRpdGxlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VDb2RlW3RpdGxlXT1jb2RlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pyq55+l55qE56aP5YipOlxcXFxcXFxcbicrcmV0LnJldDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihyZXQub3B0PT09J3ZpcEp4Jyl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHRpdGxlID0gY2pMaW5rLnNwbGl0KCcjJylbMV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSByZXQucmV0O1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGxvZyhjb2RlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlLnB1c2godGl0bGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlQ29kZVt0aXRsZV09L2Z1bmN0aW9uLy50ZXN0KGNvZGUpP2V2YWwoY29kZSk6Y29kZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5LuT5bqT6Z2e5pyA5paw54mI5oiW6ICF56aP5Yip56S+5Yqf6IO95byA5Y+R5LitJ1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoY2pMaW5rPT09J+aWreaPkicpe1xcXFxuICAgICAgICAgICAgICAgICAgICBldmFsKGZldGNoKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qc1xcXFxcXFwiKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGU9T2JqZWN0LmtleXMoUGFyc2VTKTtcXFxcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZigvXmhpa2VyOlxcXFxcXFxcL1xcXFxcXFxcL3xeZmlsZTpcXFxcXFxcXC9cXFxcXFxcXC98Xmh0dHB8XlxcXFxcXFxcL3N0b3JhZ2VcXFxcXFxcXC98XlxcXFxcXFxcL3NkY2FyZFxcXFxcXFxcLy8udGVzdChjakxpbmspKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYoL15cXFxcXFxcXC9zdG9yYWdlXFxcXFxcXFwvfF5cXFxcXFxcXC9zZGNhcmRcXFxcXFxcXC8vLnRlc3QoY2pMaW5rKSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjakxpbmsgPSAnZmlsZTovLycrY2pMaW5rO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIGV2YWwoZmV0Y2goY2pMaW5rKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHBhcnNlVGl0bGU9T2JqZWN0LmtleXMoUGFyc2VTKTtcXFxcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieWPluWPo+S7pOacieivrydcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgbG9nKGUubWVzc2FnZSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB2YXIganhKdWRnZSA9IHR5cGVvZiBQYXJzZVMgPT0gJ29iamVjdCc7XFxcXG4gICAgICAgICAgICB2YXIgbGJKdWRnZSA9IHR5cGVvZihwYXJzZVRpdGxlKSA9PSAnb2JqZWN0JztcXFxcbiAgICAgICAgICAgIGlmIChqeEp1ZGdlIHx8IGxiSnVkZ2UpIHtcXFxcbiAgICAgICAgICAgICAgICAvLyBpZiAocHVsbE1vZGUgPT09ICfliJfooagnKSB7XFxcXG4gICAgICAgICAgICAgICAgLy8gICAgIGlmICghbGJKdWRnZSkge1xcXFxuICAgICAgICAgICAgICAgIC8vICAgICAgICAgcGFyc2VUaXRsZSA9IE9iamVjdC5rZXlzKFBhcnNlUyk7XFxcXG4gICAgICAgICAgICAgICAgLy8gICAgIH1cXFxcbiAgICAgICAgICAgICAgICAvLyAgICAgdmFyIG5ld1BhcnNlVGl0bGUgPSBqc29uLnRpdGxlLmNvbmNhdChwYXJzZVRpdGxlKTtcXFxcbiAgICAgICAgICAgICAgICAvLyAgICAganNvbi50aXRsZSA9IEFycmF5LmZyb20obmV3IFNldChuZXdQYXJzZVRpdGxlKSk7XFxcXG4gICAgICAgICAgICAgICAgLy8gfVxcXFxuICAgICAgICAgICAgICAgIC8vIOS4jeeuoeaLieWPluS7o+eggei/mOaYr+WIl+ihqOmDveimgeaKiuWIl+ihqOaLieS6hlxcXFxuICAgICAgICAgICAgICAgIGlmICghbGJKdWRnZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBwYXJzZVRpdGxlID0gT2JqZWN0LmtleXMoUGFyc2VTKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbG9nKHBhcnNlVGl0bGUpO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB2YXIgc2NPYmplY3QgPSBbXFxcXFxcXCJDaXR5SVBcXFxcXFxcIiwgXFxcXFxcXCJwY1VBXFxcXFxcXCIsIFxcXFxcXFwiY2FjaGVNM3U4XFxcXFxcXCIsXFxcXFxcXCJpc1ZpZGVvXFxcXFxcXCIsIFxcXFxcXFwiZGVmYXVsdFBhcnNlXFxcXFxcXCIsXFxcXFxcXCJkZWZhdWx0UGFyc2VXZWJcXFxcXFxcIixcXFxcXFxcIm1hb3NzXFxcXFxcXCIsIFxcXFxcXFwiTExRXFxcXFxcXCIsXFxcXFxcXCJwYXJzZUxjXFxcXFxcXCJdO1xcXFxuICAgICAgICAgICAgICAgIHBhcnNlVGl0bGUgPSBwYXJzZVRpdGxlP3BhcnNlVGl0bGUuZmlsdGVyKGl0PT4hc2NPYmplY3QuaW5jbHVkZXMoaXQpKTpbXTtcXFxcbiAgICAgICAgICAgICAgICB2YXIgbmV3UGFyc2VUaXRsZSA9IGpzb24udGl0bGUuY29uY2F0KHBhcnNlVGl0bGUpO1xcXFxuICAgICAgICAgICAgICAgIGpzb24udGl0bGUgPSBBcnJheS5mcm9tKG5ldyBTZXQobmV3UGFyc2VUaXRsZSkpO1xcXFxuXFxcXG4gICAgICAgICAgICAgICAgaWYgKHB1bGxNb2RlID09PSAn5Luj56CBJykge1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIG9yaWdpbmFsUGFyc2VTID09ICdvYmplY3QnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpIGluIHNjT2JqZWN0KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIG9yaWdpbmFsUGFyc2VTW3NjT2JqZWN0W2ldXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIG9yaWdpbmFsUGFyc2VTID1vcmlnaW5hbFBhcnNlUy5maWx0ZXIoaXQ9PiFzY09iamVjdC5pbmNsdWRlcyhPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhpdClbMF0pKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oanNvbi5jb2Rlcywgb3JpZ2luYWxQYXJzZVMpO1xcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYodHlwZW9mKFBhcnNlUyk9PVxcXFxcXFwidW5kZWZpbmVkXFxcXFxcXCIpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oanNvbi5jb2RlcywgcGFyc2VDb2RlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL3JldHVybiBcXFxcXFxcInRvYXN0Oi8v5rKh5pyJ5Luj56CB77yM5LiN5Y+v5ouJ5Y+WXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oanNvbi5jb2RlcywgUGFyc2VTKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAvL3ZhciBuZXdGaWxlID0gdG9vbHMudG9KU09OKGpzb24pOy8v6Ieq5a6a5LmJc3RyaW5naWZ55Ye95pWw77yM5bim5pyJ6L2s5LmJ5a2X56ymXFxcXG4gICAgICAgICAgICAgICAgdmFyIG5ld0ZpbGUgPSAkLnN0cmluZ2lmeShqc29uKTsgLy9KU09OLnBhcnNl5Lya5oql6ZSZXFxcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsIG5ld0ZpbGUpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ouJ5Y+WJyArIHB1bGxNb2RlICsgJ+aIkOWKnyc7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mnKrojrflj5bliLDlr7nosaEnO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LCBbaywgX215U2V0LnBhcnNlUm91dGVdKVxcXFxuICAgIH0sXFxcXG4gICAgcHVsbFNjcmlwdDogZnVuY3Rpb24oY2osIHg1KSB7XFxcXG4gICAgICAgIHJldHVybiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XFxcXG4gICAgICAgICAgICB2YXIgY2pGcm9tID0gJ2hpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb8nO1xcXFxuICAgICAgICAgICAgdmFyIHg1RnJvbSA9ICdoaWtlcjovL3BhZ2UvUGFyc2VfRG4uaHRtbD9ydWxlPU15RmllbGThtLDigb8nO1xcXFxuICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgY2pGaWxlID0gSlNPTi5wYXJzZShmZXRjaChjakZyb20pKS5ydWxlO1xcXFxuICAgICAgICAgICAgICAgIHZhciB4NUZpbGUgPSBKU09OLnBhcnNlKGZldGNoKHg1RnJvbSkpLnJ1bGU7XFxcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGtbMF0sIGNqRmlsZSk7XFxcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGtbMV0sIHg1RmlsZSk7XFxcXG4gICAgICAgICAgICAgICAgY2xlYXJWYXIoJ2p4T2xkVicpO1xcXFxuICAgICAgICAgICAgICAgIGNsZWFyVmFyKCdqeE5ld1YnKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aLieWPluaIkOWKnyc7XFxcXG4gICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+acquaIkOWKn+iOt+WPluWGheWuuSc7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0sIFtjaiwgeDVdKVxcXFxuICAgIH0sXFxcXG4gICAgeGxTZWxlY3Q6IGZ1bmN0aW9uKGJpYW5qaSwgbGJMZW5ndGgpIHtcXFxcbiAgICAgICAgcmV0dXJuIFxcXFxcXFwic2VsZWN0Oi8vXFxcXFxcXCIgKyBKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICBvcHRpb25zOiBbJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6cmVkXFxcXFxcXCIgdGl0bGU9XFxcXFxcXCLliKDpmaR8fCcgKyBiaWFuamkgKyAnXFxcXFxcXCI+5YigIOmZpCcsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiNGNTc0NzRcXFxcXFxcIiB0aXRsZT1cXFxcXFxcIumakOiXj3x8JyArIGJpYW5qaSArICdcXFxcXFxcIj7pmpAg6JePJywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6I0ZGODAwMFxcXFxcXFwiIHRpdGxlPVxcXFxcXFwi5L+u5pS5fHwnICsgYmlhbmppICsgJ1xcXFxcXFwiPuS/riDmlLknLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojMDk4QUMxXFxcXFxcXCIgdGl0bGU9XFxcXFxcXCLnva7pobZ8fCcgKyBiaWFuamkgKyAnMCcgKyAnXFxcXFxcXCI+572uIOmhticsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiMwOThBQzFcXFxcXFxcIiB0aXRsZT1cXFxcXFxcIuenu+WKqHx8JyArIGJpYW5qaSArICdcXFxcXFxcIj7np7sg5YqoJywgJ+KAmOKAmOKAmeKAmTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzA5OEFDMVxcXFxcXFwiIHRpdGxlPVxcXFxcXFwi572u5bqVfHwnICsgYmlhbmppICsgbGJMZW5ndGggKyAnXFxcXFxcXCI+572uIOW6lScsICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiMwNEI0MzFcXFxcXFxcIiB0aXRsZT1cXFxcXFxcIuWIhuS6q3x8JyArIGJpYW5qaSArICdcXFxcXFxcIj7lnLDmnb/liIbkuqsnLCAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojMDRCNDMxXFxcXFxcXCIgdGl0bGU9XFxcXFxcXCLkupHliIbkuqt8fCcgKyBiaWFuamkgKyAnXFxcXFxcXCI+5LqR5p2/5YiG5LqrJ10sXFxcXG4gICAgICAgICAgICBjb2w6ICcyJyxcXFxcbiAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgcGFyc2VSb3V0ZSA9IGdldFZhcigncGFyc2VSb3V0ZScpO1xcXFxuICAgICAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcXFxuICAgICAgICAgICAgICAgIHZhciBuZXdJbnB1dCA9IHBhcnNlRG9tRm9ySHRtbChpbnB1dCwgJ3NwYW4mJnRpdGxlJykuc3BsaXQoJ3x8Jyk7XFxcXG4gICAgICAgICAgICAgICAgLy8g5L+u5pS5LOi/qui/qiwwICAg5pON5L2c57G75Z6LLOWQjeensCzntKLlvJVcXFxcbiAgICAgICAgICAgICAgICB2YXIgdHlwZSA9IG5ld0lucHV0WzBdO1xcXFxuICAgICAgICAgICAgICAgIHZhciBuYW1lID0gbmV3SW5wdXRbMV07XFxcXG4gICAgICAgICAgICAgICAgdmFyIG51bSA9IG5ld0lucHV0WzJdO1xcXFxuICAgICAgICAgICAgICAgIHZhciBudW0yID0gbmV3SW5wdXRbM107XFxcXG4gICAgICAgICAgICAgICAgc3dpdGNoICh0eXBlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCLliKDpmaRcXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBrID0gW25hbWUsIG51bV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDmgLvmhJ/op4nnrZvpgInmiJbogIXmkJzntKLlkI7vvIznlLHkuo5udW3nmoTkvY3nva7kuI3lr7nlj6/og73kvJrliKDpmaTplJks5LqL5a6e5aaC5q2kLOW3suS/rj9cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXFxcXFwi5Y2z5bCG5Yig6ZmkOiBcXFxcXFxcIiArIG5hbWUpLmNvbmZpcm0oKGspID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgbmFtZSA9IGtbMF07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bSA9IGtbMV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5jb2Rlcy5oYXNPd25Qcm9wZXJ0eShuYW1lKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWxldGUganNvbi5jb2Rlc1tuYW1lXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtID0ganNvbi50aXRsZS5pbmRleE9mKG5hbWUpOyAvL+i/meagt+aJjeS8muW+l+WIsOato+ehrueahOe0ouW8lVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKG51bSwgMSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/lt7LlsIbjgJZcXFxcXFxcIiArIG5hbWUgKyBcXFxcXFxcIuOAl+WIoOmZpFxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgayk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCLpmpDol49cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFxcXFxcXFwiaGlrZXI6Ly9lbXB0eSNub0xvYWRpbmcjXFxcXFxcXCIpLmxhenlSdWxlKChrKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG5hbWUgPSBrWzBdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW0gPSBrWzFdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZVJvdXRlID0gZ2V0VmFyKCdwYXJzZVJvdXRlJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbCgndmFyIGpzb24gPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uY29kZXMuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtID0ganNvbi50aXRsZS5pbmRleE9mKG5hbWUpOyAvL+i/meagt+aJjeS8muW+l+WIsOato+ehrueahOe0ouW8lVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBqc29uLnRpdGxlLnNwbGljZShudW0sIDEpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUocGFyc2VSb3V0ZSwgJC5zdHJpbmdpZnkoanNvbikpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5bey5bCG44CWXFxcXFxcXCIgKyBuYW1lICsgXFxcXFxcXCLjgJfpmpDol49cXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+WPr+iDveaYr+S4que9keWdgCwg5oKo5Y+v6YCJ5oup5Yig6ZmkXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgW25hbWUsIG51bV0pO1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwi5L+u5pS5XFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvL2lmIChqc29uLmNvZGVzW25hbWVdKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbkNvZGUgPSBuYW1lO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHRpdGxlcyA9IGpzb24udGl0bGU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbk5hbWUgPSBcXFxcXFxcIui/meaYr+WQjeensFxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24uY29kZXNbbmFtZV0pIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuQ29kZSA9IGpzb24uY29kZXNbbmFtZV0udG9TdHJpbmcoKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuTmFtZSA9IG5hbWU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFxcXFxcImhpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5I1xcXFxcXFwiKS5ydWxlKChrLHRpdGxlcykgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkID0gW107XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChnZXRJdGVtKCdteUZ1bmN0aW9uJykpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBuYW1lID0ga1swXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgY29kZSA9IGtbMV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfkv50g5a2YJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBzYXZlQnV0dG9uICsgXFxcXFxcXCJzYXZlQnV0dG9uKGdldFZhcignaW5wdXRfZWRpdCcpLG5hbWUpO2JhY2soKTtcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaW5wdXRcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLlu7rorq7mjInpu5jorqTnmoTku6PnoIHmoLzlvI/kv67mlLnlk6ZcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFxcXFxcInB1dFZhcignaW5wdXRfZWRpdCcsIGlucHV0KVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXFxcXFxcXCJ0ZXh0YXJlYVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVpZ2h0OiBcXFxcXFxcIi0xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiAn5L+u5pS54piFJyArIG5hbWUgKyAn4piFJyArIGNvZGUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxzbWFsbD48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiM2RUI4OTdcXFxcXFxcIj7moLzlvI/kuLrvvJrmk43kvZznsbvlnovimIXmoIfpopjimIVmdW5jdGlvbigpe+iHquWumuS5ieWGheWuuX08YnI+6K+35Yu/5aGr5YWl5YW25LuW5qC85byPJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzYXZlQnV0dG9uLG5hbWUsdGl0bGVzKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgdG1wQXIgPSBnZXRWYXIoJ2lucHV0X2VkaXQnKS5zcGxpdCgn4piFJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZih0bXBBci5sZW5ndGg8Mil7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S/ruaUueagvOW8j+acieivr++8jOiuv+mXruiiq+aLkue7nSdcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuZXdOYW1lID0gdG1wQXJbMV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihuZXdOYW1lIT09bmFtZSYmdGl0bGVzLmluY2x1ZGVzKG5ld05hbWUpKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgn5qOA5rWL5Yiw5ZCM5ZCN5o6l5Y+jOicrbmV3TmFtZSsnLOaYr+WQpuimhueblj8nKS5jb25maXJtKChzYXZlQnV0dG9uLG5hbWUpPT57XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gc2F2ZUJ1dHRvbihnZXRWYXIoJ2lucHV0X2VkaXQnKSxuYW1lKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFjaygpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5L+d5a2Y5L+u5pS5XFxcXFxcXFxu6K+36Ieq6KGM5qOA5rWL6KaG55uW5ZCO55qE5YaF5a65JztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LHNhdmVCdXR0b24sbmFtZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9IHNhdmVCdXR0b24oZ2V0VmFyKCdpbnB1dF9lZGl0JyksbmFtZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFjaygpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv53lrZjkv67mlLknO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYodHlwZW9mKGNvZGUpPT09J3N0cmluZycmJmNvZGUubGVuZ3RoPjIpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiBjb2RlXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5L+d5a2Y5L+u5pS5JztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgc2F2ZUJ1dHRvbixuYW1lLHRpdGxlcyksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfigJjigJjigJnigJk8YmlnPjxiaWc+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojMjk4QTA4XFxcXFxcXCI+5L+dIOWtmCcsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBbbk5hbWUsIG5Db2RlXSx0aXRsZXMpIC8vW25hbWUsIGpzb24uY29kZXNbbmFtZV0udG9TdHJpbmcoKV0pXFxcXG4gICAgICAgICAgICAgICAgICAgIC8qfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5Y+q5pyJ572R5Z2A5oiW6ICF5qCH6aKYLCDkuI3mlK/mjIHkv67mlLlcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICB9Ki9cXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIue9rumhtlxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwi572u5bqVXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsKCd2YXIganNvbiA9JyArIGZldGNoKHBhcnNlUm91dGUpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG51bSA9IGpzb24udGl0bGUuaW5kZXhPZihuYW1lKTsgLy/ov5nmoLfmiY3kvJrlvpfliLDmraPnoa7nmoTntKLlvJVcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKG51bT4tMSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGl0ZW0gPSBqc29uLnRpdGxlLnNwbGljZShudW0sIDEpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpzb24udGl0bGUuc3BsaWNlKG51bTIsIDAsIGl0ZW1bMF0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShwYXJzZVJvdXRlLCAkLnN0cmluZ2lmeShqc29uKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+ayoeaJvuWIsDonK25hbWU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIuenu+WKqFxcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ2hpa2VyOi8vZW1wdHkjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChrKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdiaWFuamknLCAn56e75YqoIycgKyBrKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlucHV0O1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSwgbnVtKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcXFxcXFxcIuWIhuS6q1xcXFxcXFwiOlxcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwi5LqR5YiG5LqrXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoanNvbi5jb2Rlc1tuYW1lXSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwYXJzZVRleHQgPSB0eXBlb2YganNvbi5jb2Rlc1tuYW1lXSA9PSAnZnVuY3Rpb24nID8gJC5zdHJpbmdpZnkoanNvbi5jb2Rlc1tuYW1lXSkgOiBqc29uLmNvZGVzW25hbWVdO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnNlVGV4dCA9ICdNeVBhcnNlU+KYhScgKyBuYW1lICsgJ+KYhScgKyBiYXNlNjRFbmNvZGUocGFyc2VUZXh0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIHBhcnNlVGV4dCA9ICfnm7Tpk77imIUnICsganNvbi50aXRsZVtudW1dO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGUgPT0gJ+S6keWIhuS6qycgJiYgcGFyc2VUZXh0LnN1YnN0cigwLCA4KSA9PSAnTXlQYXJzZVMnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VUZXh0ID0gc2hhcmVQYXN0ZShwYXJzZVRleHQpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBwYXJzZVRleHQuc3Vic3RyKDAsIDYpICE9ICdlcnJvcjonID8gJ2NvcHk6Ly8nICsgcGFyc2VUZXh0ICsgJ1xcXFxcXFxcbuKYheKYheKYhVxcXFxcXFxcbicgKyAnTXlQYXJzZVPvvJonICsgbmFtZSA6ICd0b2FzdDovL+WIhuS6q+Wksei0pSEh5LqR5Ymq6LS05p2/5Y+v6IO95oyC5LqGJztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdjb3B5Oi8vJyArIHBhcnNlVGV4dDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mmoLkuI3mlK/mjIEnO1xcXFxuICAgICAgICAgICAgICAgIH0gLy9zd2l0Y2jnmoRcXFxcbiAgICAgICAgICAgIH0pIC8vU3RyaW5n55qEXFxcXG4gICAgICAgIH0pIC8vc3RyaW5naWZ555qEXFxcXG4gICAgfSxcXFxcbiAgICB4alBhcnNlOiBmdW5jdGlvbigpIHtcXFxcbiAgICAgICAgcmV0dXJuICQoXFxcXFxcXCJoaWtlcjovL2VtcHR5I25vSGlzdG9yeSNcXFxcXFxcIikucnVsZSgoKSA9PiB7XFxcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcXFxuICAgICAgICAgICAgZXZhbChnZXRJdGVtKCdteUZ1bmN0aW9uJykpO1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+S/nSDlrZgnLFxcXFxuICAgICAgICAgICAgICAgIHVybDogc2F2ZUJ1dHRvbiArIFxcXFxcXFwic2F2ZUJ1dHRvbihpbnB1dCk7YmFjaygpO2NsZWFyVmFyKCdpbnB1dF9hZGQnKVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImlucHV0XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLovpPlhaXmraPnoa7moLzlvI/lhoXlrrlcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogJ3B1dFZhcihcXFxcXFxcImlucHV0X2FkZFxcXFxcXFwiLCBpbnB1dCknLFxcXFxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcXFxcXFxcInRleHRhcmVhXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGhlaWdodDogXFxcXFxcXCItMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZVZpc2libGU6IGZhbHNlLFxcXFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldFZhcignaW5wdXRfYWRkJyksXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzZFQjg5N1xcXFxcXFwiPuaMieaPj+i/sOivieagvOW8j+i+k+WFpSwg6K+35Yu/5aGr5YWl5YW25LuW5qC85byPPGJyPuacrOWcsOWPo+S7pDog5pON5L2c57G75Z6L4piF5ZCN56ew4piF5Luj56CBPGJyPuS6keWPo+S7pDog6ZO+5o6l4piF4piF4piF5ZCN56ewOyDnuq/nvZHlnYA6IOebtOmTvuKYhXVybDHimIV1cmwyJyxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiAn4oCY4oCY4oCZ4oCZPGJpZz48YmlnPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzI5OEEwOFxcXFxcXFwiPuS/nSDlrZgnLFxcXFxuICAgICAgICAgICAgICAgIHVybDogJCgnbm9Mb2FkaW5nJykubGF6eVJ1bGUoKHNhdmVCdXR0b24pID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNhdmVCdXR0b24oZ2V0VmFyKCdpbnB1dF9hZGQnKSk7XFxcXG4gICAgICAgICAgICAgICAgfSwgc2F2ZUJ1dHRvbiksXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxcXG4gICAgICAgIH0pXFxcXG4gICAgfSxcXFxcbiAgICB5ZFBhcnNlOiBmdW5jdGlvbihCSm1vZGUsIGkpIHtcXFxcbiAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGspID0+IHtcXFxcbiAgICAgICAgICAgIHZhciBBID0ga1swXS5zcGxpdCgnIycpWzFdO1xcXFxuICAgICAgICAgICAgdmFyIEIgPSBrWzFdO1xcXFxuICAgICAgICAgICAgdmFyIHBhcnNlUm91dGUgPSBnZXRWYXIoJ3BhcnNlUm91dGUnKTtcXFxcbiAgICAgICAgICAgIGV2YWwoJ3ZhciBqc29uID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcXFxuICAgICAgICAgICAgdmFyIGl0ZW0gPSBqc29uLnRpdGxlLnNwbGljZShBLCAxKTsgLy8gMTog5qCH6K6w5byA5aeL5L2N572u77yMMjog5Yig6Zmk5Yiw5ZOq5Liq5L2N572uXFxcXG4gICAgICAgICAgICBqc29uLnRpdGxlLnNwbGljZShCLCAwLCBpdGVtWzBdKTsgLy8gMTog5ZCM5LiK77yMMjogMOihqOekuuS4jeWIoOmZpO+8jDM6IOa3u+WKoOWvueixoVxcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKHBhcnNlUm91dGUsICQuc3RyaW5naWZ5KGpzb24pKTtcXFxcbiAgICAgICAgICAgIGNsZWFyVmFyKCdiaWFuamknKTtcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxcXG4gICAgICAgIH0sIFtCSm1vZGUsIGldKVxcXFxuICAgIH0sXFxcXG4gICAgcGxzY1BhcnNlOiBmdW5jdGlvbigpIHtcXFxcbiAgICAgICAgcmV0dXJuICQoJ2hpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5IycpLnJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgdmFyIGQgPSBbXTtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfmibnph4/kv67mlLkv5Yig6Zmk6Kej5p6QJyxcXFxcbiAgICAgICAgICAgICAgICBkZXNjOiAnYXV0byYmZmxvYXQnLFxcXFxuICAgICAgICAgICAgICAgIC8vIHVybDogJ2ZpbGU6Ly8vc3RvcmFnZS9lbXVsYXRlZC8wL0FuZHJvaWQvZGF0YS9jb20uZXhhbXBsZS5oaWtlcnZpZXcvZmlsZXMvRG9jdW1lbnRzL2NhY2hlL3Bsc2NQYXJzZS5odG1sJyxcXFxcbiAgICAgICAgICAgICAgICB1cmw6IF9teVNldC5iYXRjaFJvdXRlLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAneDVfd2Vidmlld19zaW5nbGUnXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcXFxuICAgICAgICB9KVxcXFxuICAgIH1cXFxcbn07XFxcXG5cXFxcbmZ1bmN0aW9uIHNldFBhcnNlKCkge1xcXFxuICAgICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIikuc2V0UGFyc2UoKTtcXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLosIPnlKjot6/nlLFcXFwiLFxcXCJwYXRoXFxcIjpcXFwiUm91dGVcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5jb25zdCBkID0gW107XFxcXG5jb25zdCBkYXRhID0ge307XFxcXG5cXFxcbmRhdGEub2xkQ29uZmlnID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvblxcXFxcXFwiO1xcXFxuZGF0YS5jalJvdXRlID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzXFxcXFxcXCI7XFxcXG5kYXRhLng1Um91dGUgPVxcXFxuZ2V0UGF0aCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5odG1sJyk7XFxcXG5cXFxcbmRhdGEuanhMYXp5ID0gXFxcXFxcXCJldmFsKCd2YXIgY29uZmlnID0nICsgZmV0Y2goJ1xcXFxcXFwiICsgZGF0YS5vbGRDb25maWcgKyBcXFxcXFxcIicpKTtldmFsKGZldGNoKGNvbmZpZy5jaikpO2F5dG1QYXJzZShpbnB1dClcXFxcXFxcIjtcXFxcblxcXFxuZGF0YS5zelBhcnNlID0gXFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU96K6+572uI25vSGlzdG9yeSMjbm9SZWNvcmRIaXN0b3J5I1xcXFxcXFwiO1xcXFxuXFxcXG5kYXRhLnNldFBhcnNlID0gZnVuY3Rpb24oKSB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgZGVzYzogJzc5NScsXFxcXG4gICAgICAgIHVybDogdGhpcy54NVJvdXRlLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ3g1X3dlYnZpZXdfc2luZ2xlJ1xcXFxuICAgIH0pO1xcXFxuICAgIHZhciBvbGRWID0gZ2V0VmFyKCdqeE9sZFYnKTtcXFxcbiAgICB2YXIgbmV3ViA9IGdldFZhcignanhOZXdWJyk7XFxcXG4gICAgdmFyIHZlcnNpb25UaXBzID0gcGFyc2VGbG9hdChuZXdWKSA+IHBhcnNlRmxvYXQob2xkVikgPyAn4oCY4oCY5pyJ5paw54mI5pysOiB2JyArIG5ld1YgOiAn4oCY4oCYJztcXFxcbiAgICB2YXIgcGljcyA9IFtcXFxcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnNlb3Z4LmNvbS9pbWcvc2VvdngtMjAtMTAlMjAoOTIpLmpwZycsXFxcXG4gICAgICAgICdodHRwczovL2Nkbi5zZW92eC5jb20vaW1nL21vbTIwMTglMjAoMjA3KS5qcGcnLFxcXFxuICAgICAgICAnaHR0cHM6Ly90dmE0LnNpbmFpbWcuY24vbGFyZ2UvOWJkOWIxNjdneTFmd3JoNXhvbHRkajIxaGMwdTB0YXguanBnJyxcXFxcbiAgICAgICAgJ2h0dHBzOi8vdHZhMS5zaW5haW1nLmNuL2xhcmdlLzAwNUJZcXBnZ3kxZndyZXl1NG5sNmozMWhjMHUwYWhyLmpwZycsXFxcXG4gICAgICAgICdodHRwczovL3MzLmJtcC5vdmgvaW1ncy8yMDIxLzEwL2Q3ZTYwYjk5MDc0MjA5M2QuanBlZycsXFxcXG4gICAgICAgICdodHRwczovL3MzLmJtcC5vdmgvaW1ncy8yMDIxLzEwLzkxYWQ2ZDY1MzhiZjg2ODkuanBnJyxcXFxcbiAgICAgICAgJ2h0dHBzOi8vdHZhMS5zaW5haW1nLmNuL2xhcmdlLzAwNUJZcXBnZ3kxZndyZXNsNXBtbGozMWhjMHhjd2thLmpwZycsXFxcXG4gICAgICAgICdodHRwczovL3R2YTMuc2luYWltZy5jbi9sYXJnZS8wMDVCWXFwZ2d5MWZ3cmdqZGs3NG9qMzFoYzB1MGRxbi5qcGcnLFxcXFxuICAgICAgICAnaHR0cHM6Ly9jZG4uc2VvdnguY29tL2ltZy9tb20yMDE4JTIwKDMyMCkuanBnJyxcXFxcbiAgICAgICAgJ2h0dHBzOi8vY2RuLnNlb3Z4LmNvbS9pbWcvbW9tMjAxOCUyMCg4MDMpLmpwZydcXFxcbiAgICBdO1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIGltZzogcGljc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCldLFxcXFxuICAgICAgICB0aXRsZTogdmVyc2lvblRpcHMgKyAn4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzZFQjg5N1xcXFxcXFwiPjxicj7jgIDjgIDngrnlh7vkuIrmlrnlpLTlg4/ov5vlhaXnvJbovpE8YnI+54K55q2k6L+b5YWl6K665Z2b5biW5a2Q5YiX6KGoJyxcXFxcbiAgICAgICAgZGVzYzogJ+W9k+WJjeeJiOacrDogdicgKyBvbGRWLFxcXFxuICAgICAgICB1cmw6ICdodHRwczovL2hhaWt1b3NoaWppZS5jbi91c2VyLzE5NTgnLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ21vdmllXzEnXFxcXG4gICAgfSk7XFxcXG4gIHNldFJlc3VsdChkKTtcXFxcbn1cXFxcblxcXFxuc3dpdGNoIChnZXRQYXJhbShcXFxcXFxcInR5cGVcXFxcXFxcIikpIHtcXFxcbiAgICBjYXNlIFxcXFxcXFwi6K6+572uXFxcXFxcXCI6XFxcXG4gICAgICAgIGRhdGEuc2V0UGFyc2UoKTtcXFxcbiAgICAgICAgLy9zZXRSZXN1bHQoZCk7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgXFxcXFxcXCLnvJbovpFcXFxcXFxcIjpcXFxcbiAgICAgICAgJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2p4SXRlbT9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIikuanhMaXN0KCk7XFxcXG4gICAgICAgIHNldFJlc3VsdChkKTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG5cXFxcdGNhc2UgXFxcXFxcXCLkuLvpophcXFxcXFxcIjpcXFxcblxcXFx0ICAgICAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvdGhlbWU/cnVsZT1NeUZpZWxk4bSw4oG/XFxcXFxcXCIpLnRoZW1lSW5pdCgpO1xcXFxuICAgICAgICBicmVhaztcXFxcblxcXFx0Y2FzZSBcXFxcXFxcIuino+aekFxcXFxcXFwiOlxcXFxuXFxcXHQgICAgICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9qeE1hbmFnZT9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIikuanhNYW5hZ2UoKTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgZGVmYXVsdDpcXFxcbiAgICAgICAgJC5leHBvcnRzID0gZGF0YTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6Kej5p6Q6aG55Li755WM6Z2iXFxcIixcXFwicGF0aFxcXCI6XFxcImp4SXRlbVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb8nKSkucnVsZSk7XFxcXG52YXIgaXNMb2dpbiA9IGZ1bmN0aW9uICgpe3JldHVybiB0cnVlfVxcXFxuZnVuY3Rpb24gYmJzWVooKSB7XFxcXG4gICAgdmFyIF8weDQ3YTliNCA9IHtcXFxcbiAgICAgICAgJ0p4U01uJzogZnVuY3Rpb24oXzB4MjQ5OTUyLCBfMHg0YWJjMTUpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBfMHgyNDk5NTIgKyBfMHg0YWJjMTU7XFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgICdMR3dtQyc6ICfnp7vliqgjJyxcXFxcbiAgICAgICAgJ0d2RFZZJzogZnVuY3Rpb24oXzB4NDYxZjJkLCBfMHg1NDA1NzEpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBfMHg0NjFmMmQgKyBfMHg1NDA1NzE7XFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgICdXZmVIRCc6ICfigJjigJjigJnigJk8c21hbGw+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojRkU5QTJFXFxcXFxcXCI+JyxcXFxcbiAgICAgICAgJ0VxSWxzJzogJ+enu+WKqDogJyxcXFxcbiAgICAgICAgJ0VmZmJuJzogJ3RleHRfMicsXFxcXG4gICAgICAgICdSeGt4QSc6IGZ1bmN0aW9uKF8weDMyYTdkMCwgXzB4MWE5MzJjKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gXzB4MzJhN2QwKF8weDFhOTMyYyk7XFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgICdWQkdKSCc6ICdqZFJvdXRlJyxcXFxcbiAgICAgICAgJ0JaZ1J0JzogZnVuY3Rpb24oXzB4MjY5ODRlLCBfMHg1Y2M5MjYpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBfMHgyNjk4NGUgPT09IF8weDVjYzkyNjtcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAgJ3JnR0NDJzogJ3dEVkViJyxcXFxcbiAgICAgICAgJ01jek9XJzogZnVuY3Rpb24oXzB4Mjg4MGJmLCBfMHgyZDkzMDYsIF8weDk3Nzg3YSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIF8weDI4ODBiZihfMHgyZDkzMDYsIF8weDk3Nzg3YSk7XFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgICdGVWpkbSc6ICdiYnNZWicsXFxcXG4gICAgICAgICdscUZoYic6IGZ1bmN0aW9uKF8weDQzYmJlNikge1xcXFxuICAgICAgICAgICAgcmV0dXJuIF8weDQzYmJlNigpO1xcXFxuICAgICAgICB9LFxcXFxuICAgICAgICAnRlVScHknOiBmdW5jdGlvbihfMHgyMjY1YzIsIF8weGExZDU2OCwgXzB4MjlkZTAxKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gXzB4MjI2NWMyKF8weGExZDU2OCwgXzB4MjlkZTAxKTtcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAgJ1hJT2JCJzogJ3ZhciB4ZFJvdXRlPVxcXFxcXFxcXFxcXFxcXCJcXFxcXFxcXFxcXFxcXFwiOydcXFxcbiAgICB9O1xcXFxuICAgIGlmICghXzB4NDdhOWI0WydSeGt4QSddKGdldFZhciwgXzB4NDdhOWI0WydWQkdKSCddKSkge1xcXFxuICAgICAgICBpZiAoXzB4NDdhOWI0WydCWmdSdCddKF8weDQ3YTliNFsncmdHQ0MnXSwgJ0pWa0FaJykpIHtcXFxcbiAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxcXG4gICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4NDdhOWI0WydKeFNNbiddKF8weDQ3YTliNFsnTEd3bUMnXSwgaSkgPT0gQkptb2RlID8gXzB4NDdhOWI0WydKeFNNbiddKF8weDQ3YTliNFsnR3ZEVlknXShfMHg0N2E5YjRbJ1dmZUhEJ10sIF8weDQ3YTliNFsnRXFJbHMnXSksIHhzTGlzdCkgOiAn4oCY4oCY4oCZ4oCZPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojMjk4QTA4XFxcXFxcXCI+JyArIHhzTGlzdCxcXFxcbiAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWyd5ZFBhcnNlJ10oQkptb2RlLCBpKSxcXFxcbiAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg0N2E5YjRbJ0VmZmJuJ11cXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgXzB4NDdhOWI0WydNY3pPVyddKHB1dFZhciwgXzB4NDdhOWI0WydGVWpkbSddLCBfMHg0N2E5YjRbJ2xxRmhiJ10oaXNMb2dpbnx8ZnVuY3Rpb24gKCl7cmV0dXJuIHRydWV9KSk7XFxcXG4gICAgICAgICAgICBfMHg0N2E5YjRbJ0ZVUnB5J10ocHV0VmFyLCAnamRSb3V0ZScsIF8weDQ3YTliNFsnWElPYkInXSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIGdldFZhcihfMHg0N2E5YjRbJ0ZVamRtJ10pO1xcXFxufVxcXFxudmFyIGp4SXRlbSA9IHtcXFxcbiAgICAnanhMaXN0JzogZnVuY3Rpb24oKSB7XFxcXG4gICAgICAgIHZhciBfMHg0YzA0MjcgPSB7XFxcXG4gICAgICAgICAgICAnVVZXb0YnOiBmdW5jdGlvbihfMHgyNmJiMDcsIF8weDIyMWI0ZCkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHgyNmJiMDcgKyBfMHgyMjFiNGQ7XFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgJ2NvbG9yJzpmdW5jdGlvbih0ZXh0LCBjb2xvcikge1xcXFxuICAgICAgICAgICAgICAgIHRleHQgKz0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICBpZiAodGV4dC5pbmRleE9mKFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIpID09PSAwKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRleHQucmVwbGFjZShcXFxcXFxcIuKAnOKAnOKAneKAnVxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9J1xcXFxcXFwiICsgY29sb3IgKyBcXFxcXFxcIic+XFxcXFxcXCIgKyB0ZXh0ICsgXFxcXFxcXCI8L2ZvbnQ+XFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgJ2t6V0RLJzogZnVuY3Rpb24oXzB4NDg1NGE5LCBfMHgzZTk4YzUpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NDg1NGE5ICsgXzB4M2U5OGM1O1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICdYWHlRcic6ICfnp7vliqgjJyxcXFxcbiAgICAgICAgICAgICdndFVuaic6IGZ1bmN0aW9uKF8weDU5YWFmNywgXzB4MjJjNjZiKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDU5YWFmNyArIF8weDIyYzY2YjtcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAnVXRmV2YnOiAn4oCY4oCY4oCZ4oCZPHNtYWxsPjxzcGFuIHN0eWxlPVxcXFxcXFxcXFxcXFxcXCJjb2xvcjojRkU5QTJFXFxcXFxcXFxcXFxcXFxcIj4nLFxcXFxuICAgICAgICAgICAgJ1FPdkpWJzogJ+enu+WKqDogJyxcXFxcbiAgICAgICAgICAgICdBQkV3Qic6ICfigJjigJjigJnigJk8c3BhbiBzdHlsZT1cXFxcXFxcXFxcXFxcXFwiY29sb3I6IzI5OEEwOFxcXFxcXFxcXFxcXFxcXCI+JyxcXFxcbiAgICAgICAgICAgICdvenpXRyc6ICd0ZXh0XzInLFxcXFxuICAgICAgICAgICAgJ25XZlZSJzogZnVuY3Rpb24oXzB4NDgwZjNhLCBfMHg0Yzg0ZmMpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NDgwZjNhICsgXzB4NGM4NGZjO1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICdKQ2NOWSc6ICdwYXJzZVJvdXRlJyxcXFxcbiAgICAgICAgICAgICdyZ0RJcCc6ICdiaWFuamknLFxcXFxuICAgICAgICAgICAgJ2hvSWRKJzogJ+KAmOKAmOKAmeKAmTxiaWc+PHNwYW4gc3R5bGU9XFxcXFxcXFxcXFxcXFxcImNvbG9yOiM2RUI4OTdcXFxcXFxcXFxcXFxcXFwiPuaWsCDlu7og6KejIOaekCcsXFxcXG4gICAgICAgICAgICAnRnJHT0gnOiBmdW5jdGlvbihfMHgxMmQ2ZGIsIF8weDJhMDY4ZCkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHgxMmQ2ZGIgPCBfMHgyYTA2OGQ7XFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgJ29DQ1NqJzogZnVuY3Rpb24oXzB4MTliMTc4LCBfMHg0ZWY4ZjYpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4MTliMTc4ID09PSBfMHg0ZWY4ZjY7XFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgJ0haaGxjJzogZnVuY3Rpb24oXzB4NWNhZTAzLCBfMHgyNmUyNDIpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NWNhZTAzID09IF8weDI2ZTI0MjtcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAnY2dJZUEnOiBmdW5jdGlvbihfMHgyNWUzNjgsIF8weDhiYzhlOSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBfMHgyNWUzNjggKyBfMHg4YmM4ZTk7XFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgJ3hkckZ2JzogZnVuY3Rpb24oXzB4NGFiNWQ4LCBfMHgyMTI0MmYpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NGFiNWQ4ICsgXzB4MjEyNDJmO1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICd5d2p1eCc6IGZ1bmN0aW9uKF8weDVlMzA1MSwgXzB4NGUwMjMwKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDVlMzA1MShfMHg0ZTAyMzApO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9O1xcXFxuICAgICAgICB2YXIgXzB4MWQ4YmIxID0gZ2V0VmFyKF8weDRjMDQyN1snSkNjTlknXSk7XFxcXG4gICAgICAgIHZhciBfMHgzYjg5YWIgPSBwYXJzZUZpbGVbJ3RpdGxlJ107XFxcXG4gICAgICAgIHZhciBfMHg0OWRhOTYgPSBnZXRWYXIoXzB4NGMwNDI3WydyZ0RJcCddKTtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBfMHg0YzA0MjdbJ2hvSWRKJ10sXFxcXG4gICAgICAgICAgICBkZXNjOifms6jmhI865L2N572u5pON5L2c5Yqf6IO95Y+q5Zyo5YiG57G7562b6YCJ5Li65YWo6YOo5pe255Sf5pWIXFxcXFxcXFxu5LiL5pa55pCc57Si5oyJ5ZCN56ew5oiW5Zyw5Z2ALOmHjee9ruivt+eVmeepuuaIlueCueino+aekOaVsOmHj+aMiemSricsXFxcXG4gICAgICAgICAgICB1cmw6IGJqSXRlbVsneGpQYXJzZSddKCksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTpmYWxzZVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOifmkJzntKInLFxcXFxuICAgICAgICAgICAgZGVzYzonbWVuZ3gnLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J2lucHV0JyxcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgb25DaGFuZ2U6IFxcXFxcXFwicHV0VmFyKCdkcC5zZWFyY2hKeCcsaW5wdXQpXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiB0cnVlLFxcXFxuICAgICAgICAgICAgICAgIHRleHRTaXplOiAxMSxcXFxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6Z2V0VmFyKCdkcC5zZWFyY2hKeCcsJycpLFxcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgIHVybDokLnRvU3RyaW5nKCgpPT57XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGxldCBmaWx0ZXJzID0gWyflhajpg6gnLCfpk77mjqUnLCdqc29uJywn5YWN5ZeFJ107XFxcXG4gICAgICAgIGZvcihsZXQgbyBpbiBmaWx0ZXJzKXtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6Z2V0VmFyKCdkbi5qeF9maWx0ZXInLCflhajpg6gnKT09PWZpbHRlcnNbb10/J+KAnOKAnOKAneKAnTxzcGFuIHN0eWxlPVxcXFxcXFwiY29sb3I6IzI5OEEwOFxcXFxcXFwiPicrZmlsdGVyc1tvXTpmaWx0ZXJzW29dLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICAgICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaXQpPT57XFxcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcignZG4uanhfZmlsdGVyJyxpdCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICAgICAgfSxmaWx0ZXJzW29dKSxcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHZhciBfMHgyZWNiZTUgPSBfMHgzYjg5YWJbJ2xlbmd0aCddO1xcXFxuICAgICAgICB2YXIganNvbj17dGl0bGU6W10sY29kZXM6e319O1xcXFxuICAgICAgICBsZXQgc2V0RmlsZSA9IHJlcXVlc3QoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJyk7XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICBldmFsKCdqc29uPScrc2V0RmlsZSk7XFxcXG4gICAgICAgIH1jYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgbG9nKCdKc29u6Kej5p6Q5Y+R55Sf5LqG6ZSZ6K+vOicrZS5tZXNzYWdlKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZihnZXRWYXIoJ2RuLmp4X2ZpbHRlcicsJ+WFqOmDqCcpPT09J+mTvuaOpScpe1xcXFxuICAgICAgICAgICAgXzB4M2I4OWFiID0gXzB4M2I4OWFiLmZpbHRlcihpdD0+KCEvwqkkLy50ZXN0KGl0KSkmJnR5cGVvZihqc29uLmNvZGVzW18weDRjMDQyN1snbldmVlInXShpdCwgJycpWydyZXBsYWNlJ10oL2h0dHAuKlxcXFxcXFxcL1xcXFxcXFxcLy9nLCAnJyldKT09PSdzdHJpbmcnKTtcXFxcbiAgICAgICAgfWVsc2UgaWYoZ2V0VmFyKCdkbi5qeF9maWx0ZXInLCflhajpg6gnKT09PSflhY3ll4UnKXtcXFxcbiAgICAgICAgICAgIF8weDNiODlhYiA9IF8weDNiODlhYi5maWx0ZXIoaXQ9PnR5cGVvZihqc29uLmNvZGVzW18weDRjMDQyN1snbldmVlInXShpdCwgJycpWydyZXBsYWNlJ10oL2h0dHAuKlxcXFxcXFxcL1xcXFxcXFxcLy9nLCAnJyldKT09PSdmdW5jdGlvbicpO1xcXFxuICAgICAgICB9ZWxzZSBpZihnZXRWYXIoJ2RuLmp4X2ZpbHRlcicsJ+WFqOmDqCcpPT09J2pzb24nKXtcXFxcbiAgICAgICAgICAgIF8weDNiODlhYiA9IF8weDNiODlhYi5maWx0ZXIoaXQ9PigvwqkkLy50ZXN0KGl0KSkmJnR5cGVvZihqc29uLmNvZGVzW18weDRjMDQyN1snbldmVlInXShpdCwgJycpWydyZXBsYWNlJ10oL2h0dHAuKlxcXFxcXFxcL1xcXFxcXFxcLy9nLCAnJyldKT09PSdzdHJpbmcnKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZihnZXRWYXIoJ2RwLnNlYXJjaEp4JywnJykpe1xcXFxuICAgICAgICAgICAgXzB4M2I4OWFiID0gXzB4M2I4OWFiLmZpbHRlcihpdD0+KGpzb24uY29kZXNbXzB4NGMwNDI3WyduV2ZWUiddKGl0LCAnJyldKycnKS5pbmNsdWRlcyhnZXRWYXIoJ2RwLnNlYXJjaEp4JykpfHxpdC5pbmNsdWRlcyhnZXRWYXIoJ2RwLnNlYXJjaEp4JywnJykpKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6XFxcXFxcXCLop6PmnpDmlbA6XFxcXFxcXCIrXzB4NGMwNDI3LmNvbG9yKF8weDNiODlhYi5sZW5ndGgsJyNmZjcwMDAnKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOlxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCk9PntcXFxcbiAgICAgICAgICAgICAgICBjbGVhclZhcignZHAuc2VhcmNoSngnKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6YeN572uJ1xcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIC8vIOS4i+mdouaYr+ino+aekOWIl+ihqOaOkuWIl1xcXFxuICAgICAgICAvLyBmb3IgKHZhciBfMHhlMmMzZDggPSAweDA7IF8weDRjMDQyN1snRnJHT0gnXShfMHhlMmMzZDgsIF8weDJlY2JlNSk7IF8weGUyYzNkOCsrKSB7XFxcXG4gICAgICAgIGZvciAobGV0IF8weGUyYzNkOCBpbiBfMHgzYjg5YWIpIHtcXFxcbiAgICAgICAgICAgIHZhciBfMHgzMzc4OGMgPSBfMHgzYjg5YWJbXzB4ZTJjM2Q4XTtcXFxcbiAgICAgICAgICAgIHZhciBfMHgzNzg3MWUgPSBfMHg0YzA0MjdbJ25XZlZSJ10oXzB4MzM3ODhjLCAnJylbJ3JlcGxhY2UnXSgvaHR0cC4qXFxcXFxcXFwvXFxcXFxcXFwvL2csICcnKTtcXFxcbiAgICAgICAgICAgIGlmICgv56e75YqoLyBbJ3Rlc3QnXShfMHg0OWRhOTYpKSB7XFxcXG4gICAgICAgICAgICAgICAgaWYgKF8weDRjMDQyN1snb0NDU2onXSgndUtMeEYnLCAndUtMeEYnKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4NGMwNDI3WydIWmhsYyddKF8weDRjMDQyN1snWFh5UXInXSArIF8weGUyYzNkOCwgXzB4NDlkYTk2KSA/IF8weDRjMDQyN1snbldmVlInXShfMHg0YzA0MjdbJ2NnSWVBJ10oXzB4NGMwNDI3WydVdGZXZiddLCBfMHg0YzA0MjdbJ1FPdkpWJ10pLCBfMHgzNzg3MWUpIDogXzB4NGMwNDI3WydjZ0llQSddKF8weDRjMDQyN1snQUJFd0InXSwgXzB4Mzc4NzFlKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBiakl0ZW1bJ3lkUGFyc2UnXShfMHg0OWRhOTYsIF8weGUyYzNkOCksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiAndGV4dF8yJ1xcXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIgXzB4MmJjNjE4ID0gXzB4M2I4OWFiW18weGUyYzNkOF07XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciBfMHg1Y2Y0MTcgPSBfMHg0YzA0MjdbJ1VWV29GJ10oXzB4MmJjNjE4LCAnJylbJ3JlcGxhY2UnXSgvaHR0cC4qXFxcXFxcXFwvXFxcXFxcXFwvL2csICcnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKC/np7vliqgvIFsndGVzdCddKF8weDQ5ZGE5NikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4NGMwNDI3WydreldESyddKF8weDRjMDQyN1snWFh5UXInXSwgXzB4ZTJjM2Q4KSA9PSBfMHg0OWRhOTYgPyBfMHg0YzA0MjdbJ2d0VW5qJ10oXzB4NGMwNDI3WydndFVuaiddKF8weDRjMDQyN1snVXRmV2YnXSwgXzB4NGMwNDI3WydRT3ZKViddKSwgXzB4NWNmNDE3KSA6IF8weDRjMDQyN1snQUJFd0InXSArIF8weDVjZjQxNyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogYmpJdGVtWyd5ZFBhcnNlJ10oXzB4NDlkYTk2LCBfMHhlMmMzZDgpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDRjMDQyN1snb3p6V0cnXVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgXzB4MTE5MzY1ID0gW18weDJiYzYxOCwgXzB4NGMwNDI3WydndFVuaiddKF8weGUyYzNkOCwgJ3x8JyldWydqb2luJ10oJ3x8Jyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDRjMDQyN1snbldmVlInXShfMHg0YzA0MjdbJ0FCRXdCJ10sIF8weDVjZjQxNyksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NGMwNDI3WydvenpXRyddLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBiakl0ZW1bJ3hsU2VsZWN0J10oXzB4MTE5MzY1LCBfMHgyZWNiZTVbJ3RvU3RyaW5nJ10oKSlcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgXzB4YjcwMTkyID0gW18weDMzNzg4YywgXzB4ZTJjM2Q4ICsgJ3x8J11bJ2pvaW4nXSgnfHwnKTtcXFxcbiAgICAgICAgICAgICAgICAvLyDov6rov6rlvbHpmaJ8fDB8fCAg5ZCN56ewfHzntKLlvJUg55qE5pWw57uEXFxcXG4gICAgICAgICAgICAgICAgLy8gQUJFd0Ig5piv57u/6ImyIF8weDM3ODcxZSDmmK/moIfpopjlkI3np7AgIHhkckZ25piv5a2X56ym5Liy6L+e5o6l5Ye95pWwXFxcXG4gICAgICAgICAgICAgICAgLy8gbGV0IGZsYWcgPSAn4oCY4oCY4pOK4oCZ4oCZJztcXFxcbiAgICAgICAgICAgICAgICBsZXQgZmxhZyA9IF8weDRjMDQyNy5jb2xvcign4pOKJywnIzAwNTFmZicpO1xcXFxuICAgICAgICAgICAgICAgIGlmKHR5cGVvZihqc29uLmNvZGVzW18weDM3ODcxZV0pPT09J2Z1bmN0aW9uJyl7XFxcXG4gICAgICAgICAgICAgICAgICAgIC8vIGZsYWcgPSAn4oCc4oCc4pK/4oCd4oCdJztcXFxcbiAgICAgICAgICAgICAgICAgICAgZmxhZyA9IF8weDRjMDQyNy5jb2xvcign4pK/JywnI2ZmNzAwMCcpO1xcXFxuICAgICAgICAgICAgICAgIH1lbHNlIGlmKHR5cGVvZihqc29uLmNvZGVzW18weDM3ODcxZV0pPT09J3VuZGVmaW5lZCcpe1xcXFxuICAgICAgICAgICAgICAgICAgICBmbGFnID0gJyc7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIC8vIGxldCBjbHMgPSAnPHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjojMjk4QTA4XFxcXFxcXCI+JztcXFxcbiAgICAgICAgICAgICAgICAvLyBsZXQgdGl0bGUgPSBfMHg0YzA0MjdbJ3hkckZ2J10oXzB4NGMwNDI3WydBQkV3QiddLCBmbGFnK18weDM3ODcxZSk7XFxcXG4gICAgICAgICAgICAgICAgLy8gbGV0IHRpdGxlID0gZmxhZytjbHMrXzB4Mzc4NzFlO1xcXFxuICAgICAgICAgICAgICAgIGxldCB0aXRsZSA9IGZsYWcrXzB4NGMwNDI3LmNvbG9yKF8weDM3ODcxZSwnIzI5OEEwOCcpO1xcXFxuICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxcXG4gICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IHRpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICAvLyAndGl0bGUnOiBfMHgzNzg3MWUsXFxcXG4gICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDRjMDQyN1snb3p6V0cnXSxcXFxcbiAgICAgICAgICAgICAgICAgICAgJ3VybCc6IGJqSXRlbVsneGxTZWxlY3QnXShfMHhiNzAxOTIsIF8weDJlY2JlNVsndG9TdHJpbmcnXSgpKVxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIF8weDRjMDQyN1sneXdqdXgnXShjbGVhclZhciwgXzB4NGMwNDI3WydyZ0RJcCddKTtcXFxcbiAgICB9LFxcXFxuICAgICdscUZpbGUnOiBmdW5jdGlvbigpIHtcXFxcbiAgICAgICAgdmFyIF8weDU0MWQ3NiA9IHtcXFxcbiAgICAgICAgICAgICdhV2lScyc6IGZ1bmN0aW9uKF8weDQ4ZDc3YiwgXzB4MTkxNjFmLCBfMHgyMWNiODUpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NDhkNzdiKF8weDE5MTYxZiwgXzB4MjFjYjg1KTtcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAnd1NmbnonOiBmdW5jdGlvbihfMHg0ODUwZWEpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NDg1MGVhKCk7XFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgJ3FSUWRBJzogJ2pkUm91dGUnLFxcXFxuICAgICAgICAgICAgJ1dRaXFrJzogJ3ZhciB4ZFJvdXRlPVxcXFxcXFwiXFxcXFxcXCI7JyxcXFxcbiAgICAgICAgICAgICdwc0dkdCc6IGZ1bmN0aW9uKF8weDE3MDc4MCwgXzB4M2I1MTJhKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDE3MDc4MCA9PSBfMHgzYjUxMmE7XFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgJ2lteHJpJzogJ3RydWUnLFxcXFxuICAgICAgICAgICAgJ25Ta2p4JzogZnVuY3Rpb24oXzB4OTViZjM4LCBfMHgzMTNmMjUpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4OTViZjM4ICE9PSBfMHgzMTNmMjU7XFxcXG4gICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgJ2lWTmVNJzogJ2VlTEptJyxcXFxcbiAgICAgICAgICAgICdJd01UbCc6ICcwfDF8NXw5fDExfDN8Nnw3fDEwfDR8Mnw4JyxcXFxcbiAgICAgICAgICAgICd4ZmRIayc6ICfmi4nlj5bkuLvmj5Lku7blkoznvZHpobXohJrmnKwnLFxcXFxuICAgICAgICAgICAgJ3JHTHVBJzogJ+S4u+aPkuS7tuWtmOaUvui3r+W+hDogL2NhY2hlL1BhcnNlX0RuLmpzXFxcXFxcXFx4MGHnvZHpobXohJrmnKzlrZjmlL7ot6/lvoQ6IC9jYWNoZS9QYXJzZV9Ebi5odG1sJyxcXFxcbiAgICAgICAgICAgICd6UVNMRSc6ICd0ZXh0X2NlbnRlcl8xJyxcXFxcbiAgICAgICAgICAgICdodmlEbCc6IGZ1bmN0aW9uKF8weDI2ZGI2MiwgXzB4MzEyZjFjKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIF8weDI2ZGI2MihfMHgzMTJmMWMpO1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICdaeFVndCc6ICfmk43kvZzmjIflvJUnLFxcXFxuICAgICAgICAgICAgJ3NXRm9jJzogZnVuY3Rpb24oXzB4MmEwNDRiLCBfMHgxNDlhM2YpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4MmEwNDRiICsgXzB4MTQ5YTNmO1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICdPRWhhdCc6ICfmi4nlj5bku6PnoIEnLFxcXFxuICAgICAgICAgICAgJ1p2dFN1JzogJ+e8lui+keino+aekCcsXFxcXG4gICAgICAgICAgICAnZ1hLTWInOiAndG9hc3Q6Ly/or7flhYjmi4nlj5bliJfooagnLFxcXFxuICAgICAgICAgICAgJ1dDT0RDJzogZnVuY3Rpb24oXzB4NGFkM2Q1LCBfMHgzMWZhMWUpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXzB4NGFkM2Q1IDwgXzB4MzFmYTFlO1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICdyQWtBaCc6ICd0ZXh0XzMnLFxcXFxuICAgICAgICAgICAgJ3lXYU9JJzogJ+aBouWkjeaPkuS7tui3r+W+hOS4uum7mOiupCcsXFxcXG4gICAgICAgICAgICAneWp5aksnOiAn5b2T5YmN6K6+572u5Li6OiAnLFxcXFxuICAgICAgICAgICAgJ3RIWGVFJzogJ+aLieWPluino+aekOWIl+ihqOaIluiAheino+aekOS7o+eggScsXFxcXG4gICAgICAgICAgICAnR01VWXUnOiAn5a2Y5pS+6Lev5b6EOiAvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJyxcXFxcbiAgICAgICAgICAgICdtcFpCWic6ICdsaW5lX2JsYW5rJyxcXFxcbiAgICAgICAgICAgICd4dnFnRic6ICfovpPlhaXmnInmlYjmj5Lku7blnLDlnYAnLFxcXFxuICAgICAgICAgICAgJ2hldUt4JzogJ3B1dFZhcihcXFxcXFxcInBsdWdpbkxpbmtcXFxcXFxcIixpbnB1dCknLFxcXFxuICAgICAgICAgICAgJ0lpZmlhJzogJ+KAmOKAmOKAmeKAmTxzdHJvbmc+PGJpZz7nmbvlvZXmj5DnpLonLFxcXFxuICAgICAgICAgICAgJ1BGUkhBJzogJ+S9v+eUqOebuOWFs+WKn+iDvemcgOeZu+W9leinhueVjOiuuuWdm+i0puWPt1xcXFxcXFxcbuWmguaciemXrumimOWJjeW+gOiuuuWdm+S6huino+ivpuaDhScsXFxcXG4gICAgICAgICAgICAnVUx3a1QnOiAnaHR0cHM6Ly9oYWlrdW9zaGlqaWUuY24vdXNlci9zaWduaW4nXFxcXG4gICAgICAgIH07XFxcXG4gICAgICAgIGlmIChfMHg1NDFkNzZbJ3BzR2R0J10oXzB4NTQxZDc2Wyd3U2ZueiddKGJic1laKSwgXzB4NTQxZDc2WydpbXhyaSddKSkge1xcXFxuICAgICAgICAgICAgaWYgKF8weDU0MWQ3NlsnblNrangnXShfMHg1NDFkNzZbJ2lWTmVNJ10sIF8weDU0MWQ3NlsnaVZOZU0nXSkpIHtcXFxcbiAgICAgICAgICAgICAgICBfMHg1NDFkNzZbJ2FXaVJzJ10ocHV0VmFyLCAnYmJzWVonLCBfMHg1NDFkNzZbJ3dTZm56J10oaXNMb2dpbil8fGZ1bmN0aW9uICgpe3JldHVybiB0cnVlfSk7XFxcXG4gICAgICAgICAgICAgICAgXzB4NTQxZDc2WydhV2lScyddKHB1dFZhciwgXzB4NTQxZDc2WydxUlFkQSddLCBfMHg1NDFkNzZbJ1dRaXFrJ10pO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgXzB4NGQyNWZmID0gXzB4NTQxZDc2WydJd01UbCddWydzcGxpdCddKCd8JyksXFxcXG4gICAgICAgICAgICAgICAgICAgIF8weDRhOTdjOSA9IDB4MDtcXFxcbiAgICAgICAgICAgICAgICB3aGlsZSAoISFbXSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKF8weDRkMjVmZltfMHg0YTk3YzkrK10pIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzAnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDU0MWQ3NlsneGZkSGsnXSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6IGJqSXRlbVsncHVsbFNjcmlwdCddKF9teVNldFsnY2pjYWNoZSddLCBfbXlTZXRbJ3g1Y2FjaGUnXSksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXNjJzogXzB4NTQxZDc2WydyR0x1QSddLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiBfMHg1NDFkNzZbJ3pRU0xFJ11cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzEnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF8weDU0MWQ3NlsnaHZpRGwnXShldmFsLCBfMHg1NDFkNzZbJ2h2aURsJ10oZ2V0VmFyLCBfMHg1NDFkNzZbJ3FSUWRBJ10pKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzInOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6ICdsaW5lX2JsYW5rJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMyc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF8weDJhYjM5OSA9ICdoaWtlcjovL2VtcHR5I25vSGlzdG9yeSNAcnVsZT1qczp0aGlzLmQ9W107JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2p4SXRlbT9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIikuanhMaXN0KCk7c2V0UmVzdWx0KGQpOyc7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc0JzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg1NDFkNzZbJ1p4VWd0J10sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiB0eXBlb2YgY3pHdWlkZSA9PSAnZnVuY3Rpb24nID8gY3pHdWlkZSgpIDogJycsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDU0MWQ3NlsnelFTTEUnXVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnNSc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgeGRSb3V0ZSA9IF8weDU0MWQ3Nlsnc1dGb2MnXSh4ZFJvdXRlLCBfbXlTZXRbJ3BhcnNlUm91dGUnXSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc2JzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgXzB4M2E5YWZlID0gW3tcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogJ+aLieWPluWIl+ihqCcsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBiakl0ZW1bJ3B1bGxDb2RlJ10oJ+WIl+ihqCcpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg1NDFkNzZbJ09FaGF0J10sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBiakl0ZW1bJ3B1bGxDb2RlJ10oJ+S7o+eggScpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGUnOiBfMHg1NDFkNzZbJ1p2dFN1J10sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd1cmwnOiBfMHg1NDFkNzZbJ2h2aURsJ10oZmlsZUV4aXN0LCBfMHg1NDFkNzZbJ2h2aURsJ10oZ2V0VmFyLCAncGFyc2VSb3V0ZScpKSA9PSAhIVtdID8gXzB4MmFiMzk5IDogXzB4NTQxZDc2WydnWEtNYiddXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfV07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29udGludWU7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICc3JzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBfMHgxYTJjZGIgPSAweDA7IF8weDU0MWQ3NlsnV0NPREMnXShfMHgxYTJjZGIsIF8weDNhOWFmZVsnbGVuZ3RoJ10pOyBfMHgxYTJjZGIrKykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkWydwdXNoJ10oe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4M2E5YWZlW18weDFhMmNkYl1bJ3RpdGxlJ10sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogXzB4M2E5YWZlW18weDFhMmNkYl1bJ3VybCddLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NTQxZDc2WydyQWtBaCddXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJzgnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICd0aXRsZSc6IF8weDU0MWQ3NlsneVdhT0knXSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3VybCc6IGJqSXRlbVsnaGZQbHVnaW4nXShfbXlTZXRbJ3BhcnNlUm91dGUnXSksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXNjJzogXzB4NTQxZDc2WydzV0ZvYyddKF8weDU0MWQ3NlsneWp5aksnXSArIG15U2V0WydjaiddLCAnXFxcXFxcXFxu5a2Y5pS+6Lev5b6EOiAvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJyksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDU0MWQ3NlsnelFTTEUnXVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnOSc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZFsncHVzaCddKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4NTQxZDc2Wyd0SFhlRSddLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndXJsJzogJ3RvYXN0Oi8v6K+35Zyo5LiL5pa56YCJ6aG55pON5L2cJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2Rlc2MnOiBfMHg1NDFkNzZbJ0dNVVl1J10sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDU0MWQ3NlsnelFTTEUnXVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMTAnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdjb2xfdHlwZSc6IF8weDU0MWQ3NlsnbXBaQlonXVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSAnMTEnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICdkZXNjJzogXzB4NTQxZDc2Wyd4dnFnRiddLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnY29sX3R5cGUnOiAnaW5wdXQnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnZXh0cmEnOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAndGl0bGVWaXNpYmxlJzogIVtdLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ2RlZmF1bHRWYWx1ZSc6IF8weDU0MWQ3NlsnaHZpRGwnXShnZXRWYXIsICdwbHVnaW5MaW5rJyksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnb25DaGFuZ2UnOiBfMHg1NDFkNzZbJ2hldUt4J11cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGRbJ3B1c2gnXSh7XFxcXG4gICAgICAgICAgICAgICAgJ3RpdGxlJzogXzB4NTQxZDc2WydJaWZpYSddLFxcXFxuICAgICAgICAgICAgICAgICdkZXNjJzogXzB4NTQxZDc2WydQRlJIQSddLFxcXFxuICAgICAgICAgICAgICAgICd1cmwnOiBfMHg1NDFkNzZbJ1VMd2tUJ10sXFxcXG4gICAgICAgICAgICAgICAgJ2NvbF90eXBlJzogXzB4NTQxZDc2Wyd6UVNMRSddXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbn07XFxcXG4kLmV4cG9ydHMgPSBqeEl0ZW07XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6Kej5p6QVXJs57yW6L6RXFxcIixcXFwicGF0aFxcXCI6XFxcIkVkaXRVcmxcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5zZXRQYWdlVGl0bGUoXFxcXFxcXCLmj5Lku7bmjqXlj6Porr7nva5cXFxcXFxcIik7XFxcXG5sZXQgZCA9IFtdO1xcXFxubGV0IHBhcnNlVXJsVGV4dCA9IHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXFxcXFwiKTtcXFxcbmxldCBwYXJzZVVybEFycmF5ID0gcGFyc2VVcmxUZXh0LnNwbGl0KC9cXFxcXFxcXG4vKTtcXFxcbmxldCBzZWxlY3RlZCA9IGdldEl0ZW0oXFxcXFxcXCJzZWxlY3RlZFxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbmxldCBjbGFzc1RhYiA9IFtcXFxcbiAgICBbXFxcXFxcXCLpgInmi6lcXFxcXFxcIiwgXFxcXFxcXCIwXFxcXFxcXCJdLFxcXFxuICAgIFtcXFxcXFxcIuS/ruaUuVxcXFxcXFwiLCBcXFxcXFxcIjFcXFxcXFxcIl0sXFxcXG4gICAgW1xcXFxcXFwi5Yig6ZmkXFxcXFxcXCIsIFxcXFxcXFwiMlxcXFxcXFwiXVxcXFxuXTtcXFxcbmxldCBjbGFzc0EgPSBnZXRWYXIoXFxcXFxcXCJjbGFzc1xcXFxcXFwiLCBcXFxcXFxcIjBcXFxcXFxcIik7XFxcXG5hZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgIGNsZWFyVmFyKFxcXFxcXFwiY2xhc3NcXFxcXFxcIik7XFxcXG59KSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBcXFxcXFxcIua3u+WKoOaWsOeahOino+aekFxcXFxcXFwiLFxcXFxuICAgIHVybDogJChcXFxcXFxcIlxcXFxcXFwiLFxcXFxcXFwi6Kej5p6Q5ZCNJibop6PmnpBVUkxcXFxcXFxcIikuaW5wdXQoKCkgPT4ge1xcXFxuICAgICAgICBsZXQgcGFyc2VVcmxUZXh0ID0gcmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcXFxcXCIpO1xcXFxuICAgICAgICBsZXQgcGFyc2VVcmxBcnJheSA9IHBhcnNlVXJsVGV4dC5zcGxpdCgvXFxcXFxcXFxuLyk7XFxcXG4gICAgICAgIGlmKGlucHV0LnNwbGl0KFxcXFxcXFwiJiZcXFxcXFxcIikubGVuZ3RoIT09Mil7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+agvOW8j+S4jeato+ehrlxcXFxcXFwiO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHBhcnNlVXJsQXJyYXkucHVzaChpbnB1dCk7XFxcXG4gICAgICAgIHBhcnNlVXJsVGV4dCA9IHBhcnNlVXJsQXJyYXkuam9pbihcXFxcXFxcIlxcXFxcXFxcblxcXFxcXFwiKTtcXFxcbiAgICAgICAgd3JpdGVGaWxlKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFxcXFxcIiwgcGFyc2VVcmxUZXh0KTtcXFxcbiAgICAgICAgXFxcXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXFxcbiAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/kv67mlLnmiJDlip9cXFxcXFxcIjtcXFxcbiAgICB9KSxcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJzY3JvbGxfYnV0dG9uXFxcXFxcXCJcXFxcbn0pO1xcXFxuZm9yIChsZXQgaXRlbSBvZiBjbGFzc1RhYikge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBpdGVtWzFdID09PSBjbGFzc0EgPyBcXFxcXFxcIuKAnOKAnFxcXFxcXFwiICsgaXRlbVswXSArIFxcXFxcXFwi4oCd4oCdXFxcXFxcXCIgOiBpdGVtWzBdLFxcXFxuICAgICAgICB1cmw6ICQoXFxcXFxcXCIjbm9Mb2FkaW5nI1xcXFxcXFwiKS5sYXp5UnVsZSgoa2V5KSA9PiB7XFxcXG4gICAgICAgICAgICBwdXRWYXIoXFxcXFxcXCJjbGFzc1xcXFxcXFwiLCBrZXkpO1xcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiO1xcXFxuICAgICAgICB9LCBpdGVtWzFdKSxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwiXFxcXG4gICAgfSk7XFxcXG59XFxcXG5sZXQgZnVuYztcXFxcbnN3aXRjaCAoY2xhc3NBKSB7XFxcXG4gICAgY2FzZSBcXFxcXFxcIjBcXFxcXFxcIjpcXFxcbiAgICAgICAgZnVuYyA9IGZ1bmN0aW9uKHVybCwgdGl0bGUpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAkKHVybCArIFxcXFxcXFwiI25vTG9hZGluZyNcXFxcXFxcIikubGF6eVJ1bGUoKHRpdGxlKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgbG9nKFxcXFxcXFwiXFxcXFxcXFxu5pu05pS55o6l5Y+jPiBcXFxcXFxcIiArIGlucHV0KTtcXFxcbiAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFwic2VsZWN0ZWRcXFxcXFxcIiwgaW5wdXQpO1xcXFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcXFxcXCJzZWxlY3RlZDBcXFxcXFxcIiwgdGl0bGUgKyBcXFxcXFxcIiYmXFxcXFxcXCIgKyBpbnB1dCk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5L+u5pS55oiQ5YqfXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB9LCB0aXRsZSk7XFxcXG4gICAgICAgIH07XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgXFxcXFxcXCIxXFxcXFxcXCI6XFxcXG4gICAgICAgIGZ1bmMgPSBmdW5jdGlvbih1cmwsIHRpdGxlLCBpbmRleCkge1xcXFxuICAgICAgICAgICAgcmV0dXJuICQodXJsLCBcXFxcXFxcIuivt+i+k+WFpeOAjFxcXFxcXFwiICsgdGl0bGUgKyBcXFxcXFxcIuOAjeeahOaWsOaOpeWPo1xcXFxcXFwiKS5pbnB1dCgodGl0bGUsIGluZGV4KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlVXJsVGV4dCA9IHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2ppZXhpL2ppZXhpLnR4dFxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgcGFyc2VVcmxBcnJheSA9IHBhcnNlVXJsVGV4dC5zcGxpdCgvXFxcXFxcXFxuLyk7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHNlbGVjdGVkMSA9IHBhcnNlVXJsQXJyYXlbaW5kZXhdO1xcXFxuICAgICAgICAgICAgICAgIHBhcnNlVXJsQXJyYXlbaW5kZXhdID0gdGl0bGUgKyBcXFxcXFxcIiYmXFxcXFxcXCIgKyBpbnB1dDtcXFxcbiAgICAgICAgICAgICAgICBwYXJzZVVybFRleHQgPSBwYXJzZVVybEFycmF5LmpvaW4oXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFxcXFxcIiwgcGFyc2VVcmxUZXh0KTtcXFxcbiAgICAgICAgICAgICAgICBpZiAoc2VsZWN0ZWQxID09IGdldEl0ZW0oXFxcXFxcXCJzZWxlY3RlZDBcXFxcXFxcIikpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFxcXFxcInNlbGVjdGVkXFxcXFxcXCIsIGlucHV0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFxcXFxcInNlbGVjdGVkMFxcXFxcXFwiLCB0aXRsZSArIFxcXFxcXFwiJiZcXFxcXFxcIiArIGlucHV0KTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5L+u5pS55oiQ5YqfXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB9LCB0aXRsZSwgaW5kZXgpO1xcXFxuICAgICAgICB9O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlIFxcXFxcXFwiMlxcXFxcXFwiOlxcXFxuICAgICAgICBmdW5jID0gZnVuY3Rpb24odXJsLCB0aXRsZSwgaW5kZXgpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAkKFxcXFxcXFwi56Gu6K6k5Yig6Zmk44CMXFxcXFxcXCIgKyB0aXRsZSArIFxcXFxcXFwi44CN77yfXFxcXFxcXCIpLmNvbmZpcm0oKHRpdGxlLCBpbmRleCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGxldCBwYXJzZVVybFRleHQgPSByZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9qaWV4aS9qaWV4aS50eHRcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHBhcnNlVXJsQXJyYXkgPSBwYXJzZVVybFRleHQuc3BsaXQoL1xcXFxcXFxcbi8pO1xcXFxuICAgICAgICAgICAgICAgIGxldCBzZWxlY3RlZDEgPSBwYXJzZVVybEFycmF5W2luZGV4XTtcXFxcbiAgICAgICAgICAgICAgICBwYXJzZVVybEFycmF5LnNwbGljZShpbmRleCwgMSk7XFxcXG4gICAgICAgICAgICAgICAgcGFyc2VVcmxUZXh0ID0gcGFyc2VVcmxBcnJheS5qb2luKFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShcXFxcXFxcImhpa2VyOi8vZmlsZXMvamlleGkvamlleGkudHh0XFxcXFxcXCIsIHBhcnNlVXJsVGV4dCk7XFxcXG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkMSA9PSBnZXRJdGVtKFxcXFxcXFwic2VsZWN0ZWQwXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmIChwYXJzZVVybEFycmF5WzBdKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKFxcXFxcXFwic2VsZWN0ZWRcXFxcXFxcIiwgcGFyc2VVcmxBcnJheVswXS5zcGxpdChcXFxcXFxcIiYmXFxcXFxcXCIpWzFdIHx8IFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbShcXFxcXFxcInNlbGVjdGVkMFxcXFxcXFwiLCBwYXJzZVVybEFycmF5WzBdKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcXFxcXCJzZWxlY3RlZFxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oXFxcXFxcXCJzZWxlY3RlZDBcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5L+u5pS55oiQ5YqfXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB9LCB0aXRsZSwgaW5kZXgpO1xcXFxuICAgICAgICB9O1xcXFxuICAgICAgICBicmVhaztcXFxcblxcXFxufVxcXFxuZm9yIChsZXQgaSBpbiBwYXJzZVVybEFycmF5KSB7XFxcXG4gICAgbGV0IGl0ZW0gPSBwYXJzZVVybEFycmF5W2ldLnNwbGl0KFxcXFxcXFwiJiZcXFxcXFxcIik7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IHNlbGVjdGVkID09IGl0ZW1bMV0gPyBcXFxcXFxcIuKAmOKAmFxcXFxcXFwiICsgaXRlbVswXSArIFxcXFxcXFwi4oCZ4oCZXFxcXFxcXCIgOiBpdGVtWzBdLFxcXFxuICAgICAgICB1cmw6IGZ1bmMoaXRlbVsxXSwgaXRlbVswXSwgaSksXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfM1xcXFxcXFwiXFxcXG4gICAgfSk7XFxcXG59XFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5Li76aKY566h55CGXFxcIixcXFwicGF0aFxcXCI6XFxcInRoZW1lXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuICAgIGZ1bmN0aW9uIHRoZW1lSW5pdCgpe1xcXFxuICAgICAgICBjb25zdCB7Y29sb3Isc21hbGx9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3V0aWxpeT9ydWxlPemBk+mVv+S7k+W6k1Byb1xcXFxcXFwiKTtcXFxcbiAgICAgICAgbGV0IGQgPSBbXTtcXFxcbiAgICAgICAgbGV0IG9wdGlvbnMgPSBbJ+mAieaLqScsJ+S/ruaUuScsJ+WIoOmZpCcsJ+WvvOWHuiddO1xcXFxuXFxcXG4gICAgICAgIGZvcih2YXIgaSBpbiBvcHRpb25zKXtcXFxcbiAgICAgICAgICAgIGxldCBvcHRpb24gPSBvcHRpb25zW2ldO1xcXFxuICAgICAgICAgICAgbGV0IGZsYWcgPSBnZXRWYXIoJ3RoZW1lLmRuX29wdGlvbicsJ+aWsOWinicpPT09b3B0aW9uPyfwn5GJJzonJztcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6ZmxhZytvcHRpb24sXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcXFxuICAgICAgICAgICAgICAgIHVybDokKG9wdGlvbikubGF6eVJ1bGUoKCk9PntcXFxcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCd0aGVtZS5kbl9vcHRpb24nLCBpbnB1dCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6K6+572u5pON5L2c57G75Z6L5Li6OicraW5wdXQ7XFxcXG4gICAgICAgICAgICAgICAgfSksXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgIGxldCB0aGVtZVJvdXRlID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015VGhlbWUuanNvblxcXFxcXFwiO1xcXFxuICAgICAgICBsZXQgbXlUaGVtZXMgPSB7fTtcXFxcbiAgICAgICAgbGV0IHRoZW1lcyA9IHt9O1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgbXlUaGVtZXMgPSBKU09OLnBhcnNlKGZldGNoKHRoZW1lUm91dGUpKTtcXFxcbiAgICAgICAgICAgIHRoZW1lcyA9IG15VGhlbWVzLnRoZW1lc1tteVRoZW1lcy5ub3dfdGhlbWVdO1xcXFxuICAgICAgICB9Y2F0Y2ggKGUpIHt9XFxcXG5cXFxcblxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6J+WvvOWFpScsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxcXG4gICAgICAgICAgICB1cmw6JCgnJywn6K+36L6T5YWl5a+85YWl5Y+j5LukJykuaW5wdXQoKG15VGhlbWVzLHRoZW1lUm91dGUpPT57XFxcXG4gICAgICAgICAgICAgICAgaWYoL17mlq3mj5LkuLvpophALio/QGh0dHAvLnRlc3QoaW5wdXQpKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5hbWUgPSBpbnB1dC5zcGxpdCgnQCcpWzFdO1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gaW5wdXQuc3BsaXQoJ0AnKVsyXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ+ehruWumuimgeWvvOWFpeaWreaPkuS4u+mimC0nK25hbWUrJyDlkJc/JykuY29uZmlybSgobmFtZSx1cmwsbXlUaGVtZXMsdGhlbWVSb3V0ZSk9PntcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gcGFyc2VQYXN0ZSh1cmwpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhhc1RoZW1lID0gbXlUaGVtZXMudGhlbWVzLmZpbHRlcihpdD0+aXQubmFtZT09PW5hbWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoaGFzVGhlbWUmJmhhc1RoZW1lLmxlbmd0aD4wKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgaWQgPSBudWxsO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaiBpbiBteVRoZW1lcy50aGVtZXMpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihteVRoZW1lcy50aGVtZXNbal0ubmFtZSA9PT0gbmFtZSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGo7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighaWQpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v57Si5byV6ZSZ6K+v5peg5rOV6KaG55uW5a+85YWlOlxcXFxcXFxcbicraWRcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKCfopobnm5blr7zlhaXkuLvpophpZDonK2lkKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRoZW1lcy50aGVtZXNbaWRdID0gT2JqZWN0LmFzc2lnbihKU09OLnBhcnNlKGJhc2U2NERlY29kZShjb250ZW50KSkseyduYW1lJzpuYW1lfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRoZW1lcy50aGVtZXMucHVzaChPYmplY3QuYXNzaWduKEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKGNvbnRlbnQpKSx7J25hbWUnOm5hbWV9KSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBsb2cobXlUaGVtZXMpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkobXlUaGVtZXMpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suaIkOWKn+WvvOWFpeS4u+mimDpcXFxcXFxcXG4nK25hbWVcXFxcbiAgICAgICAgICAgICAgICAgICAgfSxuYW1lLHVybCxteVRoZW1lcyx0aGVtZVJvdXRlKTtcXFxcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aXoOazleivhuWIq+eahOWvvOWFpeWPo+S7pDpcXFxcXFxcXG4nK2lucHV0O1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0sbXlUaGVtZXMsdGhlbWVSb3V0ZSksXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6J+aWsOWinicsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxcXG4gICAgICAgICAgICB1cmw6JCgpLnJ1bGUoKG15VGhlbWVzLHRoZW1lUm91dGUpPT57XFxcXG4gICAgICAgICAgICAgICAgbGV0IGQ9W107XFxcXG4gICAgICAgICAgICAgICAgYWRkTGlzdGVuZXIoJ29uQ2xvc2UnLCAkLnRvU3RyaW5nKCgpPT57XFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgIH0pKTtcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+S4u+mimOWQjeensCcsXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi5pat5o+SLeiTneiOk+S4u+mimFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IFxcXFxcXFwicHV0VmFyKCd0aGVtZS5uZXdfYWRkX25hbWUnLGlucHV0KVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiB0cnVlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRWYXIoJ3RoZW1lLm5ld19hZGRfbmFtZScsICcnKVxcXFxuICAgICAgICAgICAgICAgICAgICB9LFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6JC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgbmV3X2FkZF9uYW1lID0gZ2V0VmFyKCd0aGVtZS5uZXdfYWRkX25hbWUnLCAnJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g6L6T5YWl55qE5pivOicrbmV3X2FkZF9uYW1lO1xcXFxuICAgICAgICAgICAgICAgICAgICB9KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaW5wdXRcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi5Luj56CBXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGVWaXNpYmxlOiBmYWxzZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0VmFyKCd0aGVtZS5uZXdfYWRkX2NvZGUnLCAnJyksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcXFxcXFxcInRleHRhcmVhXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWlnaHQ6LTEsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogJ3B1dFZhcihcXFxcXFxcInRoZW1lLm5ld19hZGRfY29kZVxcXFxcXFwiLGlucHV0KSdcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOifkv53lrZgnLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTondGV4dF9jZW50ZXJfMScsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDokKCkubGF6eVJ1bGUoKG15VGhlbWVzLHRoZW1lUm91dGUpPT57XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgY29kZSA9IGdldFZhcigndGhlbWUubmV3X2FkZF9jb2RlJywgJycpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5hbWUgPSBnZXRWYXIoJ3RoZW1lLm5ld19hZGRfbmFtZScsICcnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKCFuYW1lKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g6L+Y5rKh5aGr5YaZ5Li76aKY5ZCN56ew5ZGiJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld1RoZW1lID0ge307XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1RoZW1lID0gSlNPTi5wYXJzZShjb2RlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1jYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/plJnor6/nmoTkuLvpophqc29u5qC85byPOlxcXFxcXFxcbicrZS5tZXNzYWdlO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihuZXdUaGVtZSx7J25hbWUnOm5hbWV9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG15VGhlbWVzLnRoZW1lcy5wdXNoKG5ld1RoZW1lKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLEpTT04uc3RyaW5naWZ5KG15VGhlbWVzKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LmlrDlop7mlq3mj5LkuLvpopg6JytuYW1lXFxcXG4gICAgICAgICAgICAgICAgICAgIH0sbXlUaGVtZXMsdGhlbWVSb3V0ZSlcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxcXG4gICAgICAgICAgICB9LG15VGhlbWVzLHRoZW1lUm91dGUpLFxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOm15VGhlbWVzLnRoZW1lcz8n5Li76aKY5YiX6KGoOuWFseiuoTonK2NvbG9yKG15VGhlbWVzLnRoZW1lcy5sZW5ndGgsJyNmZjcwMDAnKSsn5Liq5Li76aKYJzpcXFxcXFxcIuesrOS4gOasoeWKoOi9ve+8jOeCueatpOi/m+WOu+WIneWni+WMluS4u+mimOWIl+ihqFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMScsXFxcXG4gICAgICAgICAgICB1cmw6J2hpa2VyOi8vcGFnZS9Sb3V0ZT9ydWxlPU15RmllbGThtLDigb8mdHlwZT3orr7nva4jbm9IaXN0b3J5IydcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTpcXFxcXFxcIuaBouWkjeWHuuWOguiuvue9rlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfY2VudGVyXzEnLFxcXFxuICAgICAgICAgICAgdXJsOiQoXFxcXFxcXCLlpoLmnpzkvaDnmoTkuLvpopjmsqHms5XmraPluLjnlKjkuobvvIzmraTmlrnms5Xlj6/ku6XmlZHnoJbvvIznoa7orqTmgaLlpI0/XFxcXFxcXCIpLmNvbmZpcm0oKCk9PntcXFxcbiAgICAgICAgICAgICAgICBsZXQgdGhlbWVzID0ge25hbWU6J+m7mOiupOS4u+mimCcsY2xvc2VCdG46e2NvbG9yOicjZjZmNmY2JyxiYWNrZ3JvdW5kOicjYWE5NmRhJ30sc2F2ZUJ0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNjgwMDYnfSxzYXZlQ2xvc2VCdG46e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjMDVCRkM1J30sdGlwc0J0bjp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyMwNUJGQzUnfSxiYXJsYWJlbDp7Y29sb3I6JyNGOUYwREEnLGJhY2tncm91bmQ6JyNhYTk2ZGEnfSxiYXJJbnB1dDp7Y29sb3I6JyNhYTk2ZGEnLGJhY2tncm91bmQ6JyNmZmZmZDInfSxzZWxlY3Q6e2NvbG9yOicjRjlGMERBJyxiYWNrZ3JvdW5kOicjYWE5NmRhJ30sfTtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdGhlbWVEZWYgPSB7XFxcXFxcXCJuYW1lXFxcXFxcXCI6XFxcXFxcXCLmlq3lv7Xljp/nmq5cXFxcXFxcIixcXFxcXFxcImNsb3NlQnRuXFxcXFxcXCI6e1xcXFxcXFwiY29sb3JcXFxcXFxcIjpcXFxcXFxcIiNGOUYwREFcXFxcXFxcIixcXFxcXFxcImJhY2tncm91bmRcXFxcXFxcIjpcXFxcXFxcIiNjNTQ2NGFcXFxcXFxcIn0sXFxcXFxcXCJzYXZlQnRuXFxcXFxcXCI6e1xcXFxcXFwiY29sb3JcXFxcXFxcIjpcXFxcXFxcIiNGOUYwREFcXFxcXFxcIixcXFxcXFxcImJhY2tncm91bmRcXFxcXFxcIjpcXFxcXFxcIiMwNjgwMDZcXFxcXFxcIn0sXFxcXFxcXCJzYXZlQ2xvc2VCdG5cXFxcXFxcIjp7XFxcXFxcXCJjb2xvclxcXFxcXFwiOlxcXFxcXFwiI0Y5RjBEQVxcXFxcXFwiLFxcXFxcXFwiYmFja2dyb3VuZFxcXFxcXFwiOlxcXFxcXFwiIzA1QkZDNVxcXFxcXFwifSxcXFxcXFxcInRpcHNCdG5cXFxcXFxcIjp7XFxcXFxcXCJjb2xvclxcXFxcXFwiOlxcXFxcXFwiI0Y5RjBEQVxcXFxcXFwiLFxcXFxcXFwiYmFja2dyb3VuZFxcXFxcXFwiOlxcXFxcXFwiIzA1QkZDNVxcXFxcXFwifSxcXFxcXFxcImJhcmxhYmVsXFxcXFxcXCI6e1xcXFxcXFwiY29sb3JcXFxcXFxcIjpcXFxcXFxcIiNGOUYwREFcXFxcXFxcIixcXFxcXFxcImJhY2tncm91bmRcXFxcXFxcIjpcXFxcXFxcIiNEMDZCNkNcXFxcXFxcIn0sXFxcXFxcXCJiYXJJbnB1dFxcXFxcXFwiOntcXFxcXFxcImNvbG9yXFxcXFxcXCI6XFxcXFxcXCIjRDA2QjZDXFxcXFxcXCIsXFxcXFxcXCJiYWNrZ3JvdW5kXFxcXFxcXCI6XFxcXFxcXCIjRjlGMERBXFxcXFxcXCJ9LFxcXFxcXFwic2VsZWN0XFxcXFxcXCI6e1xcXFxcXFwiY29sb3JcXFxcXFxcIjpcXFxcXFxcIiNGOUYwREFcXFxcXFxcIixcXFxcXFxcImJhY2tncm91bmRcXFxcXFxcIjpcXFxcXFxcIiNEMDZCNkNcXFxcXFxcIn19O1xcXFxuICAgICAgICAgICAgICAgIGxldCB0aGVtZVJvdXRlID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015VGhlbWUuanNvblxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLEpTT04uc3RyaW5naWZ5KHtub3dfdGhlbWU6J+m7mOiupOS4u+mimCcsdGhlbWVzOlt0aGVtZXMsdGhlbWVEZWZdfSkpO1xcXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5LkuLvpopjlt7Lph43nva7kuLrlh7rljoLorr7nva4nXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgZm9yKHZhciBpIGluIG15VGhlbWVzLnRoZW1lcyl7XFxcXG4gICAgICAgICAgICBsZXQgbm93VGhlbSA9IG15VGhlbWVzLnRoZW1lc1tpXTtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6bXlUaGVtZXMubm93X3RoZW1lPT09bm93VGhlbS5uYW1lPyfwn5GJJytub3dUaGVtLm5hbWU6bm93VGhlbS5uYW1lLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOidmbGV4X2J1dHRvbicsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiQoKS5sYXp5UnVsZSgobXl0aGVtZSxteVRoZW1lcyxpLHRoZW1lUm91dGUpPT57XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBvcHRpb24gPSBnZXRWYXIoJ3RoZW1lLmRuX29wdGlvbicsJ+aWsOWinicpO1xcXFxuICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG9wdGlvbil7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICflr7zlh7onOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBteXRoZW1lQ29kZSA9IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeShteXRoZW1lKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHVybCA9IHNoYXJlUGFzdGUobXl0aGVtZUNvZGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb2RlID0gJ+aWreaPkuS4u+mimEAnK215dGhlbWUubmFtZSsnQCcrdXJsO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkoY29kZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWvvOWHuuS4uuS6keWPo+S7pOW5tuWkjeWItuWIsOWJquWIh+advydcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ+S/ruaUuSc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoSlNPTi5zdHJpbmdpZnkobXl0aGVtZSkpLmlucHV0KChteXRoZW1lLG15VGhlbWVzLGksdGhlbWVSb3V0ZSk9PntcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYobXl0aGVtZS5uYW1lPT09bXlUaGVtZXMubm93X3RoZW1lKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mraTkuLvpopjlvZPliY3mraPlnKjkvb/nlKjkuK3vvIzkuI3lhYHorrjkv67mlLkhJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG15VGhlbWVzLnRoZW1lc1tpXT1KU09OLnBhcnNlKGlucHV0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKHRoZW1lUm91dGUsSlNPTi5zdHJpbmdpZnkobXlUaGVtZXMpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lkv67mlLknXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxteXRoZW1lLG15VGhlbWVzLGksdGhlbWVSb3V0ZSlcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WIoOmZpCc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ+ehruiupOWIoOmZpOS4u+mimDonK215dGhlbWUubmFtZSsnPycpLmNvbmZpcm0oKG15dGhlbWUsbXlUaGVtZXMsaSx0aGVtZVJvdXRlKT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihteXRoZW1lLm5hbWU9PT1teVRoZW1lcy5ub3dfdGhlbWUpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+atpOS4u+mimOW9k+WJjeato+WcqOS9v+eUqOS4re+8jOS4jeWFgeiuuOWIoOmZpCEnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXlUaGVtZXMudGhlbWVzLnNwbGljZShpLDEpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSxKU09OLnN0cmluZ2lmeShteVRoZW1lcykpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWIoOmZpCdcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LG15dGhlbWUsbXlUaGVtZXMsaSx0aGVtZVJvdXRlKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBteVRoZW1lcy5ub3dfdGhlbWU9bXl0aGVtZS5uYW1lO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZSh0aGVtZVJvdXRlLEpTT04uc3RyaW5naWZ5KG15VGhlbWVzKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S9oOmAieaLqeS6hicrbXl0aGVtZS5uYW1lKyfkvZzkuLrpu5jorqTkuLvpopgnO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSxub3dUaGVtLG15VGhlbWVzLGksdGhlbWVSb3V0ZSksXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBzZXRSZXN1bHQoZCk7XFxcXG4gICAgfVxcXFxuJC5leHBvcnRzLnRoZW1lSW5pdD10aGVtZUluaXQ7XFxcIn0se1xcXCJuYW1lXFxcIjpcXFwi5pON5L2c5oyH5byVXFxcIixcXFwicGF0aFxcXCI6XFxcIkd1aWRlXFxcIixcXFwicnVsZVxcXCI6XFxcIjxodG1sPlxcXFxuPGhlYWQ+XFxcXG4gICAgPG1ldGEgY2hhcnNldD1cXFxcXFxcIlVURi04XFxcXFxcXCI+XFxcXG48L2hlYWQ+XFxcXG48Ym9keT5cXFxcbjxzdHJvbmc+IDxiaWc+5ouJ5Y+W56+HPC9iaWc+IDwvc3Ryb25nPlxcXFxuPGJyIC8+IOaTjeS9nOmhuuW6j++8mlxcXFxuPGJyIC8+IDEu5pu05paw6YGT6ZW/5LuT5bqTUHJv5YiwNzbniYjmnKxcXFxcbjxiciAvPiAyLuaLieWPluS4u+aPkuS7tuWSjOe9kemhteiEmuacrFxcXFxuPGJyIC8+IDMu5o6o6I2Q55u05o6l5ouJ5Y+W5Luj56CBPHM+5ouJ5Y+W5YiX6KGo4oaS5ouJ5Y+W5Luj56CBPC9zPlxcXFxuPGJyIC8+XFxcXG48YnIgLz5cXFxcbjxzdHJvbmc+PGJpZz7lj6Pku6Tnr4c8L2JpZz48L3N0cm9uZz5cXFxcbjxiciAvPummlumhtei+k+WFpeahhuaUr+aMge+8mlxcXFxuPGJyIC8+MS7liIbkuqvlh7rmnaXnmoTlkIzns7vliJfmj5Lku7bkupHliarotLTmnb/lj6Pku6RcXFxcbjxiciAvPjIu5pyq5Yqg5a+G55qE5ZCM57O75YiX5o+S5Lu25Zyw5Z2ALOaUr+aMgeacrOWcsOaWh+S7tuWmguS7peS4i+agvOW8j+W8gOWktOeahDpmaWxlOi8vLGhpa2VyOi8vLC9zdG9yYWdlXFxcXG48YnIgLz4zLlHnpZ5cXFxcbjxiciAvPjQu5pat5o+SXFxcXG48YnIgLz41LiPpgZPplb/nsr7pgIlcXFxcbjxiciAvPjYuI2Lnq5lcXFxcbjxiciAvPjcuI+WAjemZhlxcXFxuPGJyIC8+XFxcXG48YnIgLz5cXFxcbjxzdHJvbmc+PGJpZz7nvJbovpHnr4c8L2JpZz48L3N0cm9uZz5cXFxcbjxiciAvPumakOiXj+WKn+iDvemcgOefpe+8mlxcXFxuPGJyIC8+6ZqQ6JeP5Yqf6IO95piv5LuO5YiX6KGo5LiK5Yig6Zmk5qCH6aKY77yM5pWF5peg5aSN546w5Yqf6IO9XFxcXG48YnIgLz7nnIvlh4bkuobvvIzkuI3nlKjnmoTmiY3ngrnpmpDol49cXFxcbjxiciAvPuimgeWkjeeOsOeahOivneWOu+S/ruaUueaWsOeahE15UGFyc2UuanNvbu+8jOWcqHRpdGxl55qE5pWw57uE6YKj5oyJ5qC85byP5re75Yqg5qCH6aKYXFxcXG48YnIgLz5cXFxcbjxiciAvPlxcXFxuPHN0cm9uZz48YmlnPuWujOe7kzwvYmlnPjxiciAvPjwvc3Ryb25nPlxcXFxuPHA+djMuNDks5bCP55m95pyA5ZCO55qE5YCU5by6LOWwj+eZveWFs+aAgOaooeW8jzwvcD5cXFxcbjxwPuS4gOmUruWunueOsOmFjee9ruWujOavleWNs+WPr+mAmui/h+aUr+aMgemtlOaWreeahOWwj+eoi+W6j+eci+inhumike+8jOWbnuW9kueZveWrluinhumikei/meS4qumcgOaxguacrOi6qzwvcD5cXFxcbjxwPuaOqOiNkOS9v+eUqOmdkuixhixhcHDlvbHop4YuZHA8L3A+XFxcXG48cD7prZTmlq0o5pat5o+S6YGT6ZW/6a2U5pS554mIKeW3suW8g+Wdkei3kei3r++8jOaEn+iwouWOn+S9nOiAheaWreW/teeahOaPkuS7tuino+aekOWPiuacrOWwj+eoi+W6j+aguOW/g+S7o+eggTwvcD5cXFxcbjwvYm9keT5cXFxcbjwvaHRtbD5cXFwifSx7XFxcIm5hbWVcXFwiOlxcXCLmtYvor5XmlbDmja5cXFwiLFxcXCJwYXRoXFxcIjpcXFwiZGVtb0RhdGFcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG4gICAgbGV0IGRlbW9EYXRhID0ge1xcXFxuICAgICAgICDniLHlpYfoibo6WydodHRwczovL3d3dy5pcWl5aS5jb20vdl8xenA3cWdoMjNrZy5odG1sJywnaHR0cHM6Ly93d3cuaXFpeWkuY29tL3ZfMmJjOHRrOHI2dWcuaHRtbCddLFxcXFxuICAgICAgICDkvJjphbc6WydodHRwczovL3YueW91a3UuY29tL3Zfc2hvdy9pZF9YTlRFNE5UZ3hNVFkyTUE9PS5odG1sJywnaHR0cHM6Ly92LnlvdWt1LmNvbS92X3Nob3cvaWRfWE5URTVPRFl4TWpBek5nPT0uaHRtbCddLFxcXFxuICAgICAgICDohb7orq86WydodHRwczovL3YucXEuY29tL3gvY292ZXIvbTQ0MWUzcmpxOWt3cHNjL3AwMDQwZ2ltNGZ6Lmh0bWwnLCdodHRwczovL3YucXEuY29tL3gvY292ZXIvbXpjMDAyMDB4aDkzMTN2L3owMDM5dGJobzdxLmh0bWwnXSxcXFxcbiAgICAgICAg6IqS5p6cOlsnaHR0cHM6Ly93d3cubWd0di5jb20vYi8zNzIwNjEvMTIxOTM1NTguaHRtbCcsJ2h0dHBzOi8vd3d3Lm1ndHYuY29tL2IvMzYzMjg2LzE0Mjk1ODIzLmh0bWwnXSxcXFxcbiAgICAgICAg5ZOU5ZOp5ZOU5ZOpOlsnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL2Jhbmd1bWkvcGxheS9lcDM4MTIxNycsJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9iYW5ndW1pL3BsYXkvZXA0MDgxMjMnLCdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vYmFuZ3VtaS9wbGF5L3NzMzM0MzQnLCdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vdmlkZW8vYXYzMzYzNDg2NjMnXSxcXFxcbiAgICAgICAg5pCc54uQOlsnaHR0cHM6Ly9maWxtLnNvaHUuY29tL2FsYnVtLzk0NTc1ODQuaHRtbCcsJ2h0dHBzOi8vZmlsbS5zb2h1LmNvbS9hbGJ1bS85MTgyNjQ2Lmh0bWwnXSxcXFxcbiAgICAgICAg6KW/55OcOlsnaHR0cHM6Ly93d3cuaXhpZ3VhLmNvbS82NTUxMzMyMTI1NjU0NjQ3MzEwJywnaHR0cHM6Ly93d3cuaXhpZ3VhLmNvbS82Njk5MzU2NzkyOTA1Nzk0MDU1J10sXFxcXG4gICAgICAgIFBQVFY6WydodHRwOi8vdi5wcHR2LmNvbS9zaG93L1RJbmRXc0lvbU5ZNXR4OC5odG1sJywnaHR0cDovL3YucHB0di5jb20vc2hvdy9TQ1E1dGg2RTlES1ZFM3MuaHRtbCddLFxcXFxuICAgICAgICDlkqrlkpU6WydodHRwczovL3d3dy5taWd1dmlkZW8uY29tL21ncy93ZWJzaXRlL3ByZC9kZXRhaWwuaHRtbD9jaWQ9NjMzNTExNzQzJywnaHR0cHM6Ly93d3cubWlndXZpZGVvLmNvbS9tZ3Mvd2Vic2l0ZS9wcmQvZGV0YWlsLmh0bWw/Y2lkPTcxNjI3MDMxOSddLFxcXFxuICAgICAgICDkuZDop4Y6WydodHRwOi8vd3d3LmxlLmNvbS9wdHYvdnBsYXkvNzU4NDMwNTkuaHRtbCcsJ2h0dHA6Ly93d3cubGUuY29tL3B0di92cGxheS8yNDIyMDkwMS5odG1sI3ZpZD0yNDIyMDkwMSddLFxcXFxuICAgICAgICAxOTA1OlsnaHR0cHM6Ly92aXAuMTkwNS5jb20vcGxheS84NzU3NDAuc2h0bWwnLCdodHRwczovL3d3dy4xOTA1LmNvbS92b2QvcGxheS84ODA2NDEuc2h0bWwnXSxcXFxcbiAgICAgICAg6aOO6KGMOlsnaHR0cDovL3d3dy5mdW4udHYvdnBsYXkvZy0zMDQxNDMnLCdodHRwOi8vd3d3LmZ1bi50di92cGxheS9nLTEwMDg5NjMvJ10sXFxcXG4gICAgICAgIOm+meiFvjpbJ0xULTFlYzNmNjc1NGY2ODU4NmVkN2Y5MmMzZTk5NWNmY2E2JywnTFQtZmZmNDdhYmY3ZmYyMmZmYTNkZWY5MDRjNmM5MWUxOTInLCdMVC03Y2NkYTY4NjgzMzI5NzgwYmQ3MjY0YzhmOWVkZDkwZSddLFxcXFxuICAgICAgICDkurrkurrov7c6WydyZW5yZW5taS1hYjkyNGUxMWQyZDY5Mzk3JywncmVucmVubWktOTI2NDBlOGRjNGNhZDgzYSddLFxcXFxuICAgICAgICDkupTmr5I6Wyd3dWR1eXVuLTE2NDk0MzEzMDcwMjEnXSxcXFxcbiAgICAgICAg5aSa5aSaOlsnaHR0cHM6Ly9tM3U4LmNhY2hlLnN1b3lvLmNjL20zdTgvMjAyMjAzLzgvYWFhYmQ5MmRhMjY3NzRjNjg4NTBhMDIzMTUzYzgwZjFhZTZmYTliZS5tM3U4J10sXFxcXG4gICAgICAgIOiejeWFtDpbJ1JvbmdYaW5nVlItNDIxNTY0NTU4MTkzMicsJ1JvbmdYaW5nVlItNDIxNTY0NTU4NzAwMCddLFxcXFxuICAgICAgICDpm6rkuro6Wyd4dWVyZW4tMTY0NjgyMzA3MicsJ3h1ZXJlbi0xNjQ5NDAyNzUzJywneHVlcmVuLTE2NDkxNzUyNTInLCd4dWVyZW4tMTY0OTMwNzc4MCcsJ3h1ZXJlbi0xNjQ4NzgxNDc1J10sXFxcXG4gICAgICAgIOaXi+mjjuS6kTpbJ3hmeS01MjllNjQ1Nzk1M2Q1NDVmJywneGZ5LWI2NTYxNWRhYzQzNzdlZTMnXSxcXFxcbiAgICAgICAg55Ge5Liw6LWE5rqQOlsnaHR0cHM6Ly8xLnJ1aWZlbmdsYi5jb20vcGxheS8xNjQ0OTE0NTk1Lm0zdTgnLCdodHRwczovLzEucnVpZmVuZ2xiLmNvbS9wbGF5LzE2NDIzODk5MDcubTN1OCddLFxcXFxuICAgIH1cXFxcblxcXFxubGV0IGRlZmF1bHRTZXRzID0gIHtcXFxcbiAgICBxeTogJ+S4h+iDveino+aekOKSvycsXFxcXG4gICAgeWs6ICfkuIfog73op6PmnpDikr8nLFxcXFxuICAgIHR4OiAn5LiH6IO96Kej5p6Q4pK/JyxcXFxcbiAgICBtZzogJ+S4h+iDveino+aekOKSvycsXFxcXG4gICAgYmw6ICfkuIfog73op6PmnpDikr8nLFxcXFxuICAgIHNoOiAn5LiH6IO96Kej5p6Q4pK/JyxcXFxcbiAgICB4ZzogJ+S4h+iDveino+aekOKSvycsXFxcXG4gICAgYWw6ICfkuIfog73op6PmnpDikr8nLFxcXFxuICAgIHBwOiAn5LiH6IO96Kej5p6Q4pK/JyxcXFxcbiAgICBtaTogJ+S4h+iDveino+aekOKSvycsXFxcXG4gICAgbGU6ICfkuIfog73op6PmnpDikr8nLFxcXFxuICAgIG90aDogJ+mBk+mVv+S7k+W6k+mAmuWFjScsXFxcXG4gICAgZnVuOiAn5LiH6IO96Kej5p6Q4pK/JyxcXFxcbiAgICBvbmU6J+S4h+iDveino+aekOKSvycsXFxcXG4gICAgbHQ6J+S4h+iDveino+aekOKSvycsXFxcXG4gICAgcnI6J+S4h+iDveino+aekOKSvycsXFxcXG4gICAgd2Q6J+S4h+iDveino+aekOKSvycsXFxcXG4gICAgcWp1OiAn6buY6K6kJyxcXFxcbiAgICBjajogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnXFxcXG59O1xcXFxuXFxcXG5sZXQgZmxvb3JzID0gJ+KRoOKRoeKRouKRo+KRpOKRpeKRpuKRp+KRqOKRqe+8ke+8ku+8k++8lO+8le+8lu+8l++8mO+8me+8kOKSiOKSieKSiuKSi+KSjOKSjeKSjuKSj+KSkCcuc3BsaXQoJycpO1xcXFxubGV0IGVtb2ppcyA9ICcj77iP4oOjfCrvuI/ig6N8MO+4j+KDo3wx77iP4oOjfDLvuI/ig6N8M++4j+KDo3w077iP4oOjfDXvuI/ig6N8Nu+4j+KDo3w377iP4oOjfDjvuI/ig6N8Oe+4j+KDo3zwn4Ww77iPfPCfhbHvuI988J+Nh3zwn42IfPCfjYl88J+Ninzwn42LfPCfjYx88J+NjXzwn42OfPCfjY988J+NkHzwn42RfPCfjZJ88J+Nk3zwn42FfPCfjYZ88J+MvXzwn42EfPCfjLB88J+Nnnzwn42WfPCfjZd88J+NlHzwn42ffPCfjZV88J+Ns3zwn42yfPCfjbF88J+NmHzwn42ZfPCfjZp88J+Nm3zwn42cfPCfjZ188J+NoHzwn42ifPCfjaN88J+NpHzwn42lfPCfjaF88J+Npnzwn42nfPCfjah88J+NqXzwn42qfPCfjoJ88J+NsHzwn42rfPCfjax88J+NrXzwn42ufPCfja988J+NvHzimJV88J+NtXzwn422fPCfjbd88J+NuHzwn425fPCfjbp88J+Nu3zwn420Jy5zcGxpdCgnfCcpO1xcXFxuZmxvb3JzID0gZmxvb3JzLmNvbmNhdChlbW9qaXMpO1xcXFxuJC5leHBvcnRzLmRlbW9EYXRhID0gZGVtb0RhdGE7XFxcXG4kLmV4cG9ydHMuZGVmYXVsdFNldHMgPSBkZWZhdWx0U2V0cztcXFxcbiQuZXhwb3J0cy5mbG9vcnMgPSBmbG9vcnM7XFxcIn0se1xcXCJuYW1lXFxcIjpcXFwi5bel5YW357G7XFxcIixcXFwicGF0aFxcXCI6XFxcInV0aWxzXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxuLy/pmo/mnLrku47liJfooajmir3lj5bkuIDkuKrlhYPntKBcXFxcbmZ1bmN0aW9uIGdldE9uZShpdHMpIHtyZXR1cm4gIGl0c1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqaXRzLmxlbmd0aCldO31cXFxcbi8v5Y676YeN77yIRVM2IFNldO+8iVxcXFxuZnVuY3Rpb24gdW5pcXVlMihhcnJheSl7XFxcXG4gICAgcmV0dXJuIEFycmF5LmZyb20obmV3IFNldChhcnJheSkpO1xcXFxufVxcXFxuLy/ojrflj5bliJfooajkuK3ph43lpI3pg73lgLxcXFxcbmZ1bmN0aW9uIGR1cGxpY2F0ZXMoYXJyKSB7XFxcXG4gICAgbGV0IHJlcz1hcnIuZmlsdGVyKCh4LGspPT57XFxcXG4gICAgICAgIGxldCBhPWsqMSsxO1xcXFxuICAgICAgICBsZXQgaW5kZXg9YXJyLmluZGV4T2YoeCxhKTtcXFxcbiAgICAgICAgaWYoaW5kZXg+LTEpe1xcXFxuICAgICAgICAgICAgcmV0dXJuIHg7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9KVxcXFxuICAgIGxldCByZT1uZXcgU2V0KHJlcyk7XFxcXG4gICAgcmV0dXJuIEFycmF5LmZyb20ocmUpO1xcXFxufVxcXFxuJC5leHBvcnRzLmdldE9uZSA9IGdldE9uZTtcXFxcbiQuZXhwb3J0cy51bmlxdWUyID0gdW5pcXVlMjtcXFxcbiQuZXhwb3J0cy5kdXBsaWNhdGVzID0gZHVwbGljYXRlcztcXFwifSx7XFxcIm5hbWVcXFwiOlxcXCLop6PmnpDnrqHnkIZcXFwiLFxcXCJwYXRoXFxcIjpcXFwianhNYW5hZ2VcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG4gICAgZnVuY3Rpb24ganhNYW5hZ2UoKXtcXFxcbiAgICAgICAgY29uc3Qge2NvbG9yLHNtYWxsfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS91dGlsaXk/cnVsZT3pgZPplb/ku5PlupNQcm9cXFxcXFxcIik7XFxcXG4gICAgICAgIGxldCBkID0gW107XFxcXG4gICAgICAgIGxldCBvcHRpb25zID0gWyfpgInmi6knLCfkv67mlLknLCfliKDpmaQnLCflr7zlh7onXTtcXFxcblxcXFxuICAgICAgICBmb3IobGV0IGkgaW4gb3B0aW9ucyl7XFxcXG4gICAgICAgICAgICBsZXQgb3B0aW9uID0gb3B0aW9uc1tpXTtcXFxcbiAgICAgICAgICAgIGxldCBmbGFnID0gZ2V0VmFyKCdkbi5qeG1fb3B0aW9uJywn6YCJ5oupJyk9PT1vcHRpb24/J/CfkYknOicnO1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTpmbGFnK29wdGlvbixcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG9wdGlvbik9PntcXFxcbiAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdkbi5qeG1fb3B0aW9uJywgb3B0aW9uKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSc7XFxcXG4gICAgICAgICAgICAgICAgfSxvcHRpb24pLFxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbGV0IGp4c1JvdXRlID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015SmlleGkuanNvblxcXFxcXFwiO1xcXFxuICAgICAgICBsZXQgZG1QYXRoID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL2RpYW9tYW8udHh0XFxcXFxcXCI7XFxcXG4gICAgICAgIGxldCBNeUppZXhpID0ge2ppZXhpczpbXX07XFxcXG4gICAgICAgIGxldCBqaWV4aXMgPSB7fTtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIE15SmlleGkgPSBKU09OLnBhcnNlKGZldGNoKGp4c1JvdXRlKSk7XFxcXG4gICAgICAgICAgICBqaWV4aXMgPSBNeUppZXhpLmppZXhpcy5maWx0ZXIoaXQ9Pml0Lm5hbWU9PT1NeUppZXhpLm5vdylbMF07XFxcXG4gICAgICAgIH1jYXRjaCAoZSkge31cXFxcblxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6J+WvvOWFpScsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTonc2Nyb2xsX2J1dHRvbicsXFxcXG4gICAgICAgICAgICB1cmw6JCgnJywn6K+36L6T5YWl5a+85YWl5Y+j5LukJykuaW5wdXQoKE15SmlleGksanhzUm91dGUpPT57XFxcXG4gICAgICAgICAgICAgICAgaWYoL17prZTmlq3op6PmnpDphY3nva5ALio/QGh0dHAvLnRlc3QoaW5wdXQpKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IG5hbWUgPSBpbnB1dC5zcGxpdCgnQCcpWzFdO1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgdXJsID0gaW5wdXQuc3BsaXQoJ0AnKVsyXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJ+ehruWumuimgeWvvOWFpeaWreaPkuino+aekOmFjee9ri0nK25hbWUrJyDlkJc/JykuY29uZmlybSgobmFtZSx1cmwsTXlKaWV4aSxqeHNSb3V0ZSk9PntcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBjb250ZW50ID0gcGFyc2VQYXN0ZSh1cmwpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGhhc0l0ID0gTXlKaWV4aS5qaWV4aXMuZmlsdGVyKGl0PT5pdC5uYW1lPT09bmFtZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihoYXNJdCYmaGFzSXQubGVuZ3RoPjApe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpZCA9IG51bGw7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZm9yKGxldCBqIGluIE15SmlleGkuamlleGlzKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoTXlKaWV4aS5qaWV4aXNbal0ubmFtZSA9PT0gbmFtZSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGo7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZighaWQpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v57Si5byV6ZSZ6K+v5peg5rOV6KaG55uW5a+85YWlOlxcXFxcXFxcbicraWRcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbG9nKCfopobnm5blr7zlhaXkuLvpophpZDonK2lkKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLmppZXhpc1tpZF0gPSBPYmplY3QuYXNzaWduKEpTT04ucGFyc2UoYmFzZTY0RGVjb2RlKGNvbnRlbnQpKSx7J25hbWUnOm5hbWV9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE15SmlleGkuamlleGlzLnB1c2goT2JqZWN0LmFzc2lnbihKU09OLnBhcnNlKGJhc2U2NERlY29kZShjb250ZW50KSkseyduYW1lJzpuYW1lfSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suaIkOWKn+WvvOWFpeino+aekOmFjee9rjpcXFxcXFxcXG4nK25hbWVcXFxcbiAgICAgICAgICAgICAgICAgICAgfSxuYW1lLHVybCxNeUppZXhpLGp4c1JvdXRlKTtcXFxcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aXoOazleivhuWIq+eahOWvvOWFpeWPo+S7pDpcXFxcXFxcXG4nK2lucHV0O1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0sTXlKaWV4aSxqeHNSb3V0ZSksXFxcXG4gICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgIGxldCBpc0F1dG8gPSBNeUppZXhpLmlzQXV0bztcXFxcbiAgICAgICAgbGV0IGF1dG9Nb2RlID0gTXlKaWV4aS5hdXRvTW9kZTtcXFxcbiAgICAgICAgbGV0IHNpbmdsZUJhY2sgPSBNeUppZXhpLnNpbmdsZUJhY2t8fGZhbHNlOyAvL+WQiuavm+aooeW8j+OAguWNleS4que7k+aenOebtOaOpei/lOWbnu+8jOWBnOatouWQjumdoueahFxcXFxuICAgICAgICBsZXQgdGlwcyA9ICfop6PmnpDphY3nva7liJfooag65YWx6K6hOicrY29sb3IoTXlKaWV4aS5qaWV4aXMubGVuZ3RoLCcjZmY3MDAwJykrJ+S4qumFjee9rizoh6rliqjmoaPlvIDlhbM6Jytjb2xvcihpc0F1dG8/J+W8gCc6J+WFsycsJyNmZjcwMDAnKTtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOk15SmlleGkuamlleGlzJiZNeUppZXhpLmppZXhpcy5sZW5ndGg+MD90aXBzOlxcXFxcXFwi56ys5LiA5qyh5Yqg6L2977yM54K55q2k6L+b5Y675Yid5aeL5YyW6Kej5p6Q5YiX6KGoXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTondGV4dF8xJyxcXFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChNeUppZXhpLGp4c1JvdXRlKT0+e1xcXFxuICAgICAgICAgICAgICAgIGlmKE15SmlleGkuamlleGlzJiZNeUppZXhpLmppZXhpcy5sZW5ndGg+MCl7XFxcXG4gICAgICAgICAgICAgICAgICAgIE15SmlleGkuaXNBdXRvID0gIU15SmlleGkuaXNBdXRvO1xcXFxuICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHRpcHMgPSBNeUppZXhpLmlzQXV0bz8n5byAJzon5YWzJztcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suiuvue9ruiHquWKqOaho+aooeW8j+S4ujonK3RpcHNcXFxcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGluaXRTZXQgPSB7J25vdyc6XFxcXFxcXCLpgZPplb/mjqjojZBcXFxcXFxcIiwnamlleGlzJzpbe25hbWU6J+mBk+mVv+aOqOiNkCcscXk6WyfkuIfog73op6PmnpDikr8nXSx5azpbJ+S4h+iDveino+aekOKSvyddLHR4Olsn5LiH6IO96Kej5p6Q4pK/J10sbWc6WyfkuIfog73op6PmnpDikr8nXSxibDpbJ+S4h+iDveino+aekOKSvyddLHNoOlsn5LiH6IO96Kej5p6Q4pK/J10seGc6WyfkuIfog73op6PmnpDikr8nXSxwcDpbJ+S4h+iDveino+aekOKSvyddLG1pOlsn5LiH6IO96Kej5p6Q4pK/J10sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGU6WyfkuIfog73op6PmnpDikr8nXSxmdW46WyfkuIfog73op6PmnpDikr8nXSxvbmU6WyfkuIfog73op6PmnpDikr8nXSxsdDpbJ+S4h+iDveino+aekOKSvyddLHJyOlsn5LiH6IO96Kej5p6Q4pK/J10sd2Q6WyfkuIfog73op6PmnpDikr8nXX1dfTtcXFxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KGluaXRTZXQpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mlq3mj5Lop6PmnpDphY3nva7lt7LliJ3lp4vljJYnXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSxNeUppZXhpLGp4c1JvdXRlKVxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgbGV0IGF1dG9Nb2RlVGlwcyA9IGF1dG9Nb2RlPT09J+mAn+W6puS8mOWFiCc/J+mAn+W6puS8mOWFiCc6J+mhuuW6j+S8mOWFiCc7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTpzbWFsbChcXFxcXFxcIuWkh+iDjuWuoOW5uOaWueahiDpcXFxcXFxcIikrY29sb3IoYXV0b01vZGVUaXBzLCcjZmY3MDAwJyksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTondGV4dF8yJyxcXFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChNeUppZXhpLGp4c1JvdXRlKT0+e1xcXFxuICAgICAgICAgICAgICAgIE15SmlleGkuYXV0b01vZGUgPSBNeUppZXhpLmF1dG9Nb2RlPT09J+mAn+W6puS8mOWFiCc/J+mhuuW6j+S8mOWFiCc6J+mAn+W6puS8mOWFiCc7XFxcXG4gICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey6K6+572u5aSH6IOO5a6g5bm45pa55qGI5Li6OicrTXlKaWV4aS5hdXRvTW9kZVxcXFxuICAgICAgICAgICAgfSxNeUppZXhpLGp4c1JvdXRlKVxcXFxuICAgICAgICB9KTtcXFxcblxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6Y29sb3IoXFxcXFxcXCLmgaLlpI3lh7rljoLorr7nva5cXFxcXFxcIiwnI2ZmNzAwMCcpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6J3RleHRfMicsXFxcXG4gICAgICAgICAgICB1cmw6JChcXFxcXFxcIuWmguaenOS9oOeahOino+aekOeuoeeQhuaXoOazleato+W4uOeUqOS6hu+8jOatpOaWueazleWPr+S7peaVkeeglu+8jOehruiupOaBouWkjT9cXFxcXFxcIikuY29uZmlybSgoanhzUm91dGUpPT57XFxcXG4gICAgICAgICAgICAgICAgbGV0IGluaXRTZXQgPSB7J25vdyc6XFxcXFxcXCLpgZPplb/mjqjojZBcXFxcXFxcIiwnamlleGlzJzpbe25hbWU6J+mBk+mVv+aOqOiNkCcscXk6WyfkuIfog73op6PmnpDikr8nXSx5azpbJ+S4h+iDveino+aekOKSvyddLHR4Olsn5LiH6IO96Kej5p6Q4pK/J10sbWc6WyfkuIfog73op6PmnpDikr8nXSxibDpbJ+S4h+iDveino+aekOKSvyddLHNoOlsn5LiH6IO96Kej5p6Q4pK/J10seGc6WyfkuIfog73op6PmnpDikr8nXSxwcDpbJ+S4h+iDveino+aekOKSvyddLG1pOlsn5LiH6IO96Kej5p6Q4pK/J10sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZTpbJ+S4h+iDveino+aekOKSvyddLGZ1bjpbJ+S4h+iDveino+aekOKSvyddLG9uZTpbJ+S4h+iDveino+aekOKSvyddLGx0Olsn5LiH6IO96Kej5p6Q4pK/J10scnI6WyfkuIfog73op6PmnpDikr8nXSx3ZDpbJ+S4h+iDveino+aekOKSvyddfV19O1xcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShpbml0U2V0KSk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWreaPkuino+aekOmFjee9ruW3sumHjee9ruS4uuWHuuWOguiuvue9ridcXFxcbiAgICAgICAgICAgIH0sanhzUm91dGUpXFxcXG4gICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgIGxldCBjYWNoZVZpZGVvU3dpdGNoID0gZ2V0VmFyKCdkcC5jYWNoZVZpZGVvJywndHJ1ZScpPT09J3RydWUnPyflvIAnOiflhbMnO1xcXFxuICAgICAgICBsZXQganhUaW1lb3V0ID0gZ2V0VmFyKCdkcC5qeFRpbWVvdXQnLCc3MDAwJyk7XFxcXG4gICAgICAgIGxldCBjb2xfdHlwZTIgPSBhdXRvTW9kZT09PSfpobrluo/kvJjlhYgnPyd0ZXh0XzMnOid0ZXh0XzInO1xcXFxuICAgICAgICBsZXQgc2luZ2xlQmFja1RpcHMgPSBzaW5nbGVCYWNrPyflvIAnOiflhbMnO1xcXFxuICAgICAgICBpZihhdXRvTW9kZT09PSfpobrluo/kvJjlhYgnKXtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6c21hbGwoJ+WQiuavm+aooeW8jzonKStjb2xvcihzaW5nbGVCYWNrVGlwcywnI2ZmNzAwMCcpLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOmNvbF90eXBlMixcXFxcbiAgICAgICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoTXlKaWV4aSxqeHNSb3V0ZSk9PntcXFxcbiAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5zaW5nbGVCYWNrID0gIShNeUppZXhpLnNpbmdsZUJhY2t8fGZhbHNlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7Lorr7nva7lkIrmr5vmqKHlvI/lvIDlhbPkuLo6JysoTXlKaWV4aS5zaW5nbGVCYWNrPyflvIAnOiflhbMnKVxcXFxuICAgICAgICAgICAgICAgIH0sTXlKaWV4aSxqeHNSb3V0ZSlcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTpzbWFsbCgn5aSa57q/6Lev57yT5a2YOicpK2NvbG9yKGNhY2hlVmlkZW9Td2l0Y2gsJyNmZjcwMDAnKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOmNvbF90eXBlMixcXFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChjYWNoZVZpZGVvU3dpdGNoKT0+e1xcXFxuICAgICAgICAgICAgICAgIGlmKGNhY2hlVmlkZW9Td2l0Y2g9PT0n5byAJyl7XFxcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcignZHAuY2FjaGVWaWRlbycsJ2ZhbHNlJyk7XFxcXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcignZHAuY2FjaGVWaWRlbycsJ3RydWUnKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgICAgICAgICAgfSxjYWNoZVZpZGVvU3dpdGNoKVxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOnNtYWxsKCfop6PmnpDotoXml7Y6JykrY29sb3IoanhUaW1lb3V0LCcjZmY3MDAwJyksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTpjb2xfdHlwZTIsXFxcXG4gICAgICAgICAgICB1cmw6JChqeFRpbWVvdXQsJ+ivt+iuvue9rumtlOaWreino+aekOi2heaXtizlv4XpobvkuLrmlbTmlbAnKS5pbnB1dCgoKT0+e1xcXFxuICAgICAgICAgICAgICAgIGlmKCFwYXJzZUludChpbnB1dCkpe1xcXFxuICAgICAgICAgICAgICAgICAgICBpbnB1dCA9IDcwMDA7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIHB1dFZhcignZHAuanhUaW1lb3V0JyxpbnB1dCk7XFxcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suiuvue9ruS4ujonK3BhcnNlSW50KGlucHV0KVxcXFxuICAgICAgICAgICAgfSxqeFRpbWVvdXQpXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBpZihhdXRvTW9kZSYmc2luZ2xlQmFjayl7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBjb2xvcign5omT5byA57yW6L6R5ZCK5q+b6L+H5ruk5paH5Lu2JywnIzEzNzlDQicpLFxcXFxuICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoZG1QYXRoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBkZWZfZG1zID0gWydodHRwczovL3ZkMy5iZHN0YXRpYy5jb20vbWRhLWtpOXVncTU0MzBiaHh5czgvdjEtY2FlLzEwODBwL21kYS1raTl1Z3E1NDMwYmh4eXM4Lm1wNCddO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZighZmlsZUV4aXN0KGRtUGF0aCkpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGRtUGF0aCwnLy/kuIDooYzkuIDkuKrpk77mjqUs5Y+v5rOo6YeK44CCXFxcXFxcXFxuJytkZWZfZG1zLmpvaW4oJ1xcXFxcXFxcbicpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2VkaXRGaWxlOi8vJytkbVBhdGg7XFxcXG4gICAgICAgICAgICAgICAgfSxkbVBhdGgpLFxcXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICB9XFxcXG5cXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBjb2xvcign5omT5byA57yW6L6R6Kej5p6Q5paH5Lu2JywnIzEzNzlDQicpLFxcXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChqeHNSb3V0ZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAnZWRpdEZpbGU6Ly8nK2p4c1JvdXRlO1xcXFxuICAgICAgICAgICAgfSxqeHNSb3V0ZSksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG4gICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgIGZvcihsZXQgaSBpbiBNeUppZXhpLmppZXhpcyl7XFxcXG4gICAgICAgICAgICBsZXQgbm93SnggPSBNeUppZXhpLmppZXhpc1tpXTtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6TXlKaWV4aS5ub3c9PT1ub3dKeC5uYW1lPyfwn5GJJytub3dKeC5uYW1lOm5vd0p4Lm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6J2ZsZXhfYnV0dG9uJyxcXFxcbiAgICAgICAgICAgICAgICBleHRyYTp7XFxcXG4gICAgICAgICAgICAgICAgICAgIG5vd0p4Om5vd0p4LFxcXFxuICAgICAgICAgICAgICAgICAgICBNeUppZXhpOk15SmlleGksXFxcXG4gICAgICAgICAgICAgICAgICAgIGp4c1JvdXRlOmp4c1JvdXRlXFxcXG4gICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobm93SngsTXlKaWV4aSxpLGp4c1JvdXRlKT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICBsZXQgb3B0aW9uID0gZ2V0VmFyKCdkbi5qeG1fb3B0aW9uJywn6YCJ5oupJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAob3B0aW9uKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WvvOWHuic6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5vd0p4Q29kZSA9IGJhc2U2NEVuY29kZShKU09OLnN0cmluZ2lmeShub3dKeCkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCB1cmwgPSBzaGFyZVBhc3RlKG5vd0p4Q29kZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGNvZGUgPSAn6a2U5pat6Kej5p6Q6YWN572uQCcrbm93SngubmFtZSsnQCcrdXJsO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvcHkoY29kZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWvvOWHuuS4uuS6keWPo+S7pOW5tuWkjeWItuWIsOWJquWIh+advydcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgJ+S/ruaUuSc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gaWYobm93SngubmFtZT09PU15SmlleGkubm93KXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmV0dXJuICd0b2FzdDovL+atpOino+aekOmFjee9ruW9k+WJjeato+WcqOS9v+eUqOS4re+8jOS4jeWFgeiuuOS/ruaUuSEnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIGVsc2V7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL2p4RWRpdD9ydWxlPU15RmllbGThtLDigb8nXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL2p4RWRpdD9ydWxlPU15RmllbGThtLDigb8nXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjYXNlICfliKDpmaQnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCfnoa7orqTliKDpmaTop6PmnpDphY3nva46Jytub3dKeC5uYW1lKyc/JykuY29uZmlybSgobm93SngsTXlKaWV4aSxpLGp4c1JvdXRlKT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihub3dKeC5uYW1lPT09TXlKaWV4aS5ub3cpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+atpOino+aekOmFjee9ruW9k+WJjeato+WcqOS9v+eUqOS4re+8jOS4jeWFgeiuuOWIoOmZpCEnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXMuc3BsaWNlKGksMSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5Yig6ZmkJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sbm93SngsTXlKaWV4aSxpLGp4c1JvdXRlKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNeUppZXhpLm5vdz1ub3dKeC5uYW1lO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S9oOmAieaLqeS6hicrbm93SngubmFtZSsn5L2c5Li65b2T5YmN6Kej5p6Q6YWN572uJztcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0sbm93SngsTXlKaWV4aSxpLGp4c1JvdXRlKSxcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHNldFJlc3VsdChkKTtcXFxcbiAgICB9XFxcXG4kLmV4cG9ydHMuanhNYW5hZ2U9anhNYW5hZ2U7XFxcIn0se1xcXCJuYW1lXFxcIjpcXFwi6Kej5p6Q57yW6L6RXFxcIixcXFwicGF0aFxcXCI6XFxcImp4RWRpdFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbmxldCB7bm93SngsTXlKaWV4aSxqeHNSb3V0ZX0gPSBNWV9QQVJBTVM7XFxcXG5sZXQgbm93SnhUID0gSlNPTi5wYXJzZShnZXRWYXIoJ2RuLm5vd0p4Jyl8fCd7fScpO1xcXFxubm93SnggPSBub3dKeFQubmFtZT9ub3dKeFQ6bm93Sng7XFxcXG5hZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCk9PntcXFxcbiAgICBjbGVhclZhcihcXFxcXFxcImRuLmp4X3RpdGxlc1xcXFxcXFwiKTtcXFxcbiAgICBjbGVhclZhcihcXFxcXFxcImRuLm5vd0p4XFxcXFxcXCIpO1xcXFxuICAgIGNsZWFyVmFyKFxcXFxcXFwiZG4uanhtX25hbWVcXFxcXFxcIik7XFxcXG59KSk7XFxcXG5sZXQgaWQgPSBudWxsO1xcXFxuZm9yKGxldCBqIGluIE15SmlleGkuamlleGlzKXtcXFxcbiAgICBpZihNeUppZXhpLmppZXhpc1tqXS5uYW1lID09PSBub3dKeC5uYW1lKXtcXFxcbiAgICAgICAgaWQgPSBqO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICB9XFxcXG59XFxcXG5sZXQgZCA9IFtdO1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogJ+mFjee9ruWQjeensCcsXFxcXG4gICAgZGVzYzogXFxcXFxcXCLop6PmnpDphY3nva7lkI3np7As5aaC6YGT6ZW/5o6o6I2QXFxcXFxcXCIsXFxcXG4gICAgZXh0cmE6IHtcXFxcbiAgICAgICAgb25DaGFuZ2U6IFxcXFxcXFwicHV0VmFyKCdkbi5qeG1fbmFtZScsaW5wdXQpXFxcXFxcXCIsXFxcXG4gICAgICAgIHRpdGxlVmlzaWJsZTogdHJ1ZSxcXFxcbiAgICAgICAgZGVmYXVsdFZhbHVlOmdldFZhcignZG4uanhtX25hbWUnLCcnKXx8bm93SngubmFtZVxcXFxuICAgIH0sXFxcXG4gICAgY29sX3R5cGU6J2lucHV0J1xcXFxufSk7XFxcXG4vLyBsZXQgb3B0aW9ucyA9IFsn6YCJ5oupJywn5paw5aKeJywn5Yig6ZmkJywn5om56YeP5Yig6ZmkJywn56e75YqoJ107XFxcXG5sZXQgb3B0aW9ucyA9IFsn5paw5aKeJywn5Yig6ZmkJywn56e75YqoJ107XFxcXG5cXFxcbmZvcihsZXQgaSBpbiBvcHRpb25zKXtcXFxcbiAgICBsZXQgb3B0aW9uID0gb3B0aW9uc1tpXTtcXFxcbiAgICBsZXQgZmxhZyA9IGdldFZhcignZG4uanhtX3dyaXRlTW9kZScsJ+aWsOWinicpPT09b3B0aW9uPyfwn5GJJzonJztcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTpmbGFnK29wdGlvbixcXFxcbiAgICAgICAgLy8gY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcXFxuICAgICAgICBjb2xfdHlwZTonZmxleF9idXR0b24nLFxcXFxuICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgob3B0aW9uKT0+e1xcXFxuICAgICAgICAgICAgcHV0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywgb3B0aW9uKTtcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5JztcXFxcbiAgICAgICAgfSxvcHRpb24pLFxcXFxuICAgIH0pO1xcXFxufVxcXFxuZC5wdXNoKHtcXFxcbiAgICAvLyBjb2xfdHlwZTonbGluZScsXFxcXG4gICAgY29sX3R5cGU6J2JsYW5rX2Jsb2NrJ1xcXFxufSk7XFxcXG4vL+iOt+WPluaWreaPkuWIl+ihqFxcXFxuaWYoIWdldFZhcihcXFxcXFxcImRuLmp4X3RpdGxlc1xcXFxcXFwiKSl7XFxcXG4gICAgbGV0IHRpdGxlQXJyID0gW10sIHVybEFyciA9IFtdO1xcXFxuICAgIHZhciBqc29uPXt0aXRsZTpbXSxjb2Rlczp7fX07XFxcXG4gICAgbGV0IHNldEZpbGUgPSByZXF1ZXN0KCdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicpO1xcXFxuICAgIHRyeSB7XFxcXG4gICAgICAgIGV2YWwoJ2pzb249JytzZXRGaWxlKTtcXFxcbiAgICB9Y2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgbG9nKCdKc29u6Kej5p6Q5Y+R55Sf5LqG6ZSZ6K+vOicrZS5tZXNzYWdlKTtcXFxcbiAgICB9XFxcXG4gICAgdGl0bGVBcnIgPSBqc29uLnRpdGxlO1xcXFxuICAgIHRpdGxlQXJyLmZvckVhY2goKGl0KSA9PiB7XFxcXG4gICAgICAgIHVybEFyci5wdXNoKGpzb24uY29kZXNbaXRdKTtcXFxcbiAgICB9KTtcXFxcbiAgICBwdXRWYXIoJ2RuLmp4X3RpdGxlcycsSlNPTi5zdHJpbmdpZnkodGl0bGVBcnIpKTtcXFxcbn1cXFxcblxcXFxubGV0IHRpdGxlcyA9IEpTT04ucGFyc2UoZ2V0VmFyKCdkbi5qeF90aXRsZXMnKXx8J1tdJyk7XFxcXG5sZXQgdGl0bGVEaWMgPSB7XFxcXG4gICAgYmw6J+WTlOWTqeWTlOWTqScsZnVuOifpo47ooYwnLGxlOifkuZDop4YnLG1nOifoipLmnpwnLG1pOiflkqrlkpUnLHBwOidQUFRWJyxxeTon54ix5aWH6Im6JyxzaDon5pCc54uQJyxcXFxcbiAgICB0eDon6IW+6K6vJyx4Zzon6KW/55OcJyx5azon5LyY6YW3JyxvbmU6JzE5MDUnLGx0Oifpvpnohb4nLHJyOifkurrkurrov7cnLHdkOifkupTmr5InLG90aDon5YW25LuWJ1xcXFxufVxcXFxubGV0IHRpdGxlT3JkZXIgPSB7XFxcXG4gICAgcXk6MSx5azoyLHR4OjMsbWc6NCxibDo1LHNoOjYseGc6NyxwcDo4LG1pOjksbGU6MTAsb25lOjExLGZ1bjoxMixsdDoxMyxycjoxNCx3ZDoxNSxvdGg6MTYsXFxcXG59O1xcXFxuXFxcXG5mdW5jdGlvbiBjb21wYXJlT2QodGl0bGVPcmRlcil7XFxcXG4gICAgcmV0dXJuIGZ1bmN0aW9uIChhLCBiKXtcXFxcbiAgICAgICAgbGV0IHggPSB0aXRsZU9yZGVyW2FdO1xcXFxuICAgICAgICBsZXQgeSA9IHRpdGxlT3JkZXJbYl07XFxcXG4gICAgICAgIHJldHVybiB4LXk7XFxcXG4gICAgfVxcXFxufVxcXFxuLy8tLS0tLS0tLS0tLS0tLS0tLVxcXFxuLy8gbGV0IGpkcyA9IE9iamVjdC5rZXlzKG5vd0p4KS5maWx0ZXIoaXQ9Pml0IT09J25hbWUnJiZpdCE9PSdvdGgnKTtcXFxcbmxldCBmbGFncyA9IE9iamVjdC5rZXlzKHRpdGxlT3JkZXIpO1xcXFxubGV0IGpkcyA9IE9iamVjdC5rZXlzKG5vd0p4KS5maWx0ZXIoaXQ9Pml0IT09J25hbWUnJiZmbGFncy5pbmNsdWRlcyhpdCkpO1xcXFxuLy9sb2coamRzKTtcXFxcbmZvcihsZXQgayBvZiBmbGFncyl7XFxcXG4gICAgaWYoIWpkcy5pbmNsdWRlcyhrKSl7XFxcXG4gICAgICAgIGpkcy5wdXNoKGspXFxcXG4gICAgfVxcXFxufVxcXFxuamRzID0gamRzLnNvcnQoY29tcGFyZU9kKHRpdGxlT3JkZXIpKTtcXFxcbmZvcihsZXQgaiBpbiBqZHMpe1xcXFxuICAgIGxldCBqeHMgPSBub3dKeFtqZHNbal1dfHxbXTtcXFxcbiAgICBsZXQgdGl0bGUgPSBqZHNbal07XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6dGl0bGVEaWNbdGl0bGVdfHx0aXRsZSxcXFxcbiAgICAgICAgY29sX3R5cGU6J3Njcm9sbF9idXR0b24nLFxcXFxuICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodGl0bGVzLHRpdGxlLGp4cyxqeHNSb3V0ZSxNeUppZXhpLG5vd0p4KT0+e1xcXFxuICAgICAgICAgICAgdmFyIGpzb249e3RpdGxlOltdLGNvZGVzOnt9fTtcXFxcbiAgICAgICAgICAgIGxldCBzZXRGaWxlID0gcmVxdWVzdCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nKTtcXFxcbiAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgZXZhbCgnanNvbj0nK3NldEZpbGUpO1xcXFxuICAgICAgICAgICAgfWNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgbG9nKCdKc29u6Kej5p6Q5Y+R55Sf5LqG6ZSZ6K+vOicrZS5tZXNzYWdlKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGlmKGdldFZhcignZG4uanhtX3dyaXRlTW9kZScsJ+aWsOWinicpPT09J+aWsOWinicpe1xcXFxuICAgICAgICAgICAgICAgIGxldCBzZWxfdGl0bGUgPSB0aXRsZXMuZmlsdGVyKGl0PT4hanhzLmluY2x1ZGVzKGl0KSk7XFxcXG4gICAgICAgICAgICAgICAgc2VsX3RpdGxlID0gc2VsX3RpdGxlLm1hcCgoaXQpPT57XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBmbGFnID0gJ+KAmOKAmOKTiuKAmeKAmSc7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmKHR5cGVvZihqc29uLmNvZGVzW2l0XSk9PT0nZnVuY3Rpb24nKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgPSAn4oCc4oCc4pK/4oCd4oCdJztcXFxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYodHlwZW9mKGpzb24uY29kZXNbaXRdKT09PSd1bmRlZmluZWQnKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZsYWcgPSAnJztcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmxhZytpdFxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAkKHNlbF90aXRsZSwyKS5zZWxlY3QoKE15SmlleGksanhzLG5vd0p4LHRpdGxlLGp4c1JvdXRlKT0+e1xcXFxuICAgICAgICAgICAgICAgICAgICBpbnB1dCA9IGlucHV0LnJlcGxhY2UoL+KAmOKAmOKTiuKAmeKAmXzigJzigJzikr/igJ3igJ0vZywnJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCBpZCA9IG51bGw7XFxcXG4gICAgICAgICAgICAgICAgICAgIGZvcihsZXQgaiBpbiBNeUppZXhpLmppZXhpcyl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihNeUppZXhpLmppZXhpc1tqXS5uYW1lID09PSBub3dKeC5uYW1lKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZCA9IGo7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgaWYoIWlkKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ntKLlvJXplJnor6/ml6Dms5Xkv53lrZg6XFxcXFxcXFxuJytpZFxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIGp4cy5wdXNoKGlucHV0KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbG9nKGp4cyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIG5vd0p4W3RpdGxlXSA9IGp4cztcXFxcbiAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdID0gbm93Sng7XFxcXG4gICAgICAgICAgICAgICAgICAgIHB1dFZhcignZG4ubm93SngnLEpTT04uc3RyaW5naWZ5KG5vd0p4KSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgICAgICAgICAgfSxNeUppZXhpLGp4cyxub3dKeCx0aXRsZSxqeHNSb3V0ZSk7XFxcXG4gICAgICAgICAgICB9ZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LHRpdGxlcyx0aXRsZSxqeHMsanhzUm91dGUsTXlKaWV4aSxub3dKeClcXFxcbiAgICB9KTtcXFxcbiAgICBmb3IobGV0IGsgaW4ganhzKXtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOmp4c1trXSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOidzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0aXRsZXMsdGl0bGUsanhzLGp4c1JvdXRlLE15SmlleGksbm93Sngsbmp4LGlkLGssbWF4KT0+e1xcXFxuICAgICAgICAgICAgICAgIHN3aXRjaCAoZ2V0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywn5paw5aKeJykpe1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfliKDpmaQnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgQXJyYXkucHJvdG90eXBlLnJlbW92ZSA9IGZ1bmN0aW9uKHZhbCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBpbmRleCA9IHRoaXMuaW5kZXhPZih2YWwpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3BsaWNlKGluZGV4LCAxKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9O1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAganhzLnJlbW92ZShuangpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbm93SnhbdGl0bGVdID0ganhzO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdID0gbm93Sng7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoJ2RuLm5vd0p4JyxKU09OLnN0cmluZ2lmeShub3dKeCkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLEpTT04uc3RyaW5naWZ5KE15SmlleGkpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfnp7vliqgnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoaywn56e75Yqo5Yiw57Si5byV5aSa5bCRPycpLmlucHV0KChrLG1heCxqeHMsbm93SngsTXlKaWV4aSxpZCx0aXRsZSxqeHNSb3V0ZSk9PntcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiBNb3ZlKGFyciwgZnJvbUluZGV4LCB0b0luZGV4KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBlbGVtZW50ID0gYXJyW2Zyb21JbmRleF07XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyci5zcGxpY2UoZnJvbUluZGV4LCAxKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZSh0b0luZGV4LCAwLCBlbGVtZW50KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYocGFyc2VJbnQoaW5wdXQpPT09ayl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/llaXkuZ/msqHlgZonXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYocGFyc2VJbnQoaW5wdXQpPm1heC0xfHxwYXJzZUludChpbnB1dCk8LTEpe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L2g5pyA5aSn56e75Yqo6IyD5Zu0MC0nK3BhcnNlSW50KG1heC0xKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gbGV0IG5ld0FyID0ganhzLnNwbGljZShrLCAxKTsgLy8g5Yig5o6JXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8ganhzLnVuc2hpZnQobmV3QXJbMF0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIE1vdmUoanhzLGsscGFyc2VJbnQoaW5wdXQpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBub3dKeFt0aXRsZV0gPSBqeHM7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdID0gbm93Sng7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0VmFyKCdkbi5ub3dKeCcsSlNPTi5zdHJpbmdpZnkobm93SngpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3cml0ZUZpbGUoanhzUm91dGUsSlNPTi5zdHJpbmdpZnkoTXlKaWV4aSkpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sayxtYXgsanhzLG5vd0p4LE15SmlleGksaWQsdGl0bGUsanhzUm91dGUpXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5q2k5YWD57Sg5LiN5pSv5oyB6L+b6KGMOicrZ2V0VmFyKCdkbi5qeG1fd3JpdGVNb2RlJywn5paw5aKeJylcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9LHRpdGxlcyx0aXRsZSxqeHMsanhzUm91dGUsTXlKaWV4aSxub3dKeCxqeHNba10saWQsayxqeHMubGVuZ3RoKVxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgLy8gY29sX3R5cGU6J2xpbmUnLFxcXFxuICAgICAgICBjb2xfdHlwZTonYmxhbmtfYmxvY2snXFxcXG4gICAgfSlcXFxcbn1cXFxcbmQucHVzaCh7XFxcXG4gICAgY29sX3R5cGU6J2xpbmUnLFxcXFxufSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOifkv53lrZgnLFxcXFxuICAgIGNvbF90eXBlOid0ZXh0X2NlbnRlcl8xJyxcXFxcbiAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoTXlKaWV4aSxpZCxqeHNSb3V0ZSk9PntcXFxcbiAgICAgICAgaWYoZ2V0VmFyKCdkbi5qeG1fbmFtZScsJycpIT09TXlKaWV4aS5qaWV4aXNbaWRdLm5hbWUpe1xcXFxuICAgICAgICAgICAgaWZIYXMgPSBNeUppZXhpLmppZXhpcy5maWx0ZXIoaXQ9Pml0Lm5hbWU9PT1nZXRWYXIoJ2RuLmp4bV9uYW1lJywnJykpLmxlbmd0aD4wO1xcXFxuICAgICAgICAgICAgaWYoaWZIYXMpe1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lvoXkv67mlLnnmoTlkI3np7Dph43lpI0s5LiN5YWB6K645L+d5a2YJ1xcXFxuICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgTXlKaWV4aS5qaWV4aXNbaWRdLm5hbWUgPSAgZ2V0VmFyKCdkbi5qeG1fbmFtZScsJycpO1xcXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSxKU09OLnN0cmluZ2lmeShNeUppZXhpKSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgYmFjayh0cnVlKTtcXFxcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suS/neWtmCdcXFxcbiAgICB9LE15SmlleGksaWQsanhzUm91dGUpXFxcXG59KTtcXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcIm5hbWVcXFwiOlxcXCLlsI/nmb3mqKHlvI9cXFwiLFxcXCJwYXRoXFxcIjpcXFwic21hbGxXaGl0ZVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnNldFBhZ2VUaXRsZSgn6YGT6ZW/57uZ5bCP55m955qE5YWz54ixJyk7XFxcXG5jb25zdCB7Y29sb3IsIHNtYWxsLGFwaX0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvdXRpbGl5P3J1bGU96YGT6ZW/5LuT5bqTUHJvXFxcXFxcXCIpO1xcXFxubGV0IGZpbGVSb290ID0gYXBpLmhvc3QrJy9oaWtlcnVsZS96eXdfZGF0YS8nO1xcXFxuLy8gbG9nKGZpbGVSb290KTtcXFxcbmxldCBkID0gW107XFxcXG52YXIgdGhlbWVSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVRoZW1lLmpzb25cXFxcXFxcIjtcXFxcbnZhciB0aGVtZU9ubGluZSA9IGZpbGVSb290KycxMSc7XFxcXG52YXIgb2xkUm91dGUgPSBcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uXFxcXFxcXCI7XFxcXG52YXIgb2xkT25saW5lID0gZmlsZVJvb3QrJzEyJztcXFxcbnZhciBuZXdSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb25cXFxcXFxcIjtcXFxcbnZhciBuZXdPbmxpbmUgPSBmaWxlUm9vdCsnMTMnO1xcXFxudmFyIGp4c1JvdXRlID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL015SmlleGkuanNvblxcXFxcXFwiO1xcXFxudmFyIGp4T25saW5lID0gZmlsZVJvb3QrJzE0JztcXFxcbnZhciBkbU9ubGluZSA9IGZpbGVSb290KyczMCc7XFxcXG52YXIgY2pjYWNoZSA9ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJztcXFxcbnZhciB4NWNhY2hlID0gJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uaHRtbCc7XFxcXG52YXIgZG1QYXRoID0gXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL2RpYW9tYW8udHh0XFxcXFxcXCI7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOnNtYWxsKCfkvaDlpb0s5bCP55m9LOWNs+S9v+WVpeS5n+S4jeS8mizkuZ/lj6/ku6XnnIvmmI7nmb3kuIvpnaLnmoTlrZflkKc/JyksXFxcXG4gICAgZGVzYzon5aaC5p6c6L+Y5piv5LiN5LyaLOivt+WIoOS7peawuOayuyzlkYrovp7kuI3osKInLFxcXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcXFxuICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpPT57XFxcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/mja7or7TkvaDkuI3mnI3msJQs5LiN5om/6K6k6Ieq5bex5piv5bCP55m9P1xcXFxcXFxcbueCueaIkeWPquaYr+S4uuS6huWuo+azhOS4gOS4i+S9oOeahOaEpOaAkj/llaXkuZ/liKvor7TkuoYs5LiL5Y675pCeISdcXFxcbiAgICB9KVxcXFxufSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOnNtYWxsKCfljZXpobnop6PmnpDpgInmi6nnlYzpnaLkuLvpopjmmK/ku4DkuYg/JykrY29sb3IoJ+S4jeefpemBkyzmnaXkuIDku73pgZPplb/nmoQnLCcjNUZCODc4JyksXFxcXG4gICAgZGVzYzon6Ieq5Yqo5ouJ5Y+W6YGT6ZW/55qE5Li76aKY6YWN572u5Lul5Y+K572R6aG15o+S5Lu25ZKM6Z2Z5oCB6aG16Z2iJyxcXFxcbiAgICBjb2xfdHlwZTondGV4dF8xJyxcXFxcbiAgICB1cmw6JCgn56Gu6K6k5ZCXP+WmguaenOS9oOS4jeaYr+Wwj+eZve+8jOaAu+ivpeS8muaPkOWJjeWkh+S7veiHquW3seS4u+mimOeahOWQpyFcXFxcXFxcXG4nK3RoZW1lUm91dGUpLmNvbmZpcm0oKGNqY2FjaGUseDVjYWNoZSx0aGVtZVJvdXRlLHRoZW1lT25saW5lKT0+e1xcXFxuICAgICAgICBsZXQgdGhlbWVDb2RlID0gZmV0Y2godGhlbWVPbmxpbmUpO1xcXFxuICAgICAgICBpZighL25vd190aGVtZS8udGVzdCh0aGVtZUNvZGUpKXtcXFxcbiAgICAgICAgICAgIGxvZyh0aGVtZUNvZGUpO1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+Wksei0pSHkuI7pgZPplb/mnI3liqHlmajpgJrorq/plJnor68s5Lyw6K6h5piv572R57uc5Y2h5LqGJ1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxldCBjakZyb20gPSBcXFxcXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5qcz9ydWxlPU15RmllbGThtLDigb9cXFxcXFxcIjtcXFxcbiAgICAgICAgbGV0IHg1RnJvbSA9IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmh0bWw/cnVsZT1NeUZpZWxk4bSw4oG/XFxcXFxcXCI7XFxcXG4gICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICBsZXQgY2pGaWxlID0gSlNPTi5wYXJzZShmZXRjaChjakZyb20pKS5ydWxlO1xcXFxuICAgICAgICAgICAgbGV0IHg1RmlsZSA9IEpTT04ucGFyc2UoZmV0Y2goeDVGcm9tKSkucnVsZTtcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShjamNhY2hlLCBjakZpbGUpO1xcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKHg1Y2FjaGUsIHg1RmlsZSk7XFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSwgdGhlbWVDb2RlKTtcXFxcbiAgICAgICAgICAgIGNsZWFyVmFyKFxcXFxcXFwianhPbGRWXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgY2xlYXJWYXIoXFxcXFxcXCJqeE5ld1ZcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5Li76aKY5bey5oiQ5Yqf5bqU55SoJ1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGNhdGNoKGUpe1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S4u+mimOW6lOeUqOWksei0pVxcXFxcXFxcbuacquacn+acm+eahOmUmeivrzonK2UubWVzc2FnZTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sY2pjYWNoZSx4NWNhY2hlLHRoZW1lUm91dGUsdGhlbWVPbmxpbmUpXFxcXG59KTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6c21hbGwoJ+aWreaPkuino+aekOWPium7mOiupOWIl+ihqOaYr+S7gOS5iD8nKStjb2xvcign5LiN55+l6YGTLOadpeS4gOS7vemBk+mVv+eahCcsJyM1RkI4NzgnKSxcXFxcbiAgICBkZXNjOifoh6rliqjmi4nlj5bpgZPplb/lnKjnlKjnmoTkuKTkuKpNeVBhcnNlLmpzb27mlofku7YnLFxcXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcXFxuICAgIHVybDokKCfnoa7orqTlkJc/5aaC5p6c5L2g5LiN5piv5bCP55m977yM5oC76K+l5Lya5o+Q5YmN5aSH5Lu96Ieq5bex55qE6YWN572u5paH5Lu25ZCnIVxcXFxcXFxcbicrb2xkUm91dGUrJ1xcXFxcXFxcbicrbmV3Um91dGUpLmNvbmZpcm0oKG9sZFJvdXRlLG9sZE9ubGluZSxuZXdSb3V0ZSxuZXdPbmxpbmUpPT57XFxcXG4gICAgICAgIGxldCBvbGRDb2RlID0gZmV0Y2gob2xkT25saW5lKTtcXFxcbiAgICAgICAgbGV0IG5ld0NvZGUgPSBmZXRjaChuZXdPbmxpbmUpO1xcXFxuICAgICAgICBpZighL1BhcnNlX0RuXFxcXFxcXFwuanMvLnRlc3Qob2xkQ29kZSl8fCEvUGFyc2VfRG5cXFxcXFxcXC5qcy8udGVzdChuZXdDb2RlKSl7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShvbGRSb3V0ZSwgb2xkQ29kZSk7XFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUobmV3Um91dGUsIG5ld0NvZGUpO1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWreaPkuino+aekOmFjee9ruWPium7mOiupOWIl+ihqOW3sue7j+mFjee9ruaIkOWKnydcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBjYXRjaChlKXtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/phY3nva7lupTnlKjlpLHotKVcXFxcXFxcXG7mnKrmnJ/mnJvnmoTplJnor686JytlLm1lc3NhZ2U7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LG9sZFJvdXRlLG9sZE9ubGluZSxuZXdSb3V0ZSxuZXdPbmxpbmUpXFxcXG59KTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6c21hbGwoJ+aWreaPkuino+aekOiHquWKqOaho+aooeW8j+aYr+S7gOS5iD8nKStjb2xvcign5LiN55+l6YGTLOadpeS4gOS7vemBk+mVv+eahCcsJyM1RkI4NzgnKSxcXFxcbiAgICBkZXNjOifoh6rliqjmi4nlj5bpgZPplb/lnKjnlKjnmoRNeUppZXhpLmpzb27mlofku7YnLFxcXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcXFxuICAgIHVybDokKCfnoa7orqTlkJc/5aaC5p6c5L2g5LiN5piv5bCP55m977yM5oC76K+l5Lya5o+Q5YmN5aSH5Lu96Ieq5bex55qE6Ieq5Yqo5qGj5pa55qGI5ZCnIVxcXFxcXFxcbicranhzUm91dGUpLmNvbmZpcm0oKGp4c1JvdXRlLGp4T25saW5lKT0+e1xcXFxuICAgICAgICBsZXQganhDb2RlID0gZmV0Y2goanhPbmxpbmUpO1xcXFxuICAgICAgICBpZighL2ppZXhpcy8udGVzdChqeENvZGUpKXtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKGp4c1JvdXRlLCBqeENvZGUpO1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWreaPkuino+aekOmFjee9ruWPium7mOiupOWIl+ihqOW3sue7j+mFjee9ruaIkOWKnydcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBjYXRjaChlKXtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/oh6rliqjmoaPlupTnlKjlpLHotKVcXFxcXFxcXG7mnKrmnJ/mnJvnmoTplJnor686JytlLm1lc3NhZ2U7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LGp4c1JvdXRlLGp4T25saW5lKVxcXFxufSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOnNtYWxsKCflkIrmr5vov4fmu6Tmlofku7bmmK/ku4DkuYg/JykrY29sb3IoJ+S4jeefpemBkyzmnaXkuIDku73pgZPplb/nmoQnLCcjNUZCODc4JyksXFxcXG4gICAgZGVzYzon6Ieq5Yqo5ouJ5Y+W6YGT6ZW/5Zyo55So55qEZGlhb21hby50eHTmlofku7YnLFxcXFxuICAgIGNvbF90eXBlOid0ZXh0XzEnLFxcXFxuICAgIHVybDokKCfnoa7orqTlkJc/5aaC5p6c5L2g5LiN5piv5bCP55m977yM5oC76K+l5Lya5o+Q5YmN5aSH5Lu96Ieq5bex55qE5ZCK5q+b6L+H5ruk5paH5Lu25ZCnIVxcXFxcXFxcbicrZG1QYXRoKS5jb25maXJtKChkbVBhdGgsZG1PbmxpbmUpPT57XFxcXG4gICAgICAgIGxldCBkbUNvZGUgPSBmZXRjaChkbU9ubGluZSk7XFxcXG4gICAgICAgIGlmKCFkbUNvZGV8fCEvbXA0fG0zdTgvLnRlc3QoZG1Db2RlKSl7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5aSx6LSlIeS4jumBk+mVv+acjeWKoeWZqOmAmuiur+mUmeivryzkvLDorqHmmK/nvZHnu5zljaHkuoYnXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShkbVBhdGgsIGRtT25saW5lKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lkIrmr5vov4fmu6Tmlofku7blt7LphY3nva7miJDlip8nXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgY2F0Y2goZSl7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5ZCK5q+b6L+H5ruk5paH5Lu25bqU55So5aSx6LSlXFxcXFxcXFxu5pyq5pyf5pyb55qE6ZSZ6K+vOicrZS5tZXNzYWdlO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSxkbVBhdGgsZG1PbmxpbmUpXFxcXG59KTtcXFxcbmQucHVzaCh7XFxcXG4gICAgdGl0bGU6c21hbGwoJ+ecn+eahOWVpeS5n+S4jeS8muS6hizov5jmh5LlvpfkuIDkuKrkuKrngrk/JykrY29sb3IoJ+S4jeefpemBkyzmnaXkuIDku73pgZPplb/nmoQnLCcjNUZCODc4JyksXFxcXG4gICAgZGVzYzon6Ieq5Yqo5ouJ5Y+W6YGT6ZW/5Zyo55So55qE5LiK6L+w5omA5pyJ5paH5Lu2XFxcXFxcXFxu5LiA6ZSu5pCe5a6M55u05o6l5Y675pSv5oyB5pat5o+S55qE5bCP56iL5bqP55yL6KeG6aKR5bCx6KGM5ZWmJyxcXFxcbiAgICBjb2xfdHlwZTondGV4dF8xJyxcXFxcbiAgICB1cmw6JCgn5L+u5LuZ5rOV5Yqb5peg6L65Jywn56Gu6K6k5ZCXP+WmguaenOS9oOS4jeaYr+Wwj+eZve+8jOaAu+ivpeS8muaPkOWJjeWkh+S7veiHquW3seeahOS4iui/sOaJgOacieaWh+S7tuWQpyFcXFxcXFxcXG7or7fovpPlhaXpgZPplb/kv67ku5nms5Xlipvml6DovrnmnaXnoa7orqTmiafooYzmraTmk43kvZwnKS5pbnB1dCgoY2pjYWNoZSx4NWNhY2hlLHRoZW1lUm91dGUsb2xkUm91dGUsbmV3Um91dGUsanhzUm91dGUsdGhlbWVPbmxpbmUsb2xkT25saW5lLG5ld09ubGluZSxqeE9ubGluZSxkbVBhdGgsZG1PbmxpbmUpPT57XFxcXG4gICAgICAgIGlmKGlucHV0IT09J+mBk+mVv+S/ruS7meazleWKm+aXoOi+uScpe1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+acrOasoeWPlua2iOaJp+ihjCdcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBsZXQgdGhlbWVDb2RlID0gZmV0Y2godGhlbWVPbmxpbmUpO1xcXFxuICAgICAgICBpZighL25vd190aGVtZS8udGVzdCh0aGVtZUNvZGUpKXtcXFxcbiAgICAgICAgICAgIGxvZygndGhlbWVDb2RlOicrdGhlbWVDb2RlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mi4nkuLvpopjlpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBsZXQgY2pGcm9tID0gXFxcXFxcXCJoaWtlcjovL3BhZ2UvUGFyc2VfRG4uanM/cnVsZT1NeUZpZWxk4bSw4oG/XFxcXFxcXCI7XFxcXG4gICAgICAgIGxldCB4NUZyb20gPSBcXFxcXFxcImhpa2VyOi8vcGFnZS9QYXJzZV9Ebi5odG1sP3J1bGU9TXlGaWVsZOG0sOKBv1xcXFxcXFwiO1xcXFxuICAgICAgICBsZXQgY2pGaWxlID0gSlNPTi5wYXJzZShmZXRjaChjakZyb20pKS5ydWxlO1xcXFxuICAgICAgICBsZXQgeDVGaWxlID0gSlNPTi5wYXJzZShmZXRjaCh4NUZyb20pKS5ydWxlO1xcXFxuICAgICAgICBsZXQgb2xkQ29kZSA9IGZldGNoKG9sZE9ubGluZSk7XFxcXG4gICAgICAgIGxldCBuZXdDb2RlID0gZmV0Y2gobmV3T25saW5lKTtcXFxcbiAgICAgICAgbGV0IGRtQ29kZSA9IGZldGNoKGRtT25saW5lKTtcXFxcbiAgICAgICAgaWYoIS9QYXJzZV9EblxcXFxcXFxcLmpzLy50ZXN0KG9sZENvZGUpfHwhL1BhcnNlX0RuXFxcXFxcXFwuanMvLnRlc3QobmV3Q29kZSkpe1xcXFxuICAgICAgICAgICAgLy8gbG9nKCdvbGRDb2RlOicrb2xkQ29kZSk7XFxcXG4gICAgICAgICAgICAvLyBsb2coJ25ld0NvZGU6JytuZXdDb2RlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBsZXQganhDb2RlID0gZmV0Y2goanhPbmxpbmUpO1xcXFxuICAgICAgICBpZighL2ppZXhpcy8udGVzdChqeENvZGUpKXtcXFxcbiAgICAgICAgICAgIC8vIGxvZygnanhDb2RlOicranhDb2RlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lpLHotKUh5LiO6YGT6ZW/5pyN5Yqh5Zmo6YCa6K6v6ZSZ6K+vLOS8sOiuoeaYr+e9kee7nOWNoeS6hidcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKGNqY2FjaGUsIGNqRmlsZSk7IC8vIOaLieaPkuS7tlxcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKHg1Y2FjaGUsIHg1RmlsZSk7IC8v5ouJ572R6aG15paH5Lu2XFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUodGhlbWVSb3V0ZSwgdGhlbWVDb2RlKTsgLy/mi4nkuLvpopjmlofku7ZcXFxcbiAgICAgICAgICAgIGNsZWFyVmFyKFxcXFxcXFwianhPbGRWXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgY2xlYXJWYXIoXFxcXFxcXCJqeE5ld1ZcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICB3cml0ZUZpbGUob2xkUm91dGUsIG9sZENvZGUpOyAvL+aLieaWreaPkum7mOiupOmAieaLqeeVjOmdoueahOmFjee9rlxcXFxuICAgICAgICAgICAgd3JpdGVGaWxlKG5ld1JvdXRlLCBuZXdDb2RlKTsgLy/mi4nmlq3mj5LlhoXnmoTop6PmnpBcXFxcbiAgICAgICAgICAgIHdyaXRlRmlsZShqeHNSb3V0ZSwganhDb2RlKTsgLy8g5ouJ6Ieq5Yqo5qGj5paH5Lu2XFxcXG4gICAgICAgICAgICBpZihkbUNvZGUmJi9tcDR8bTN1OC8udGVzdChkbUNvZGUpKSB7Ly/pqozor4HlkIrmr5vmlofku7blkIjms5XmgKdcXFxcbiAgICAgICAgICAgICAgICB3cml0ZUZpbGUoZG1QYXRoLCBkbUNvZGUpOyAvLyDmi4nlkIrmr5vov4fmu6Tmlofku7ZcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGJhY2sodHJ1ZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5pat5o+S6Kej5p6Q6YWN572u5Y+K6buY6K6k5YiX6KGo5bey57uP6YWN572u5oiQ5YqfJ1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGNhdGNoKGUpe1xcXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S4gOmUruaooeW8j+W6lOeUqOWksei0pVxcXFxcXFxcbuacquacn+acm+eahOmUmeivrzonK2UubWVzc2FnZTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sY2pjYWNoZSx4NWNhY2hlLHRoZW1lUm91dGUsb2xkUm91dGUsbmV3Um91dGUsanhzUm91dGUsdGhlbWVPbmxpbmUsb2xkT25saW5lLG5ld09ubGluZSxqeE9ubGluZSxkbVBhdGgsZG1PbmxpbmUpXFxcXG59KTtcXFxcbmxldCBkZXNjSW5mbyA9ICfkuLvpopjmlofku7Y6Jyt0aGVtZVJvdXRlKydcXFxcXFxcXG7kuLvnlYzpnaLphY3nva46JytvbGRSb3V0ZSsnXFxcXFxcXFxu5auW5Yiw55qE6Kej5p6QOicrbmV3Um91dGUrJ1xcXFxcXFxcbuiHquWKqOaho+ino+aekDonK2p4c1JvdXRlO1xcXFxuZGVzY0luZm8rPSdcXFxcXFxcXG7kuLvmj5Lku7Y6JytjamNhY2hlKydcXFxcXFxcXG7kuLvphY3nva7pgInmi6nnlYzpnaLmlofku7Y6Jyt4NWNhY2hlKydcXFxcXFxcXG7lkIrmr5vov4fmu6Tmlofku7Y6JytkbVBhdGg7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOifmlofku7bmj4/ov7A6XFxcXFxcXFxuJytkZXNjSW5mbyxcXFxcbiAgICBjb2xfdHlwZTonbG9uZ190ZXh0JyxcXFxcbiAgICBleHRyYTp7dGV4dFNpemU6IDEzLGxpbmVWaXNpYmxlOmZhbHNlfVxcXFxufSk7XFxcXG5zZXRSZXN1bHQoZCk7XFxcIn1dXCJ9IiwidGl0bGUiOiLmlq3mj5LmjqXlj6Porr7nva4ifQ==
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement