Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥一口气看完【北派盗墓笔记】更新最全版本,真实故事改编!@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImdtdE1vZGlmaWVkXCI6MCxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWIhuexu+eJh+W6k1wiLFwicGF0aFwiOlwidmF1bHRcIixcInJ1bGVcIjpcIumhtumDqOWkp+exuyA9IFsn5Zu95YibJywgJ+eUteinhicsICfnuqrlvZXniYcnLCAn57u86Im6JywgJ+eVquWJpycsICfnlLXlvbEnXVxcbmlmIChwYWdlID09IDEpIHtcXG4gICAgLy8g5oqY5Y+g5byA5YWzXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ+aKmOWPoCcsICflhbMnKSA9PSAn5YWzJyA/ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICNGRjAwMDBcXFwiPuKIqDwvc3Bhbj48L2I+JyA6ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFwiY29sb3I6ICMxYWFkMTlcXFwiPuKIpzwvc3Bhbj48L2I+JyxcXG4gICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgaWYgKGdldE15VmFyKCfmipjlj6AnLCAn5YWzJykgPT0gJ+W8gCcpIHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ+aKmOWPoCcsICflhbMnKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBwdXRNeVZhcign5oqY5Y+gJywgJ+W8gCcpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICB9KVxcbiAgICDpobbpg6jlpKfnsbsuZm9yRWFjaChsaSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBsaSA9PSBnZXRNeVZhcign5aSn57G7JywgJ+WbveWImycpID8gJ+KAnOKAnOKAneKAnTxiPjxmb250IGNvbG9yPSMxYWFkMTk+JyArIGxpICsgJzwvZm9udD48L2I+JyA6IGxpLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobGkpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ+Wkp+exuycsIGxpKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgfSwgbGkpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuICAgICAgICB9KVxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxuICAgIH0pXFxufVxcbi8vIOmhtumDqOWIhuexu+WPguaVsOaYoOWwhFxcbnN3aXRjaCAoZ2V0TXlWYXIoJ+Wkp+exuycsICflm73liJsnKSkge1xcbiAgICBjYXNlICflm73liJsnOlxcbiAgICAgICAgc2Vhc29uVHlwZSA9IDQ7XFxuICAgICAgICBpZiAoZ2V0TXlWYXIoJ+aKmOWPoCcsICflhbMnKSA9PSAn5byAJykge1xcbiAgICAgICAgICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgaHRtbCA9IGZldGNoKCdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vZ3VvY2h1YW5nL2luZGV4Jyk7XFxuICAgICAgICAgICAgICAgIOWIhuexu+WIl+ihqCA9IHBkZmEoaHRtbCwgJy5maWx0ZXItbGlzdCYmLmZpbHRlci1ibG9jaycpO1xcbiAgICAgICAgICAgICAgICDliIbnsbvliJfooaguZm9yRWFjaCh1bCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICDnrZvpgInmnaHku7YgPSBwZGZoKHVsLCAnLmZpbHRlci1uYW1lJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgICAgICDlrZDliIbnsbvliJfooaggPSBwZGZhKHVsLCAndWwmJmxpJyk7XFxuICAgICAgICAgICAgICAgICAgICDlrZDliIbnsbvliJfooaguZm9yRWFjaChsaSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBkZmgobGksICdsaSYmVGV4dCcpID09ICflhbbku5YnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKOetm+mAieadoeS7tiwgJ+WFqOmDqCcpID09IHBkZmgobGksICdsaSYmVGV4dCcpID8gJ+KAnOKAnOKAneKAnTxiPjxmb250IGNvbG9yPSMxYWFkMTk+JyArIHBkZmgobGksICdsaSYmVGV4dCcpICsgJzwvZm9udD48L2I+JyA6IHBkZmgobGksICdsaSYmVGV4dCcpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGxpLCDnrZvpgInmnaHku7YpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKOetm+mAieadoeS7tiwgcGRmaChsaSwgJ2xpJiZUZXh0JykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBsaSwg562b6YCJ5p2h5Lu2KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfnlLXop4YnOlxcbiAgICAgICAgc2Vhc29uVHlwZSA9IDU7XFxuICAgICAgICBpZiAoZ2V0TXlWYXIoJ+aKmOWPoCcsICflhbMnKSA9PSAn5byAJykge1xcbiAgICAgICAgICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgaHRtbCA9IGZldGNoKCdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vdHYvaW5kZXgnKTtcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoID0gcGRmYShodG1sLCAnLmZpbHRlci1saXN0JiYuZmlsdGVyLWJsb2NrJyk7XFxuICAgICAgICAgICAgICAgIOWIhuexu+WIl+ihqC5mb3JFYWNoKHVsID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIOetm+mAieadoeS7tiA9IHBkZmgodWwsICcuZmlsdGVyLW5hbWUmJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqCA9IHBkZmEodWwsICd1bCYmbGknKTtcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqC5mb3JFYWNoKGxpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGRmaChsaSwgJ2xpJiZUZXh0JykgPT0gJ+WFtuS7licpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIo562b6YCJ5p2h5Lu2LCAn5YWo6YOoJykgPT0gcGRmaChsaSwgJ2xpJiZUZXh0JykgPyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9IzFhYWQxOT4nICsgcGRmaChsaSwgJ2xpJiZUZXh0JykgKyAnPC9mb250PjwvYj4nIDogcGRmaChsaSwgJ2xpJiZUZXh0JyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobGksIOetm+mAieadoeS7tikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIo562b6YCJ5p2h5Lu2LCBwZGZoKGxpLCAnbGkmJlRleHQnKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGxpLCDnrZvpgInmnaHku7YpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+e6quW9leeJhyc6XFxuICAgICAgICBzZWFzb25UeXBlID0gMztcXG4gICAgICAgIGlmIChnZXRNeVZhcign5oqY5Y+gJywgJ+WFsycpID09ICflvIAnKSB7XFxuICAgICAgICAgICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICBodG1sID0gZmV0Y2goJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9kb2N1bWVudGFyeS9pbmRleC8nKTtcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoID0gcGRmYShodG1sLCAnLmZpbHRlci1saXN0JiYuZmlsdGVyLWJsb2NrJyk7XFxuICAgICAgICAgICAgICAgIOWIhuexu+WIl+ihqC5mb3JFYWNoKHVsID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIOetm+mAieadoeS7tiA9IHBkZmgodWwsICcuZmlsdGVyLW5hbWUmJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqCA9IHBkZmEodWwsICd1bCYmbGknKTtcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqC5mb3JFYWNoKGxpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGRmaChsaSwgJ2xpJiZUZXh0JykgPT0gJ+WFtuS7licpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIo562b6YCJ5p2h5Lu2LCAn5YWo6YOoJykgPT0gcGRmaChsaSwgJ2xpJiZUZXh0JykgPyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9IzFhYWQxOT4nICsgcGRmaChsaSwgJ2xpJiZUZXh0JykgKyAnPC9mb250PjwvYj4nIDogcGRmaChsaSwgJ2xpJiZUZXh0JyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobGksIOetm+mAieadoeS7tikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIo562b6YCJ5p2h5Lu2LCBwZGZoKGxpLCAnbGkmJlRleHQnKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGxpLCDnrZvpgInmnaHku7YpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+e7vOiJuic6XFxuICAgICAgICBzZWFzb25UeXBlID0gNztcXG4gICAgICAgIGlmIChnZXRNeVZhcign5oqY5Y+gJywgJ+WFsycpID09ICflvIAnKSB7XFxuICAgICAgICAgICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICBodG1sID0gZmV0Y2goJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS92YXJpZXR5L2luZGV4Jyk7XFxuICAgICAgICAgICAgICAgIOWIhuexu+WIl+ihqCA9IHBkZmEoaHRtbCwgJy5maWx0ZXItbGlzdCYmLmZpbHRlci1ibG9jaycpO1xcbiAgICAgICAgICAgICAgICDliIbnsbvliJfooaguZm9yRWFjaCh1bCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICDnrZvpgInmnaHku7YgPSBwZGZoKHVsLCAnLmZpbHRlci1uYW1lJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgICAgICDlrZDliIbnsbvliJfooaggPSBwZGZhKHVsLCAndWwmJmxpJyk7XFxuICAgICAgICAgICAgICAgICAgICDlrZDliIbnsbvliJfooaguZm9yRWFjaChsaSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBkZmgobGksICdsaSYmVGV4dCcpID09ICflhbbku5YnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKOetm+mAieadoeS7tiwgJ+WFqOmDqCcpID09IHBkZmgobGksICdsaSYmVGV4dCcpID8gJ+KAnOKAnOKAneKAnTxiPjxmb250IGNvbG9yPSMxYWFkMTk+JyArIHBkZmgobGksICdsaSYmVGV4dCcpICsgJzwvZm9udD48L2I+JyA6IHBkZmgobGksICdsaSYmVGV4dCcpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGxpLCDnrZvpgInmnaHku7YpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKOetm+mAieadoeS7tiwgcGRmaChsaSwgJ2xpJiZUZXh0JykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBsaSwg562b6YCJ5p2h5Lu2KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfnlarliacnOlxcbiAgICAgICAgc2Vhc29uVHlwZSA9IDE7XFxuICAgICAgICBpZiAoZ2V0TXlWYXIoJ+aKmOWPoCcsICflhbMnKSA9PSAn5byAJykge1xcbiAgICAgICAgICAgIGlmIChwYWdlID09IDEpIHtcXG4gICAgICAgICAgICAgICAgaHRtbCA9IGZldGNoKCdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vYW5pbWUvaW5kZXgnKTtcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoID0gcGRmYShodG1sLCAnLmZpbHRlci1saXN0JiYuZmlsdGVyLWJsb2NrJyk7XFxuICAgICAgICAgICAgICAgIOWIhuexu+WIl+ihqC5mb3JFYWNoKHVsID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIOetm+mAieadoeS7tiA9IHBkZmgodWwsICcuZmlsdGVyLW5hbWUmJlRleHQnKTtcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqCA9IHBkZmEodWwsICd1bCYmbGknKTtcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqC5mb3JFYWNoKGxpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGRmaChsaSwgJ2xpJiZUZXh0JykgPT0gJ+WFtuS7licpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIo562b6YCJ5p2h5Lu2LCAn5YWo6YOoJykgPT0gcGRmaChsaSwgJ2xpJiZUZXh0JykgPyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9IzFhYWQxOT4nICsgcGRmaChsaSwgJ2xpJiZUZXh0JykgKyAnPC9mb250PjwvYj4nIDogcGRmaChsaSwgJ2xpJiZUZXh0JyksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobGksIOetm+mAieadoeS7tikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIo562b6YCJ5p2h5Lu2LCBwZGZoKGxpLCAnbGkmJlRleHQnKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGxpLCDnrZvpgInmnaHku7YpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+eUteW9sSc6XFxuICAgICAgICBzZWFzb25UeXBlID0gMjtcXG4gICAgICAgIGlmIChnZXRNeVZhcign5oqY5Y+gJywgJ+WFsycpID09ICflvIAnKSB7XFxuICAgICAgICAgICAgaWYgKHBhZ2UgPT0gMSkge1xcbiAgICAgICAgICAgICAgICBodG1sID0gZmV0Y2goJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9tb3ZpZS9pbmRleCcpO1xcbiAgICAgICAgICAgICAgICDliIbnsbvliJfooaggPSBwZGZhKGh0bWwsICcuZmlsdGVyLWxpc3QmJi5maWx0ZXItYmxvY2snKTtcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoLmZvckVhY2godWwgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAg562b6YCJ5p2h5Lu2ID0gcGRmaCh1bCwgJy5maWx0ZXItbmFtZSYmVGV4dCcpO1xcbiAgICAgICAgICAgICAgICAgICAg5a2Q5YiG57G75YiX6KGoID0gcGRmYSh1bCwgJ3VsJiZsaScpO1xcbiAgICAgICAgICAgICAgICAgICAg5a2Q5YiG57G75YiX6KGoLmZvckVhY2gobGkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZGZoKGxpLCAnbGkmJlRleHQnKSA9PSAn5YW25LuWJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcijnrZvpgInmnaHku7YsICflhajpg6gnKSA9PSBwZGZoKGxpLCAnbGkmJlRleHQnKSA/ICfigJzigJzigJ3igJ08Yj48Zm9udCBjb2xvcj0jMWFhZDE5PicgKyBwZGZoKGxpLCAnbGkmJlRleHQnKSArICc8L2ZvbnQ+PC9iPicgOiBwZGZoKGxpLCAnbGkmJlRleHQnKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChsaSwg562b6YCJ5p2h5Lu2KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcijnrZvpgInmnaHku7YsIHBkZmgobGksICdsaSYmVGV4dCcpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgbGksIOetm+mAieadoeS7tiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBicmVhaztcXG4gICAgZGVmYXVsdDpcXG4gICAgICAgIHNlYXNvblR5cGUgPSA0O1xcbiAgICAgICAgaWYgKGdldE15VmFyKCfmipjlj6AnLCAn5YWzJykgPT0gJ+W8gCcpIHtcXG4gICAgICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxuICAgICAgICAgICAgICAgIGh0bWwgPSBmZXRjaCgnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL2FuaW1lL2luZGV4Jyk7XFxuICAgICAgICAgICAgICAgIOWIhuexu+WIl+ihqCA9IHBkZmEoaHRtbCwgJy5maWx0ZXItbGlzdCYmLmZpbHRlci1ibG9jaycpO1xcbiAgICAgICAgICAgICAgICDliIbnsbvliJfooaguZm9yRWFjaCh1bCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICDnrZvpgInmnaHku7YgPSBwZGZoKHVsLCAnLmZpbHRlci1uYW1lJiZUZXh0Jyk7XFxuICAgICAgICAgICAgICAgICAgICDlrZDliIbnsbvliJfooaggPSBwZGZhKHVsLCAndWwmJmxpJyk7XFxuICAgICAgICAgICAgICAgICAgICDlrZDliIbnsbvliJfooaguZm9yRWFjaChsaSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBkZmgobGksICdsaSYmVGV4dCcpID09ICflhbbku5YnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKOetm+mAieadoeS7tiwgJ+WFqOmDqCcpID09IHBkZmgobGksICdsaSYmVGV4dCcpID8gJ+KAnOKAnOKAneKAnTxiPjxmb250IGNvbG9yPSMxYWFkMTk+JyArIHBkZmgobGksICdsaSYmVGV4dCcpICsgJzwvZm9udD48L2I+JyA6IHBkZmgobGksICdsaSYmVGV4dCcpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGxpLCDnrZvpgInmnaHku7YpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKOetm+mAieadoeS7tiwgcGRmaChsaSwgJ2xpJiZUZXh0JykpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBsaSwg562b6YCJ5p2h5Lu2KSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGJyZWFrO1xcbn1cXG4vLyDlrZDliIbnsbvlj4LmlbDmmKDlsIRcXG5zd2l0Y2ggKGdldE15VmFyKCfnsbvlnosnLCAn5YWo6YOoJykpIHtcXG4gICAgY2FzZSAn5q2j54mHJzpcXG4gICAgICAgIHNlYXNvbl92ZXJzaW9uID0gMTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfnlLXlvbEnOlxcbiAgICAgICAgc2Vhc29uX3ZlcnNpb24gPSAyO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WFtuS7lic6XFxuICAgICAgICBzZWFzb25fdmVyc2lvbiA9IDM7XFxuICAgICAgICBicmVhaztcXG4gICAgZGVmYXVsdDpcXG4gICAgICAgIHNlYXNvbl92ZXJzaW9uID0gLTE7XFxuICAgICAgICBicmVhaztcXG59XFxuc3dpdGNoIChnZXRNeVZhcign6YWN6Z+zJywgJ+WFqOmDqCcpKSB7XFxuICAgIGNhc2UgJ+WOn+WjsCc6XFxuICAgICAgICBzcG9rZW5fbGFuZ3VhZ2VfdHlwZSA9IDE7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5Lit5paH6YWN6Z+zJzpcXG4gICAgICAgIHNwb2tlbl9sYW5ndWFnZV90eXBlID0gMjtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBkZWZhdWx0OlxcbiAgICAgICAgc3Bva2VuX2xhbmd1YWdlX3R5cGUgPSAtMTtcXG4gICAgICAgIGJyZWFrO1xcbn1cXG5zd2l0Y2ggKGdldE15VmFyKCflnLDljLonLCAn5YWo6YOoJykpIHtcXG4gICAgY2FzZSAn5Lit5Zu95aSn6ZmGJzpcXG4gICAgICAgIGFyZWEgPSAxO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+aXpeacrCc6XFxuICAgICAgICBhcmVhID0gMjtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfnvo7lm70nOlxcbiAgICAgICAgYXJlYSA9IDM7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn6Iux5Zu9JzpcXG4gICAgICAgIGFyZWEgPSA0O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+S4reWbvea4r+WPsCc6XFxuICAgICAgICBhcmVhID0gWzYsIDddO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+mfqeWbvSc6XFxuICAgICAgICBhcmVhID0gODtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfms5Xlm70nOlxcbiAgICAgICAgYXJlYSA9IDk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5rOw5Zu9JzpcXG4gICAgICAgIGFyZWEgPSAxMDtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfopb/nj63niZknOlxcbiAgICAgICAgYXJlYSA9IDEzO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+W+t+WbvSc6XFxuICAgICAgICBhcmVhID0gMTU7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5oSP5aSn5YipJzpcXG4gICAgICAgIGFyZWEgPSAzNTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICflhbbku5YnOlxcbiAgICAgICAgLy8g5Y+q5piv55Wq5Ymn55qE5oOF5Ya1X+WFsTU177yM6KaB5YeP5Y675Ye6546w55qE4oCU4oCU566X5LqG77yM55u05o6l5Zyo5Yqo5oCB5YiG57G755qE5pe25YCZ5Y675o6J5LqGXFxuICAgICAgICBhcmVhID0gWzEsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1XTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBkZWZhdWx0OlxcbiAgICAgICAgYXJlYSA9IC0xO1xcbiAgICAgICAgYnJlYWs7XFxufVxcbnN3aXRjaCAoZ2V0TXlWYXIoJ+eKtuaAgScsICflhajpg6gnKSkge1xcbiAgICBjYXNlICflroznu5MnOlxcbiAgICAgICAgaXNfZmluaXNoID0gMTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfov57ovb0nOlxcbiAgICAgICAgaXNfZmluaXNoID0gMDtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBkZWZhdWx0OlxcbiAgICAgICAgaXNfZmluaXNoID0gLTE7XFxuICAgICAgICBicmVhaztcXG59XFxuc3dpdGNoIChnZXRNeVZhcign5Ye65ZOBJywgJ+WFqOmDqCcpKSB7XFxuICAgIGNhc2UgJ+Wkruinhic6XFxuICAgICAgICBwcm9kdWNlcl9pZCA9IDQ7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAnQkJDJzpcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gMTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfmjqLntKLpopHpgZMnOlxcbiAgICAgICAgcHJvZHVjZXJfaWQgPSA3O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WbveWutuWcsOeQhic6XFxuICAgICAgICBwcm9kdWNlcl9pZCA9IDE0O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ05ISyc6XFxuICAgICAgICBwcm9kdWNlcl9pZCA9IDI7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5Y6G5Y+y6aKR6YGTJzpcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gNjtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICfljavop4YnOlxcbiAgICAgICAgcHJvZHVjZXJfaWQgPSA4O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+iHquWItic6XFxuICAgICAgICBwcm9kdWNlcl9pZCA9IDk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAnSVRWJzpcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gNTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICdTS1knOlxcbiAgICAgICAgcHJvZHVjZXJfaWQgPSAzO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ1pERic6XFxuICAgICAgICBwcm9kdWNlcl9pZCA9IDEwO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WQiOS9nOacuuaehCc6XFxuICAgICAgICBwcm9kdWNlcl9pZCA9IDExO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WbveWGheWFtuS7lic6XFxuICAgICAgICBwcm9kdWNlcl9pZCA9IDEyO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WbveWkluWFtuWugyc6XFxuICAgICAgICBwcm9kdWNlcl9pZCA9IDEzO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGRlZmF1bHQ6XFxuICAgICAgICBwcm9kdWNlcl9pZCA9IC0xO1xcbiAgICAgICAgYnJlYWs7XFxufVxcbnN3aXRjaCAoZ2V0TXlWYXIoJ+eJiOadgycsICflhajpg6gnKSkge1xcbiAgICBjYXNlICfni6zlrrYnOlxcbiAgICAgICAgY29weXJpZ2h0ID0gMztcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICflhbbku5YnOlxcbiAgICAgICAgY29weXJpZ2h0ID0gWzEsIDIsIDRdO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGRlZmF1bHQ6XFxuICAgICAgICBjb3B5cmlnaHQgPSAtMTtcXG4gICAgICAgIGJyZWFrO1xcbn1cXG5zd2l0Y2ggKGdldE15VmFyKCfku5jotLknLCAn5YWo6YOoJykpIHtcXG4gICAgY2FzZSAn5YWN6LS5JzpcXG4gICAgICAgIHNlYXNvbl9zdGF0dXMgPSAxO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+S7mOi0uSc6XFxuICAgICAgICBzZWFzb25fc3RhdHVzID0gWzIsIDZdO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+Wkp+S8muWRmCc6XFxuICAgICAgICBzZWFzb25fc3RhdHVzID0gWzQsIDZdO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGRlZmF1bHQ6XFxuICAgICAgICBzZWFzb25fc3RhdHVzID0gLTE7XFxuICAgICAgICBicmVhaztcXG59XFxuc3dpdGNoIChnZXRNeVZhcign5a2j5bqmJywgJ+WFqOmDqCcpKSB7XFxuICAgIGNhc2UgJzHmnIgnOlxcbiAgICAgICAgc2Vhc29uX21vbnRoID0gMTtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlICc05pyIJzpcXG4gICAgICAgIHNlYXNvbl9tb250aCA9IDQ7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAnN+aciCc6XFxuICAgICAgICBzZWFzb25fbW9udGggPSA3O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJzEw5pyIJzpcXG4gICAgICAgIHNlYXNvbl9tb250aCA9IDEwO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGRlZmF1bHQ6XFxuICAgICAgICBzZWFzb25fbW9udGggPSAtMTtcXG4gICAgICAgIGJyZWFrO1xcbn1cXG4vLyDliKTmlq3lkozmmKDlsITlubTku71cXG5zd2l0Y2ggKGdldE15VmFyKCflpKfnsbsnLCAn5Zu95YibJykpIHtcXG4gICAgY2FzZSAn5Zu95YibJzpcXG4gICAgY2FzZSAn55Wq5YmnJzpcXG4gICAgICAgIC8vIOeVquWJp+WSjOWbveWIm+OAkOS5n+aYr+WPq+WBmuW5tOS7veS9huWPguaVsOWQjeOAgeagvOW8j+WSjOWFtuS7luWIhuexu+S4jeS4gOagt+OAkVxcbiAgICAgICAgYW5pbWVfeWVhciA9IGdldE15VmFyKCflubTku70nLCAn5YWo6YOoJyk7XFxuICAgICAgICBzd2l0Y2ggKGFuaW1lX3llYXIuaW5jbHVkZXMoJy0nKSkge1xcbiAgICAgICAgICAgIGNhc2UgdHJ1ZTpcXG4gICAgICAgICAgICAgICAgZWFybHkgPSBhbmltZV95ZWFyLnNwbGl0KCctJylbMV07XFxuICAgICAgICAgICAgICAgIGxhdGVyID0gYW5pbWVfeWVhci5zcGxpdCgnLScpWzBdO1xcbiAgICAgICAgICAgICAgICB5ZWFyID0gYFske2Vhcmx5fSwke051bWJlcihsYXRlcikgKyAxfSlgO1xcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlIGZhbHNlOlxcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGFuaW1lX3llYXIpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzkw5bm05LujJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICB5ZWFyID0gJ1sxOTkwLDIwMDApJztcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzgw5bm05LujJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICB5ZWFyID0gJ1sxOTgwLDE5OTApJztcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+abtOaXqSc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgeWVhciA9ICdbLDE5ODApJztcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WFqOmDqCc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgeWVhciA9IC0xO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgICAgICB5ZWFyID0gYFske2FuaW1lX3llYXJ9LCR7TnVtYmVyKGFuaW1lX3llYXIpICsgMX0pYDtcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICBkZWZhdWx0OlxcbiAgICAgICAgLy8g6Zmk5LqG55Wq5Ymn5ZKM5Zu95Yib55qE5YW25LuW5YiG57G7XFxuICAgICAgICB0dl95ZWFyID0gZ2V0TXlWYXIoJ+W5tOS7vScsICflhajpg6gnKTtcXG4gICAgICAgIHN3aXRjaCAodHZfeWVhci5pbmNsdWRlcygnLScpKSB7XFxuICAgICAgICAgICAgY2FzZSB0cnVlOlxcbiAgICAgICAgICAgICAgICBlYXJseSA9IHR2X3llYXIuc3BsaXQoJy0nKVsxXTtcXG4gICAgICAgICAgICAgICAgbGF0ZXIgPSB0dl95ZWFyLnNwbGl0KCctJylbMF07XFxuICAgICAgICAgICAgICAgIHJlbGVhc2VfZGF0ZSA9IGBbJHtlYXJseX0tMDEtMDEgMDA6MDA6MDAsJHtOdW1iZXIobGF0ZXIpICsgMX0tMDEtMDEgMDA6MDA6MDApYFxcbiAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICBjYXNlIGZhbHNlOlxcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR2X3llYXIpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzkw5bm05LujJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlX2RhdGUgPSAnWzE5OTAtMDEtMDEgMDA6MDA6MDAsMjAwMC0wMS0wMSAwMDowMDowMCknXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlICc4MOW5tOS7oyc6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZV9kYXRlID0gJ1sxOTgwLTAxLTAxIDAwOjAwOjAwLDE5OTAtMDEtMDEgMDA6MDA6MDApJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAn5pu05pepJzpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlX2RhdGUgPSAnWywxOTgwLTAxLTAxIDAwOjAwOjAwKSc7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlICflhajpg6gnOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VfZGF0ZSA9IC0xO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlX2RhdGUgPSBgWyR7dHZfeWVhcn0tMDEtMDEgMDA6MDA6MDAsJHtOdW1iZXIodHZfeWVhcikgKyAxfS0wMS0wMSAwMDowMDowMClgO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICB9XFxufVxcbnN3aXRjaCAoZ2V0TXlWYXIoJ+mjjuagvCcsICflhajpg6gnKSkge1xcbiAgICBjYXNlICfnlLXlvbEnOlxcbiAgICAgICAgc3R5bGVfaWQgPSAtMTA7XFxuICAgICAgICBicmVhaztcXG4gICAgLy8g55Wq5Ymn5qCP55uuXFxuICAgIGNhc2UgJ+WOn+WImyc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDEwO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+a8q+eUu+aUuSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDExO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+Wwj+ivtOaUuSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDEyO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+a4uOaIj+aUuSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDEzO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+eJueaRhCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDE0O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+W4g+iii+aIjyc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDE1O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+eDreihgCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDE2O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+epv+i2iic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDE3O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+Wlh+W5uyc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDE4O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIC8vIOWSi+i3s+S6huS4gOS4quaNj35cXG4gICAgY2FzZSAn5oiY5paXJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMjA7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5pCe56yRJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMjE7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5pel5bi4JzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMjI7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn56eR5bm7JzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMjM7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn6JCM57O7JzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMjQ7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5rK75oSIJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMjU7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5qCh5ZutJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMjY7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5bCR5YS/JzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMjc7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5rOh6Z2iJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMjg7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5oGL54ixJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMjk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5bCR5aWzJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMzA7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn6a2U5rOVJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMzE7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5YaS6ZmpJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMzI7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5Y6G5Y+yJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMzM7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5p6256m6JzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMzQ7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5py65oiYJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMzU7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn56We6a2UJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMzY7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5aOw5o6nJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMzc7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn6L+Q5YqoJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMzg7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5Yqx5b+XJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMzk7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn6Z+z5LmQJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNDA7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5o6o55CGJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNDE7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn56S+5ZuiJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNDI7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5pm65paXJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNDM7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5YKs5rOqJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNDQ7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn576O6aOfJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNDU7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5YG25YOPJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNDY7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn5LmZ5aWzJzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNDc7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAn6IGM5Zy6JzpcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNDg7XFxuICAgICAgICBicmVhaztcXG5cXG4gICAgLy8g57u86Im65qCP55uu44CB55S15b2xXFxuICAgIGNhc2UgJ+WJp+aDhSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDUwO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WWnOWJpyc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDUxO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+eIseaDhSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDUyO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WKqOS9nCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDUzO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+aBkOaAlic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDU0O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+eKr+e9qic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDU1O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+aDiuaCmic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDU2O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+aCrOeWkSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDU3O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+aImOS6iSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDU4O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WKqOeUuyc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDU5O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+S8oOiusCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDYwO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WutuW6rSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDYxO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+atjOiInic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDYyO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+e6quWunic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDYzO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+eBvumavic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDY0O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+S6uuaWhyc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDY1O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+enkeaKgCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDY2O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+Wuh+WumSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDY4O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+iQjOWuoCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDY5O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+ekvuS8mic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDcwO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WKqOeJqSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDcxO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+iHqueEtic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDcyO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WMu+eWlyc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDczO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WGm+S6iyc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDc0O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+e9quahiCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDc1O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+elnuenmCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDc2O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+aXheihjCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDc3O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+atpuS+oCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDc4O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+mdkuaYpSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDc5O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+mDveW4gic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDgwO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WPpOijhSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDgxO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+iwjeaImCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDgyO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+e7j+WFuCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDgzO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+aDheaEnyc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDg0O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+elnuivnSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDg1O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+W5tOS7oyc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDg2O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WGnOadkSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDg3O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WIkeS+pic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDg4O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WGm+aXhSc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDg5O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+iuv+iwiCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDkwO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+iEseWPo+engCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDkxO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+ecn+S6uuengCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDkyO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+mAieengCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDk0O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+aXhea4uCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDk1O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+aZmuS8mic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDk4O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+a8lOWUseS8mic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDk2O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+S6suWtkCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDk3O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+WFu+aIkCc6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDk5O1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgJ+aWh+WMlic6XFxuICAgICAgICBzdHlsZV9pZCA9IDEwMTAwO1xcbiAgICAgICAgYnJlYWs7XFxuICAgIC8vIOeUteW9seagj+ebrlxcbiAgICBjYXNlICfnn63niYcnOlxcbiAgICAgICAgc3R5bGVfaWQgPSAxMDEwNDtcXG4gICAgICAgIGJyZWFrO1xcbiAgICBkZWZhdWx0OlxcbiAgICAgICAgc3R5bGVfaWQgPSAtMTtcXG4gICAgICAgIGJyZWFrO1xcbn1cXG4vLyDmmKDlsITnnJ/lrp7or7fmsYLlnLDlnYBcXG5zd2l0Y2ggKHNlYXNvblR5cGUpIHtcXG4gICAgY2FzZSA0OlxcbiAgICAgICAgLy8g5Zu95YibXFxuICAgICAgICB0cnVlX3VybCA9ICdodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3NlYXNvbi9pbmRleC9yZXN1bHQ/c2Vhc29uX3ZlcnNpb249JyArIHNlYXNvbl92ZXJzaW9uICsgJyZpc19maW5pc2g9JyArIGlzX2ZpbmlzaCArICcmY29weXJpZ2h0PScgKyBjb3B5cmlnaHQgKyAnJnNlYXNvbl9zdGF0dXM9JyArIHNlYXNvbl9zdGF0dXMgKyAnJnllYXI9JyArIHllYXIgKyAnJnN0eWxlX2lkPScgKyBzdHlsZV9pZCArICcmb3JkZXI9MyZzdD00JnNvcnQ9MCZwYWdlPScgKyBwYWdlICsgJyZzZWFzb25fdHlwZT00JnBhZ2VzaXplPTMwJnR5cGU9MSdcXG4gICAgICAgIGJyZWFrO1xcbiAgICBjYXNlIDU6XFxuICAgICAgICAvLyDnlLXop4bliadcXG4gICAgICAgIHRydWVfdXJsID0gJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2Mvc2Vhc29uL2luZGV4L3Jlc3VsdD9hcmVhPScgKyBhcmVhICsgJyZzdHlsZV9pZD0nICsgc3R5bGVfaWQgKyAnJnJlbGVhc2VfZGF0ZT0nICsgcmVsZWFzZV9kYXRlICsgJyZzZWFzb25fc3RhdHVzPScgKyBzZWFzb25fc3RhdHVzICsgJyZvcmRlcj0yJnN0PTUmc29ydD0wJnBhZ2U9JyArIHBhZ2UgKyAnJnNlYXNvbl90eXBlPTUmcGFnZXNpemU9MzAmdHlwZT0xJ1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgNzpcXG4gICAgICAgIC8vIOe7vOiJulxcbiAgICAgICAgdHJ1ZV91cmwgPSAnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3BnYy9zZWFzb24vaW5kZXgvcmVzdWx0P3NlYXNvbl9zdGF0dXM9JyArIHNlYXNvbl9zdGF0dXMgKyAnJnN0eWxlX2lkPScgKyBzdHlsZV9pZCArICcmb3JkZXI9MiZzdD03JnNvcnQ9MCZwYWdlPScgKyBwYWdlICsgJyZzZWFzb25fdHlwZT03JnBhZ2VzaXplPTMwJnR5cGU9MSc7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAxOlxcbiAgICAgICAgLy8g55Wq5YmnXFxuICAgICAgICB0cnVlX3VybCA9ICdodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3NlYXNvbi9pbmRleC9yZXN1bHQ/c2Vhc29uX3ZlcnNpb249JyArIHNlYXNvbl92ZXJzaW9uICsgJyZzcG9rZW5fbGFuZ3VhZ2VfdHlwZT0nICsgc3Bva2VuX2xhbmd1YWdlX3R5cGUgKyAnJmFyZWE9JyArIGFyZWEgKyAnJmlzX2ZpbmlzaD0nICsgaXNfZmluaXNoICsgJyZjb3B5cmlnaHQ9JyArIGNvcHlyaWdodCArICcmc2Vhc29uX3N0YXR1cz0nICsgc2Vhc29uX3N0YXR1cyArICcmc2Vhc29uX21vbnRoPScgKyBzZWFzb25fbW9udGggKyAnJnllYXI9JyArIHllYXIgKyAnJnN0eWxlX2lkPScgKyBzdHlsZV9pZCArICcmb3JkZXI9MyZzdD0xJnNvcnQ9MCZwYWdlPScgKyBwYWdlICsgJyZzZWFzb25fdHlwZT0xJnBhZ2VzaXplPTMwJnR5cGU9MSc7XFxuICAgICAgICBicmVhaztcXG4gICAgY2FzZSAzOlxcbiAgICAgICAgLy8g57qq5b2V54mHXFxuICAgICAgICB0cnVlX3VybCA9ICdodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3NlYXNvbi9pbmRleC9yZXN1bHQ/c3R5bGVfaWQ9JyArIHN0eWxlX2lkICsgJyZwcm9kdWNlcl9pZD0nICsgcHJvZHVjZXJfaWQgKyAnJnJlbGVhc2VfZGF0ZT0nICsgcmVsZWFzZV9kYXRlICsgJyZzZWFzb25fc3RhdHVzPScgKyBzZWFzb25fc3RhdHVzICsgJyZvcmRlcj0yJnN0PTMmc29ydD0wJnBhZ2U9JyArIHBhZ2UgKyAnJnNlYXNvbl90eXBlPTMmcGFnZXNpemU9MzAmdHlwZT0xJ1xcbiAgICAgICAgYnJlYWs7XFxuICAgIGNhc2UgMjpcXG4gICAgICAgIC8vIOeUteW9sVxcbiAgICAgICAgdHJ1ZV91cmwgPSAnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3BnYy9zZWFzb24vaW5kZXgvcmVzdWx0P2FyZWE9JyArIGFyZWEgKyAnJnN0eWxlX2lkPScgKyBzdHlsZV9pZCArICcmcmVsZWFzZV9kYXRlPScgKyByZWxlYXNlX2RhdGUgKyAnJnNlYXNvbl9zdGF0dXM9JyArIHNlYXNvbl9zdGF0dXMgKyAnJm9yZGVyPTImc3Q9MiZzb3J0PTAmcGFnZT0nICsgcGFnZSArICcmc2Vhc29uX3R5cGU9MiZwYWdlc2l6ZT0zMCZ0eXBlPTEnXFxuICAgICAgICBicmVhaztcXG59XFxudHJ1ZV91cmwgPSBlbmNvZGVVUkkodHJ1ZV91cmwpO1xcbmxpc3QgPSBKU09OLnBhcnNlKGZldGNoKHRydWVfdXJsKSkuZGF0YS5saXN0O1xcbnRyeSB7XFxuICAgIGxpc3QuZm9yRWFjaChtb3ZpZSA9PiB7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBtb3ZpZS50aXRsZSxcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvZmlsbWVyamkjaW1tZXJzaXZlVGhlbWUjXFxcIixcXG4gICAgICAgICAgICBpbWc6IG1vdmllLmNvdmVyICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICAgICAgZGVzYzogbW92aWUub3JkZXIsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8zJyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBzZWFzb25faWQ6IG1vdmllLnNlYXNvbl9pZFxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9KTtcXG59IGNhdGNoIChlKSB7XFxuICAgIGxvZygn5bey57uP5oq16L6+6aG15bqVJyArIE1ZX1BBR0UpO1xcbn1cXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIueDreaYoOaXtumXtOihqFwiLFwicGF0aFwiOlwiVXBkYXRlVGFibGVzXCIsXCJydWxlXCI6XCJmdW5jdGlvbiBjb2xvcih0ZXh0LCBjb2xvcikge1xcblxcbsKgIMKgIHRleHQgKz0gXFxcIlxcXCI7XFxuXFxuwqAgwqAgaWYgKHRleHQuaW5kZXhPZihcXFwi4oCc4oCc4oCd4oCdXFxcIikgPT09IDApIHtcXG5cXG7CoCDCoCDCoCDCoCB0ZXh0LnJlcGxhY2UoXFxcIuKAnOKAnOKAneKAnVxcXCIsIFxcXCJcXFwiKTtcXG5cXG7CoCDCoCB9XFxuXFxuwqAgwqAgcmV0dXJuIFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0nXFxcIiArIGNvbG9yICsgXFxcIic+XFxcIiArIHRleHQgKyBcXFwiPC9mb250PlxcXCI7XFxuXFxufVxcblxcbnZhciB0YWJzID0ge1xcblxcbsKgIMKgIFxcXCLnlarliadcXFwiOiAxLFxcblxcbsKgIMKgIFxcXCLnuqrlvZXniYdcXFwiOiAzLFxcblxcbsKgIMKgIFxcXCLlm73liJtcXFwiOiA0XFxuXFxufVxcblxcbmlmIChNWV9QQUdFID09IDEpIHtcXG5cXG7CoCDCoCBPYmplY3Qua2V5cyh0YWJzKS5mb3JFYWNoKGl0ZW0gPT4ge1xcblxcbsKgIMKgIMKgIMKgIGQucHVzaCh7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdGl0bGU6IChnZXRNeVZhcihcXFwianVqaVxcXCIsIFxcXCLlm73liJtcXFwiKSA9PSBpdGVtID8gY29sb3IoaXRlbSwgXFxcInJlZFxcXCIpIDogaXRlbSksXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdXJsOiAkKCkubGF6eVJ1bGUoKGEpID0+IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwdXRNeVZhcihcXFwianVqaVxcXCIsIGEpXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmVmcmVzaFBhZ2UoKVxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiBcXFwidG9hc3Q6Ly/liIfmjaLmiJDlip9cXFwiXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgfSwgaXRlbSksXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcblxcbsKgIMKgIMKgIMKgIH0pXFxuXFxuwqAgwqAgfSlcXG5cXG7CoCDCoCBkLnB1c2goe1xcblxcbsKgIMKgIMKgIMKgIGNvbF90eXBlOiBcXFwibGluZVxcXCJcXG5cXG7CoCDCoCB9KVxcblxcbsKgIMKgIGxldCBkYXlzID0gN1xcblxcbsKgIMKgIGZvciAobGV0IGkgPSAxOyBpIDwgZGF5czsgaSsrKSB7XFxuXFxuwqAgwqAgwqAgwqAgZC5wdXNoKHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogKGdldE15VmFyKFxcXCJmcm9tXFxcIiwgXFxcIjFcXFwiKSA9PSBpICsgXFxcIlxcXCIgPyBjb2xvcihpICsgXFxcIuWkqeWJjVxcXCIsIFxcXCJyZWRcXFwiKSA6IGkgKyBcXFwi5aSp5YmNXFxcIiksXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdXJsOiAkKCkubGF6eVJ1bGUoKGkpID0+IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBwdXRNeVZhcihcXFwiZnJvbVxcXCIsIGkgKyBcXFwiXFxcIilcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZWZyZXNoUGFnZSgpXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIH0sIGkpLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGNvbF90eXBlOiBcXFwic2Nyb2xsX2J1dHRvblxcXCJcXG5cXG7CoCDCoCDCoCDCoCB9KVxcblxcbsKgIMKgIH1cXG5cXG7CoCDCoCBkLnB1c2goe1xcblxcbsKgIMKgIMKgIMKgIGNvbF90eXBlOiBcXFwibGluZVxcXCJcXG5cXG7CoCDCoCB9KVxcblxcbsKgIMKgIGZvciAobGV0IGkgPSAxOyBpIDwgZGF5czsgaSsrKSB7XFxuXFxuwqAgwqAgwqAgwqAgZC5wdXNoKHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogKGdldE15VmFyKFxcXCJ0b1xcXCIsIFxcXCIxXFxcIikgPT0gaSArIFxcXCJcXFwiID8gY29sb3IoaSArIFxcXCLlpKnlkI5cXFwiLCBcXFwicmVkXFxcIikgOiBpICsgXFxcIuWkqeWQjlxcXCIpLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHVybDogJCgpLmxhenlSdWxlKChpKSA9PiB7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcHV0TXlWYXIoXFxcInRvXFxcIiwgaSArIFxcXCJcXFwiKVxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJlZnJlc2hQYWdlKClcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgfSwgaSksXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgY29sX3R5cGU6IFxcXCJzY3JvbGxfYnV0dG9uXFxcIlxcblxcbsKgIMKgIMKgIMKgIH0pXFxuXFxuwqAgwqAgfVxcblxcblxcbsKgIMKgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmdldE1vdmllcyh0YWJzW2dldE15VmFyKFxcXCJqdWppXFxcIiwgXFxcIuWbveWIm1xcXCIpXSwgZ2V0TXlWYXIoXFxcImZyb21cXFwiLCBcXFwiMVxcXCIpLCBnZXRNeVZhcihcXFwidG9cXFwiLCBcXFwiMVxcXCIpKS5mb3JFYWNoKGl0ZW0gPT4ge1xcblxcbsKgIMKgIMKgIMKgIGQucHVzaCh7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdGl0bGU6IGl0ZW0uZGF0ZSArIFxcXCIg5ZGoXFxcIiArIGl0ZW0uZGF5X29mX3dlZWssXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiXFxuXFxuwqAgwqAgwqAgwqAgfSlcXG5cXG7CoCDCoCDCoCDCoCBpdGVtLmVwaXNvZGVzLmZvckVhY2goaSA9PiB7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgZC5wdXNoKHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogaS50aXRsZSxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBpbWc6IGkuY292ZXIrJ0BSZWZlcmVyPScsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZGVzYzppLnB1Yl9pbmRleC5tYXRjaCgv5Y2z5bCGLyk/J+KAmOKAmOKAmeKAmTxmb250IGNvbG9yPVxcXCJyZWRcXFwiPicraS5wdWJfaW5kZXgrJ1xcXFxuJytpLnB1Yl90aW1lKyc8L2ZvbnQ+JzogaS5wdWJfaW5kZXgrICdcXFxcbicgKyBpLnB1Yl90aW1lLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHVybDogXFxcImhpa2VyOi8vcGFnZS9maWxtZXJqaSNpbW1lcnNpdmVUaGVtZSNcXFwiLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGV4dHJhOiB7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgXFxcInNlYXNvbl9pZFxcXCI6IGkuc2Vhc29uX2lkXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfVxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIH0pXFxuXFxuwqAgwqAgwqAgwqAgfSlcXG5cXG7CoCDCoCB9KVxcblxcbn1cXG5cXG5cXG5cXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIueZu+W9lVwiLFwicGF0aFwiOlwibG9naW5cIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuc2V0UGFnZVRpdGxlKCfotKblj7fnmbvlvZXpobXpnaInKVxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAnY29va2ll55m75b2VJyxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIHJldHVybiAkKCcnLCAn6K+36L6T5YWl5L2g55qEY29va2llJykuaW5wdXQoKCkgPT4ge1xcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFwiXFxcIikgcmV0dXJuIFxcXCJ0b2FzdDovL2Nvb2tpZeS4jeiDveS4uuepulxcXCI7XFxuICAgICAgICAgICAgbGV0IHVzZXJpbmZvID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9uYXZcXFwiLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBpbnB1dFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSkpLmRhdGE7XFxuICAgICAgICAgICAgaWYgKHVzZXJpbmZvLmlzTG9naW4gPT09IGZhbHNlKSByZXR1cm4gXFxcInRvYXN0Oi8v5L2g55qEY29va2ll6LKM5Ly85aSx5pWI5LqG5ZaUflxcXCI7XFxuICAgICAgICAgICAgdXNlckluZm8gPSB7XFxuICAgICAgICAgICAgICAgIGNvb2tpZTogaW5wdXQsXFxuICAgICAgICAgICAgICAgIHVzZXJOYW1lOiB1c2VyaW5mby51bmFtZSxcXG4gICAgICAgICAgICAgICAgdXNlck1pZDogIHVzZXJpbmZvLm1pZCxcXG4gICAgICAgICAgICAgICAgdmlwU3RhdHVzOiB1c2VyaW5mby52aXBTdGF0dXMsXFxuICAgICAgICAgICAgICAgIGZhY2U6IHVzZXJpbmZvLmZhY2UgKyBcXFwiQFJlZmVyZXI9XFxcIlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBzZXR0aW5nID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpO1xcbiAgICAgICAgICAgIHNldHRpbmcudXNlckxpc3QudW5zaGlmdCh1c2VySW5mbyk7XFxuICAgICAgICAgICAgLy8g6L+H5ruk5o6JY29va2ll5Li656m655qE5YWD57SgXFxuICAgICAgICAgICAgc2V0dGluZy51c2VyTGlzdCA9IHNldHRpbmcudXNlckxpc3QuZmlsdGVyKHVzZXIgPT4gdXNlci5jb29raWUgIT09ICcnKTtcXG4gICAgICAgICAgICBzYXZlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIsIEpTT04uc3RyaW5naWZ5KHNldHRpbmcpKTtcXG4gICAgICAgICAgICBiYWNrKHRydWUpO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9jb29raWXorr7nva7miJDlip9cXFwiO1xcbiAgICAgICAgfSlcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG59KTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+eZu+mZhuivtOaYjicsXFxuICAgIGRlc2M6IFxcXCLpobXpnaLkuIvmlrnnmbvpmYbmiJDlip/lkI7vvIzlho3ngrnlh7vnoa7orqTnmbvlvZXljbPlj69cXFwiLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbn0sIHtcXG4gICAgdGl0bGU6ICfnmbvpmYbmiJDlip/lkI7vvIzlho3ngrnmiJHvvIEnLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgLy8g6L+Z6YeM6LSf6LSj5YaZQ29va2ll77yM5YWI6K+777yM5YaN6L+95YqgXFxuICAgICAgICBjb29raWUgPSBnZXRWYXIoJ2JpbGlDb29raWUnLCcnKTtcXG4gICAgICAgIGxvZyhcXFwi6I635Y+W5Yiw55qEY29va2llOlxcXCIrY29va2llKTtcXG4gICAgICAgIGlmIChjb29raWUgPT0gXFxcIlxcXCIpIHJldHVybiBcXFwidG9hc3Q6Ly/ojrflj5Zjb29raWXlpLHotKXvvIzlho3nrYnnrYnnnIvvvJ9cXFwiO1xcbiAgICAgICAgbGV0IHVzZXJpbmZvID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9uYXZcXFwiLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogY29va2llXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSkpLmRhdGE7XFxuICAgICAgICBpZiAodXNlcmluZm8uaXNMb2dpbiA9PT0gZmFsc2UpIHJldHVybiBcXFwidG9hc3Q6Ly/kvaDlhYjnmbvlvZXvvIzlho3ojrflj5Zjb29raWXvvIxPS++8n1xcXCI7XFxuICAgICAgICB1c2VySW5mbyA9IHtcXG4gICAgICAgICAgICBjb29raWU6IGNvb2tpZSxcXG4gICAgICAgICAgICB1c2VyTmFtZTogdXNlcmluZm8udW5hbWUsXFxuICAgICAgICAgICAgdXNlck1pZDogIHVzZXJpbmZvLm1pZCxcXG4gICAgICAgICAgICB2aXBTdGF0dXM6IHVzZXJpbmZvLnZpcFN0YXR1cyxcXG4gICAgICAgICAgICBmYWNlOiB1c2VyaW5mby5mYWNlICsgXFxcIkBSZWZlcmVyPVxcXCJcXG4gICAgICAgIH1cXG4gICAgICAgIHNldHRpbmcgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSk7XFxuICAgICAgICBzZXR0aW5nLnVzZXJMaXN0LnVuc2hpZnQodXNlckluZm8pO1xcbiAgICAgICAgLy8g6L+H5ruk5o6JY29va2ll5Li656m655qE5YWD57SgXFxuICAgICAgICBzZXR0aW5nLnVzZXJMaXN0ID0gc2V0dGluZy51c2VyTGlzdC5maWx0ZXIodXNlciA9PiB1c2VyLmNvb2tpZSAhPT0gJycpO1xcbiAgICAgICAgc2F2ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiLCBKU09OLnN0cmluZ2lmeShzZXR0aW5nKSk7XFxuICAgICAgICBiYWNrKHRydWUpO1xcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+WmguaenOayoeacieeZu+mZhuaIkOWKn++8jOW7uuiuruS9oOS4i+asoeeZu+mZhuaIkOWKn+WQjuS4jeimgeeCuemCo+S5iOW/q34nXFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfMSdcXG59LCB7XFxuICAgIHVybDogXFxcImh0dHBzOi8vbS5iaWxpYmlsaS5jb20vXFxcIixcXG4gICAgY29sX3R5cGU6IFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXCIsXFxuICAgIGRlc2M6IFxcXCJsaXN0JiZzY3JlZW4tMzAwXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICB2YXIgdG9rZW5fdGltZXIgPSBmdW5jdGlvbiAoKSB7XFxuICAgICAgICAgICAgICAgIHZhciB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGNvb2tpZSA9IGZiYS5nZXRDb29raWUoXFxcImh0dHBzOi8vbS5iaWxpYmlsaS5jb20vXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBmYmEucHV0VmFyKCdiaWxpQ29va2llJywgY29va2llKTtcXG4gICAgICAgICAgICAgICAgfSwgMTAwKVxcbiAgICAgICAgICAgIH07XFxuICAgICAgICAgICAgdG9rZW5fdGltZXIoKTtcXG4gICAgICAgIH0pLFxcbiAgICAgICAgY2FuQmFjazogdHJ1ZSxcXG4gICAgICAgIHVhOiBNT0JJTEVfVUFcXG4gICAgfVxcbn0pXFxuc2V0UmVzdWx0KGQpO1xcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5b2x6KeG5LqM57qnXCIsXCJwYXRoXCI6XCJmaWxtZXJqaVwiLFwicnVsZVwiOlwianM6XFxuLy8g5pWw5o2u5a6a5L2NXFxudmFyIGQgPSBbXTtcXG5pZiAoTVlfUEFSQU1TLnNlYXNvbl9pZCkge1xcbiAgICBzZWFzb25faWQgPSBNWV9QQVJBTVMuc2Vhc29uX2lkICsgXFxcIlxcXCI7XFxuICAgIERhdGEgPSBKU09OLnBhcnNlKGZldGNoKCdodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3ZpZXcvd2ViL3NlYXNvbj9zZWFzb25faWQ9JyArIHNlYXNvbl9pZCkpLnJlc3VsdDtcXG59IGVsc2Uge1xcbiAgICBEYXRhID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3BnYy92aWV3L3dlYi9zZWFzb24/ZXBfaWQ9JyArIE1ZX1BBUkFNUy5lcF9pZCkpLnJlc3VsdDtcXG59XFxuaWYgKCFEYXRhLmNvdmVyLm1hdGNoKC9odHRwcy8pKSB7XFxuICAgIOWwgemdoiA9IERhdGEuY292ZXIucmVwbGFjZSgnaHR0cCcsICdodHRwcycpICsgXFxcIkBSZWZlcmVyPVxcXCI7XFxufSBlbHNlIHtcXG4gICAg5bCB6Z2iID0gRGF0YS5jb3ZlciArIFxcXCJAUmVmZXJlcj1cXFwiO1xcbn1cXG50cnkge1xcbiAgICDlnLDljLogPSBEYXRhLmFyZWFzWzBdLm5hbWU7XFxufSBjYXRjaCAoZSkge1xcbiAgICDlnLDljLogPSAn5Zyw5Yy65pqC5pegJztcXG59XFxu566A5LuLID0gRGF0YS5ldmFsdWF0ZTtcXG4vLyDmraPniYdcXG7nsbvlnosgPSBEYXRhLnBvc2l0aXZlLnRpdGxlO1xcbuS4iuaYoOaXtumXtCA9IERhdGEucHVibGlzaC5wdWJfdGltZTtcXG50cnkge1xcbiAgICDlvpfliIYgPSBEYXRhLnJhdGluZy5zY29yZTtcXG59IGNhdGNoIChlKSB7XFxuICAgIOW+l+WIhiA9ICfmmoLml6DlvpcnO1xcbn1cXG7ov73liafml6XljoYgPSBEYXRhLm5ld19lcC5kZXNjO1xcbuabtOaWsOi/m+W6piA9IERhdGEubmV3X2VwLnRpdGxlO1xcbuW9seeJh+WQjeensCA9IERhdGEudGl0bGU7XFxu56ys5LqM5qCH6aKYID0gRGF0YS5zaGFyZV9zdWJfdGl0bGU7XFxu5Ymn6ZuG5YiX6KGoID0gRGF0YS5lcGlzb2Rlcy5maWx0ZXIoKGxpc3QpID0+IHtcXG4gICAgLy8g6L+H5ruk6aKE5ZGK44CB6Iqx57WuXFxuICAgIGlmIChnZXRJdGVtKCdwcmV2aWV3U3dpdGNoJywgJ2ZvbGQnKSA9PT0gJ2ZvbGQnICYmIGxpc3QuYmFkZ2UubWF0Y2goL+mihHzoirHnta4vKSkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgcmV0dXJuIHRydWU7XFxuICAgIH1cXG59KTtcXG7nn63orq8gPSBcXFwi4q2QXFxcIiArIOexu+WeiyArIFxcXCLirZBcXFwiICsg56ys5LqM5qCH6aKYICsgJ1xcXFxuJyArIOWcsOWMuiArICctJyArIOW+l+WIhiArICfliIZcXFxcbi0nICsg5LiK5pig5pe26Ze0ICsgJy0nO1xcbi8vIOmHjeWumuS5ieS6jOe6p+mhtemdouaVsOaNrlxcbnNldFBhZ2VUaXRsZSjlvbHniYflkI3np7ApO1xcbnNldFBhZ2VQaWNVcmwo5bCB6Z2iKTtcXG4vLyDliY3nva7lj4LmlbDlkozpooTlpITnkIYtLS1cXG5pbWdMaW5rID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ+WbvuaghycpO1xcbi8vIOWFqOWxgGxhennigJTigJTnm7Tpk74r5pat5o+SXFxudmFyIGxhenkgPSAkKCcnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgIHZpZGVvUGFybXMgPSBmaW5kSXRlbShpbnB1dCk7XFxuICAgIGFpZCA9IHZpZGVvUGFybXMuZXh0cmEuYWlkO1xcbiAgICBidmlkID0gdmlkZW9QYXJtcy5leHRyYS5idmlkO1xcbiAgICBjaWQgPSB2aWRlb1Bhcm1zLmV4dHJhLmNpZDtcXG4gICAgYmFkZ2UgPSB2aWRlb1Bhcm1zLmV4dHJhLmJhZGdlO1xcbiAgICAvLyDmj5DkuqTljoblj7LorrDlvZVcXG4gICAgJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikucmVwb3J0UHJvY2VzcyhhaWQsIGNpZCk7XFxuICAgIHZpcFN0YXR1cyA9IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS52aXBTdGF0dXM7XFxuICAgIGlmICh2aXBTdGF0dXMgIT0gMCkge1xcbiAgICAgICAgLy8g5aSn5Lya5ZGYXFxuICAgICAgICBpZiAoYmFkZ2UubWF0Y2goL+S7mOi0uS8pKSB7XFxuICAgICAgICAgICAgcmV0dXJuICQoWyfprZTmlq3op6PmnpAnLCAn5bey6LSt5LmwJ10sIDEpLnNlbGVjdCgoaW5wdXQsIGFpZCwgY2lkKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSAn6a2U5pat6Kej5p6QJykge1xcbiAgICAgICAgICAgICAgICAgICAgZXZhbChmZXRjaCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcycsIHt9KSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKGxpbmspO1xcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmJpbGlMYXp5KGFpZCwgY2lkLCAxMTYpLnJlcGxhY2UoLzsvZywgXFxcIu+8m++8m1xcXCIpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSwgbGluaywgYWlkLCBjaWQpXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5iaWxpTGF6eShhaWQsIGNpZCwgMTE2KS5yZXBsYWNlKC87L2csIFxcXCLvvJvvvJtcXFwiKTtcXG4gICAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIC8vIOaZrumAmueUqOaIt1xcbiAgICAgICAgdmFyIHNldHRpbmc9SlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpO1xcbiAgICAgICAgdmFyIGhhc0JmS2V5PXNldHRpbmcuYmZLZXkhPScnP3RydWU6ZmFsc2U7XFxuICAgICAgICBpZiAoIWhhc0JmS2V5KSB7XFxuICAgICAgICAgICAgaWYgKGJhZGdlLm1hdGNoKC/kvJrlkZh85LuY6LS5LykpIHtcXG4gICAgICAgICAgICAgICAgZXZhbChmZXRjaCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcycsIHt9KSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UoaW5wdXQpO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5iaWxpTGF6eShhaWQsIGNpZCwgMTE2KS5yZXBsYWNlKC87L2csIFxcXCLvvJvvvJtcXFwiKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIC8vIOWFseS6q+S8muWRmOaSreaUvuadg+ebilxcbiAgICAgICAgICAgIGlmIChiYWRnZS5tYXRjaCgv5LuY6LS5LykpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoWyfprZTmlq3op6PmnpAnLCAn5bey6LSt5LmwJ10sIDEpLnNlbGVjdCgoaW5wdXQsIGFpZCwgY2lkKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gJ+mtlOaWreino+aekCcpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBldmFsKGZldGNoKCdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJywge30pKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKGxpbmspO1xcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuYmlsaUxhenkoYWlkLCBjaWQsIDExNikucmVwbGFjZSgvOy9nLCBcXFwi77yb77ybXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0sIGxpbmssIGFpZCwgY2lkKVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5iaWxpTGF6eShhaWQsIGNpZCwgMTE2KS5yZXBsYWNlKC87L2csIFxcXCLvvJvvvJtcXFwiKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG59KTtcXG52YXIgQ29sb3IgPSBcXFwiIzE5Qjg5RFxcXCI7XFxudmFyIOavj+mhtembhuaVsCA9IDMwO1xcbnZhciDmkJzntKLmqKHlvI8gPSAn5YiG57uEJztcXG52YXIg6LCD55So5ZCN56ewID0gJ+eugOW9sSc7XFxucHV0TXlWYXIoJ+aKmOWPoCcsICflhbMnKTtcXG5wdXRNeVZhcign5pel5Y6GJywgJ+WFsycpO1xcbnB1dE15VmFyKCdEYXRhJywgRGF0YSk7XFxucHV0TXlWYXIoJ2xhenknLCBsYXp5KTtcXG4vLyDmuIXpmaTlj5jph49cXG5hZGRMaXN0ZW5lcignb25DbG9zZScsICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICBjbGVhck15VmFyKCfliIbpm4botbcnKTtcXG4gICAgY2xlYXJNeVZhcign5YiG6ZuG57uIJyk7XFxuICAgIGNsZWFyTXlWYXIoJ+aKmOWPoCcpO1xcbiAgICBjbGVhck15VmFyKCfml6XljoYnKTtcXG4gICAgY2xlYXJNeVZhcignRGF0YScpO1xcbiAgICBjbGVhck15VmFyKCdsYXp5Jyk7XFxuICAgIGNsZWFyTXlWYXIoJ+WJp+mbhuWIl+ihqCcpO1xcbn0pKVxcbi8vIOiuvue9ruWKqOaAgeacgOaWsOeroOiKglxcbnNldExhc3RDaGFwdGVyUnVsZSgnanM6JyArICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2dldFVwZGF0ZScpKS5ydWxlKTtcXG59KSk7XFxuLy8g6aG16Z2i5YaF5a655q2j5paHLS0tXFxuLy8g5Z+65pys5L+h5oGv5qih5Z2XXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IOefreiuryxcXG4gICAgZGVzYzog566A5LuLID09ICcnID8gJ+aaguaXoOeugOS7iycgOiDnroDku4suc3Vic3RyaW5nKDAsIDQ1KSArICfigJjigJjigJnigJnigKY8Zm9udCBjb2xvcj1cXFwiIzFDMUMxQ1xcXCI+6K+m5oOFPC9mb250PicsXFxuICAgIGltZzog5bCB6Z2iLFxcbiAgICB1cmw6ICQoKS5ydWxlKCjnroDku4spID0+IHtcXG4gICAgICAgIHJlcyA9IHt9O1xcbiAgICAgICAgdmFyIGQgPSBbXTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICflvbHniYfnroDku4vvvJonICsgJ1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHQnICsg566A5LuLLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbG9uZ190ZXh0J1xcbiAgICAgICAgfSk7XFxuICAgICAgICByZXMuZGF0YSA9IGQ7XFxuICAgICAgICBzZXRIb21lUmVzdWx0KHJlcyk7XFxuICAgIH0sIOeugOS7iyksXFxuICAgIGNvbF90eXBlOiAnbW92aWVfMV92ZXJ0aWNhbF9waWNfYmx1cicsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgdGl0bGU6ICfpooTlkYrjgIHoirHnta7lvIDlhbMnLCBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChnZXRJdGVtKCdwcmV2aWV3U3dpdGNoJywgJ2ZvbGQnKSA9PSAnZm9sZCcpIHtcXG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ3ByZXZpZXdTd2l0Y2gnLCAnb3BlbicpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6aKE5ZGK5bey57uP5YiH5o2i5Li65bGV56S6flxcXCI7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdwcmV2aWV3U3dpdGNoJywgJ2ZvbGQnKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+mihOWRiuS4jeWGjeWxleekun5cXFwiO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSksXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6ICdkbeebkuWtkCcsIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2Uvc2V0dGluZyNub0hpc3RvcnkjP3J1bGU9ZG3nm5LlrZAnO1xcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6ICflvLnluZXmjqfliLYnLCBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgIGlmIChnZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICdmYWxzZScpID09ICd0cnVlJykge1xcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnaXNPdmVycmlkZVNhdmUnLCAnZmFsc2UnKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lvLnluZXlsIbkuI3lj5dkbeebkuWtkOWPguaVsOaOp+WItic7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICd0cnVlJyk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5by55bmV5bCG5Y+X5YiwZG3nm5LlrZDlj4LmlbDmjqfliLYnO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1dXFxuICAgIH1cXG59KTtcXG4vLyDmm7TmlrDml6XljobmqKHlnZdcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+aXpeWOhicsXFxuICAgIGltZzogaW1nTGluay7ml6XljoYsXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgo6L+95Ymn5pel5Y6GLCDmm7TmlrDov5vluqYpID0+IHtcXG4gICAgICAgIGlmIChnZXRNeVZhcign5pel5Y6GJywgJ+WFsycpID09ICflvIAnKSB7XFxuICAgICAgICAgICAgZGVsZXRlSXRlbSgn6L+95Ymn5pel5Y6GJyk7XFxuICAgICAgICAgICAgcHV0TXlWYXIoJ+aXpeWOhicsICflhbMnKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgYWRkSXRlbUFmdGVyKCfmmL7npLrmqKHlvI8nLCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiDov73liafml6XljoYubWF0Y2goL+WujOe7k3zmnJ/lvoUvKSA/IOi/veWJp+aXpeWOhiA6IOi/veWJp+aXpeWOhiArICc8YnI+PGZvbnQgY29sb3I9XFxcInJlZFxcXCI+5pu05paw6IezJyArICjmm7TmlrDov5vluqYubWF0Y2goL1tcXFxcdTRlMDAtXFxcXHU5ZmE1XS8pID8g5pu05paw6L+b5bqmIDogKCfnrKwnICsgKOabtOaWsOi/m+W6piA9PSAnJyA/IDAgOiDmm7TmlrDov5vluqYpICsgJ+ivnScpKSArICc8L2ZvbnQ+JyxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJyaWNoX3RleHRcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgaWQ6ICfov73liafml6XljoYnXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBwdXRNeVZhcign5pel5Y6GJywgJ+W8gCcpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWIh+aNouaXpeWOhuS4ujonICsgZ2V0TXlWYXIoJ+aXpeWOhicsICflvIAnKVxcbiAgICB9LCDov73liafml6XljoYsIOabtOaWsOi/m+W6piksXFxuICAgIGNvbF90eXBlOiAnaWNvbl81J1xcbn0pO1xcbi8vIOiuoumYheaooeWdl1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn6K6i6ZiFJyxcXG4gICAgaW1nOiBpbWdMaW5rLuiuoumYhSxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIHNlbGVjdGlvbkxpc3QgPSBbJ+iuoumYhScsICflj5bmtojorqLpmIUnXTtcXG4gICAgICAgIHJldHVybiAkKHNlbGVjdGlvbkxpc3QsIDIpLnNlbGVjdCgoKSA9PiB7XFxuICAgICAgICAgICAgc2Vhc29uX2lkID0gSlNPTi5wYXJzZShnZXRNeVZhcignRGF0YScpKS5zZWFzb25faWQ7XFxuICAgICAgICAgICAgaWYgKGlucHV0ID09ICforqLpmIUnKSB7XFxuICAgICAgICAgICAgICAgIHJlcyA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLnN1YnNjcmliZUZpbG0oc2Vhc29uX2lkKTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXMgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5jYW5jZWxTdWJzY3JpYmVGaWxtKHNlYXNvbl9pZCk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly8nICsgcmVzO1xcbiAgICAgICAgfSk7XFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogJ2ljb25fNSdcXG59KTtcXG4vLyDor4TorrrmqKHlnZdcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+ivhOiuuicsXFxuICAgIGltZzogaW1nTGluay7mn6XnnIvor4TorrosXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eScpLnJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIHZhciBkID0gW107XFxuICAgICAgICAgICAgTGlzdCA9IEpTT04ucGFyc2UoZ2V0TXlWYXIoJ0RhdGEnKSkuZXBpc29kZXM7XFxuICAgICAgICAgICAgTGlzdC5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0uc2hhcmVfY29weSArICc8Zm9udCBjb2xvcj1cXFwiIzMzY2NjY1xcXCI+XFx04p6uPC9mb250PicsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGl0ZW0uY292ZXIgKyAnQFJlZmVyZXI9JyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJpZFxcXCI6IGl0ZW0uYWlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJ0eXBlXFxcIjogMVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICB9KTtcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiAnaWNvbl81J1xcbn0pO1xcblxcbi8vIOeyvuW9qee7p+e7reaooeWdl1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn5ZGo6L65JyxcXG4gICAgaW1nOiBpbWdMaW5rLuWRqOi+uSxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgIERhdGEgPSBKU09OLnBhcnNlKGdldE15VmFyKCdEYXRhJykpO1xcbiAgICAgICAgLy8g5pyJ5Lqb5rKh5pyJ55u05o6l5Y675o6J5oeS5b6X5aSE55CGflxcbiAgICAgICAgaWYgKERhdGEuc2VjdGlvbikge1xcbiAgICAgICAgICAgIOWRqOi+ueaVsOe7hCA9IFtcXFwi8J+Pt++4j+ebuOWFs+ezu+WIl1xcXCIsIFxcXCLwn6SjUFYm6Iqx57WuXFxcIiwgXFxcIvCfjYnnq5blsY/kuZ/nsr7lvalcXFwiLCBcXFwi8J+UpeeyvuW9qeS6jOWIm1xcXCJdO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICDlkajovrnmlbDnu4QgPSBbXFxcIvCfj7fvuI/nm7jlhbPns7vliJdcXFwiXTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8vIOWRqOi+ueaVsOe7hCA9IFtcXFwi8J+Pt++4j+ebuOWFs+ezu+WIl1xcXCIsIFxcXCLwn6SjUFYm6Iqx57WuXFxcIiwgXFxcIuerluWxj+S5n+eyvuW9qVxcXCIsIFxcXCLnsr7lvankuozliJtcXFwiXTtcXG4gICAgICAgIHJldHVybiAkKOWRqOi+ueaVsOe7hCwgMSwgJ+GDpueyvuW9qee7p+e7rScpLnNlbGVjdCgoKSA9PiB7XFxuICAgICAgICAgICAgRGF0YSA9IEpTT04ucGFyc2UoZ2V0TXlWYXIoJ0RhdGEnKSk7XFxuICAgICAgICAgICAgbGF6eSA9IGdldE15VmFyKCdsYXp5Jyk7XFxuICAgICAgICAgICAgaWYgKGlucHV0ID09PSAn8J+Pt++4j+ebuOWFs+ezu+WIlycpIHtcXG4gICAgICAgICAgICAgICAg57O75YiX5ZCN56ewID0gRGF0YS5zZWFzb25fdGl0bGVcXG4gICAgICAgICAgICAgICAg57O75YiX5pWw5o2uID0gRGF0YS5zZWFzb25zO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJCgpLnJ1bGUoKOezu+WIl+aVsOaNrikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgZCA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgc2V0UGFnZVRpdGxlKCfwn4+377iP55u45YWz57O75YiXJyk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAo57O75YiX5pWw5o2uID09IFtdIHx8IOezu+WIl+aVsOaNriA9PSAnJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGJpZz48Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7irZDor6XlvbHniYfmsqHmnInnm7jlhbPns7vliJflk6Z+4q2QPC9mb250PjwvYmlnPicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ3RvYXN0Oi8v6YO95rKh5pyJ77yM77yM5L2g54K55ZWl5ZGAficsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmlazor7fmnJ/lvoV+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAg57O75YiX5pWw5o2uLmZvckVhY2gobGlzdCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3Quc2Vhc29uX3RpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IChsaXN0Lmhvcml6b250YWxfY292ZXJfMTYxMCA9PSAnJyA/IChsaXN0Lmhvcml6b250YWxfY292ZXJfMTY5ID09ICcnID8gbGlzdC5jb3ZlciA6IGxpc3QuaG9yaXpvbnRhbF9jb3Zlcl8xNjkpIDogbGlzdC5ob3Jpem9udGFsX2NvdmVyXzE2MTApICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9maWxtZXJqaSNpbW1lcnNpdmVUaGVtZSMnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBsaXN0Lm5ld19lcC5pbmRleF9zaG93LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcImVwX2lkXFxcIjogbGlzdC5uZXdfZXAuaWRcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICBzZXRIb21lUmVzdWx0KGQpO1xcbiAgICAgICAgICAgICAgICB9LCDns7vliJfmlbDmja4pXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gJ/CfpKNQViboirHnta4nKSB7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICBQVuWSjOiKsee1ruaVsOaNriA9IERhdGEuc2VjdGlvblswXS5lcGlzb2RlcztcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCkucnVsZSgoUFblkozoirHnta7mlbDmja4sIGxhenkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UGFnZVRpdGxlKCfwn6SjUFYm6Iqx57WuJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKFBW5ZKM6Iqx57Wu5pWw5o2uID09IFtdIHx8IFBW5ZKM6Iqx57Wu5pWw5o2uID09ICcnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiaWc+PGZvbnQgY29sb3I9XFxcInJlZFxcXCI+4q2Q6K+l5b2x54mHL+inhumikeayoeacieebuOWFs1BW5ZKM6Iqx57Wu5ZOmfuKtkDwvZm9udD48L2JpZz4nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAndG9hc3Q6Ly/pg73msqHmnInvvIzvvIzkvaDngrnllaXlkYB+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmlazor7fmnJ/lvoV+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIFBW5ZKM6Iqx57Wu5pWw5o2uLmZvckVhY2gobGlzdCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5jb3ZlciArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBsaXN0LmxpbmsgKyBsYXp5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogbGlzdC5zdWJ0aXRsZSArICdcXFxcbicgKyBsaXN0LmxvbmdfdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5saW5rLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZDogbGlzdC5haWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnZpZDogbGlzdC5idmlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpZDogbGlzdC5jaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFkZ2U6IGxpc3QuYmFkZ2VcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIFBW5ZKM6Iqx57Wu5pWw5o2uLCBsYXp5KVxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5rKh5pyJ5pWw5o2u5ZOmfidcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09ICfwn42J56uW5bGP5Lmf57K+5b2pJykge1xcbiAgICAgICAgICAgICAgICB0cnkge1xcbiAgICAgICAgICAgICAgICAgICAg56uW5bGP5Lmf57K+5b2p5pWw5o2uID0gRGF0YS5zZWN0aW9uWzFdLmVwaXNvZGVzO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoKS5ydWxlKCjnq5blsY/kuZ/nsr7lvanmlbDmja4sIGxhenkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkID0gW107XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0UGFnZVRpdGxlKCfwn42J56uW5bGP5Lmf57K+5b2pJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKOerluWxj+S5n+eyvuW9qeaVsOaNriA9PSBbXSB8fCDnq5blsY/kuZ/nsr7lvanmlbDmja4gPT0gJycpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGJpZz48Zm9udCBjb2xvcj1cXFwicmVkXFxcIj7irZDor6XlvbHniYcv6KeG6aKR5rKh5pyJ55u45YWz56uW5bGP55+t6KeG6aKR5ZOmfuKtkDwvZm9udD48L2JpZz4nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAndG9hc3Q6Ly/pg73msqHmnInvvIzvvIzkvaDngrnllaXlkYB+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmlazor7fmnJ/lvoV+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIOerluWxj+S5n+eyvuW9qeaVsOaNri5mb3JFYWNoKGxpc3QgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QuY292ZXIgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogbGlzdC5saW5rICsgbGF6eSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGxpc3Quc3VidGl0bGUgKyAnXFxcXG4nICsgbGlzdC5sb25nX3RpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGxpc3QubGluayxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYWlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ2aWQ6IGxpc3QuYnZpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaWQ6IGxpc3QuY2lkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhZGdlOiBsaXN0LmJhZGdlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEhvbWVSZXN1bHQoZCk7XFxuICAgICAgICAgICAgICAgICAgICB9LCDnq5blsY/kuZ/nsr7lvanmlbDmja4sIGxhenkpXFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/msqHmnInmlbDmja7lk6Z+J1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gJ/CflKXnsr7lvankuozliJsnKSB7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICDnsr7lvankuozliJvmlbDmja4gPSBEYXRhLnNlY3Rpb25bMl0uZXBpc29kZXM7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgpLnJ1bGUoKOeyvuW9qeS6jOWIm+aVsOaNriwgbGF6eSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRQYWdlVGl0bGUoJ/CflKXnsr7lvankuozliJsnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAo57K+5b2p5LqM5Yib5pWw5o2uID09IFtdIHx8IOeyvuW9qeS6jOWIm+aVsOaNriA9PSAnJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJk8YmlnPjxmb250IGNvbG9yPVxcXCJyZWRcXFwiPuKtkOivpeW9seeJhy/op4bpopHmsqHmnInkuozliJvkvZzlk4Hlk6Z+4q2QPC9mb250PjwvYmlnPicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICd0b2FzdDovL+mDveayoeacie+8jO+8jOS9oOeCueWVpeWRgH4nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJ+aVrOivt+acn+W+hX4nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAg57K+5b2p5LqM5Yib5pWw5o2uLmZvckVhY2gobGlzdCA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOmSiOWvuemDqOWIhuWPguaVsOe8uuWkseeahOaDheWGteWmguWHoeS6uuS/ruS7meS8oOWGmeeahO+8jO+8jFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAobGlzdC5haWQgPT0gMCB8fCBsaXN0LmNpZCA9PSAwKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2aWVkZW9EYXRhID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS92aWV3P2FpZD1cXFwiICsgbGlzdC5saW5rLnNwbGl0KCdhdicpWzFdLCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6ICdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbWV0aG9kOiBcXFwiR0VUXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpLmRhdGE7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQgPSB2aWVkZW9EYXRhLmFpZDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ2aWQgPSB2aWVkZW9EYXRhLmJ2aWQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaWQgPSB2aWVkZW9EYXRhLmNpZDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZCA9IGxpc3QuYWlkO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnZpZCA9IGxpc3QuYnZpZDtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpZCA9IGxpc3QuY2lkO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5jb3ZlciArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBsaXN0LmxpbmsgKyBsYXp5LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogbGlzdC5zdWJ0aXRsZSArICdcXFxcbicgKyBsaXN0LmxvbmdfdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5saW5rLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZDogYWlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ2aWQ6IGJ2aWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lkOiBjaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFkZ2U6IGxpc3QuYmFkZ2VcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKTtcXG4gICAgICAgICAgICAgICAgICAgIH0sIOeyvuW9qeS6jOWIm+aVsOaNriwgbGF6eSlcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+ayoeacieaVsOaNruWTpn4nXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+ato+WcqOi/m+WFpVxcXCIgKyBpbnB1dCArIFxcXCLnlYzpnaIuLi5cXFwiO1xcbiAgICAgICAgfSlcXG4gICAgfSksXFxuICAgIGNvbF90eXBlOiBcXFwiaWNvbl81XFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGlkOiAn57K+5b2p57un57utJ1xcbiAgICB9XFxufSk7XFxuLy8g5pi+56S65qih5byP5pu05pS55qih5Z2XXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IGdldEl0ZW0oJ+aooeW8jycsICflj4zovrknKSxcXG4gICAgaW1nOiBnZXRJdGVtKCfmqKHlvI8nLCAn5Y+M6L65JykgPT0gJ+WIl+ihqCcgPyBpbWdMaW5rLuWIl+ihqCA6IGltZ0xpbmsu5Y+M6L65LFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAg5pi+56S655qE5Ymn6ZuG5YiX6KGoID0gSlNPTi5wYXJzZShnZXRNeVZhcign5pi+56S655qE5Ymn6ZuG5YiX6KGoJykpO1xcbiAgICAgICAgaWYgKGdldEl0ZW0oJ+aooeW8jycsICflj4zovrknKSA9PSAn5YiX6KGoJykge1xcbiAgICAgICAgICAgIOaYvuekuueahOWJp+mbhuWIl+ihqC5mb3JFYWNoKGVsID0+IHtcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbShlbC5saW5rLCB7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzInLFxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICBzZXRJdGVtKCfmqKHlvI8nLCAn5Y+M6L65JylcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAg5pi+56S655qE5Ymn6ZuG5YiX6KGoLmZvckVhY2goZWwgPT4ge1xcbiAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKGVsLmxpbmssIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHNldEl0ZW0oJ+aooeW8jycsICfliJfooagnKVxcbiAgICAgICAgfVxcbiAgICAgICAgaW1nTGluayA9IHN0b3JhZ2UwLmdldE15VmFyKCflm77moIcnKTtcXG4gICAgICAgIHVwZGF0ZUl0ZW0oJ+aYvuekuuaooeW8jycsIHtcXG4gICAgICAgICAgICB0aXRsZTogZ2V0SXRlbSgn5qih5byPJywgJ+WPjOi+uScpLFxcbiAgICAgICAgICAgIGltZzogZ2V0SXRlbSgn5qih5byPJywgJ+WPjOi+uScpID09ICfliJfooagnID8gaW1nTGluay7liJfooaggOiBpbWdMaW5rLuWPjOi+uSxcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWIh+aNouaooeW8j+S4ujonICsgZ2V0SXRlbSgn5qih5byPJywgJ+WPjOi+uScpXFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogJ2ljb25fNScsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBpZDogJ+aYvuekuuaooeW8jydcXG4gICAgfVxcbn0sIHtcXG4gICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJyxcXG59KTtcXG4vLyDpgInmj5LmqKHlnZfigJTigJTlsYDpg6jliLfmlrDniYhcXG7mnaXmupAgPSAnYmwnO1xcbnB1dE15VmFyKCfnroDmj5InLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgbGV0IHRpdGxlQXJyID0gW11cXG4gICAgc2V0RmlsZSA9IHJlYWRGaWxlKCdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicpO1xcbiAgICB0cnkge1xcbiAgICAgICAgZXZhbCgnanNvbj0nICsgc2V0RmlsZSk7XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGxvZygnSnNvbuino+aekOWPkeeUn+S6humUmeivrzonICsgZS5tZXNzYWdlKTtcXG4gICAgfVxcbiAgICB0aXRsZUFyciA9IGpzb24udGl0bGU7XFxuICAgIGxldCBiYXJyeTEgPSBbJ+Kcje+4j+i+heWKqSddO1xcbiAgICBsZXQgYmFycnkyID0gWyfwn5Om77iP6a2U5patJ107XFxuICAgIGxldCBiYXJyeTMgPSBbJ/CflI3mkJzntKInXTtcXG4gICAgdGl0bGVBcnIgPSBiYXJyeTMuY29uY2F0KHRpdGxlQXJyKTtcXG4gICAgdGl0bGVBcnIgPSBiYXJyeTIuY29uY2F0KHRpdGxlQXJyKTtcXG4gICAgdGl0bGVBcnIgPSBiYXJyeTEuY29uY2F0KHRpdGxlQXJyKTtcXG4gICAgZXZhbCgnb3A9anNvbi5zZXR0aW5ncy4nICsg5p2l5rqQKTtcXG4gICAgdGl0bGVBcnIgPSB0aXRsZUFyci5tYXAoKGl0KSA9PiB7XFxuICAgICAgICByZXR1cm4gaXQgPT09IG9wID8gJ/CfkYknICsgaXQgOiBpdDtcXG4gICAgfSk7XFxuICAgIHB1dE15VmFyKCfop6PmnpDmlbDnu4QnLCB0aXRsZUFycik7XFxuICAgIHB1dE15VmFyKCdzZXRGaWxlJywgc2V0RmlsZSk7XFxufSkpXFxuZXZhbChnZXRNeVZhcign566A5o+SJykpO1xcbmQucHVzaCh7XFxuICAgIHRpdGxlOiAn6Kej5p6Q77ya8J+UmDxmb250IGNvbG9yPVxcXCInICsgQ29sb3IgKyAnXFxcIj4nICsgb3AgKyAnPC9mb250PlxcXFx0XFxcXHTpobXnoIHvvJo8Zm9udCBjb2xvcj1cXFwiJyArIENvbG9yICsgJ1xcXCI+JyArICgoZ2V0TXlWYXIoJ+WIhumbhui1tycsICfpppbpobUnKSA9PSAn6aaW6aG1JykgPyAn6aaW6aG1JyA6IChnZXRNeVZhcign5YiG6ZuG6LW3JykgKyAnLScgKyBnZXRNeVZhcign5YiG6ZuG57uIJykpKSArICc8L2ZvbnQ+JyxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChqc29uLCDmnaXmupAsIENvbG9yLCBvcCwg5b2x54mH5ZCN56ewLCDmkJzntKLmqKHlvI8sIOiwg+eUqOWQjeensCkgPT4ge1xcbiAgICAgICAgZXZhbChnZXRNeVZhcign566A5o+SJykpO1xcbiAgICAgICAgcmV0dXJuICQoZXZhbChnZXRNeVZhcign6Kej5p6Q5pWw57uEJykpLCAzKS5zZWxlY3QoKGpzb24sIOadpea6kCwgQ29sb3IsIG9wLCDlvbHniYflkI3np7AsIOaQnOe0ouaooeW8jywg6LCD55So5ZCN56ewKSA9PiB7XFxuICAgICAgICAgICAgc2V0RmlsZSA9IGdldE15VmFyKCdzZXRGaWxlJyk7XFxuICAgICAgICAgICAgaW5wdXQgPSBpbnB1dC5yZXBsYWNlKC/wn5GJL2csICcnKTtcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09ICfinI3vuI/ovoXliqknKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkKCkucnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2hvbWU/cnVsZT3phY3nva7liqnmiYsnKSkucnVsZSk7XFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PT0gJ/Cfk6bvuI/prZTmlq0nKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL1JvdXRlP3J1bGU9TXlGaWVsZOG0sOKBvyZ0eXBlPee8lui+kSNub0hpc3RvcnkjXFxcIjtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSAn8J+UjeaQnOe0oicpIHtcXG4gICAgICAgICAgICAgICAgaWYgKOaQnOe0ouaooeW8jyA9PSAn5YiG57uEJykge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3NlYXJjaD9zPVxcXCIgKyDlvbHniYflkI3np7AgKyBcXFwiJmdyb3VwPVxcXCIgKyDosIPnlKjlkI3np7A7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vc2VhcmNoP3M9XFxcIiArIOW9seeJh+WQjeensCArIFxcXCImcnVsZT1cXFwiICsg6LCD55So5ZCN56ewO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIC8vIOWOn+WFiOeahOmFjee9rlxcbiAgICAgICAgICAgIG9yaWdpblNldHRpbmdzID0gSlNPTi5zdHJpbmdpZnkoanNvbi5zZXR0aW5ncyk7XFxuICAgICAgICAgICAgLy8g5L+u5pS56YWN572uXFxuICAgICAgICAgICAgZXZhbCgnanNvbi5zZXR0aW5ncy4nICsg5p2l5rqQICsgJz1pbnB1dDsnKTtcXG4gICAgICAgICAgICBzZXRGaWxlID0gc2V0RmlsZS5yZXBsYWNlKG9yaWdpblNldHRpbmdzLCBKU09OLnN0cmluZ2lmeShqc29uLnNldHRpbmdzKSk7XFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJywgc2V0RmlsZSk7XFxuICAgICAgICAgICAgLy8g5Yi35paw5YWD57SgXFxuICAgICAgICAgICAgZXZhbChnZXRNeVZhcign566A5o+SJykpO1xcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oJ29wJywge1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+ino+aekO+8mvCflJg8Zm9udCBjb2xvcj1cXFwiJyArIENvbG9yICsgJ1xcXCI+JyArIG9wICsgJzwvZm9udD5cXFxcdFxcXFx06aG156CB77yaPGZvbnQgY29sb3I9XFxcIicgKyBDb2xvciArICdcXFwiPicgKyAoKGdldE15VmFyKCfliIbpm4botbcnLCAn6aaW6aG1JykgPT0gJ+mmlumhtScpID8gJ+mmlumhtScgOiAoZ2V0TXlWYXIoJ+WIhumbhui1tycpICsgJy0nICsgZ2V0TXlWYXIoJ+WIhumbhue7iCcpKSkgKyAnPC9mb250PicsXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WIh+aNouino+aekOWPo+S4ujpcXFwiICsgaW5wdXQ7XFxuICAgICAgICB9LCBqc29uLCDmnaXmupAsIENvbG9yLCBvcCwg5b2x54mH5ZCN56ewLCDmkJzntKLmqKHlvI8sIOiwg+eUqOWQjeensClcXG4gICAgfSwganNvbiwg5p2l5rqQLCBDb2xvciwgb3AsIOW9seeJh+WQjeensCwg5pCc57Si5qih5byPLCDosIPnlKjlkI3np7ApLFxcbiAgICBpbWc6ICdoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L3R1Ymlhby9iaWxpYmlsaS5zdmcnLFxcbiAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBpZDogJ29wJ1xcbiAgICB9XFxufSk7XFxuLy8g5rua5Yqo5Ymn6ZuG5p2h5qCPXFxu5Ymn6ZuG6ZW/5bqmID0g5Ymn6ZuG5YiX6KGoLmxlbmd0aDtcXG5pZiAo5Ymn6ZuG6ZW/5bqmID4g5q+P6aG16ZuG5pWwKSB7XFxuICAgIHB1dE15VmFyKCfliLfmlrDpgInpm4YnLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgIHB1dE15VmFyKCfliIbpm4botbcnLCBzdGFydCk7XFxuICAgICAgICBwdXRNeVZhcign5YiG6ZuG57uIJywgZW5kKTtcXG4gICAgICAgIGV2YWwoZ2V0TXlWYXIoJ+eugOaPkicpKTtcXG4gICAgICAgIHVwZGF0ZUl0ZW0oJ29wJywge1xcbiAgICAgICAgICAgIHRpdGxlOiAn6Kej5p6Q77ya8J+UmDxmb250IGNvbG9yPVxcXCInICsgQ29sb3IgKyAnXFxcIj4nICsgb3AgKyAnPC9mb250PlxcXFx0XFxcXHTpobXnoIHvvJo8Zm9udCBjb2xvcj1cXFwiJyArIENvbG9yICsgJ1xcXCI+JyArICgoZ2V0TXlWYXIoJ+WIhumbhui1tycsICfpppbpobUnKSA9PSAn6aaW6aG1JykgPyAn6aaW6aG1JyA6IChnZXRNeVZhcign5YiG6ZuG6LW3JykgKyAnLScgKyBnZXRNeVZhcign5YiG6ZuG57uIJykpKSArICc8L2ZvbnQ+JyxcXG4gICAgICAgIH0pXFxuICAgICAgICAvLyDliKDpmaRcXG4gICAgICAgIOaYvuekuueahOWJp+mbhuWIl+ihqCA9IEpTT04ucGFyc2UoZ2V0TXlWYXIoJ+aYvuekuueahOWJp+mbhuWIl+ihqCcpKTtcXG4gICAgICAgIOaYvuekuueahOWJp+mbhuWIl+ihqC5mb3JFYWNoKGVsID0+IHtcXG4gICAgICAgICAgICBkZWxldGVJdGVtKGVsLmxpbmspO1xcbiAgICAgICAgfSk7XFxuICAgICAgICAvLyDmt7vliqBcXG4gICAgICAgIGxhenkgPSBnZXRNeVZhcignbGF6eScpO1xcbiAgICAgICAg5Ymn6ZuG5YiX6KGoID0gSlNPTi5wYXJzZShnZXRNeVZhcign5Ymn6ZuG5YiX6KGoJykpO1xcbiAgICAgICAg5pi+56S655qE5Ymn6ZuG5YiX6KGoID0g5Ymn6ZuG5YiX6KGoLnNsaWNlKHN0YXJ0IC0gMSwgZW5kKTtcXG4gICAgICAgIG5ld0FycmF5ID0gW107XFxuICAgICAgICBpbmRleCA9IDE7XFxuICAgICAgICDmmL7npLrnmoTliafpm4bliJfooaguZm9yRWFjaChsaXN0ID0+IHtcXG4gICAgICAgICAgICBpZiAoZ2V0SXRlbSgn5qih5byPJywgJ+WPjOi+uScpID09ICfliJfooagnKSB7XFxuICAgICAgICAgICAgICAgIG5ld0FycmF5LnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QubG9uZ190aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5jb3ZlciArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBsaXN0LmxpbmsgKyBsYXp5LFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogbGlzdC50aXRsZS5tYXRjaCgvWzAtOV0vKSA/IChsaXN0LmJhZGdlICsgJ+esrCcgKyBsaXN0LnRpdGxlICsgJ+ivnScpIDogbGlzdC50aXRsZSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBsaXN0LmxpbmssXFxuICAgICAgICAgICAgICAgICAgICAgICAgYWlkOiBsaXN0LmFpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBidmlkOiBsaXN0LmJ2aWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lkOiBsaXN0LmNpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWRnZTogbGlzdC5iYWRnZVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICBuZXdBcnJheS5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LmxvbmdfdGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QuY292ZXIgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHVybDogbGlzdC5saW5rICsgbGF6eSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IGxpc3QudGl0bGUubWF0Y2goL1swLTldLykgPyAobGlzdC5iYWRnZSArICfnrKwnICsgbGlzdC50aXRsZSArICfor50nKSA6IGxpc3QudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzInLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5saW5rLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFpZDogbGlzdC5haWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnZpZDogbGlzdC5idmlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpZDogbGlzdC5jaWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgYmFkZ2U6IGxpc3QuYmFkZ2VcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIGluZGV4ICs9IDE7XFxuICAgICAgICB9KTtcXG4gICAgICAgIGFkZEl0ZW1BZnRlcihnZXRNeVZhcign5pyr6aG1JyksIG5ld0FycmF5KTtcXG4gICAgICAgIHB1dE15VmFyKCfmmL7npLrnmoTliafpm4bliJfooagnLCDmmL7npLrnmoTliafpm4bliJfooagpO1xcbiAgICB9KSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICB0aXRsZTogJ+KItycsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkOiAn5Y2g5L2N56ymJyxcXG4gICAgICAgIH1cXG4gICAgfSlcXG4gICAgcHV0TXlWYXIoJ+WIhumbhui1tycsIDEpO1xcbiAgICBwdXRNeVZhcign5YiG6ZuG57uIJywg5q+P6aG16ZuG5pWwKTtcXG4gICAgcHV0TXlWYXIoJ+WJp+mbhuWIl+ihqCcsIOWJp+mbhuWIl+ihqCk7XFxuICAgIOaAu+mhteaVsCA9IE1hdGguY2VpbCjliafpm4bplb/luqYgLyDmr4/pobXpm4bmlbApO1xcbiAgICBzdGFydCA9IDE7XFxuICAgIGVuZCA9IOavj+mhtembhuaVsDtcXG4gICAgZm9yIChsZXQgcGFnZSA9IDE7IHBhZ2UgPD0g5oC76aG15pWwOyBwYWdlKyspIHtcXG4gICAgICAgIGlmIChlbmQgPiDliafpm4bplb/luqYpIHtcXG4gICAgICAgICAgICBlbmQgPSDliafpm4bplb/luqY7XFxuICAgICAgICB9XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBzdGFydCArICctJyArIGVuZCxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoc3RhcnQsIGVuZCwgQ29sb3IsIOadpea6kCkgPT4ge1xcbiAgICAgICAgICAgICAgICBldmFsKGdldE15VmFyKCfliLfmlrDpgInpm4YnKSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuICAgICAgICAgICAgfSwgc3RhcnQsIGVuZCwgQ29sb3IsIOadpea6kCksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogc3RhcnQgKyAnLScgKyBlbmRcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIGlmIChlbmQgPCDliafpm4bplb/luqYpIHtcXG4gICAgICAgICAgICBzdGFydCArPSDmr4/pobXpm4bmlbA7XFxuICAgICAgICAgICAgZW5kICs9IOavj+mhtembhuaVsDtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICAvLyDorrDlvZXmnKvpobXnmoRpZFxcbiAgICBwdXRNeVZhcign5pyr6aG1Jywgc3RhcnQgKyAnLScgKyBlbmQpO1xcbn0gZWxzZSB7XFxuICAgIHB1dE15VmFyKCfliIbpm4botbcnLCAxKTtcXG4gICAgcHV0TXlWYXIoJ+WIhumbhue7iCcsIOWJp+mbhumVv+W6pik7XFxufVxcbi8vIOWxleekuuWJp+mbhjpcXG7mmL7npLrnmoTliafpm4bliJfooaggPSDliafpm4bliJfooaguc2xpY2UoMCwgZ2V0TXlWYXIoJ+WIhumbhue7iCcpKTtcXG5wdXRNeVZhcign5pi+56S655qE5Ymn6ZuG5YiX6KGoJywg5pi+56S655qE5Ymn6ZuG5YiX6KGoKTtcXG5pbmRleCA9IDE7XFxu5pi+56S655qE5Ymn6ZuG5YiX6KGoLmZvckVhY2gobGlzdCA9PiB7XFxuICAgIGlmIChnZXRJdGVtKCfmqKHlvI8nLCAn5Y+M6L65JykgPT0gJ+WIl+ihqCcpIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGxpc3QubG9uZ190aXRsZSxcXG4gICAgICAgICAgICBpbWc6IGxpc3QuY292ZXIgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICB1cmw6IGxpc3QubGluayArIGxhenksXFxuICAgICAgICAgICAgZGVzYzogbGlzdC50aXRsZS5tYXRjaCgvWzAtOV0vKSA/IChsaXN0LmJhZGdlICsgJ+esrCcgKyBsaXN0LnRpdGxlICsgJ+ivnScpIDogbGlzdC50aXRsZSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiBsaXN0LmxpbmssXFxuICAgICAgICAgICAgICAgIGFpZDogbGlzdC5haWQsXFxuICAgICAgICAgICAgICAgIGJ2aWQ6IGxpc3QuYnZpZCxcXG4gICAgICAgICAgICAgICAgY2lkOiBsaXN0LmNpZCxcXG4gICAgICAgICAgICAgICAgYmFkZ2U6IGxpc3QuYmFkZ2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGxpc3QubG9uZ190aXRsZSxcXG4gICAgICAgICAgICBpbWc6IGxpc3QuY292ZXIgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICB1cmw6IGxpc3QubGluayArIGxhenksXFxuICAgICAgICAgICAgZGVzYzogbGlzdC50aXRsZS5tYXRjaCgvWzAtOV0vKSA/IChsaXN0LmJhZGdlICsgJ+esrCcgKyBsaXN0LnRpdGxlICsgJ+ivnScpIDogbGlzdC50aXRsZSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzInLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiBsaXN0LmxpbmssXFxuICAgICAgICAgICAgICAgIGFpZDogbGlzdC5haWQsXFxuICAgICAgICAgICAgICAgIGJ2aWQ6IGxpc3QuYnZpZCxcXG4gICAgICAgICAgICAgICAgY2lkOiBsaXN0LmNpZCxcXG4gICAgICAgICAgICAgICAgYmFkZ2U6IGxpc3QuYmFkZ2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfVxcbiAgICBpbmRleCArPSAxO1xcbn0pO1xcbnNldFJlc3VsdChkKTtcXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcInVw5Li76aG1XCIsXCJwYXRoXCI6XCJ1cEhvbWVcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuLy8g6aKE5aSE55CGXFxucHV0TXlWYXIoJ3VwSW5mbycsICflhbMnKTtcXG5zZXRQYWdlVGl0bGUoTVlfUEFSQU1TLnRpdGxlKTtcXG5pbWdMaW5rID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ+WbvuaghycpO1xcbi8vIOmYsuatouWPjeeIrOiZq++8jOS7juS4iuS4gOS4qumhtemdouS8oOmAkuaVsOaNruKAlOKAlOWPjeeIrOiZq+S4pemHjVxcbnVwTWlkID0gTVlfUEFSQU1TLm1pZCArIFxcXCJcXFwiO1xcbnVwTmFtZSA9IE1ZX1BBUkFNUy50aXRsZTtcXG51cEZhY2UgPSBNWV9QQVJBTVMuZmFjZTtcXG5yZWxhdGlvbiA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLnVzZXJNYXBwaW5nKHVwTWlkKTtcXG4vLyDlpLTlg4/moI9cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJzxmb250IGNvbG9yPVxcXCJibHVlXFxcIj4nICsgdXBOYW1lICsgJzwvZm9udD4nLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHVwTWlkKSA9PiB7XFxuICAgICAgICBpZiAoZ2V0TXlWYXIoJ3VwSW5mbycsICflhbMnKSA9PSAn5byAJykge1xcbiAgICAgICAgICAgIGRlbGV0ZUl0ZW0oJ3VwSW5mbycpO1xcbiAgICAgICAgICAgIHB1dE15VmFyKCd1cEluZm8nLCAn5YWzJyk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIC8vIOeUqOaIt+WfuuacrOS/oeaBr1xcbiAgICAgICAgICAgICAgICBxdWVyeUpzb24gPSB7XFxuICAgICAgICAgICAgICAgICAgICBtaWQ6IHVwTWlkLFxcbiAgICAgICAgICAgICAgICAgICAgdG9rZW46ICcnLFxcbiAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm06ICd3ZWInLFxcbiAgICAgICAgICAgICAgICAgICAgd2ViX2xvY2F0aW9uOiAxNTUwMTAxXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcGFybXMgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5nZXRXYmlFbmMocXVlcnlKc29uKTtcXG4gICAgICAgICAgICAgICAgaW5mb0xpbmsgPSAnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc3BhY2Uvd2JpL2FjYy9pbmZvPycgKyBwYXJtcztcXG4gICAgICAgICAgICAgICAgdXBEYXRhID0gSlNPTi5wYXJzZShmZXRjaChpbmZvTGluaywge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGNvb2tpZT1KU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pKS5kYXRhO1xcbiAgICAgICAgICAgICAgICB1cE5hbWUgPSB1cERhdGEubmFtZTtcXG4gICAgICAgICAgICAgICAgdXBTZXggPSB1cERhdGEuc2V4O1xcbiAgICAgICAgICAgICAgICB1cFNpZ24gPSB1cERhdGEuc2lnbjtcXG4gICAgICAgICAgICAgICAgdXBCaXJ0aGRheSA9IHVwRGF0YS5iaXJ0aGRheTtcXG4gICAgICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgICAgIHVwU2Nob29sID0gdXBEYXRhLnNjaG9vbC5uYW1lO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICB1cFNjaG9vbCA9ICcnO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICB1cElkZW50aWZpY2F0aW9uID0gdXBEYXRhLm9mZmljaWFsLnRpdGxlO1xcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgICAgICAgICB1cElkZW50aWZpY2F0aW9uID0gJyc7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKCdjdXJyZW50VXAnLCB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ3VwOicgKyB1cE5hbWUgKyAnXFxcXG5taWQ6JyArIHVwTWlkICsgJ1xcXFxu5oCn5YirOicgKyB1cFNleCArICdcXFxcbueUn+aXpTonICsgKHVwQmlydGhkYXkgPT0gJycgPyAn5pyq5aGr5YaZJyA6IHVwQmlydGhkYXkpICsgJ1xcXFxuJyArICh1cFNjaG9vbCA9PSAnJyA/ICcnIDogJ+WtpuagoTonICsgdXBTY2hvb2wgKyAnXFxcXG4nKSArICh1cFNpZ24gPT0gJycgPyAnXFxcXG4nIDogdXBTaWduICsgJ1xcXFxuJykgKyAodXBJZGVudGlmaWNhdGlvbiA9PSAnJyA/ICcnIDogJ+iupOivgTonKSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsb25nX3RleHQnLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ3VwSW5mbydcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICBhZGRJdGVtQWZ0ZXIoJ2N1cnJlbnRVcCcsIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5aW95YOP5Ye65LqG54K55oSP5aSW77yf5LuA5LmI6YO95pyo5pyJ5ZGificsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbG9uZ190ZXh0JyxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICd1cEluZm8nXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBwdXRNeVZhcigndXBJbmZvJywgJ+W8gCcpO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+S/oeaBr+aKmOWPoDonICsgZ2V0TXlWYXIoJ3VwSW5mbycsICflvIAnKVxcbiAgICB9LCB1cE1pZCksXFxuICAgIGltZzogdXBGYWNlICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGlkOiAnY3VycmVudFVwJ1xcbiAgICB9XFxufSwge1xcbiAgICBjb2xfdHlwZTogJ2xpbmUnXFxufSk7XFxuLy8g5YWs5ZGKXFxubm90aWNlVGV4dCA9IEpTT04ucGFyc2UoZmV0Y2goJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3NwYWNlL25vdGljZT9taWQ9JyArIHVwTWlkICsgJyZqc29ucD1qc29ucCcsIHtcXG4gICAgaGVhZGVyczoge1xcbiAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBQQ19VQSxcXG4gICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFwiLFxcbiAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGNvb2tpZT1KU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxuICAgIH1cXG59KSkuZGF0YTtcXG5pZiAobm90aWNlVGV4dCAhPSAnJykge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICflhazlkYonLFxcbiAgICAgICAgdXJsOiAkKCkucnVsZSgobm90aWNlVGV4dCkgPT4ge1xcbiAgICAgICAgICAgIHZhciBkID0gW107XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICflhazlkYrvvJonICsgJ1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0XFxcXHQnICsgbm90aWNlVGV4dCxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsb25nX3RleHQnXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKTtcXG4gICAgICAgIH0sIG5vdGljZVRleHQpLFxcbiAgICAgICAgZGVzYzogbm90aWNlVGV4dCA9PSAnJyA/ICfmmoLml6DlhazlkYonIDogbm90aWNlVGV4dCxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF8xJyxcXG4gICAgfSk7XFxufVxcbmQucHVzaCh7XFxuICAgIGNvbF90eXBlOiAnbGluZSdcXG59LCB7XFxuICAgIHRpdGxlOiByZWxhdGlvbixcXG4gICAgaW1nOiByZWxhdGlvbiA9PSAn5pyq5YWz5rOoJyA/IGltZ0xpbmsu5re75Yqg5YWz5rOoIDogaW1nTGluay7lt7LlhbPms6gsXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKCh1cE1pZCkgPT4ge1xcbiAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmNoYW5nZVVzZXJSZWxhdGlvbih1cE1pZCwgMTEpXFxuICAgIH0sIHVwTWlkKSxcXG4gICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzRcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgaWQ6ICdyZWxhdGlvbidcXG4gICAgfVxcbn0sIHtcXG4gICAgdGl0bGU6ICfliqjmgIEnLFxcbiAgICBpbWc6IGltZ0xpbmsu5Yqo5oCBLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgodXBNaWQpID0+IHtcXG4gICAgICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5P3A9ZnlwYWdlJykucnVsZSgodXBNaWQpID0+IHtcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcbiAgICAgICAgICAgIGxhdGVuZXdzID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuZ2V0RHluYW1pY0RhdGEoJ3VwU3BhY2UnLCB1cE1pZCk7XFxuICAgICAgICAgICAgZXZhbCgkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5zaG93RHluYW1pY0RhdGEoKSk7XFxuICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgfSwgdXBNaWQpXFxuICAgIH0sIHVwTWlkKSxcXG4gICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzRcXFwiLFxcbn0sIHtcXG4gICAgdGl0bGU6ICfkuJPmoI8nLFxcbiAgICBpbWc6IGltZ0xpbmsu5LiT5qCPLFxcbiAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvYWN0aWNsZUxpc3Q/cD1meXBhZ2VcXFwiLFxcbiAgICBjb2xfdHlwZTogXFxcImljb25fc21hbGxfNFxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBtaWQ6IHVwTWlkXFxuICAgIH1cXG59KVxcbi8vIOeUqOaIt+inhumikS3lkIjpm4bjgIHns7vliJdcXG51cFZpZGVvID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcG9seW1lci9zcGFjZS9zZWFzb25zX3Nlcmllc19saXN0P21pZD0nICsgdXBNaWQgKyAnJnBhZ2VfbnVtPTEmcGFnZV9zaXplPTEwJywge1xcbiAgICBoZWFkZXJzOiB7XFxuICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBLFxcbiAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXCJcXG4gICAgfVxcbn0pKS5kYXRhLml0ZW1zX2xpc3RzO1xcbi8vIOinhumikeWQiOmbhuOAgeezu+WIl1xcbnRyeSB7XFxuICAgIHVwVmlkZW8uc2Vhc29uc19saXN0LmZvckVhY2gobGlzdCA9PiB7XFxuICAgICAgICBzZWFzb25faWQgPSBsaXN0Lm1ldGEuc2Vhc29uX2lkO1xcbiAgICAgICAgLy8g5qCH6aKYLei3s+i9rOabtOWkmlxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJzxmb250IGNvbG9yPVxcXCIjMzNjY2NjXFxcIj4nICsgbGlzdC5tZXRhLm5hbWUuc3Vic3RyaW5nKDAsIDMwKSArICc8L2ZvbnQ+XFxcXHRcXFxcdDxmb250IGNvbG9yPVxcXCJyZWRcXFwiPicgKyBsaXN0Lm1ldGEudG90YWwgKyAnPC9mb250PlxcdOKericsXFxuICAgICAgICAgICAgaW1nOiBpbWdMaW5rLuWQiOmbhuaWh+S7tuWkuSxcXG4gICAgICAgICAgICAvLyBpbWc6IGxpc3QubWV0YS5jb3ZlcisnQFJlZmVyZXI9JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKHVwTWlkLCBzZWFzb25faWQpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoJ2hpa2VyOi8vZW1wdHk/ZnlwYWdlJykucnVsZSgodXBNaWQsIHNlYXNvbl9pZCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3BvbHltZXIvc3BhY2Uvc2Vhc29uc19hcmNoaXZlc19saXN0P21pZD0nICsgdXBNaWQgKyAnJnNlYXNvbl9pZD0nICsgc2Vhc29uX2lkICsgJyZzb3J0X3JldmVyc2U9ZmFsc2UmcGFnZV9udW09JyArIE1ZX1BBR0UgKyAnJnBhZ2Vfc2l6ZT0zMCc7XFxuICAgICAgICAgICAgICAgICAgICBWaWRlbyA9IEpTT04ucGFyc2UoZmV0Y2godSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBQQ19VQSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KSkuZGF0YTtcXG4gICAgICAgICAgICAgICAgICAgIG1heFBhZ2UgPSBNYXRoLmNlaWwoVmlkZW8ucGFnZS50b3RhbCAvIFZpZGVvLnBhZ2UucGFnZV9zaXplKTtcXG4gICAgICAgICAgICAgICAgICAgIGlmIChNWV9QQUdFIDw9IG1heFBhZ2UpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+W9k+WJjTrnrKwnICsgVmlkZW8ucGFnZS5wYWdlX251bSArICfpobVcXFxcdFxcXFx0XFxcXHTlhbHmnIknICsgbWF4UGFnZSArICfpobUsJyArIFZpZGVvLnBhZ2UudG90YWwgKyAn5p2h5pWw5o2uJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW8uYXJjaGl2ZXMuZm9yRWFjaChsaXN0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBsaXN0LnBpYyArICdAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJ+aSreaUvumHj++8micgKyBsaXN0LnN0YXQudmlldyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYWlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKTtcXG4gICAgICAgICAgICAgICAgfSwgdXBNaWQsIHNlYXNvbl9pZClcXG4gICAgICAgICAgICB9LCB1cE1pZCwgc2Vhc29uX2lkKVxcbiAgICAgICAgfSk7XFxuICAgICAgICBpZiAobGlzdC5hcmNoaXZlcyA9PT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgbG9nKGxpc3QubWV0YS5uYW1lICsgJ+S4uuepuicpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpZiAobGlzdC5hcmNoaXZlcy5sZW5ndGggPCAyKSB7XFxuICAgICAgICAgICAgICAgIGxpc3QuYXJjaGl2ZXMuZm9yRWFjaChsaXN0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBsaXN0LnBpYyArICdAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmkq3mlL7ph4/vvJonICsgbGlzdC5zdGF0LnZpZXcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZDogbGlzdC5haWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChsaXN0LmFyY2hpdmVzLmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuWlveWutuS8me+8jOi/meWutuS8meayoeacieWQiOmbhuinhumike+8gVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi6KaB5LiN5Y6754K55Ye75YWo6YOo6KeG6aKR55yL55yLflxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjsgaSsrKSB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LmFyY2hpdmVzW2ldLnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5hcmNoaXZlc1tpXS5waWMgKyAnQFJlZmVyZXI9JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAn5pKt5pS+6YeP77yaJyArIGxpc3QuYXJjaGl2ZXNbaV0uc3RhdC52aWV3LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3ZpZGVvXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYXJjaGl2ZXNbaV0uYWlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH0pO1xcbn0gY2F0Y2ggKGUpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn5ZCI6ZuG5Li656m6JyxcXG4gICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgZGVzYzogJ1NvcnJ5LOayoeacieaVsOaNruWRon4nLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgfSk7XFxufVxcbnRyeSB7XFxuICAgIHVwVmlkZW8uc2VyaWVzX2xpc3QuZm9yRWFjaChsaXN0ID0+IHtcXG4gICAgICAgIHNlcmllc19pZCA9IGxpc3QubWV0YS5zZXJpZXNfaWQ7XFxuICAgICAgICAvLyDmoIfpopgt6Lez6L2s5pu05aSaXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAnPGZvbnQgY29sb3I9XFxcIiMzM2NjY2NcXFwiPicgKyBsaXN0Lm1ldGEubmFtZS5zdWJzdHJpbmcoMCwgMzApICsgJzwvZm9udD5cXFxcdFxcXFx0PGZvbnQgY29sb3I9XFxcInJlZFxcXCI+JyArIGxpc3QubWV0YS50b3RhbCArICc8L2ZvbnQ+XFx04p6uJyxcXG4gICAgICAgICAgICBpbWc6IGltZ0xpbmsu5ZCI6ZuG5paH5Lu25aS5LFxcbiAgICAgICAgICAgIC8vIGltZzogbGlzdC5tZXRhLmNvdmVyKydAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgodXBNaWQsIHNlcmllc19pZCkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eT9meXBhZ2UnKS5ydWxlKCh1cE1pZCwgc2VyaWVzX2lkKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgZCA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSAnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc2VyaWVzL2FyY2hpdmVzP21pZD0nICsgdXBNaWQgKyAnJnNlcmllc19pZD0nICsgc2VyaWVzX2lkICsgJyZvbmx5X25vcm1hbD10cnVlJnNvcnQ9ZGVzYyZwbj0nICsgTVlfUEFHRSArICcmcHM9MzAnO1xcbiAgICAgICAgICAgICAgICAgICAgVmlkZW8gPSBKU09OLnBhcnNlKGZldGNoKHUsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSkpLmRhdGE7XFxuICAgICAgICAgICAgICAgICAgICBtYXhQYWdlID0gTWF0aC5jZWlsKFZpZGVvLnBhZ2UudG90YWwgLyBWaWRlby5wYWdlLnNpemUpO1xcbiAgICAgICAgICAgICAgICAgICAgaWYgKE1ZX1BBR0UgPD0gbWF4UGFnZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5b2T5YmNOuesrCcgKyBWaWRlby5wYWdlLm51bSArICfpobVcXFxcdFxcXFx0XFxcXHTlhbHmnIknICsgbWF4UGFnZSArICfpobUsJyArIFZpZGVvLnBhZ2UudG90YWwgKyAn5p2h5pWw5o2uJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgVmlkZW8uYXJjaGl2ZXMuZm9yRWFjaChsaXN0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBsaXN0LnBpYyArICdAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJ+aSreaUvumHj++8micgKyBsaXN0LnN0YXQudmlldyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYWlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKTtcXG4gICAgICAgICAgICAgICAgfSwgdXBNaWQsIHNlcmllc19pZClcXG4gICAgICAgICAgICB9LCB1cE1pZCwgc2VyaWVzX2lkKVxcbiAgICAgICAgfSk7XFxuICAgICAgICBpZiAobGlzdC5hcmNoaXZlcyA9PT0gdW5kZWZpbmVkKSB7XFxuICAgICAgICAgICAgbG9nKGxpc3QubWV0YS5uYW1lICsgJ+S4uuepuicpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpZiAobGlzdC5hcmNoaXZlcy5sZW5ndGggPCAyKSB7XFxuICAgICAgICAgICAgICAgIGxpc3QuYXJjaGl2ZXMuZm9yRWFjaChsaXN0ID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBsaXN0LnBpYyArICdAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmkq3mlL7ph4/vvJonICsgbGlzdC5zdGF0LnZpZXcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZDogbGlzdC5haWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChsaXN0LmFyY2hpdmVzLmxlbmd0aCA9PSAwKSB7XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuWlveWutuS8me+8jOi/meWutuS8meayoeacieWQiOmbhuinhumike+8gVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBcXFwi6KaB5LiN5Y6754K55Ye75YWo6YOo6KeG6aKR55yL55yLflxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMjsgaSsrKSB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LmFyY2hpdmVzW2ldLnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5hcmNoaXZlc1tpXS5waWMgKyAnQFJlZmVyZXI9JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAn5pKt5pS+6YeP77yaJyArIGxpc3QuYXJjaGl2ZXNbaV0uc3RhdC52aWV3LFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3ZpZGVvXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYXJjaGl2ZXNbaV0uYWlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH0pO1xcbn0gY2F0Y2ggKGUpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn57O75YiX5Li656m6JyxcXG4gICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgZGVzYzogJ1NvcnJ5LOayoeacieaVsOaNruWRon4nLFxcbiAgICAgICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXG4gICAgfSk7XFxufVxcbi8vIHVw5oqV56i/XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICdUQeeahOinhumikSzngrnlh7vlsZXlvIDlhajpg6gnLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgodXBNaWQpID0+IHtcXG4gICAgICAgIHJldHVybiAkKCkucnVsZSgodXBNaWQpID0+IHtcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcbiAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgIHF1ZXJ5SnNvbiA9IHtcXG4gICAgICAgICAgICAgICAgICAgIG1pZDogdXBNaWQsXFxuICAgICAgICAgICAgICAgICAgICBwczogMzAsXFxuICAgICAgICAgICAgICAgICAgICB0aWQ6IGdldE15VmFyKCdfdGlkJywgJzAnKSxcXG4gICAgICAgICAgICAgICAgICAgIHNwZWNpYWxfdHlwZTogJycsXFxuICAgICAgICAgICAgICAgICAgICBwbjogZ2V0TXlWYXIoJ19wYWdlJywgJzEnKSxcXG4gICAgICAgICAgICAgICAgICAgIGtleXdvcmQ6ICcnLFxcbiAgICAgICAgICAgICAgICAgICAgb3JkZXI6ICdwdWJkYXRlJyxcXG4gICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtOiAnd2ViJyxcXG4gICAgICAgICAgICAgICAgICAgIC8vIHdlYl9sb2NhdGlvbjogMTU1MDEwMSxcXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyX2F2b2lkZWQ6IHRydWVcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBwYXJtcyA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmdldFdiaUVuYyhxdWVyeUpzb24pO1xcbiAgICAgICAgICAgICAgICBkYXRhTGluayA9ICdodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9zcGFjZS93YmkvYXJjL3NlYXJjaD8nICsgcGFybXM7XFxuICAgICAgICAgICAgICAgIHVwVmlkZW9EYXRhID0gSlNPTi5wYXJzZShmZXRjaChkYXRhTGluaywge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUEsXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IGNvb2tpZT1KU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pKS5kYXRhO1xcbiAgICAgICAgICAgICAgICB0bGlzdCA9IHVwVmlkZW9EYXRhLmxpc3QudGxpc3Q7XFxuICAgICAgICAgICAgICAgIHZsaXN0ID0gdXBWaWRlb0RhdGEubGlzdC52bGlzdDtcXG4gICAgICAgICAgICAgICAgLy8g5YiG57G75ZKM6aG156CBXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIoJ190aWQnLCAnMCcpID09IDAgPyAn4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9XFxcInJlZFxcXCI+5YWo6YOoPC9mb250PicgOiAn5YWo6YOoJyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignX3RpZCcsICgwICsgXFxcIlxcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcignX3BhZ2UnLCAoMSArIFxcXCJcXFwiKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgZm9yIChpdGVtIGluIHRsaXN0KSB7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAodGxpc3RbaXRlbV0udGlkICsgXFxcIlxcXCIpID09IGdldE15VmFyKCdfdGlkJywgJzAnKSA/ICfigJjigJjigJnigJk8Zm9udCBjb2xvcj1cXFwicmVkXFxcIj4nICsgKHRsaXN0W2l0ZW1dLm5hbWUgKyBgKCR7dGxpc3RbaXRlbV0uY291bnR9KWApICsgJzwvZm9udD4nIDogKHRsaXN0W2l0ZW1dLm5hbWUgKyBgKCR7dGxpc3RbaXRlbV0uY291bnR9KWApLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKCh0aWQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ190aWQnLCAodGlkICsgXFxcIlxcXCIpKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ19wYWdlJywgKDEgKyBcXFwiXFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB0bGlzdFtpdGVtXS50aWQpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJyxcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIG1heFBhZ2UgPSBNYXRoLmNlaWwodXBWaWRlb0RhdGEucGFnZS5jb3VudCAvIHVwVmlkZW9EYXRhLnBhZ2UucHMpO1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBwYWdlID0gMTsgcGFnZSA8PSBtYXhQYWdlOyBwYWdlKyspIHtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IChwYWdlICsgXFxcIlxcXCIpID09IGdldE15VmFyKCdfcGFnZScsICcxJykgPyAn4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9XFxcInJlZFxcXCI+JyArIChwYWdlICsgXFxcIlxcXCIpICsgJzwvZm9udD4nIDogKHBhZ2UgKyBcXFwiXFxcIiksXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKHBhZ2UpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ19wYWdlJywgKHBhZ2UgKyBcXFwiXFxcIikpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBwYWdlKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgLy8g5bmz6ZO66KeG6aKRXFxuICAgICAgICAgICAgICAgIHZsaXN0LmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBwdWJ0aW1lID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikudGltZUNvbnZlcnQoaXRlbS5jcmVhdGVkKTtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0udGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBpdGVtLnBpYyArICdAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmkq3mlL7ph4/vvJonICsgaXRlbS5wbGF5ICsgJ1xcXFxuJyArIHB1YnRpbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZDogaXRlbS5haWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfpobXpnaLotbDkuKLkuoYuLi4nLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly9pMC5oZHNsYi5jb20vYmZzL2dlbmVyYWwvZjdiNjY3MDExYTQ2NjE1NzMyYzcwMWY0YmIxZDA3Zjc5M2Y4ZDFkZi5wbmdAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiAn5aSq6aKR57mB5LqG77yB56iN5ZCO5YaN6K+VficsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInBpY18xXFxcIlxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKTtcXG4gICAgICAgIH0sIHVwTWlkKVxcbiAgICB9LCB1cE1pZClcXG59KTtcXG5zZXRSZXN1bHQoZCk7XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJ1cOaQnOe0olwiLFwicGF0aFwiOlwidXBTZWFyY2hcIixcInJ1bGVcIjpcImpzOlxcbnNlYXdvcmQgPSBNWV9QQVJBTVMuc2Vhd29yZDtcXG52YXIgZCA9IFtdO1xcbnJlc3VsdERhdGE9JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuZ2V0U2VhcmNoUmVzKCdiaWxpX3VzZXInLHNlYXdvcmQsTVlfUEFHRSwzNik7XFxuaWYgKE1ZX1BBR0UgPD0gcmVzdWx0RGF0YS5udW1QYWdlcykge1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICflvZPliY0656ysJyArIHJlc3VsdERhdGEucGFnZSArICfpobVcXFxcdFxcXFx0XFxcXHTlhbHmnIknICsgcmVzdWx0RGF0YS5udW1QYWdlcyArICfpobUsJyArIHJlc3VsdERhdGEubnVtUmVzdWx0cyArICfmnaHmlbDmja4nLFxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICB9KTtcXG4gICAgcmVzdWx0RGF0YS5yZXN1bHQuZm9yRWFjaChsaXN0ID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCI8YmlnPjxmb250IGNvbG9yPSdibHVlJz5cXFwiICsgbGlzdC51bmFtZSArIFxcXCI8L2ZvbnQ+PC9iaWc+PHNtYWxsPlxcXCIgKyBsaXN0LnVzaWduICsgXFxcIjwvc21hbGw+XFxcIixcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovLycgKyBsaXN0LnVwaWMgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3VwSG9tZVxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgbWlkOiBsaXN0Lm1pZCxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QudW5hbWUsXFxuICAgICAgICAgICAgICAgIGZhY2U6ICdodHRwczovLycgKyBsaXN0LnVwaWNcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfSk7XFxufVxcbnNldFNlYXJjaFJlc3VsdChkKTtcXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcInZpZGVv5pCc57SiXCIsXCJwYXRoXCI6XCJ2aWRlb1NlYXJjaFwiLFwicnVsZVwiOlwianM6XFxuc2Vhd29yZCA9IE1ZX1BBUkFNUy5zZWF3b3JkO1xcbnZhciBkID0gW107XFxudmFyIHJlc3VsdERhdGE9JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuZ2V0U2VhcmNoUmVzKCd2aWRlbycsc2Vhd29yZCxNWV9QQUdFLDQyKTtcXG52YXIge3RpbWVDb252ZXJ0fT0kLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKTtcXG5pZiAoTVlfUEFHRSA8PSByZXN1bHREYXRhLm51bVBhZ2VzKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+W9k+WJjTrnrKwnICsgcmVzdWx0RGF0YS5wYWdlICsgJ+mhtVxcXFx0XFxcXHRcXFxcdOWFseaciScgKyByZXN1bHREYXRhLm51bVBhZ2VzICsgJ+mhtSwnICsgcmVzdWx0RGF0YS5udW1SZXN1bHRzICsgJ+adoeaVsOaNricsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgIH0pO1xcbiAgICByZXN1bHREYXRhLnJlc3VsdC5mb3JFYWNoKGxpc3QgPT4ge1xcbiAgICAgICAgLy8gdGl0bGU9bGlzdC50aXRsZS5yZXBsYWNlKCc8ZW0gY2xhc3M9XFxcXFxcXCJrZXl3b3JkXFxcXFxcXCI+JywnPGZvbnQgY29sb3I9XFxcInJlZFxcXCI+JykucmVwbGFjZSgnPC9lbT4nLCc8L2ZvbnQ+JylcXG4gICAgICAgIHRpdGxlID0gbGlzdC50aXRsZS5yZXBsYWNlKC88ZW0gY2xhc3M9XFxcXFxcXCJrZXl3b3JkXFxcXFxcXCI+L2csICcnKS5yZXBsYWNlKC88XFxcXC9lbT4vZywgJycpXFxuICAgICAgICBwYnRpbWU9dGltZUNvbnZlcnQobGlzdC5wdWJkYXRlKTtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcbiAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vJyArIGxpc3QucGljICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICAgICAgZGVzYzogJ+KAnOKAnOKAneKAnTxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPuaSreaUvumHjzonK2xpc3QucGxheSsnXFxcXHRcXFxcdFxcXFx05by55bmVOicrbGlzdC5kYW5tYWt1KydcXFxcdFxcXFx0XFxcXHTllpzmrKI6JytsaXN0Lmxpa2UrJ1xcXFxu5Y+R5biD5pe26Ze0OicrcGJ0aW1lKyc8L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPicsXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIC8vIOinhumikeagh+ivhlxcbiAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYWlkLFxcbiAgICAgICAgICAgICAgICBidmlkOmxpc3QuYnZpZCxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH0pO1xcbn1cXG5zZXRTZWFyY2hSZXN1bHQoZCk7XFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8xX2xlZnRfcGljXCIsXCJuYW1lXCI6XCLmjqjpgIFcIixcInBhdGhcIjpcImZlZWRcIixcInJ1bGVcIjpcIiQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmdldEZlZWQoKS5mb3JFYWNoKGl0ZW0gPT4ge1xcblxcbsKgIMKgIGQucHVzaCh7XFxuXFxuwqAgwqAgwqAgwqAgdGl0bGU6IGl0ZW0udGl0bGUsXFxuXFxuwqAgwqAgwqAgwqAgaW1nOiBpdGVtLnBpYysnQFJlZmVyZXI9JyxcXG5cXG7CoCDCoCDCoCDCoCBkZXNjOiAndXA6JyArIGl0ZW0ub3duZXIubmFtZSArICdcXFxcbicgKyBpdGVtLnN0YXQudmlldyArIFxcXCLmkq3mlL7igLtcXFwiICsgaXRlbS5zdGF0Lmxpa2UgKyBcXFwi54K56LWeXFxcIixcXG5cXG7CoCDCoCDCoCDCoCB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFwiLFxcblxcbsKgIMKgIMKgIMKgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuXFxuwqAgwqAgwqAgwqAgZXh0cmE6IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCAvLyBpZOWFtuWunuaYr2FpZFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGFpZDogaXRlbS5pZCxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBjaWQ6IGl0ZW0uY2lkLFxcblxcbsKgIMKgIMKgIMKgIH1cXG5cXG7CoCDCoCB9KVxcblxcbn0pXFxuXFxuXFxuXCJ9LHtcImNvbF90eXBlXCI6XCJ0ZXh0XzFcIixcIm5hbWVcIjpcIkFQSVwiLFwicGF0aFwiOlwiYXBpXCIsXCJydWxlXCI6XCIvLyBwYXJ0MTrogZrlkIjlh73mlbAtLS0tLS0tLS0tLS0tLS0tXFxuLy8g55m75b2V6aqM6K+BXFxuJC5leHBvcnRzLmlzTG9nZ2VkSW4gPSBmdW5jdGlvbiAoKSB7XFxuICAgIGlmIChmaWxlRXhpc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkge1xcbiAgICAgICAgYmlsaURhdGEgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSk7XFxuICAgICAgICBpZiAoYmlsaURhdGEudXNlckxpc3QubGVuZ3RoID09IDApIHtcXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICBcXFwidXNlck5hbWVcXFwiOiAn5pyq55m75b2VJyxcXG4gICAgICAgICAgICAgICAgXFxcInVzZXJNaWRcXFwiOiAnJyxcXG4gICAgICAgICAgICAgICAgXFxcInVzZXJGYWNlXFxcIjogJycsXFxuICAgICAgICAgICAgICAgIFxcXCJ0eXBlXFxcIjogZmFsc2VcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICAgICAgY3VycmVudFVzZXIgPSBiaWxpRGF0YS51c2VyTGlzdFswXTtcXG4gICAgICAgIHZhciBjb29raWUgPSBjdXJyZW50VXNlci5jb29raWU7XFxuICAgICAgICBsZXQgdXNlcmluZm8gPSBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL25hdlxcXCIsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBjb29raWVcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KSkuZGF0YTtcXG4gICAgICAgIGlmICh1c2VyaW5mby5pc0xvZ2luID09PSBmYWxzZSkge1xcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgIFxcXCJ1c2VyTmFtZVxcXCI6ICfmnKrnmbvlvZUnLFxcbiAgICAgICAgICAgICAgICBcXFwidXNlck1pZFxcXCI6ICcnLFxcbiAgICAgICAgICAgICAgICBcXFwidXNlckZhY2VcXFwiOiAnJyxcXG4gICAgICAgICAgICAgICAgXFxcInR5cGVcXFwiOiBmYWxzZVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIGN1cnJlbnRVc2VyLnVzZXJOYW1lID0gdXNlcmluZm8udW5hbWU7XFxuICAgICAgICAgICAgY3VycmVudFVzZXIudXNlck1pZCA9IHVzZXJpbmZvLm1pZDtcXG4gICAgICAgICAgICAvLyAx77ya5Lya5ZGY5byA6YCa77ybMO+8muacquW8gOmAmlxcbiAgICAgICAgICAgIGN1cnJlbnRVc2VyLnZpcFN0YXR1cyA9IHVzZXJpbmZvLnZpcFN0YXR1cztcXG4gICAgICAgICAgICBjdXJyZW50VXNlci5mYWNlID0gdXNlcmluZm8uZmFjZSArIFxcXCJAUmVmZXJlcj1cXFwiO1xcbiAgICAgICAgICAgIHNhdmVGaWxlKCdoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0JywgSlNPTi5zdHJpbmdpZnkoYmlsaURhdGEpKTtcXG4gICAgICAgICAgICAvLyByZXR1cm4gdHJ1ZTtcXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICBcXFwidXNlck5hbWVcXFwiOiBjdXJyZW50VXNlci51c2VyTmFtZSxcXG4gICAgICAgICAgICAgICAgXFxcInVzZXJNaWRcXFwiOiBjdXJyZW50VXNlci51c2VyTWlkLFxcbiAgICAgICAgICAgICAgICBcXFwidXNlckZhY2VcXFwiOiBjdXJyZW50VXNlci5mYWNlLFxcbiAgICAgICAgICAgICAgICBcXFwidHlwZVxcXCI6IHRydWVcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgXFxcInVzZXJOYW1lXFxcIjogJ+acqueZu+W9lScsXFxuICAgICAgICAgICAgXFxcInVzZXJNaWRcXFwiOiAnJyxcXG4gICAgICAgICAgICBcXFwidXNlckZhY2VcXFwiOiAnJyxcXG4gICAgICAgICAgICBcXFwidHlwZVxcXCI6IGZhbHNlXFxuICAgICAgICB9KTtcXG4gICAgfVxcbn1cXG4vLyDlk5Tlk6nop4bpopHop6PmnpDvvJrojrflj5bmkq3mlL7lnLDlnYAr5o+Q5Lqk5pKt5pS+6K6w5b2VXFxuJC5leHBvcnRzLmJpbGlMYXp5ID0gZnVuY3Rpb24gKGlkLCBjaWQsIHFuKSB7XFxuICAgIC8vIOmHjee9ruWOn+eUn+W8ueW5lee7n+S4gOW8ueW5leWkp+Wwj+OAgeS/ruaUueatpemVv1xcbiAgICBmdW5jdGlvbiBvdmVycmlkZVNhdmUoZG0pIHtcXG4gICAgICAgIHZhciBkYW5tdURhdGEgPSByZXF1ZXN0KGRtKTtcXG4gICAgICAgIC8vIOWtl+S9k+Wkp+Wwj+OAgeW8ueW5leatpemVv1xcbiAgICAgICAgdmFyIGRhbm11U2V0dGluZyA9IEpTT04ucGFyc2UocmVhZEZpbGUoJ2hpa2VyOi8vZmlsZXMvZG3nm5LlrZAvc2V0dGluZ3MuanNvbicpKTtcXG4gICAgICAgIHZhciBzaXplID0gZGFubXVTZXR0aW5nLmZvbnRTaXplO1xcbiAgICAgICAgdmFyIHN0ZXAgPSBkYW5tdVNldHRpbmcuc3RlcDtcXG4gICAgICAgIHZhciBkYXRhID0gJyc7XFxuICAgICAgICB0ZCA9IHBkZmEoZGFubXVEYXRhLCAnaSYmZCcpO1xcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZC5sZW5ndGg7IGkgKz0gc3RlcCkge1xcbiAgICAgICAgICAgIHRpbWVwb2ludCA9IHBkZmgodGRbaV0sICdkJiZwJykuc3BsaXQoXFxcIixcXFwiKVswXTtcXG4gICAgICAgICAgICBjdCA9IHBkZmgodGRbaV0sICdkJiZwJykuc3BsaXQoXFxcIixcXFwiKVsxXTtcXG4gICAgICAgICAgICBjb2xvciA9IHBkZmgodGRbaV0sICdkJiZwJykuc3BsaXQoXFxcIixcXFwiKVszXTtcXG4gICAgICAgICAgICAvLyDlvLnluZXlhoXlrrlcXG4gICAgICAgICAgICBjb250ZW50ID0gcGRmaCh0ZFtpXSwgJ2QmJlRleHQnKTtcXG4gICAgICAgICAgICBpZiAoY29udGVudC5pbmRleE9mKCc8JykgIT0gLTEgfHwgY29udGVudC5pbmRleE9mKCc+JykgIT0gLTEgfHwgY29udGVudC5pbmRleE9mKCcmJykgIT0gLTEgfHwgY29udGVudC5pbmRleE9mKCdcXFxcdTAwMDAnKSAhPSAtMSB8fCBjb250ZW50LmluZGV4T2YoJ1xcXFxiJykgIT0gLTEpIHtcXG4gICAgICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHRlbXBkYXRhID0gYDxkIHA9XFxcIiR7TWF0aC5yb3VuZCh0aW1lcG9pbnQpfSwke2N0fSwke3NpemV9LCR7Y29sb3J9LDBcXFwiPiR7Y29udGVudH08L2Q+XFxcXG5gO1xcbiAgICAgICAgICAgIGRhdGEgKz0gdGVtcGRhdGE7XFxuICAgICAgICB9XFxuICAgICAgICBkYW5tdXN0ciA9IGA8P3htbCB2ZXJzaW9uPVxcXCIxLjBcXFwiIGVuY29kaW5nPVxcXCJVVEYtOFxcXCI/PlxcXFxuPGk+XFxcXG4ke2RhdGF9PC9pPmA7XFxuICAgICAgICBzYXZlRmlsZShkbSwgZGFubXVzdHIpO1xcbiAgICB9XFxuICAgIC8vIOWIpOaWreaYr+WQpumHjeWGmVxcbiAgICB2YXIgZG0gPSAnaHR0cHM6Ly9jb21tZW50LmJpbGliaWxpLmNvbS8nICsgY2lkICsgJy54bWwnO1xcbiAgICBpZiAoZ2V0SXRlbSgnaXNPdmVycmlkZVNhdmUnLCAnZmFsc2UnKSA9PSAndHJ1ZScpIHtcXG4gICAgICAgIGZpbGUgPSAnaHR0cHM6Ly9jb21tZW50LmJpbGliaWxpLmNvbS8nICsgY2lkICsgJy54bWwnO1xcbiAgICAgICAgZG0gPSAnaGlrZXI6Ly9maWxlcy9jYWNoZS9kYW5tdS8nICsgJ2JpbGlfZnJvbV8nICsgZ2V0UGFnZVRpdGxlKCkgKyAnLnhtbCc7XFxuICAgICAgICBkb3dubG9hZEZpbGUoZmlsZSwgZG0pO1xcbiAgICAgICAgb3ZlcnJpZGVTYXZlKGRtKTtcXG4gICAgfVxcbiAgICB2YXIgZGF0YSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmdldFVybChpZCwgY2lkLCBxbik7XFxuICAgIC8vIOaPkOS6pOWOhuWPsuiusOW9lVxcbiAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5yZXBvcnRQcm9jZXNzKGlkLCBjaWQpO1xcbiAgICAvLyBxdWFsaXR5TnVtPWRhc2guYXVkaW8ubGVuZ3RoO+S4jemcgOimgeS6hu+8jOaJvuWIsOS6huabtOWlveeahOWIpOaWreaWueazle+8jOiZveeEtuaIkeW5tuS4jeefpemBk+i/meS6m+WPguaVsOeahOWQq+S5ieaYr+S7gOS5iFxcbiAgICB2aWRlb0xpc3QgPSBbXTtcXG4gICAgYXVkaW9MaXN0ID0gW107XFxuICAgIG5hbWVMaXN0ID0gW107XFxuICAgIGhlYWRlcnMgPSBbXTtcXG4gICAgdHJ5IHtcXG4gICAgICAgIGRhdGEuYXVkaW8uZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICBhdWRpb0xpc3QucHVzaChpdGVtLmJhc2VVcmwpO1xcbiAgICAgICAgICAgIGhlYWRlcnMucHVzaCh7XFxuICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbVxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUFcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH0pO1xcbiAgICAgICAgZGF0YS52aWRlby5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgIGlmIChpdGVtLmNvZGVjaWQgPT0gNykge1xcbiAgICAgICAgICAgICAgICB2aWRlb0xpc3QucHVzaChpdGVtLmJhc2VVcmwgKyBcXFwiI2lzVmlkZW89dHJ1ZSNcXFwiKTtcXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT0gMTI2KSB7XFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKCfmnZzmr5Top4bnlYwnKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLmlkID09IDEyNSkge1xcbiAgICAgICAgICAgICAgICAgICAgbmFtZUxpc3QucHVzaCgnSERSIOecn+W9qeiJsicpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWQgPT0gMTIwKSB7XFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKCc0S+i2hea4hScpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWQgPT0gMTE2KSB7XFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKCcxMDgwUDYw6auY5bin546HJyk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5pZCA9PSAxMTIpIHtcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0LnB1c2goJzEwODBQK+mrmOeggeeOhycpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWQgPT0gODApIHtcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0LnB1c2goJzEwODBQ6auY5riFJyk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5pZCA9PSA3NCkge1xcbiAgICAgICAgICAgICAgICAgICAgbmFtZUxpc3QucHVzaCgnNzIwUDYw6auY5bin546HJyk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5pZCA9PSA2NCkge1xcbiAgICAgICAgICAgICAgICAgICAgbmFtZUxpc3QucHVzaCgnNzIwUOmrmOa4hScpO1xcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWQgPT0gMzIpIHtcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0LnB1c2goJzQ4MFDmuIXmmbAnKTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLmlkID09IDE2KSB7XFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKCczNjBQ5rWB55WFJyk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5pZCA9PSA2KSB7XFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKCcyNDBQ5p6B6YCfJyk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIC8vIOS/neaMgemVv+W6puS4gOiHtFxcbiAgICAgICAgd2hpbGUgKGF1ZGlvTGlzdC5sZW5ndGggPCB2aWRlb0xpc3QubGVuZ3RoKSB7XFxuICAgICAgICAgICAgLy8g5aSN5Yi2IGF1ZGlvTGlzdCDkuK3mnIDlkI7kuIDkuKrlhYPntKDlubbov73liqDliLDmlbDnu4TmnKvlsL5cXG4gICAgICAgICAgICBhdWRpb0xpc3QucHVzaChhdWRpb0xpc3RbYXVkaW9MaXN0Lmxlbmd0aCAtIDFdKTtcXG4gICAgICAgICAgICAvLyDlpI3liLYgaGVhZGVycyDkuK3mnIDlkI7kuIDkuKrlhYPntKDlubbov73liqDliLDmlbDnu4TmnKvlsL5cXG4gICAgICAgICAgICBoZWFkZXJzLnB1c2goaGVhZGVyc1toZWFkZXJzLmxlbmd0aCAtIDFdKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgdXJsczogdmlkZW9MaXN0LFxcbiAgICAgICAgICAgIGF1ZGlvVXJsczogYXVkaW9MaXN0LFxcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXFxuICAgICAgICAgICAgbmFtZXM6IG5hbWVMaXN0LFxcbiAgICAgICAgICAgIGRhbm11OiBkbVxcbiAgICAgICAgfSlcXG4gICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgbG9nKFxcXCLmraPluLjop6Pph4rlpLHotKXvvIzov5vooYzmnIDlkI7lsJ3or5U6XFxcIik7XFxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgIHVybHM6IFtkYXRhLmR1cmxbMF0udXJsICsgXFxcIiNpc1ZpZGVvPXRydWUjXFxcIl0sXFxuICAgICAgICAgICAgbmFtZXM6IFtkYXRhLnF1YWxpdHkgKyBcXFwiXFxcIl0sXFxuICAgICAgICAgICAgZGFubXU6IGRtLFxcbiAgICAgICAgICAgIGhlYWRlcnM6IFt7XFxuICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbVxcXCIsXFxuICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUFcXG4gICAgICAgICAgICB9XVxcbiAgICAgICAgfSlcXG4gICAgfVxcbn1cXG4vLyDnqI3lkI7lnKjnnIvigJTigJTmgLvmk43kvZzliKTmlq1cXG4kLmV4cG9ydHMuanVkZ2VUb3ZpZXcgPSBmdW5jdGlvbiAoYWlkKSB7XFxuICAgIHNlbGVjdGlvbiA9IFsn5re75YqgJywgJ+enu+mZpCddO1xcbiAgICByZXR1cm4gJChzZWxlY3Rpb24sIDEpLnNlbGVjdCgoYWlkKSA9PiB7XFxuICAgICAgICBpZiAoaW5wdXQgPT0gJ+a3u+WKoCcpIHtcXG4gICAgICAgICAgICByZXMgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5hZGRUb3ZpZXcoYWlkKTtcXG4gICAgICAgICAgICBpZiAocmVzID09IDApIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+a3u+WKoOaIkOWKn1xcXCJcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAtMTAxKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/otKblj7fmnKrnmbvlvZVcXFwiXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gLTExMSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vY3NyZuagoemqjOWksei0pVxcXCJcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAtNDAwKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/or7fmsYLplJnor69cXFwiXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gOTAwMDEpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WIl+ihqOW3sua7oVxcXCJcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSA5MDAwMykge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v56i/5Lu25bey57uP6KKr5Yig6ZmkXFxcIlxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/mnKrnn6XplJnor69cXFwiXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXMgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5kZWxUb3ZpZXcoYWlkKTtcXG4gICAgICAgICAgICBpZiAocmVzID09IDApIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+enu+mZpOaIkOWKn1xcXCJcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAtMTAxKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/otKblj7fmnKrnmbvlvZVcXFwiXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gLTExMSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vY3NyZuagoemqjOWksei0pVxcXCJcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAtNDAwKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/or7fmsYLplJnor69cXFwiXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+acquefpemUmeivr1xcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH0sIGFpZClcXG59XFxuLy8g5pON5L2c55So5oi35YWz57O7XFxuJC5leHBvcnRzLmNoYW5nZVVzZXJSZWxhdGlvbiA9IGZ1bmN0aW9uIChtaWQsIHJlX3NyYykge1xcbiAgICBzZWxlY3Rpb24gPSBbJ+WFs+azqCcsICflj5blhbMnLCAn5oKE5oKE5YWz5rOoJywgJ+WPlua2iOaChOaChOWFs+azqCcsICfmi4npu5EnLCAn5Y+W5raI5ouJ6buRJywgJ+i4ouWHuueyieS4nScsICfnp7vliqjliIbnu4QnXTtcXG4gICAgcmV0dXJuICQoc2VsZWN0aW9uLCAyKS5zZWxlY3QoKG1pZCwgcmVfc3JjKSA9PiB7XFxuICAgICAgICBpZiAoaW5wdXQgPT0gJ+enu+WKqOWIhue7hCcpIHtcXG4gICAgICAgICAgICBiZWZvcmVUYWdpZHMgPSBbXTtcXG4gICAgICAgICAgICBncm91cHMgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5nZXRVc2VyR3JvdXAobWlkKTtcXG4gICAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoZ3JvdXBzKSA9PSAne30nKSB7XFxuICAgICAgICAgICAgICAgIGJlZm9yZVRhZ2lkcy5wdXNoKDApO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gZ3JvdXBzKSB7XFxuICAgICAgICAgICAgICAgICAgICBiZWZvcmVUYWdpZHMucHVzaChwYXJzZUludChwcm9wKSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgLy8g6I635Y+W5oiR55qE5YiG57uEXFxuICAgICAgICAgICAgZm9jdXNHcm91cExpc3QgPSBbXTtcXG4gICAgICAgICAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5nZXRNeUF0dGVudGlvbkdyb3VwTGlzdCgpLmZvckVhY2gobGlzdCA9PiB7XFxuICAgICAgICAgICAgICAgIGZvY3VzR3JvdXBMaXN0LnB1c2gobGlzdC5uYW1lICsgJyAnICsgbGlzdC50YWdpZCk7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuICQoZm9jdXNHcm91cExpc3QsIDEpLnNlbGVjdCgoYmVmb3JlVGFnaWRzLCBtaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgYWZ0ZXJUYWdpZHMgPSBbXTtcXG4gICAgICAgICAgICAgICAgYWZ0ZXJUYWdpZHMucHVzaChwYXJzZUludChpbnB1dC5zcGxpdCgnICcpWzFdKSk7XFxuICAgICAgICAgICAgICAgIGZpZHMgPSBbXTtcXG4gICAgICAgICAgICAgICAgZmlkcy5wdXNoKE51bWJlcihtaWQpKTtcXG4gICAgICAgICAgICAgICAgcmVzID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikubW92ZVVzZXJzKGJlZm9yZVRhZ2lkcywgYWZ0ZXJUYWdpZHMsIGZpZHMpO1xcbiAgICAgICAgICAgICAgICBpZiAocmVzID09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/np7vliqjnlKjmiLfliLBcXFwiICsgaW5wdXQuc3BsaXQoJyAnKVswXSArIFxcXCLliIbnu4TmiJDlip9cXFwiXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IC0xMDEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/otKblj7fmnKrnmbvlvZVcXFwiXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IC0xMTEpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9jc3Jm5qCh6aqM5aSx6LSlXFxcIlxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAtNDAwKSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6K+35rGC6ZSZ6K+vXFxcIlxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAyMjEwNCkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aXoOadg+mZkFxcXCJcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gMjIxMDUpIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/mnKrlhbPms6hcXFwiXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5pyq55+l6ZSZ6K+vXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSwgYmVmb3JlVGFnaWRzLCBtaWQpO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT0gJ+WFs+azqCcpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGFjdCA9IDE7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PSAn5Y+W5YWzJykge1xcbiAgICAgICAgICAgICAgICB2YXIgYWN0ID0gMjtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09ICfmgoTmgoTlhbPms6gnKSB7XFxuICAgICAgICAgICAgICAgIHZhciBhY3QgPSAzO1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT0gJ+WPlua2iOaChOaChOWFs+azqCcpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGFjdCA9IDQ7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChpbnB1dCA9PSAn5ouJ6buRJykge1xcbiAgICAgICAgICAgICAgICB2YXIgYWN0ID0gNTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09ICflj5bmtojmi4npu5EnKSB7XFxuICAgICAgICAgICAgICAgIHZhciBhY3QgPSA2O1xcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT0gJ+i4ouWHuueyieS4nScpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGFjdCA9IDc7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJlcyA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmFkZEF0dGVudGlvbihtaWQsIGFjdCwgcmVfc3JjKTtcXG4gICAgICAgICAgICByZWxhdGlvbiA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLnVzZXJNYXBwaW5nKG1pZCk7XFxuICAgICAgICAgICAgdXBkYXRlSXRlbSgncmVsYXRpb24nLCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiByZWxhdGlvbixcXG4gICAgICAgICAgICAgICAgaW1nOiByZWxhdGlvbiA9PSAn5pyq5YWz5rOoJyA/IHN0b3JhZ2UwLmdldE15VmFyKCflm77moIcnKS7mt7vliqDlhbPms6ggOiBzdG9yYWdlMC5nZXRNeVZhcign5Zu+5qCHJyku5bey5YWz5rOoXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgaWYgKHJlcyA9PSAwKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9cXFwiICsgaW5wdXQgKyBcXFwi5oiQ5YqfXFxcIlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IC0xMDEpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+i0puWPt+acqueZu+W9lVxcXCJcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAtMTExKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9jc3Jm5qCh6aqM5aSx6LSlXFxcIlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IC00MDApIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+ivt+axgumUmeivr1xcXCJcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAyMjAwMSkge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5LiN6IO95a+56Ieq5bex6L+b6KGM5q2k5pON5L2cXFxcIlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IDIyMDAzKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/nlKjmiLfkvY3kuo7pu5HlkI3ljZVcXFwiXFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+acquefpemUmeivr1xcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH0sIG1pZCwgcmVfc3JjKVxcbn1cXG4vLyDmmKDlsITnlKjmiLflhbPns7tcXG4kLmV4cG9ydHMudXNlck1hcHBpbmcgPSBmdW5jdGlvbiAobWlkKSB7XFxuICAgIHJlbGF0aW9uUmVzID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuZ2V0UmVsYXRpb24obWlkKTtcXG4gICAgaWYgKHJlbGF0aW9uUmVzLnJlbGF0aW9uLmF0dHJpYnV0ZSA9PSAwKSB7XFxuICAgICAgICByZWxhdGlvbiA9ICfmnKrlhbPms6gnXFxuICAgIH0gZWxzZSBpZiAocmVsYXRpb25SZXMucmVsYXRpb24uYXR0cmlidXRlID09IDEpIHtcXG4gICAgICAgIHJlbGF0aW9uID0gJ+aChOaChOWFs+azqCdcXG4gICAgfSBlbHNlIGlmIChyZWxhdGlvblJlcy5yZWxhdGlvbi5hdHRyaWJ1dGUgPT0gMikge1xcbiAgICAgICAgcmVsYXRpb24gPSAn5bey5YWz5rOoJ1xcbiAgICB9IGVsc2UgaWYgKHJlbGF0aW9uUmVzLnJlbGF0aW9uLmF0dHJpYnV0ZSA9PSA2KSB7XFxuICAgICAgICByZWxhdGlvbiA9ICflt7LkupLnsoknXFxuICAgIH0gZWxzZSBpZiAocmVsYXRpb25SZXMucmVsYXRpb24uYXR0cmlidXRlID09IDEyOCkge1xcbiAgICAgICAgcmVsYXRpb24gPSAn5bey5ouJ6buRJ1xcbiAgICB9XFxuICAgIHJldHVybiByZWxhdGlvbjtcXG59XFxuLy8g54K56LWe5pON5L2c6YC76L6RXFxuJC5leHBvcnRzLmxpa2VMb2dpYyA9IGZ1bmN0aW9uIChhaWQpIHtcXG4gICAgaGFzTGlrZSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmhhc0xpa2UoYWlkKTtcXG4gICAgaWYgKGhhc0xpa2UgPT0gMCkge1xcbiAgICAgICAgcmVzID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuc2V0TGlrZShhaWQsIDEpO1xcbiAgICAgICAgaWYgKHJlcyA9PSAwKSB7XFxuICAgICAgICAgICAgbGlrZSA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2Uvdmlldz9haWQ9XFxcIiArIGFpZCkpLmRhdGEuc3RhdC5saWtlO1xcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oJ3NldExpa2UnLCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAobGlrZSArIDEpICsgJycsXFxuICAgICAgICAgICAgICAgIGltZzogc3RvcmFnZTAuZ2V0TXlWYXIoJ+WbvuaghycpLuW3sueCuei1nlxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/ngrnotZ7miJDlip9cXFwiO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v54K56LWe5Ye66ZSZ5LqGflxcXCI7XFxuICAgICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICByZXMgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5zZXRMaWtlKGFpZCwgMik7XFxuICAgICAgICBpZiAocmVzID09IDApIHtcXG4gICAgICAgICAgICBsaWtlID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS92aWV3P2FpZD1cXFwiICsgYWlkKSkuZGF0YS5zdGF0Lmxpa2U7XFxuICAgICAgICAgICAgdXBkYXRlSXRlbSgnc2V0TGlrZScsIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IChsaWtlIC0gMSkgKyAnJyxcXG4gICAgICAgICAgICAgICAgaW1nOiBzdG9yYWdlMC5nZXRNeVZhcign5Zu+5qCHJyku5pyq54K56LWeXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WPlua2iOeCuei1nuaIkOWKn1xcXCI7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lj5bmtojngrnotZ7lh7rplJnkuoZ+XFxcIjtcXG4gICAgICAgIH1cXG4gICAgfVxcbn1cXG4vLyDmlLbol4/mk43kvZzpgLvovpFcXG4kLmV4cG9ydHMuZmF2b3VyTG9naWMgPSBmdW5jdGlvbiAoYWlkLCBtaWQpIHtcXG4gICAgaGFzRmF2b3VyID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuaGFzRmF2b3VyKGFpZCk7XFxuICAgIGlmIChoYXNGYXZvdXIpIHtcXG4gICAgICAgIC8vIOenu+WHuuaUtuiXj1xcbiAgICAgICAgZmF2b3VySWRMaXN0ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuZ2V0RmF2b3VySWRMaXN0KGFpZCwgbWlkKTtcXG4gICAgICAgIHJlcyA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLnNldEZhdm91cihhaWQsICcnLCBmYXZvdXJJZExpc3QpO1xcbiAgICAgICAgaWYgKHJlcyA9PSAwKSB7XFxuICAgICAgICAgICAgbGlrZSA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2Uvdmlldz9haWQ9XFxcIiArIGFpZCkpLmRhdGEuc3RhdC5mYXZvcml0ZTtcXG4gICAgICAgICAgICB1cGRhdGVJdGVtKCdzZXRGYXZvdXInLCB7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAobGlrZSAtIDEpICsgJycsXFxuICAgICAgICAgICAgICAgIGltZzogc3RvcmFnZTAuZ2V0TXlWYXIoJ+WbvuaghycpLuacquaUtuiXj1xcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lj5bmtojmlLbol4/miJDlip9cXFwiO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5Y+W5raI5pS26JeP5Ye66ZSZ5LqGflxcXCI7XFxuICAgICAgICB9XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICAvLyDpgInmi6nmlLbol49cXG4gICAgICAgIHJlcyA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmdldENvbGxlY3Rpb25Hcm91cExpc3QoKVswXS5tZWRpYUxpc3RSZXNwb25zZS5saXN0O1xcbiAgICAgICAgR3JvdXBMaXN0ID0gW107XFxuICAgICAgICByZXMuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICBHcm91cExpc3QucHVzaChpdGVtLnRpdGxlICsgJyAnICsgaXRlbS5pZCk7XFxuICAgICAgICB9KTtcXG4gICAgICAgIHJldHVybiAkKEdyb3VwTGlzdCwgMSkuc2VsZWN0KChhaWQpID0+IHtcXG4gICAgICAgICAgICBzZWxlY3RJZCA9IHBhcnNlSW50KGlucHV0LnNwbGl0KCcgJylbMV0pXFxuICAgICAgICAgICAgcmVzID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuc2V0RmF2b3VyKGFpZCwgc2VsZWN0SWQsICcnKTtcXG4gICAgICAgICAgICBpZiAocmVzID09IDApIHtcXG4gICAgICAgICAgICAgICAgbGlrZSA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2Uvdmlldz9haWQ9XFxcIiArIGFpZCkpLmRhdGEuc3RhdC5mYXZvcml0ZTtcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbSgnc2V0RmF2b3VyJywge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IChsaWtlICsgMSkgKyAnJyxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogc3RvcmFnZTAuZ2V0TXlWYXIoJ+WbvuaghycpLuW3suaUtuiXj1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aUtuiXj+aIkOWKn1xcXCI7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aUtuiXj+WHuumUmeS6hn5cXFwiO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIGFpZCk7XFxuICAgIH1cXG59XFxuXFxuLy8gcGFydDI65pWj6KOFQVBJLS0tLS0tLS0tLS0tLS0tLVxcbi8vIOiOt+WPluaQnOe0oue7k+aenFxcbiQuZXhwb3J0cy5nZXRTZWFyY2hSZXMgPSBmdW5jdGlvbiAoc2VhcmNoX3R5cGUsIHNlYXdvcmQsIHBhZ2UsIHBhZ2VTaXplKSB7XFxuICAgIHF1ZXJ5SnNvbiA9IHtcXG4gICAgICAgIF9fcmVmcmVzaF9fOiB0cnVlLFxcbiAgICAgICAgX2V4dHJhOiAnJyxcXG4gICAgICAgIGNvbnRleHQ6ICcnLFxcbiAgICAgICAgcGFnZTogcGFnZSxcXG4gICAgICAgIHBhZ2Vfc2l6ZTogcGFnZVNpemUsXFxuICAgICAgICBvcmRlcjogJycsXFxuICAgICAgICBkdXJhdGlvbjogJycsXFxuICAgICAgICBmcm9tX3NvdXJjZTogJycsXFxuICAgICAgICBmcm9tX3NwbWlkOiAzMzMuMzM3LFxcbiAgICAgICAgcGxhdGZvcm06ICdwYycsXFxuICAgICAgICBoaWdobGlnaHQ6IDEsXFxuICAgICAgICBzaW5nbGVfY29sdW1uOiAwLFxcbiAgICAgICAga2V5d29yZDogc2Vhd29yZCxcXG4gICAgICAgIHNlYXJjaF90eXBlOiBzZWFyY2hfdHlwZSxcXG4gICAgICAgIHByZWxvYWQ6IHRydWUsXFxuICAgICAgICBjb20yY286IHRydWVcXG4gICAgfVxcbiAgICBwYXJtcyA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmdldFdiaUVuYyhxdWVyeUpzb24pO1xcbiAgICBkYXRhTGluayA9ICdodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL3diaS9zZWFyY2gvdHlwZT8nICsgcGFybXM7XFxuICAgIGNvb2tpZSA9IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWU7XFxuICAgIHJlcyA9IEpTT04ucGFyc2UoZmV0Y2goZGF0YUxpbmssIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBLFxcbiAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFwiLFxcbiAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBjb29raWVcXG4gICAgICAgIH0sXFxuICAgICAgICBtZXRob2Q6IFxcXCJHRVRcXFwiXFxuICAgIH0pKS5kYXRhO1xcbiAgICByZXR1cm4gcmVzO1xcbn1cXG4vLyDop4bpopHmjqjojZBcXG4kLmV4cG9ydHMuZ2V0RmVlZCA9IGZ1bmN0aW9uICgpIHtcXG4gICAgbGV0IHUgPSBcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9pbmRleC90b3AvZmVlZC9yY21kXFxcIjtcXG4gICAgdmFyIHJlcyA9IEpTT04ucGFyc2UoZmV0Y2godSwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxuICAgICAgICB9XFxuICAgIH0pKTtcXG4gICAgcmV0dXJuIHJlcy5kYXRhLml0ZW1cXG59XFxuLy8g6I635Y+W5pKt5pS+5Zyw5Z2AXFxuJC5leHBvcnRzLmdldFVybCA9IGZ1bmN0aW9uIChhdmlkLCBjaWQsIHFuKSB7XFxuICAgIHZhciBzZXR0aW5nID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpO1xcbiAgICB2YXIgQ29va2llID0gc2V0dGluZy5iZktleSAhPSAnJyA/IGJhc2U2NERlY29kZShiYXNlNjREZWNvZGUoc2V0dGluZy5iZktleSkpIDogc2V0dGluZy51c2VyTGlzdFswXS5jb29raWU7XFxuICAgIHRyeSB7XFxuICAgICAgICBsZXQgdSA9IHJlcXVlc3QoYnVpbGRVcmwoXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcGxheWVyL3BsYXl1cmxcXFwiLCB7XFxuICAgICAgICAgICAgXFxcImF2aWRcXFwiOiBhdmlkLFxcbiAgICAgICAgICAgIFxcXCJjaWRcXFwiOiBjaWQsXFxuICAgICAgICAgICAgXFxcInFuXFxcIjogcW4sXFxuICAgICAgICAgICAgXFxcImZudmVyXFxcIjogMCxcXG4gICAgICAgICAgICAvLyBcXFwiZm52YWxcXFwiOiA0MDQ4LFxcbiAgICAgICAgICAgIFxcXCJmbnZhbFxcXCI6IDE2LFxcbiAgICAgICAgICAgIFxcXCJmb3Vya1xcXCI6IDFcXG4gICAgICAgIH0pLCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICBDb29raWU6IENvb2tpZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgICAgICByZXMgPSBKU09OLnBhcnNlKHUpO1xcbiAgICAgICAgaWYgKHJlcy5kYXRhLmRhc2gpIHtcXG4gICAgICAgICAgICByZXR1cm4gcmVzLmRhdGEuZGFzaDtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgbG9nKFxcXCLmsqHmnInmib7liLBkYXNo5a2X5q61XFxcIik7XFxuICAgICAgICAgICAgaWYgKHJlcy5kYXRhLnN1cHBvcnRfZm9ybWF0cykge1xcbiAgICAgICAgICAgICAgICBpZiAodS5pbmNsdWRlcyhcXFwi6K+V55yLXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgICAgIG1zZyA9IFxcXCLmgqjliJrmiY3op4LnnIvnmoTop4bpopHmmK/or5XnnIvop4bpopHvvIzop4LnnIvlrozmlbTniYfmrrXor7fliY3lvoDlrpjnvZHotK3kubDvvIFcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgbG9nKG1zZyk7XFxuICAgICAgICAgICAgICAgICAgICBjb25maXJtKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+a4qemmqOaPkOekuicsIGNvbnRlbnQ6IG1zZywgY29uZmlybTogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSksIGNhbmNlbDogJC50b1N0cmluZygoKSA9PiB7fSlcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmV0dXJuIHJlcy5kYXRhO1xcbiAgICAgICAgfVxcbiAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIC8vIOS4gOS6uuS5i+S4i+esrOS4gOWto+eahOesrDHvvIwy6ZuG4oCU4oCU5Y+v5Lul6I635Y+W5aSn5Lya5ZGY5Ymn6ZuG55qE5YmNM21pblxcbiAgICAgICAgICAgIGxvZygn5bCd6K+V5pu05pS56K+35rGC5o6l5Y+jLi4uOicgKyBlKTtcXG4gICAgICAgICAgICBsZXQgdSA9IHJlcXVlc3QoYnVpbGRVcmwoXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2MvcGxheWVyL3dlYi9wbGF5dXJsXFxcIiwge1xcbiAgICAgICAgICAgICAgICBcXFwiYXZpZFxcXCI6IGF2aWQsXFxuICAgICAgICAgICAgICAgIFxcXCJjaWRcXFwiOiBjaWQsXFxuICAgICAgICAgICAgICAgIFxcXCJxblxcXCI6IHFuLFxcbiAgICAgICAgICAgICAgICBcXFwiZm52ZXJcXFwiOiAwLFxcbiAgICAgICAgICAgICAgICAvLyBcXFwiZm52YWxcXFwiOiA0MDQ4LFxcbiAgICAgICAgICAgICAgICBcXFwiZm52YWxcXFwiOiAxNixcXG4gICAgICAgICAgICAgICAgXFxcImZvdXJrXFxcIjogMVxcbiAgICAgICAgICAgIH0pLCB7XFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgICAgIENvb2tpZTogQ29va2llXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIC8vIOS7meeOi+eahOaXpeW4uOesrOS4ieWto+esrDEw6ZuG77yM5rKh5pyJZGFzaO+8jOacjeS6hlxcbiAgICAgICAgICAgIGlmIChKU09OLnBhcnNlKHUpLnJlc3VsdC5kYXNoKSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnBhcnNlKHUpLnJlc3VsdC5kYXNoO1xcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIGxvZygn5bCd6K+V6LWw5Y2V57q/6Lev55S76LSoficpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh1KS5yZXN1bHQ7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHtcXG4gICAgICAgICAgICBsb2coJ2Nvb2tpZeacieayoeacieWPr+iDveWkseaViOS6huWRon4nKTtcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuLy8g5o+Q5Lqk5pKt5pS+6K6w5b2VXFxuJC5leHBvcnRzLnJlcG9ydFByb2Nlc3MgPSBmdW5jdGlvbiAoYXZpZCwgY2lkKSB7XFxuICAgIGxldCBjc3JmID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LykgPT09IG51bGwgPyBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llLnNwbGl0KCdiaWxpX2pjdD0nKVsxXSA6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pWzFdO1xcbiAgICBsZXQgcmVzID0gcG9zdChcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC92Mi9oaXN0b3J5L3JlcG9ydFxcXCIsIHtcXG4gICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICBcXFwiYWlkXFxcIjogYXZpZCxcXG4gICAgICAgICAgICBcXFwiY2lkXFxcIjogY2lkLFxcbiAgICAgICAgICAgIFxcXCJjc3JmXFxcIjogY3NyZixcXG4gICAgICAgICAgICBcXFwicHJvZ3Jlc3NcXFwiOiAwXFxuICAgICAgICB9LFxcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIENvb2tpZTogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZVxcbiAgICAgICAgfVxcbiAgICB9KVxcbn1cXG5cXG4vLyDojrflj5bor4TorrpcXG4kLmV4cG9ydHMuZ2V0Q29tbWVudHMgPSBmdW5jdGlvbiAoaWQsIHR5cGUsIHBhZ2UpIHtcXG4gICAgbGV0IHUgPSBidWlsZFVybChcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC92Mi9yZXBseVxcXCIsIHtcXG4gICAgICAgIFxcXCJ0eXBlXFxcIjogdHlwZSxcXG4gICAgICAgIFxcXCJvaWRcXFwiOiBpZCxcXG4gICAgICAgIFxcXCJwblxcXCI6IHBhZ2VcXG4gICAgfSk7XFxuICAgIGxldCByZXMgPSByZXF1ZXN0KHUsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBDb29raWU6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXG4gICAgICAgIH1cXG4gICAgfSlcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKS5kYXRhLnJlcGxpZXNcXG59XFxuLy8g5re75Yqg56iN5ZCO5Zyo55yL4oCU4oCU55yf55qE6bq75LqG77yM5Li65LuA5LmIZmV0Y2jlsLHplJnlkaJ+XFxuJC5leHBvcnRzLmFkZFRvdmlldyA9IGZ1bmN0aW9uIChhaWQpIHtcXG4gICAgbGV0IGNzcmYgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKSA9PT0gbnVsbCA/IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUuc3BsaXQoJ2JpbGlfamN0PScpWzFdIDogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV07XFxuICAgIGxldCB1ID0gXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3YyL2hpc3RvcnkvdG92aWV3L2FkZFxcXCI7XFxuICAgIGxldCByZXMgPSByZXF1ZXN0KGJ1aWxkVXJsKHUsIHtcXG4gICAgICAgIFxcXCJhaWRcXFwiOiBhaWQsXFxuICAgICAgICBcXFwiY3NyZlxcXCI6IGNzcmYsXFxuICAgIH0pLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXCIsXFxuICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXG4gICAgICAgIH0sXFxuICAgICAgICBtZXRob2Q6IFxcXCJQT1NUXFxcIlxcbiAgICB9KVxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXMpLmNvZGU7XFxufVxcbi8vIOWIoOmZpOeojeWQjuWcqOeci1xcbiQuZXhwb3J0cy5kZWxUb3ZpZXcgPSBmdW5jdGlvbiAoYWlkKSB7XFxuICAgIGxldCBjc3JmID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LykgPT09IG51bGwgPyBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llLnNwbGl0KCdiaWxpX2pjdD0nKVsxXSA6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pWzFdO1xcbiAgICBsZXQgdSA9IFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3YyL2hpc3RvcnkvdG92aWV3L2RlbFxcXCI7XFxuICAgIGxldCByZXMgPSByZXF1ZXN0KGJ1aWxkVXJsKHUsIHtcXG4gICAgICAgIFxcXCJhaWRcXFwiOiBhaWQsXFxuICAgICAgICBcXFwiY3NyZlxcXCI6IGNzcmYsXFxuICAgIH0pLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXCIsXFxuICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXG4gICAgICAgIH0sXFxuICAgICAgICBtZXRob2Q6IFxcXCJQT1NUXFxcIlxcbiAgICB9KVxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXMpLmNvZGU7XFxufVxcbi8vIOiuoumYheW9seinhijov73nlarjgIHov73liacpXFxuJC5leHBvcnRzLnN1YnNjcmliZUZpbG0gPSBmdW5jdGlvbiAoc2Vhc29uX2lkKSB7XFxuICAgIGxldCBjc3JmID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LykgPT09IG51bGwgPyBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llLnNwbGl0KCdiaWxpX2pjdD0nKVsxXSA6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pWzFdO1xcbiAgICBsZXQgdSA9IFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3dlYi9mb2xsb3cvYWRkXFxcIjtcXG4gICAgbGV0IHJlcyA9IHJlcXVlc3QoYnVpbGRVcmwodSwge1xcbiAgICAgICAgXFxcInNlYXNvbl9pZFxcXCI6IHNlYXNvbl9pZCxcXG4gICAgICAgIFxcXCJjc3JmXFxcIjogY3NyZixcXG4gICAgfSksIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcIixcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZVxcbiAgICAgICAgfSxcXG4gICAgICAgIG1ldGhvZDogXFxcIlBPU1RcXFwiXFxuICAgIH0pXFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcykucmVzdWx0LnRvYXN0O1xcbn1cXG4vLyDlj5bmtojorqLpmIVcXG4kLmV4cG9ydHMuY2FuY2VsU3Vic2NyaWJlRmlsbSA9IGZ1bmN0aW9uIChzZWFzb25faWQpIHtcXG4gICAgbGV0IGNzcmYgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKSA9PT0gbnVsbCA/IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUuc3BsaXQoJ2JpbGlfamN0PScpWzFdIDogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV07XFxuICAgIGxldCB1ID0gXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2Mvd2ViL2ZvbGxvdy9kZWxcXFwiO1xcbiAgICBsZXQgcmVzID0gcmVxdWVzdChidWlsZFVybCh1LCB7XFxuICAgICAgICBcXFwic2Vhc29uX2lkXFxcIjogc2Vhc29uX2lkLFxcbiAgICAgICAgXFxcImNzcmZcXFwiOiBjc3JmLFxcbiAgICB9KSwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFwiLFxcbiAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxuICAgICAgICB9LFxcbiAgICAgICAgbWV0aG9kOiBcXFwiUE9TVFxcXCJcXG4gICAgfSlcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKS5yZXN1bHQudG9hc3Q7XFxufVxcbi8q5pON5L2c55So5oi35YWz57O7XFxuZmlkOueUqOaIt21pZFxcbmFjdDrmk43kvZzku6PnoIFcXG5yZV9zcmPvvJrlhbPms6jmnaXmupBcXG4qL1xcbiQuZXhwb3J0cy5hZGRBdHRlbnRpb24gPSBmdW5jdGlvbiAobWlkLCBhY3QsIHJlX3NyYykge1xcbiAgICBsZXQgY3NyZiA9IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pID09PSBudWxsID8gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5zcGxpdCgnYmlsaV9qY3Q9JylbMV0gOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKVsxXTtcXG4gICAgbGV0IHUgPSBcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcmVsYXRpb24vbW9kaWZ5XFxcIjtcXG4gICAgbGV0IHJlcyA9IHJlcXVlc3QoYnVpbGRVcmwodSwge1xcbiAgICAgICAgXFxcImZpZFxcXCI6IG1pZCxcXG4gICAgICAgIFxcXCJhY3RcXFwiOiBhY3QsXFxuICAgICAgICBcXFwicmVfc3JjXFxcIjogcmVfc3JjLFxcbiAgICAgICAgXFxcImNzcmZcXFwiOiBjc3JmXFxuICAgIH0pLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXCIsXFxuICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXG4gICAgICAgIH0sXFxuICAgICAgICBtZXRob2Q6IFxcXCJQT1NUXFxcIlxcbiAgICB9KVxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXMpLmNvZGU7XFxufVxcbi8vIOenu+WKqOWFs+azqOeUqOaIt+WIhue7hFxcbiQuZXhwb3J0cy5tb3ZlVXNlcnMgPSBmdW5jdGlvbiAoYmVmb3JlVGFnaWRzLCBhZnRlclRhZ2lkcywgZmlkcykge1xcbiAgICBsZXQgY3NyZiA9IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pID09PSBudWxsID8gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5zcGxpdCgnYmlsaV9qY3Q9JylbMV0gOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKVsxXTtcXG4gICAgbGV0IHUgPSBcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcmVsYXRpb24vdGFncy9tb3ZlVXNlcnNcXFwiO1xcbiAgICBsZXQgcmVzID0gcmVxdWVzdChidWlsZFVybCh1LCB7XFxuICAgICAgICBcXFwiYmVmb3JlVGFnaWRzXFxcIjogYmVmb3JlVGFnaWRzLnRvU3RyaW5nKCksXFxuICAgICAgICBcXFwiYWZ0ZXJUYWdpZHNcXFwiOiBhZnRlclRhZ2lkcy50b1N0cmluZygpLFxcbiAgICAgICAgXFxcImZpZHNcXFwiOiBmaWRzLnRvU3RyaW5nKCksXFxuICAgICAgICBcXFwiY3NyZlxcXCI6IGNzcmZcXG4gICAgfSksIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcIixcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZVxcbiAgICAgICAgfSxcXG4gICAgICAgIG1ldGhvZDogXFxcIlBPU1RcXFwiXFxuICAgIH0pXFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcykuY29kZTtcXG59XFxuLy8g6I635Y+W55So5oi35YWz57O7XFxuJC5leHBvcnRzLmdldFJlbGF0aW9uID0gZnVuY3Rpb24gKG1pZCkge1xcbiAgICAvLyBodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9zcGFjZS9hY2MvcmVsYXRpb24/bWlkPSzml6fmjqXlj6NcXG4gICAgcGFybXMgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5nZXRXYmlFbmMoeyBtaWQ6IG1pZCB9KTtcXG4gICAgaW5mb0xpbmsgPSAnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc3BhY2Uvd2JpL2FjYy9yZWxhdGlvbj8nICsgcGFybXM7XFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcXVlc3QoaW5mb0xpbmssIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBLFxcbiAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFwiLFxcbiAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxuICAgICAgICB9XFxuICAgIH0pKS5kYXRhXFxufVxcbi8vIOafpeivouebruagh+eUqOaIt+aJgOWcqOeahOWIhue7hFxcbiQuZXhwb3J0cy5nZXRVc2VyR3JvdXAgPSBmdW5jdGlvbiAobWlkKSB7XFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3JlbGF0aW9uL3RhZy91c2VyP2ZpZD1cXFwiICsgbWlkLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXG4gICAgICAgIH1cXG4gICAgfSkpLmRhdGFcXG59XFxuLy8g6I635Y+W5YWz5rOo5YiG57uEXFxuJC5leHBvcnRzLmdldE15QXR0ZW50aW9uR3JvdXBMaXN0ID0gZnVuY3Rpb24gKCkge1xcbiAgICByZXR1cm4gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcmVsYXRpb24vdGFncz9qc29ucD1qc29ucFxcXCIsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZSxcXG4gICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFBDX1VBLFxcbiAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFwiXFxuICAgICAgICB9XFxuICAgIH0pKS5kYXRhO1xcbn1cXG4vLyDmmK/lkKbngrnotZ5cXG4kLmV4cG9ydHMuaGFzTGlrZSA9IGZ1bmN0aW9uIChhaWQpIHtcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL2FyY2hpdmUvaGFzL2xpa2VcXFwiLCB7XFxuICAgICAgICBcXFwiYWlkXFxcIjogYWlkXFxuICAgIH0pLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXG4gICAgICAgIH1cXG4gICAgfSkpLmRhdGFcXG59XFxuLy8g5piv5ZCm5pS26JePXFxuJC5leHBvcnRzLmhhc0Zhdm91ciA9IGZ1bmN0aW9uIChhaWQpIHtcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC92Mi9mYXYvdmlkZW8vZmF2b3VyZWRcXFwiLCB7XFxuICAgICAgICBcXFwiYWlkXFxcIjogYWlkXFxuICAgIH0pLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXG4gICAgICAgIH1cXG4gICAgfSkpLmRhdGEuZmF2b3VyZWRcXG59XFxuLy8g6KeG6aKR54K56LWeXFxuJC5leHBvcnRzLnNldExpa2UgPSBmdW5jdGlvbiAoYWlkLCBkZWFsV2F5KSB7XFxuICAgIGxldCBjc3JmID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LykgPT09IG51bGwgPyBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llLnNwbGl0KCdiaWxpX2pjdD0nKVsxXSA6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pWzFdO1xcbiAgICBsZXQgcmVzID0gcG9zdChcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL2FyY2hpdmUvbGlrZVxcXCIsIHtcXG4gICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICBcXFwiYWlkXFxcIjogYWlkLFxcbiAgICAgICAgICAgIFxcXCJsaWtlXFxcIjogZGVhbFdheSxcXG4gICAgICAgICAgICBcXFwiY3NyZlxcXCI6IGNzcmZcXG4gICAgICAgIH0sXFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXG4gICAgICAgIH1cXG4gICAgfSlcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKS5jb2RlO1xcbn1cXG4vLyDojrflj5bmlLbol4/liJfooahcXG4kLmV4cG9ydHMuZ2V0Q29sbGVjdGlvbkdyb3VwTGlzdCA9IGZ1bmN0aW9uICgpIHtcXG4gICAgcmV0dXJuIGNvbGxlY3Rpb25zID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvdjMvZmF2L2ZvbGRlci9saXN0NG5hdmlnYXRlXFxcIiwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llLFxcbiAgICAgICAgfVxcbiAgICB9KSkuZGF0YTtcXG59XFxuLy8g5pS26JePL+WPlua2iOinhumikUFQSVxcbiQuZXhwb3J0cy5zZXRGYXZvdXIgPSBmdW5jdGlvbiAoYWlkLCBhZGRfbWVkaWFfaWRzLCBkZWxfbWVkaWFfaWRzKSB7XFxuICAgIGxldCBjc3JmID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LykgPT09IG51bGwgPyBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llLnNwbGl0KCdiaWxpX2pjdD0nKVsxXSA6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pWzFdO1xcbiAgICBsZXQgcmVzID0gcG9zdChcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20vbWVkaWFsaXN0L2dhdGV3YXkvY29sbC9yZXNvdXJjZS9kZWFsXFxcIiwge1xcbiAgICAgICAgYm9keToge1xcbiAgICAgICAgICAgIFxcXCJyaWRcXFwiOiBhaWQsXFxuICAgICAgICAgICAgXFxcInR5cGVcXFwiOiAyLFxcbiAgICAgICAgICAgIFxcXCJhZGRfbWVkaWFfaWRzXFxcIjogYWRkX21lZGlhX2lkcy50b1N0cmluZygpLFxcbiAgICAgICAgICAgIFxcXCJkZWxfbWVkaWFfaWRzXFxcIjogZGVsX21lZGlhX2lkcy50b1N0cmluZygpLFxcbiAgICAgICAgICAgIFxcXCJjc3JmXFxcIjogY3NyZlxcbiAgICAgICAgfSxcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZSxcXG4gICAgICAgICAgICBcXFwiUmVmZXJlclxcXCI6IFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb21cXFwiXFxuICAgICAgICB9XFxuICAgIH0pXFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcykuY29kZTtcXG59XFxuLy8g6I635Y+W6KeG6aKR5omA5Zyo5pS26JeP5aS5XFxuJC5leHBvcnRzLmdldEZhdm91cklkTGlzdCA9IGZ1bmN0aW9uIChhaWQsIHVzZXJNaWQpIHtcXG4gICAgbGV0IHUgPSBcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvdjMvZmF2L2ZvbGRlci9jcmVhdGVkL2xpc3QtYWxsXFxcIjtcXG4gICAgbGV0IHJlcyA9IHJlcXVlc3QoYnVpbGRVcmwodSwge1xcbiAgICAgICAgXFxcInR5cGVcXFwiOiAyLFxcbiAgICAgICAgXFxcInJpZFxcXCI6IGFpZCxcXG4gICAgICAgIFxcXCJ1cF9taWRcXFwiOiB1c2VyTWlkLFxcbiAgICB9KSwge1xcbiAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlckxpc3RbMF0uY29va2llLFxcbiAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbVxcXCJcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIGZhdm91cklkTGlzdCA9IFtdO1xcbiAgICBKU09OLnBhcnNlKHJlcykuZGF0YS5saXN0LmZvckVhY2goKGl0ZW0pID0+IHtcXG4gICAgICAgIGlmIChpdGVtLmZhdl9zdGF0ZSA9PSAxKSB7XFxuICAgICAgICAgICAgZmF2b3VySWRMaXN0LnB1c2goaXRlbS5pZCk7XFxuICAgICAgICB9XFxuICAgIH0pXFxuICAgIHJldHVybiBmYXZvdXJJZExpc3Q7XFxufVxcbi8vIOeDreaYoOWJp+mbhuaXtumXtOi9tFxcbiQuZXhwb3J0cy5nZXRNb3ZpZXMgPSBmdW5jdGlvbiAodHlwZSwgYmVmb3JlLCBhZnRlcikge1xcbiAgICBsZXQgdSA9IGJ1aWxkVXJsKFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2Mvd2ViL3RpbWVsaW5lXFxcIiwge1xcbiAgICAgICAgXFxcInR5cGVzXFxcIjogdHlwZSxcXG4gICAgICAgIFxcXCJiZWZvcmVcXFwiOiBiZWZvcmUsXFxuICAgICAgICBcXFwiYWZ0ZXJcXFwiOiBhZnRlclxcbiAgICB9KVxcbiAgICBsZXQgcmVzID0gSlNPTi5wYXJzZShyZXF1ZXN0KHUsIHtcXG4gICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZVxcbiAgICAgICAgfVxcbiAgICB9KSlcXG4gICAgcmV0dXJuIHJlcy5yZXN1bHRcXG59XFxuLy8g6I635Y+W5LiT5qCP5paH56ugXFxuJC5leHBvcnRzLmdldFVzZXJBcnRpY2xlID0gZnVuY3Rpb24gKHVwTWlkLCBwYWdlKSB7XFxuICAgIGxldCB1ID0gXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3NwYWNlL2FydGljbGVcXFwiO1xcbiAgICBsZXQgcmVzID0gcmVxdWVzdChidWlsZFVybCh1LCB7XFxuICAgICAgICBcXFwibWlkXFxcIjogdXBNaWQsXFxuICAgICAgICBcXFwicG5cXFwiOiBwYWdlLFxcbiAgICAgICAgXFxcInBzXFxcIjogMTIsXFxuICAgICAgICBcXFwic29ydFxcXCI6ICdwdWJsaXNoX3RpbWUnXFxuICAgIH0pLCB7XFxuICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUsXFxuICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tXFxcIlxcbiAgICAgICAgfVxcbiAgICB9KTtcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKS5kYXRhO1xcbn1cXG4vLyDojrflj5bliqjmgIHmlbDmja5cXG4kLmV4cG9ydHMuZ2V0RHluYW1pY0RhdGEgPSBmdW5jdGlvbiAoZnJvbSwgdXBNaWQpIHtcXG4gICAgdmFyIG5leHRJbmZvID0ge307XFxuICAgIGlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgICAgIGlmIChmcm9tID09ICd1cFNwYWNlJykge1xcbiAgICAgICAgICAgIHZhciB1ID0gXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3BvbHltZXIvd2ViLWR5bmFtaWMvdjEvZmVlZC9zcGFjZT9vZmZzZXQ9Jmhvc3RfbWlkPVxcXCIgKyB1cE1pZCArIFxcXCImdGltZXpvbmVfb2Zmc2V0PS00ODBcXFwiO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB2YXIgdSA9IFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9wb2x5bWVyL3dlYi1keW5hbWljL3YxL2ZlZWQvYWxsP3RpbWV6b25lX29mZnNldD0tNDgwJnR5cGU9YWxsXFxcIjtcXG4gICAgICAgIH1cXG4gICAgICAgIGxhdGVuZXdzID0gSlNPTi5wYXJzZShmZXRjaCh1LCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZSxcXG4gICAgICAgICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBQQ19VQSxcXG4gICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXCJcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KSkuZGF0YTtcXG4gICAgICAgIG5leHRJbmZvLm9mZnNldCA9IGxhdGVuZXdzLm9mZnNldDtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGlmIChmcm9tID09ICd1cFNwYWNlJykge1xcbiAgICAgICAgICAgIHZhciB1ID0gXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3BvbHltZXIvd2ViLWR5bmFtaWMvdjEvZmVlZC9zcGFjZT9vZmZzZXQ9XFxcIiArIHN0b3JhZ2UwLmdldE15VmFyKEpTT04uc3RyaW5naWZ5KE1ZX1BBR0UpKS5vZmZzZXQgKyBcXFwiJmhvc3RfbWlkPVxcXCIgKyB1cE1pZCArIFxcXCImdGltZXpvbmVfb2Zmc2V0PS00ODBcXFwiO1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB2YXIgdSA9IFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9wb2x5bWVyL3dlYi1keW5hbWljL3YxL2ZlZWQvYWxsP3RpbWV6b25lX29mZnNldD0tNDgwJnR5cGU9YWxsJm9mZnNldD1cXFwiICsgc3RvcmFnZTAuZ2V0TXlWYXIoSlNPTi5zdHJpbmdpZnkoTVlfUEFHRSkpLm9mZnNldDtcXG4gICAgICAgIH1cXG4gICAgICAgIGxhdGVuZXdzID0gSlNPTi5wYXJzZShmZXRjaCh1LCB7XFxuICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pKS5kYXRhO1xcbiAgICAgICAgbmV4dEluZm8ub2Zmc2V0ID0gbGF0ZW5ld3Mub2Zmc2V0O1xcbiAgICB9XFxuICAgIHN0b3JhZ2UwLnB1dE15VmFyKEpTT04uc3RyaW5naWZ5KE1ZX1BBR0UgKyAxKSwgbmV4dEluZm8pO1xcbiAgICByZXR1cm4gbGF0ZW5ld3M7XFxufVxcblxcbi8vIOKAlOKAlOeJueWIq+eahOihjOS4uuOAgeW3peWFt+WHveaVsOKAlOKAlFxcbi8vIOWxleekuuWKqOaAgeaVsOaNrijov5Tlm57lh73mlbDmlrnms5XnmoTlj6/miafooYzlrZfnrKbkuLIpXFxuJC5leHBvcnRzLnNob3dEeW5hbWljRGF0YSA9IGZ1bmN0aW9uICgpIHtcXG4gICAgcmV0dXJuICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgaW1nTGluayA9IHN0b3JhZ2UwLmdldE15VmFyKCflm77moIcnKTtcXG4gICAgICAgIGxhdGVuZXdzLml0ZW1zLmZvckVhY2gobGlzdCA9PiB7XFxuICAgICAgICAgICAgaWYgKGxpc3QudHlwZSA9PSAnRFlOQU1JQ19UWVBFX0FWJykge1xcbiAgICAgICAgICAgICAgICAvLyDmipXnqL/op4bpopHvvIjlvZPliY3lj5HluIPvvIniiJpcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogJzxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5wdWJfdGltZSArICctJyArIGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLnB1Yl9hY3Rpb24gKyAnPC9mb250Pjwvc21hbGw+PC9zbWFsbD4nLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5mYWNlICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvdXBIb21lJyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbWlkOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5taWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFjZTogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IuZmFjZVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgIC8vIOS4jeS4gOWumuacieaWh+Wtl+WVilxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IChsaXN0Lm1vZHVsZXMubW9kdWxlX2R5bmFtaWMuZGVzYyA9PT0gbnVsbCA/ICc8Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+dXDlpKrmh5LkuobvvIzov57mlofmoYjpg73kuI3mg7PphY0uLi48L2ZvbnQ+JyA6IGxpc3QubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5kZXNjLnRleHQpLnJlcGxhY2UoL1xcXFxuL2csICc8YnI+JykgKyAnPGJyPjxhIGhyZWY9XFxcImhpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZVxcXCI+5p+l55yL6K+E6K66PC9hPicsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICAgICAgLy8g6L+Z5Liq5LiN6IO955SobG9uZ190ZXh0XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBsaXN0LmJhc2ljLmNvbW1lbnRfaWRfc3RyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IDFcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5tYWpvci5hcmNoaXZlLnRpdGxlLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2R5bmFtaWMubWFqb3IuYXJjaGl2ZS5jb3ZlciArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS92aWRlb1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2R5bmFtaWMubWFqb3IuYXJjaGl2ZS5kZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBhaWQ6IGxpc3QubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5tYWpvci5hcmNoaXZlLmFpZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogJzxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPueVmeiogDonICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9zdGF0LmNvbW1lbnQuY291bnQgKyAnXFxcXHRcXFxcdOWIhuS6qzonICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9zdGF0LmZvcndhcmQuY291bnQgKyAnXFxcXHRcXFxcdOWWnOasojonICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9zdGF0Lmxpa2UuY291bnQgKyAnPC9mb250Pjwvc21hbGw+PC9zbWFsbD4nLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWdMaW5rLuWKqOaAgei2s+i/uSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInXFxuICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChsaXN0LnR5cGUgPT0gJ0RZTkFNSUNfVFlQRV9GT1JXQVJEJykge1xcbiAgICAgICAgICAgICAgICAvLyDlvJXnlKjvvIzlpJrlh7rkuoZvcmln5oyH5ZCR5LiA5LiqKOi/h+WOuynlt7Llj5HluIPnmoTop4bpopEs5YeG56Gu55qE6K+05piv5byV55So5LmL5YmN55qE5biW5a2Q5LiN5LiA5a6a5piv6KeG6aKR4oiaXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IuZmFjZSArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogJzxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5wdWJfdGltZSArICc8L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPicsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvdXBIb21lJyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbWlkOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5taWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFjZTogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IuZmFjZVxcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAobGlzdC5tb2R1bGVzLm1vZHVsZV9keW5hbWljLmRlc2MgPT09IG51bGwgPyAnPGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPnVw5aSq5oeS5LqG77yM6L+e5paH5qGI6YO95LiN5oOz6YWNLi4uPC9mb250PicgOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2R5bmFtaWMuZGVzYy50ZXh0KS5yZXBsYWNlKC9cXFxcbi9nLCAnPGJyPicpICsgJzxicj48YSBocmVmPVxcXCJoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2VcXFwiPuafpeeci+ivhOiuujwvYT4nLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGxpc3QuYmFzaWMuY29tbWVudF9pZF9zdHIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8g5Lmf5piv57qv5paH5a2X77yM5Zug5Li65Y+q5piv5paH5a2XK+W8leeUqOaXqeW3suaKleeov+eahOinhumikVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IDE3XFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAvLyDlvJXnlKjnmoTlhoXlrrnigJTigJTmiKrmlq3vvIjmoLnmja7kuI3lkIznmoTlvJXnlKjnsbvlnovov5vooYzlpITnkIbvvIlcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnPHNtYWxsPjxzbWFsbD7kuIvpnaLlhoXlrrnmnaXoh6rlvJXnlKjnmoTluJblrZAsdXDmmK86PGEgaHJlZj1cXFwiaGlrZXI6Ly9wYWdlL3VwSG9tZVxcXCI+JyArIGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9hdXRob3IubmFtZSArICc8L2E+PC9zbWFsbD48L3NtYWxsPicsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInJpY2hfdGV4dFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pZDogbGlzdC5vcmlnLm1vZHVsZXMubW9kdWxlX2F1dGhvci5taWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9hdXRob3IubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWNlOiBsaXN0Lm9yaWcubW9kdWxlcy5tb2R1bGVfYXV0aG9yLmZhY2VcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJsaW5lXFxcIlxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgaWYgKGxpc3Qub3JpZy50eXBlID09ICdEWU5BTUlDX1RZUEVfQVYnKSB7XFxuICAgICAgICAgICAgICAgICAgICAvLyDlvJXnlKjop4bpopHor7Tor7RcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9keW5hbWljLm1ham9yLmFyY2hpdmUudGl0bGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBsaXN0Lm9yaWcubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5tYWpvci5hcmNoaXZlLmNvdmVyICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9keW5hbWljLm1ham9yLmFyY2hpdmUuZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQ6IGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9keW5hbWljLm1ham9yLmFyY2hpdmUuYWlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsaXN0Lm9yaWcudHlwZSA9PSAnRFlOQU1JQ19UWVBFX1dPUkQnKSB7XFxuICAgICAgICAgICAgICAgICAgICAvLyDlvJXnlKjmloflrZfor7Tor7RcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IChsaXN0Lm9yaWcubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5kZXNjLnRleHQgPT09IG51bGwgPyAnPGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPnVw5aSq5oeS5LqG77yM6L+e5paH5qGI6YO95LiN5oOz6YWNLi4uPC9mb250PicgOiBsaXN0Lm9yaWcubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5kZXNjLnRleHQpLnJlcGxhY2UoL1xcXFxuL2csICc8YnI+JykgKyAnPGJyPjxhIGhyZWY9XFxcImhpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZVxcXCI+5p+l55yL6K+E6K66PC9hPicsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8g6K+E6K66aWTmnaXmupDpg73kuI3kuIDmoLdcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGxpc3Qub3JpZy5pZF9zdHIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOe6r+aWh+Wtl1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAxN1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGxpc3Qub3JpZy50eXBlID09ICdEWU5BTUlDX1RZUEVfRFJBVycpIHtcXG4gICAgICAgICAgICAgICAgICAgIC8vIOW8leeUqOWbvueJh+ivtOivtFxcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogKGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9keW5hbWljLmRlc2MudGV4dCA9PT0gbnVsbCA/ICc8Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+dXDlpKrmh5LkuobvvIzov57mlofmoYjpg73kuI3mg7PphY0uLi48L2ZvbnQ+JyA6IGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9keW5hbWljLmRlc2MudGV4dCkucmVwbGFjZSgvXFxcXG4vZywgJzxicj4nKSArICc8YnI+PGEgaHJlZj1cXFwiaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlXFxcIj7mn6XnnIvor4Torro8L2E+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5vcmlnLm1vZHVsZXMubW9kdWxlX2R5bmFtaWMubWFqb3IuZHJhdy5pZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogMTFcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgICAgIGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9keW5hbWljLm1ham9yLmRyYXcuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGl0ZW0uc3JjICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAncGljXzNfc3F1YXJlJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdGVtLnNyYyArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICBsb2coJ+WPr+iDvei/mOacieacqumAgumFjeeahOivtOivtOexu+WeiycpO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIC8vIOWIhuWJslxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogJzxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPueVmeiogDonICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9zdGF0LmNvbW1lbnQuY291bnQgKyAnXFxcXHRcXFxcdOWIhuS6qzonICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9zdGF0LmZvcndhcmQuY291bnQgKyAnXFxcXHRcXFxcdOWWnOasojonICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9zdGF0Lmxpa2UuY291bnQgKyAnPC9mb250Pjwvc21hbGw+PC9zbWFsbD4nLFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWdMaW5rLuWKqOaAgei2s+i/uSxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInXFxuICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSBlbHNlIGlmIChsaXN0LnR5cGUgPT0gJ0RZTkFNSUNfVFlQRV9XT1JEJykge1xcbiAgICAgICAgICAgICAgICAvLyDnuq/mloflrZdcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogJzxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9XFxcImdyZXlcXFwiPicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5wdWJfdGltZSArICc8L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPicsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLmZhY2UgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS91cEhvbWUnLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBtaWQ6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLm1pZCxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IubmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBmYWNlOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5mYWNlXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXG4gICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IChsaXN0Lm1vZHVsZXMubW9kdWxlX2R5bmFtaWMuZGVzYyA9PT0gbnVsbCA/ICc8Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+dXDlpKrmh5LkuobvvIzov57mlofmoYjpg73kuI3mg7PphY0uLi48L2ZvbnQ+JyA6IGxpc3QubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5kZXNjLnRleHQpLnJlcGxhY2UoL1xcXFxuL2csICc8YnI+JykgKyAnPGJyPjxhIGhyZWY9XFxcImhpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZVxcXCI+5p+l55yL6K+E6K66PC9hPicsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2UnLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5iYXNpYy5jb21tZW50X2lkX3N0cixcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDnuq/mloflrZdcXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAxN1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiAnPHNtYWxsPjxzbWFsbD48Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+55WZ6KiAOicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX3N0YXQuY29tbWVudC5jb3VudCArICdcXFxcdFxcXFx05YiG5LqrOicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX3N0YXQuZm9yd2FyZC5jb3VudCArICdcXFxcdFxcXFx05Zac5qyiOicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX3N0YXQubGlrZS5jb3VudCArICc8L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPicsXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGltZ0xpbmsu5Yqo5oCB6Laz6L+5LFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcidcXG4gICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxpc3QudHlwZSA9PSAnRFlOQU1JQ19UWVBFX0RSQVcnKSB7XFxuICAgICAgICAgICAgICAgIC8vIOWbvueJh+ivtOivtFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiAnPHNtYWxsPjxzbWFsbD48Zm9udCBjb2xvcj1cXFwiZ3JleVxcXCI+JyArIGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLnB1Yl90aW1lICsgJzwvZm9udD48L3NtYWxsPjwvc21hbGw+JyxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IuZmFjZSArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL3VwSG9tZScsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pZDogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IubWlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhY2U6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLmZhY2VcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogKGxpc3QubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5kZXNjID09PSBudWxsID8gJzxmb250IGNvbG9yPVxcXCJncmV5XFxcIj51cOWkquaHkuS6hu+8jOi/nuaWh+ahiOmDveS4jeaDs+mFjS4uLjwvZm9udD4nIDogbGlzdC5tb2R1bGVzLm1vZHVsZV9keW5hbWljLmRlc2MudGV4dCkucmVwbGFjZSgvXFxcXG4vZywgJzxicj4nKSArICc8YnI+PGEgaHJlZj1cXFwiaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlXFxcIj7mn6XnnIvor4Torro8L2E+JyxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZScsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBsaXN0LmJhc2ljLmNvbW1lbnRfaWRfc3RyLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIOebuOewv++8iOWbvueJh+WKqOaAge+8iVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IDExXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICBsaXN0Lm1vZHVsZXMubW9kdWxlX2R5bmFtaWMubWFqb3IuZHJhdy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGl0ZW0uc3JjICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdwaWNfM19zcXVhcmUnLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogaXRlbS5zcmMgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6ICc8c21hbGw+PHNtYWxsPjxmb250IGNvbG9yPVxcXCJncmV5XFxcIj7nlZnoqIA6JyArIGxpc3QubW9kdWxlcy5tb2R1bGVfc3RhdC5jb21tZW50LmNvdW50ICsgJ1xcXFx0XFxcXHTliIbkuqs6JyArIGxpc3QubW9kdWxlcy5tb2R1bGVfc3RhdC5mb3J3YXJkLmNvdW50ICsgJ1xcXFx0XFxcXHTllpzmrKI6JyArIGxpc3QubW9kdWxlcy5tb2R1bGVfc3RhdC5saWtlLmNvdW50ICsgJzwvZm9udD48L3NtYWxsPjwvc21hbGw+JyxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogaW1nTGluay7liqjmgIHotrPov7ksXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJ1xcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9KVxcbn1cXG4vLyDml7bpl7Tml6XmnJ/ovazmjaLlh73mlbBcXG4kLmV4cG9ydHMudGltZUNvbnZlcnQgPSBmdW5jdGlvbiAodGltZSkge1xcbiAgICBmdW5jdGlvbiBmb3JtYXREYXRlKGUsIHQpIHtcXG4gICAgICAgIGUgPSBuZXcgRGF0ZShlICogMTAwMCk7IC8v5pe26Ze05oiz5Li6MTDkvY3pnIAqMTAwMO+8jOaXtumXtOaIs+S4ujEz5L2N55qE6K+d5LiN6ZyA5LmYMTAwMFxcbiAgICAgICAgcmV0dXJuIHQucmVwbGFjZSgveXl5eXxZWVlZLywgZS5nZXRGdWxsWWVhcigpKVxcbiAgICAgICAgICAgIC5yZXBsYWNlKC95eXxZWS8sIHIoZS5nZXRGdWxsWWVhcigpICUgMTAwLCAyKSlcXG4gICAgICAgICAgICAucmVwbGFjZSgvbW18TU0vLCByKGUuZ2V0TW9udGgoKSArIDEsIDIpKVxcbiAgICAgICAgICAgIC5yZXBsYWNlKC9tfE0vZywgZS5nZXRNb250aCgpICsgMSlcXG4gICAgICAgICAgICAucmVwbGFjZSgvZGR8REQvLCByKGUuZ2V0RGF0ZSgpLCAyKSlcXG4gICAgICAgICAgICAucmVwbGFjZSgvZHxEL2csIGUuZ2V0RGF0ZSgpKVxcbiAgICAgICAgICAgIC5yZXBsYWNlKC9oaHxISC8sIHIoZS5nZXRIb3VycygpLCAyKSlcXG4gICAgICAgICAgICAucmVwbGFjZSgvaHxIL2csIGUuZ2V0SG91cnMoKSlcXG4gICAgICAgICAgICAucmVwbGFjZSgvaWl8SUkvLCByKGUuZ2V0TWludXRlcygpLCAyKSlcXG4gICAgICAgICAgICAucmVwbGFjZSgvaXxJL2csIGUuZ2V0TWludXRlcygpKVxcbiAgICAgICAgICAgIC5yZXBsYWNlKC9zc3xTUy8sIHIoZS5nZXRTZWNvbmRzKCksIDIpKVxcbiAgICAgICAgICAgIC5yZXBsYWNlKC9zfFMvZywgZS5nZXRTZWNvbmRzKCkpXFxuICAgICAgICAgICAgLnJlcGxhY2UoL3cvZywgZS5nZXREYXkoKSlcXG4gICAgICAgICAgICAucmVwbGFjZSgvVy9nLCBbXFxcIuaXpVxcXCIsIFxcXCLkuIBcXFwiLCBcXFwi5LqMXFxcIiwgXFxcIuS4iVxcXCIsIFxcXCLlm5tcXFwiLCBcXFwi5LqUXFxcIiwgXFxcIuWFrVxcXCJdW2UuZ2V0RGF5KCldKVxcbiAgICB9XFxuXFxuICAgIGZ1bmN0aW9uIHIoZSwgdCkge1xcbiAgICAgICAgZm9yICh2YXIgciA9IDAsIG4gPSB0IC0gKGUgKyBcXFwiXFxcIikubGVuZ3RoOyByIDwgbjsgcisrKSBlID0gXFxcIjBcXFwiICsgZTtcXG4gICAgICAgIHJldHVybiBlICsgXFxcIlxcXCJcXG4gICAgfVxcbiAgICByZXR1cm4gZm9ybWF0RGF0ZSh0aW1lLCAnWVlZWS1NTS1ERCBoaDppaTpzcycpO1xcbiAgICAvLyBjb25zb2xlLmxvZyhmb3JtYXREYXRlKDE2NjQwODk1MzIsICdZWVlZLU1NLUREIGhoOmlpOnNzJykpO1xcbn1cXG4vLyDnp5LmlbDliIbpkp/ooajovr7ovazmjaLlh73mlbBcXG4kLmV4cG9ydHMuZm9ybWF0U2Vjb25kcyA9IGZ1bmN0aW9uIChzZWNvbmRzKSB7XFxuICAgIGxldCBtaW51dGVzID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gNjApOyAvLyDorqHnrpfliIbpkp/mlbBcXG4gICAgbGV0IHJlbWFpbmluZ1NlY29uZHMgPSBzZWNvbmRzICUgNjA7IC8vIOiuoeeul+WJqeS9meeahOenkuaVsFxcbiAgICBsZXQgZm9ybWF0dGVkVGltZSA9IGAke21pbnV0ZXN9OiR7U3RyaW5nKHJlbWFpbmluZ1NlY29uZHMpLnBhZFN0YXJ0KDIsICcwJyl9YDtcXG4gICAgcmV0dXJuIGZvcm1hdHRlZFRpbWU7XFxufVxcblxcbi8vIELnq5lXYmnnrb7lkI3nrpfms5UoQWZ0ZXIgMjAyMy0zLGdldCByZXF1ZXN0IHdpdGggd2JpLilcXG4kLmV4cG9ydHMuZ2V0V2JpRW5jID0gZnVuY3Rpb24gKHF1ZXJ5SnNvbikge1xcbiAgICBjb25zdCBtaXhpbktleUVuY1RhYiA9IFtcXG4gICAgICAgIDQ2LCA0NywgMTgsIDIsIDUzLCA4LCAyMywgMzIsIDE1LCA1MCwgMTAsIDMxLCA1OCwgMywgNDUsIDM1LCAyNywgNDMsIDUsIDQ5LFxcbiAgICAgICAgMzMsIDksIDQyLCAxOSwgMjksIDI4LCAxNCwgMzksIDEyLCAzOCwgNDEsIDEzLCAzNywgNDgsIDcsIDE2LCAyNCwgNTUsIDQwLFxcbiAgICAgICAgNjEsIDI2LCAxNywgMCwgMSwgNjAsIDUxLCAzMCwgNCwgMjIsIDI1LCA1NCwgMjEsIDU2LCA1OSwgNiwgNjMsIDU3LCA2MiwgMTEsXFxuICAgICAgICAzNiwgMjAsIDM0LCA0NCwgNTJcXG4gICAgXTtcXG5cXG4gICAgLy8g5a+5IGltZ0tleSDlkowgc3ViS2V5IOi/m+ihjOWtl+espumhuuW6j+aJk+S5see8lueggVxcbiAgICBmdW5jdGlvbiBnZXRNaXhpbktleShvcmlnKSB7XFxuICAgICAgICBsZXQgdGVtcCA9ICcnO1xcbiAgICAgICAgbWl4aW5LZXlFbmNUYWIuZm9yRWFjaCgobikgPT4ge1xcbiAgICAgICAgICAgIHRlbXAgKz0gb3JpZ1tuXVxcbiAgICAgICAgfSk7XFxuICAgICAgICByZXR1cm4gdGVtcC5zbGljZSgwLCAzMik7XFxuICAgIH1cXG5cXG4gICAgLy8g5Li66K+35rGC5Y+C5pWw6L+b6KGMIHdiaSDnrb7lkI1cXG4gICAgZnVuY3Rpb24gZW5jV2JpKHBhcmFtcywgaW1nX2tleSwgc3ViX2tleSkge1xcbiAgICAgICAgY29uc3QgbWl4aW5fa2V5ID0gZ2V0TWl4aW5LZXkoaW1nX2tleSArIHN1Yl9rZXkpLFxcbiAgICAgICAgICAgIGN1cnJfdGltZSA9IE1hdGgucm91bmQoRGF0ZS5ub3coKSAvIDEwMDApLFxcbiAgICAgICAgICAgIGNocl9maWx0ZXIgPSAvWyEnXFxcXChcXFxcKSpdL2dcXG4gICAgICAgIGxldCBxdWVyeSA9IFtdO1xcbiAgICAgICAgcGFyYW1zID0gT2JqZWN0LmFzc2lnbihwYXJhbXMsIHsgd3RzOiBjdXJyX3RpbWUgfSk7ICAgIC8vIOa3u+WKoCB3dHMg5a2X5q61XFxuICAgICAgICAvLyDmjInnhacga2V5IOmHjeaOkuWPguaVsFxcbiAgICAgICAgT2JqZWN0LmtleXMocGFyYW1zKS5zb3J0KCkuZm9yRWFjaCgoa2V5KSA9PiB7XFxuICAgICAgICAgICAgcXVlcnkucHVzaChcXG4gICAgICAgICAgICAgICAgZW5jb2RlVVJJQ29tcG9uZW50KGtleSkgK1xcbiAgICAgICAgICAgICAgICAnPScgK1xcbiAgICAgICAgICAgICAgICAvLyDov4fmu6QgdmFsdWUg5Lit55qEIFxcXCIhJygpKlxcXCIg5a2X56ymXFxuICAgICAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudCgoJycgKyBwYXJhbXNba2V5XSkucmVwbGFjZShjaHJfZmlsdGVyLCAnJykpXFxuICAgICAgICAgICAgKVxcbiAgICAgICAgfSlcXG4gICAgICAgIHF1ZXJ5ID0gcXVlcnkuam9pbignJicpO1xcbiAgICAgICAgY29uc3Qgd2JpX3NpZ24gPSBtZDUocXVlcnkgKyBtaXhpbl9rZXkpOyAvLyDorqHnrpcgd19yaWRcXG4gICAgICAgIHJldHVybiBxdWVyeSArICcmd19yaWQ9JyArIHdiaV9zaWduO1xcbiAgICB9XFxuXFxuICAgIC8vIOiOt+WPluacgOaWsOeahCBpbWdfa2V5IOWSjCBzdWJfa2V5XFxuICAgIGZ1bmN0aW9uIGdldFdiaUtleXMoKSB7XFxuICAgICAgICBjb25zdCBqc29uX2NvbnRlbnQgPSBKU09OLnBhcnNlKGZldGNoKCdodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL25hdicsIHtcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogUENfVUEsXFxuICAgICAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFwiXFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBtZXRob2Q6ICdHRVQnXFxuICAgICAgICB9KSkuZGF0YTtcXG4gICAgICAgIGltZ191cmwgPSBqc29uX2NvbnRlbnQud2JpX2ltZy5pbWdfdXJsO1xcbiAgICAgICAgc3ViX3VybCA9IGpzb25fY29udGVudC53YmlfaW1nLnN1Yl91cmw7XFxuICAgICAgICByZXR1cm4ge1xcbiAgICAgICAgICAgIGltZ19rZXk6IGltZ191cmwuc3Vic3RyaW5nKGltZ191cmwubGFzdEluZGV4T2YoJy8nKSArIDEsIGltZ191cmwubGVuZ3RoKS5zcGxpdCgnLicpWzBdLFxcbiAgICAgICAgICAgIHN1Yl9rZXk6IHN1Yl91cmwuc3Vic3RyaW5nKHN1Yl91cmwubGFzdEluZGV4T2YoJy8nKSArIDEsIHN1Yl91cmwubGVuZ3RoKS5zcGxpdCgnLicpWzBdXFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgY29uc3Qgd2JpX2tleXMgPSBnZXRXYmlLZXlzKCk7XFxuXFxuICAgIGNvbnN0IHF1ZXJ5ID0gZW5jV2JpKFxcbiAgICAgICAgcXVlcnlKc29uLFxcbiAgICAgICAgd2JpX2tleXMuaW1nX2tleSxcXG4gICAgICAgIHdiaV9rZXlzLnN1Yl9rZXlcXG4gICAgKTtcXG4gICAgcmV0dXJuIHF1ZXJ5O1xcbn1cXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcInZpZGVvUGFnZVwiLFwicGF0aFwiOlwidmlkZW9cIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuLy8g6aKE5aSE55CGXFxucHV0TXlWYXIoJ+WKn+iDveaKmOWPoCcsICflhbMnKTtcXG5pbWdMaW5rID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ+WbvuaghycpO1xcbmFpZCA9IE1ZX1BBUkFNUy5haWQgKyBcXFwiXFxcIjtcXG4vLyBidmlkID0gTVlfUEFSQU1TLmJ2aWQgKyBcXFwiXFxcIjtcXG5taWQgPSBNWV9QQVJBTVMubWlkICsgXFxcIlxcXCI7XFxudmFyIHtmb3JtYXRTZWNvbmRzfT0kLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKTtcXG50cnkge1xcbiAgICAvL+iOt+WPluinhumikeWIhlDkv6Hmga9cXG4gICAgdmFyIHAgPSBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL3ZpZXc/YWlkPVxcXCIgKyBhaWQpKS5kYXRhO1xcbiAgICBoYXNMaWtlID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuaGFzTGlrZShhaWQpO1xcbiAgICBoYXNGYXZvdXIgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5oYXNGYXZvdXIoYWlkKTtcXG4gICAgc2V0UGFnZVRpdGxlKHAudGl0bGUpO1xcbiAgICBzZXRQYWdlUGljVXJsKHAucGljICsgJ0BSZWZlcmVyPScpO1xcbiAgICAvLyDlj6rmnIkxUOeahOaDheWGtVxcbiAgICBpZiAocC5wYWdlcy5sZW5ndGggPT0gMSkge1xcbiAgICAgICAgY2lkID0gcC5wYWdlc1swXS5jaWQ7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBwLnRpdGxlLFxcbiAgICAgICAgICAgIGltZzogcC5waWMgKyAnQFJlZmVyZXI9JyxcXG4gICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoYWlkLCBjaWQsIHFuKSA9PiB7XFxuICAgICAgICAgICAgICAgIC8vIOecn+emu+S6huS4quWkp+iwse+8jOaYjuaYjuabv+aNouaOieS6hu+8jHVh5a2X56ym5Liy5Y+I5Y+Y5Zue5p2l5LqG77yM5Y+I6KaB5aSE55CG5LiA5qyhXFxuICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5iaWxpTGF6eShhaWQsIGNpZCwgcW4pLnJlcGxhY2UoLzsvZywgXFxcIu+8m++8m1xcXCIpO1xcbiAgICAgICAgICAgIH0sIGFpZCArIFxcXCJcXFwiLCBjaWQgKyBcXFwiXFxcIiwgJzExMicpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicGljXzFcXFwiLFxcbiAgICAgICAgICAgIGRlc2M6J+aSreaUvumHjzonK3Auc3RhdC52aWV3KydcXFxcdFxcXFx0XFxcXHTlvLnluZXmlbA6JytwLnN0YXQuZGFubWFrdSsnXFxcXG7lj5HluIPml6XmnJ86JyskLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS50aW1lQ29udmVydChwLmN0aW1lKSxcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDonYWlkLScrYWlkKyd8Y2lkLScrY2lkLFxcbiAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ2Rt55uS5a2QJywganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3NldHRpbmcjbm9IaXN0b3J5Iz9ydWxlPWRt55uS5a2QJztcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5by55bmV5o6n5Yi2JywganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICdmYWxzZScpID09ICd0cnVlJykge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICdmYWxzZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5by55bmV5bCG5LiN5Y+XZG3nm5LlrZDlj4LmlbDmjqfliLYnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ2lzT3ZlcnJpZGVTYXZlJywgJ3RydWUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W8ueW5leWwhuWPl+WIsGRt55uS5a2Q5Y+C5pWw5o6n5Yi2JztcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9XVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJzxmb250IGNvbG9yPVxcXCJibHVlXFxcIj4nICsgcC5vd25lci5uYW1lICsgJzwvZm9udD4nLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS91cEhvbWVcXFwiLFxcbiAgICAgICAgICAgIGltZzogcC5vd25lci5mYWNlICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIG1pZDogcC5vd25lci5taWQsXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwLm93bmVyLm5hbWUsXFxuICAgICAgICAgICAgICAgIGZhY2U6IHAub3duZXIuZmFjZVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgLy8g6Jm954S25Y+q5pyJMVAs5L2G5Y+v6IO95aSE5LqO5ZCI6ZuG6KeG6aKR5Lit77yM5b6A5b6A5ZyodXDkuIrkvKDkuK3lsZ7kuo7kuIDlpZflvbHniYdcXG4gICAgICAgIGlmIChwLnVnY19zZWFzb24pIHtcXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ/Cfk4HmiYDlsZ7lkIjpm4bvvJo8YSBocmVmPVxcXCJoaWtlcjovL3BhZ2UvY29sbGVjdGlvblZpZWRvXFxcIj4nK3AudWdjX3NlYXNvbi50aXRsZSsnPC9hPicsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9jb2xsZWN0aW9uVmllZG8jbm9IaXN0b3J5I1xcXCIsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHsgXFxcInRleHRTaXplXFxcIjogMTIsIGFpZDogYWlkIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6IHAuc3RhdC5saWtlLFxcbiAgICAgICAgICAgIGltZzogaGFzTGlrZSA9PSAxID8gaW1nTGluay7lt7LngrnotZ4gOiBpbWdMaW5rLuacqueCuei1nixcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoYWlkKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5saWtlTG9naWMoYWlkKVxcbiAgICAgICAgICAgIH0sIGFpZCksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzRcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiAnc2V0TGlrZSdcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6IHAuc3RhdC5mYXZvcml0ZSxcXG4gICAgICAgICAgICBpbWc6IGhhc0Zhdm91ciA/IGltZ0xpbmsu5bey5pS26JePIDogaW1nTGluay7mnKrmlLbol48sXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKGFpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICB1cE1pZCA9IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS51c2VyTWlkO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuZmF2b3VyTG9naWMoYWlkLCB1cE1pZClcXG4gICAgICAgICAgICB9LCBhaWQpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF80XFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogJ3NldEZhdm91cidcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6ICfnqI3lkI7lho3nnIsnLFxcbiAgICAgICAgICAgIGltZzogaW1nTGluay7nqI3lkI7lho3nnIssXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKGFpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuanVkZ2VUb3ZpZXcoYWlkKVxcbiAgICAgICAgICAgIH0sIGFpZCksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzRcXFwiLFxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiAn5p+l55yL6K+E6K66JyxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2UnLFxcbiAgICAgICAgICAgIGltZzogaW1nTGluay7mn6XnnIvor4TorrosXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzRcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIFxcXCJpZFxcXCI6IGFpZCxcXG4gICAgICAgICAgICAgICAgXFxcInR5cGVcXFwiOiAxXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogcC5kZXNjLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibG9uZ190ZXh0XFxcIixcXG4gICAgICAgIH0pO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgLy8g5a2Y5Zyo5aSa6ZuG5YiGUFxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogcC50aXRsZSxcXG4gICAgICAgICAgICBpbWc6IHAucGljICsgJ0BSZWZlcmVyPScsXFxuICAgICAgICAgICAgZGVzYzon5pKt5pS+6YePOicrcC5zdGF0LnZpZXcrJ1xcXFx0XFxcXHRcXFxcdOW8ueW5leaVsDonK3Auc3RhdC5kYW5tYWt1KydcXFxcbuWPkeW4g+aXpeacnzonKyQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLnRpbWVDb252ZXJ0KHAuY3RpbWUpLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChwKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5P2Z5cGFnZScpLnJ1bGUoKHApID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGQgPSBbXTtcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHAuZGVzYyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImxvbmdfdGV4dFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcbiAgICAgICAgICAgICAgICB9LCBwKVxcbiAgICAgICAgICAgIH0sIHApLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwicGljXzFcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnZG3nm5LlrZAnLCBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2Uvc2V0dGluZyNub0hpc3RvcnkjP3J1bGU9ZG3nm5LlrZAnO1xcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICflvLnluZXmjqfliLYnLCBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdldEl0ZW0oJ2lzT3ZlcnJpZGVTYXZlJywgJ2ZhbHNlJykgPT0gJ3RydWUnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ2lzT3ZlcnJpZGVTYXZlJywgJ2ZhbHNlJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lvLnluZXlsIbkuI3lj5dkbeebkuWtkOWPguaVsOaOp+WItic7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnaXNPdmVycmlkZVNhdmUnLCAndHJ1ZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5by55bmV5bCG5Y+X5YiwZG3nm5LlrZDlj4LmlbDmjqfliLYnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH1dXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiAnPGZvbnQgY29sb3I9XFxcImJsdWVcXFwiPicgKyBwLm93bmVyLm5hbWUgKyAnPC9mb250PicsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3VwSG9tZVxcXCIsXFxuICAgICAgICAgICAgaW1nOiBwLm93bmVyLmZhY2UgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgbWlkOiBwLm93bmVyLm1pZCxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHAub3duZXIubmFtZSxcXG4gICAgICAgICAgICAgICAgZmFjZTogcC5vd25lci5mYWNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogcC5zdGF0Lmxpa2UsXFxuICAgICAgICAgICAgaW1nOiBoYXNMaWtlID09IDEgPyBpbWdMaW5rLuW3sueCuei1niA6IGltZ0xpbmsu5pyq54K56LWeLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChhaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmxpa2VMb2dpYyhhaWQpXFxuICAgICAgICAgICAgfSwgYWlkKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImljb25fc21hbGxfNFxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6ICdzZXRMaWtlJ1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogcC5zdGF0LmZhdm9yaXRlLFxcbiAgICAgICAgICAgIGltZzogaGFzRmF2b3VyID8gaW1nTGluay7lt7LmlLbol48gOiBpbWdMaW5rLuacquaUtuiXjyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoYWlkKSA9PiB7XFxuICAgICAgICAgICAgICAgIHVwTWlkID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJNaWQ7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5mYXZvdXJMb2dpYyhhaWQsIHVwTWlkKVxcbiAgICAgICAgICAgIH0sIGFpZCksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzRcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiAnc2V0RmF2b3VyJ1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogJ+eojeWQjuWGjeeciycsXFxuICAgICAgICAgICAgaW1nOiBpbWdMaW5rLueojeWQjuWGjeeciyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoYWlkKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5qdWRnZVRvdmlldyhhaWQpXFxuICAgICAgICAgICAgfSwgYWlkKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImljb25fc21hbGxfNFxcXCIsXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6ICfmn6XnnIvor4TorronLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZScsXFxuICAgICAgICAgICAgaW1nOiBpbWdMaW5rLuafpeeci+ivhOiuuixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImljb25fc21hbGxfNFxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgXFxcImlkXFxcIjogYWlkLFxcbiAgICAgICAgICAgICAgICBcXFwidHlwZVxcXCI6IDFcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6ICfpgInpm4bliJfooagnLFxcbiAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcbiAgICAgICAgICAgIGRlc2M6JzxzbWFsbD48c21hbGw+5YWxJyArIHAudmlkZW9zICsgJ+adoeinhumikTwvc21hbGw+PC9zbWFsbD4nLFxcbiAgICAgICAgICAgIGltZzogaW1nTGluay7liJfooagsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcC5wYWdlcy5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgICAgIGNpZCA9IGl0ZW0uY2lkO1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLnBhcnQsXFxuICAgICAgICAgICAgICAgIGRlc2M6Zm9ybWF0U2Vjb25kcyhpdGVtLmR1cmF0aW9uKSxcXG4gICAgICAgICAgICAgICAgLy8gaW1nOmltZ0xpbmsu5YiGUOWIl+ihqOmhuSxcXG4gICAgICAgICAgICAgICAgaW1nOml0ZW0uZmlyc3RfZnJhbWUrJ0BSZWZlcmVyPScsXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChhaWQsIGNpZCwgcW4pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5iaWxpTGF6eShhaWQsIGNpZCwgcW4pLnJlcGxhY2UoLzsvZywgXFxcIu+8m++8m1xcXCIpO1xcbiAgICAgICAgICAgICAgICB9LCBhaWQgKyBcXFwiXFxcIiwgY2lkICsgXFxcIlxcXCIsICcxMTYnKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICAgICAgICBpZDonYWlkLScrYWlkKyd8Y2lkLScrY2lkLFxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH0pXFxuICAgIH1cXG59IGNhdGNoIChlKSB7XFxuICAgIGxvZyhlKTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn6aG16Z2i6LWw5Lii5LqGLi4uJyxcXG4gICAgICAgIGltZzogJ2h0dHBzOi8vaTAuaGRzbGIuY29tL2Jmcy9nZW5lcmFsL2Y3YjY2NzAxMWE0NjYxNTczMmM3MDFmNGJiMWQwN2Y3OTNmOGQxZGYucG5nQFJlZmVyZXI9JyxcXG4gICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcbiAgICAgICAgZGVzYzogJ+Wkp+amgueOh+inhumikeiiq+Wwgeemge+8jOaIluiAhXVw5bey6LeR6LevficsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInBpY18xXFxcIlxcbiAgICB9KTtcXG59XFxuc2V0UmVzdWx0KGQpO1xcblwifSx7XCJjb2xfdHlwZVwiOlwibG9uZ190ZXh0XCIsXCJuYW1lXCI6XCLor4TorrpcIixcInBhdGhcIjpcIkNvbW1lbnRzXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbnZhciBpZCA9IE1ZX1BBUkFNUy5pZDtcXG52YXIgdHlwZSA9IE1ZX1BBUkFNUy50eXBlO1xcbmxvZyhpZCk7XFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcbiAgICAvLyDosozkvLzmmoLml7blj6rog73mloflrZcr5pWw5a2XXFxuICAgIGQudW5zaGlmdCh7XFxuICAgICAgICB0aXRsZTogXFxcIuWPkeadoeivhOiuuuWQp1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgIHVybDogJC50b1N0cmluZygoaWQsdHlwZSkgPT4ge1xcbiAgICAgICAgICAgIGxldCBjc3JmID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV07XFxuICAgICAgICAgICAgcG9zdChcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC92Mi9yZXBseS9hZGRcXFwiLCB7XFxuICAgICAgICAgICAgICAgIGJvZHk6IHtcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJ0eXBlXFxcIjogdHlwZSxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJvaWRcXFwiOiBpZCxcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJjc3JmXFxcIjogY3NyZixcXG4gICAgICAgICAgICAgICAgICAgIFxcXCJtZXNzYWdlXFxcIjogaW5wdXRcXG4gICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcIkNvb2tpZVxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIpKS5jb29raWVcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgfSwgaWQsdHlwZSlcXG4gICAgfSlcXG59XFxubGV0IGRhdGEgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5nZXRDb21tZW50cyhpZCx0eXBlLE1ZX1BBR0UpO1xcbi8vIGxvZyhkYXRhKTtcXG5pZihkYXRhKXtcXG4gICAgZGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogaXRlbS5tZW1iZXIudW5hbWUsXFxuICAgICAgICAgICAgaW1nOiBpdGVtLm1lbWJlci5hdmF0YXIrJ0BSZWZlcmVyPScsXFxuICAgICAgICAgICAgdXJsOidoaWtlcjovL3BhZ2UvdXBIb21lJyxcXG4gICAgICAgICAgICBkZXNjOic8c21hbGw+PHNtYWxsPjxmb250IGNvbG9yPVxcXCJncmV5XFxcIj4nK2l0ZW0ucmVwbHlfY29udHJvbC5sb2NhdGlvbiArIFxcXCIgXFxcIiArIGl0ZW0ucmVwbHlfY29udHJvbC50aW1lX2Rlc2MrJzwvZm9udD48L3NtYWxsPjwvc21hbGw+JyxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgbWlkOiBpdGVtLm1lbWJlci5taWQsXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLm1lbWJlci51bmFtZSxcXG4gICAgICAgICAgICAgICAgZmFjZTogaXRlbS5tZW1iZXIuYXZhdGFyXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSlcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IGl0ZW0uY29udGVudC5tZXNzYWdlLFxcbiAgICAgICAgfSlcXG4gICAgfSlcXG59ZWxzZXtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiAn5aW95YOP5rKh5pyJ6K+E6K665LqG5ZWm77yM77yBJyxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgIH0pXFxufVxcbnNldFJlc3VsdChkKTtcXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuiuoumYheWIl+ihqFwiLFwicGF0aFwiOlwic3Vic2NyaXB0aW9uXCIsXCJydWxlXCI6XCJpZiAoZ2V0SXRlbSgn6K6i6ZiF57G75Z6LJywgJzEnKSA9PSAnMScpIHtcXG5cXG7CoCDCoCB0eXBlck5hbWUgPSAn6L+955WqJztcXG5cXG59IGVsc2Uge1xcblxcbsKgIMKgIHR5cGVyTmFtZSA9ICfov73liacnO1xcblxcbn1cXG5cXG5kLnB1c2goe1xcblxcbsKgIMKgIHRpdGxlOiAn6L+955WqJyA9PSB0eXBlck5hbWUgPyAn4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9XFxcInJlZFxcXCI+6L+955WqPC9mb250PicgOiAn6L+955WqJyxcXG5cXG7CoCDCoCB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoKSA9PiB7XFxuXFxuwqAgwqAgwqAgwqAgc2V0SXRlbSgn6K6i6ZiF57G75Z6LJywgJzEnKVxcblxcbsKgIMKgIMKgIMKgIHJlZnJlc2hQYWdlKHRydWUpO1xcblxcbsKgIMKgIMKgIMKgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuXFxuwqAgwqAgfSksXFxuXFxuwqAgwqAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcblxcbn0se1xcblxcbsKgIMKgIHRpdGxlOiAn6L+95YmnJyA9PSB0eXBlck5hbWUgPyAn4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9XFxcInJlZFxcXCI+6L+95YmnPC9mb250PicgOiAn6L+95YmnJyxcXG5cXG7CoCDCoCB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoKSA9PiB7XFxuXFxuwqAgwqAgwqAgwqAgc2V0SXRlbSgn6K6i6ZiF57G75Z6LJywgJzInKVxcblxcbsKgIMKgIMKgIMKgIHJlZnJlc2hQYWdlKHRydWUpO1xcblxcbsKgIMKgIMKgIMKgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCI7XFxuXFxuwqAgwqAgfSksXFxuXFxuwqAgwqAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcblxcbn0pO1xcblxcbnN1YnNjcmlwdGlvbnMgPSBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9zcGFjZS9iYW5ndW1pL2ZvbGxvdy9saXN0P3R5cGU9XFxcIiArIGdldEl0ZW0oJ+iuoumYheexu+WeiycsICcxJykgKyBcXFwiJmZvbGxvd19zdGF0dXM9MCZwbj1cXFwiICsgcGFnZSArIFxcXCImcHM9MTUmdm1pZD1cXFwiICsgbWlkLCB7XFxuXFxuwqAgwqAgaGVhZGVyczoge1xcblxcbsKgIMKgIMKgIMKgIFxcXCJDb29raWVcXFwiOiBjb29raWVcXG5cXG7CoCDCoCB9XFxuXFxufSkpLmRhdGE7XFxuXFxuaWYgKHBhZ2UgPT0gMSkge1xcblxcbsKgIMKgIGQucHVzaCh7XFxuXFxuwqAgwqAgwqAgwqAgdGl0bGU6IFxcXCLlvZPliY1cXFwiICsgdHlwZXJOYW1lICsgXFxcIuaVsOmHjzpcXFwiICsgc3Vic2NyaXB0aW9ucy50b3RhbCxcXG5cXG7CoCDCoCDCoCDCoCB1cmw6IFxcXCJoaWtlcjovL2VtcHR5XFxcIixcXG5cXG7CoCDCoCDCoCDCoCBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiXFxuXFxuwqAgwqAgfSlcXG5cXG59XFxuXFxuc3Vic2NyaXB0aW9ucy5saXN0LmZvckVhY2gobGlzdCA9PiB7XFxuXFxuwqAgwqAgZC5wdXNoKHtcXG5cXG7CoCDCoCDCoCDCoCB0aXRsZTogbGlzdC50aXRsZSxcXG5cXG7CoCDCoCDCoCDCoCBpbWc6IGxpc3QuY292ZXIgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG5cXG7CoCDCoCDCoCDCoCB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvZmlsbWVyamkjaW1tZXJzaXZlVGhlbWUjXFxcIixcXG5cXG7CoCDCoCDCoCDCoCBkZXNjOiBsaXN0LmV2YWx1YXRlLnN1YnN0cmluZygwLCAxMikgKyAn4oCY4oCY4oCZ4oCZ4oCmPGZvbnQgY29sb3I9XFxcIiMxQzFDMUNcXFwiPuivpuaDhTwvZm9udD4nICsgJ1xcXFxuJyArIGxpc3Quc2Vhc29uX3R5cGVfbmFtZSArICd8JyArIChsaXN0LmFyZWFzPT09dW5kZWZpbmVkPycnOmxpc3QuYXJlYXNbMF0ubmFtZSArICdcXFxcbicpICsgKGxpc3QucHJvZ3Jlc3MgPT0gJycgPyAn5bCa5pyq6KeC55yLJyA6IGxpc3QucHJvZ3Jlc3MpICsgKGxpc3QubmV3X2VwLmluZGV4X3Nob3c9PT11bmRlZmluZWQ/Jyc6J3wnKyhsaXN0Lm5ld19lcC5pbmRleF9zaG93Lm1hdGNoKC/mm7TmlrB85Y2z5bCGLykgPyAn4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9XFxcInJlZFxcXCI+JyArIGxpc3QubmV3X2VwLmluZGV4X3Nob3cgKyAnPC9mb250Pic6IGxpc3QubmV3X2VwLmluZGV4X3Nob3cpKSxcXG5cXG7CoCDCoCDCoCDCoCBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljJyxcXG5cXG7CoCDCoCDCoCDCoCBleHRyYToge1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHNlYXNvbl9pZDogbGlzdC5zZWFzb25faWRcXG5cXG7CoCDCoCDCoCDCoCB9XFxuXFxuwqAgwqAgfSk7XFxuXFxufSk7XFxuXFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLlhbPms6jliJfooahcIixcInBhdGhcIjpcImF0dGVudGlvblwiLFwicnVsZVwiOlwiaWYgKE1ZX1BBR0UgPT0gMSkge1xcblxcbsKgIMKgIGZvY3VzR3JvdXBzPSQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmdldE15QXR0ZW50aW9uR3JvdXBMaXN0KCk7XFxuXFxuwqAgwqAgcHV0TXlWYXIoJ3RlbXBJZCcsIEpTT04uc3RyaW5naWZ5KGZvY3VzR3JvdXBzWzFdLnRhZ2lkKSk7XFxuXFxuwqAgwqAgZm9jdXNHcm91cHMuZm9yRWFjaChsaXN0ID0+IHtcXG5cXG7CoCDCoCDCoCDCoCBkLnB1c2goe1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiBsaXN0LnRhZ2lkID09IGdldEl0ZW0oJ+WFs+azqOWIhue7hCcsIEpTT04uc3RyaW5naWZ5KGZvY3VzR3JvdXBzWzFdLmlkKSkgPyBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9J3JlZCc+XFxcIiArIGxpc3QubmFtZSArIGxpc3QuY291bnQgKyBcXFwiPC9mb250PlxcXCIgOiBsaXN0Lm5hbWUgKyBsaXN0LmNvdW50LFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChsaXN0KSA9PiB7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc2V0SXRlbSgn5YWz5rOo5YiG57uEJywgSlNPTi5zdHJpbmdpZnkobGlzdC50YWdpZCkpO1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJlZnJlc2hQYWdlKHRydWUpO1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiBcXFwidG9hc3Q6Ly/liIfmjaLlhbPms6jliIbnu4TkuLo6XFxcIiArIGxpc3QubmFtZTtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB9LCBsaXN0KSxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcblxcbsKgIMKgIMKgIMKgIH0pO1xcblxcbsKgIMKgIH0pO1xcblxcbsKgIMKgIC8vIOacq+WwvuihpeWFheaChOaChOWFs+azqOWIhue7hFxcblxcbsKgIMKgIGQucHVzaCh7XFxuXFxuwqAgwqAgwqAgwqAgdGl0bGU6ICfmgoTmgoTlhbPms6gnID09IGdldEl0ZW0oJ+WFs+azqOWIhue7hCcsIEpTT04uc3RyaW5naWZ5KGZvY3VzR3JvdXBzWzBdLmlkKSkgPyBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9J3JlZCc+5oKE5oKE5YWz5rOoPC9mb250PlxcXCIgOiBcXFwi5oKE5oKE5YWz5rOoXFxcIixcXG5cXG7CoCDCoCDCoCDCoCB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoKSA9PiB7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgc2V0SXRlbSgn5YWz5rOo5YiG57uEJywgXFxcIuaChOaChOWFs+azqFxcXCIpO1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHJlZnJlc2hQYWdlKHRydWUpO1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiBcXFwidG9hc3Q6Ly/liIfmjaLlhbPms6jliIbnu4TkuLo6XFxcIiArIFxcXCLmgoTmgoTlhbPms6hcXFwiO1xcblxcbsKgIMKgIMKgIMKgIH0pLFxcblxcbsKgIMKgIMKgIMKgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxuXFxuwqAgwqAgfSx7XFxuXFxuwqAgwqAgwqAgwqAgY29sX3R5cGU6ICdsaW5lJ1xcblxcbsKgIMKgIH0pO1xcblxcbn1cXG5cXG5pZiAoZ2V0SXRlbSgn5YWz5rOo5YiG57uEJyk9PSfmgoTmgoTlhbPms6gnKSB7XFxuXFxuwqAgwqAgZ3JvdXBDb250ZW50ID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcmVsYXRpb24vd2hpc3BlcnM/cG49XFxcIitwYWdlK1xcXCImcHM9MjAmanNvbnA9anNvbnBcXFwiLCB7XFxuXFxuwqAgwqAgwqAgwqAgaGVhZGVyczoge1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIFxcXCJDb29raWVcXFwiOiBjb29raWVcXG5cXG7CoCDCoCDCoCDCoCB9XFxuXFxuwqAgwqAgfSkpLmRhdGEubGlzdDtcXG5cXG7CoCDCoCBncm91cENvbnRlbnQuZm9yRWFjaChsaXN0ID0+IHtcXG5cXG7CoCDCoCDCoCDCoCBkLnB1c2goe1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiBcXFwiPGJpZz48Zm9udCBjb2xvcj0nYmx1ZSc+XFxcIiArIGxpc3QudW5hbWUgKyBcXFwiPC9mb250PjwvYmlnPjxzbWFsbD5cXFwiICsgbGlzdC5zaWduICsgXFxcIjwvc21hbGw+XFxcIixcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBpbWc6IGxpc3QuZmFjZSArIFxcXCJAUmVmZXJlcj1cXFwiLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdXBIb21lXFxcIixcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBleHRyYToge1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIG1pZDogbGlzdC5taWQsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdGl0bGU6IGxpc3QudW5hbWUsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZmFjZTogbGlzdC5mYWNlXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgfVxcblxcbsKgIMKgIMKgIMKgIH0pO1xcblxcbsKgIMKgIH0pO1xcblxcbn1lbHNle1xcblxcbsKgIMKgIGdyb3VwQ29udGVudCA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3JlbGF0aW9uL3RhZz9taWQ9XFxcIiArIG1pZCArIFxcXCImdGFnaWQ9XFxcIiArIGdldEl0ZW0oJ+WFs+azqOWIhue7hCcsIGdldE15VmFyKCd0ZW1wSWQnKSkgKyBcXFwiJnBuPVxcXCIgKyBwYWdlICsgXFxcIiZwcz0yMCZqc29ucD1qc29ucFxcXCIsIHtcXG5cXG7CoCDCoCDCoCDCoCBoZWFkZXJzOiB7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgXFxcIkNvb2tpZVxcXCI6IGNvb2tpZVxcblxcbsKgIMKgIMKgIMKgIH1cXG5cXG7CoCDCoCB9KSkuZGF0YTtcXG5cXG7CoCDCoCBncm91cENvbnRlbnQuZm9yRWFjaChsaXN0ID0+IHtcXG5cXG7CoCDCoCDCoCDCoCBkLnB1c2goe1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiBcXFwiPGJpZz48Zm9udCBjb2xvcj0nYmx1ZSc+XFxcIiArIGxpc3QudW5hbWUgKyBcXFwiPC9mb250PjwvYmlnPjxzbWFsbD5cXFwiICsgbGlzdC5zaWduICsgXFxcIjwvc21hbGw+XFxcIixcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBpbWc6IGxpc3QuZmFjZSArIFxcXCJAUmVmZXJlcj1cXFwiLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGNvbF90eXBlOiAnYXZhdGFyJyxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdXBIb21lXFxcIixcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBleHRyYToge1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIG1pZDogbGlzdC5taWQsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdGl0bGU6IGxpc3QudW5hbWUsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZmFjZTogbGlzdC5mYWNlXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgfVxcblxcbsKgIMKgIMKgIMKgIH0pO1xcblxcbsKgIMKgIH0pO1xcblxcbn1cXG5cXG5cXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaUtuiXj+WIl+ihqFwiLFwicGF0aFwiOlwiY29sZWN0aW9uXCIsXCJydWxlXCI6XCJpZiAocGFnZSA9PSAxKSB7XFxyXFxuICAgIGQucHVzaCh7XFxyXFxuICAgICAgICB0aXRsZTogJ+aIkeWIm+W7uueahOaUtuiXj+WkuScgPT0gZ2V0SXRlbSgn5pS26JeP57G75Z6LJywgJ+aIkeWIm+W7uueahOaUtuiXj+WkuScpID8gJ+KAmOKAmOKAmeKAmTxmb250IGNvbG9yPVxcXCJyZWRcXFwiPuaIkeWIm+W7uueahOaUtuiXj+WkuTwvZm9udD4nIDogJ+aIkeWIm+W7uueahOaUtuiXj+WkuScsXFxyXFxuICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoKSA9PiB7XFxyXFxuICAgICAgICAgICAgc2V0SXRlbSgn5pS26JeP57G75Z6LJywgJ+aIkeWIm+W7uueahOaUtuiXj+WkuScpXFxyXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxyXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXHJcXG4gICAgICAgIH0pLFxcclxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcclxcbiAgICB9LCB7XFxyXFxuICAgICAgICB0aXRsZTogJ+eojeWQjuWcqOeciycgPT0gZ2V0SXRlbSgn5pS26JeP57G75Z6LJywgJ+aIkeWIm+W7uueahOaUtuiXj+WkuScpID8gJ+KAmOKAmOKAmeKAmTxmb250IGNvbG9yPVxcXCJyZWRcXFwiPueojeWQjuWcqOecizwvZm9udD4nIDogJ+eojeWQjuWcqOeciycsXFxyXFxuICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoKSA9PiB7XFxyXFxuICAgICAgICAgICAgc2V0SXRlbSgn5pS26JeP57G75Z6LJywgJ+eojeWQjuWcqOeciycpXFxyXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxyXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIjtcXHJcXG4gICAgICAgIH0pLFxcclxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcclxcbiAgICB9KTtcXHJcXG59XFxyXFxuaWYgKGdldEl0ZW0oJ+aUtuiXj+exu+WeiycsICfmiJHliJvlu7rnmoTmlLbol4/lpLknKSA9PSAn5oiR5Yib5bu655qE5pS26JeP5aS5Jykge1xcclxcbiAgICB0cnkge1xcclxcbiAgICAgICAgaWYgKHBhZ2UgPT0gMSkge1xcclxcbiAgICAgICAgICAgIGQucHVzaCh7XFxyXFxuICAgICAgICAgICAgICAgIC8vIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXHJcXG4gICAgICAgICAgICB9LCApO1xcclxcbiAgICAgICAgfVxcclxcbiAgICAgICAgY29sbGVjdGlvbnMgPSBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC92My9mYXYvZm9sZGVyL2xpc3Q0bmF2aWdhdGVcXFwiLCB7XFxyXFxuICAgICAgICAgICAgaGVhZGVyczoge1xcclxcbiAgICAgICAgICAgICAgICBcXFwiQ29va2llXFxcIjogY29va2llXFxyXFxuICAgICAgICAgICAgfVxcclxcbiAgICAgICAgfSkpLmRhdGE7XFxyXFxuICAgICAgICBncm91cHMgPSBjb2xsZWN0aW9uc1swXS5tZWRpYUxpc3RSZXNwb25zZS5saXN0O1xcclxcbiAgICAgICAgcHV0TXlWYXIoJ3RlbXBJZCcsIEpTT04uc3RyaW5naWZ5KGdyb3Vwc1swXS5pZCkpO1xcclxcbiAgICAgICAgZ3JvdXBzLmZvckVhY2gobGlzdCA9PiB7XFxyXFxuICAgICAgICAgICAgZC5wdXNoKHtcXHJcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QuaWQgPT0gZ2V0SXRlbSgn5pS26JeP5aS5JywgSlNPTi5zdHJpbmdpZnkoZ3JvdXBzWzBdLmlkKSkgPyBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9J3JlZCc+XFxcIiArIGxpc3QudGl0bGUgKyBcXFwiPC9mb250PlxcXCIgOiBsaXN0LnRpdGxlLFxcclxcbiAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgobGlzdCkgPT4ge1xcclxcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgn5pS26JeP5aS5JywgSlNPTi5zdHJpbmdpZnkobGlzdC5pZCkpO1xcclxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxyXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5YiH5o2i5pS26JeP5aS55Li6OlxcXCIgKyBsaXN0LnRpdGxlO1xcclxcbiAgICAgICAgICAgICAgICB9LCBsaXN0KSxcXHJcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXHJcXG4gICAgICAgICAgICB9KTtcXHJcXG4gICAgICAgIH0pO1xcclxcbiAgICAgICAgZC5wdXNoKHtcXHJcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmUnXFxyXFxuICAgICAgICB9KTtcXHJcXG4gICAgICAgIGdyb3VwQ29udGVudCA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3YzL2Zhdi9yZXNvdXJjZS9saXN0P21lZGlhX2lkPVxcXCIgKyBnZXRJdGVtKCfmlLbol4/lpLknLCBnZXRNeVZhcigndGVtcElkJykpICsgXFxcIiZwbj1cXFwiICsgcGFnZSArIFxcXCImcHM9MjAma2V5d29yZD0mb3JkZXI9bXRpbWUmdHlwZT0wJnRpZD0wJnBsYXRmb3JtPXdlYiZqc29ucD1qc29ucFxcXCIsIHtcXHJcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxyXFxuICAgICAgICAgICAgICAgIFxcXCJDb29raWVcXFwiOiBjb29raWVcXHJcXG4gICAgICAgICAgICB9XFxyXFxuICAgICAgICB9KSkuZGF0YS5tZWRpYXM7XFxyXFxuICAgICAgICBncm91cENvbnRlbnQuZm9yRWFjaChsaXN0ID0+IHtcXHJcXG4gICAgICAgICAgICBkLnB1c2goe1xcclxcbiAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC50aXRsZSxcXHJcXG4gICAgICAgICAgICAgICAgaW1nOiBsaXN0LmNvdmVyICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxyXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxyXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS92aWRlb1xcXCIsXFxyXFxuICAgICAgICAgICAgICAgIGRlc2M6ICdVUDonICsgbGlzdC51cHBlci5uYW1lICsgJ1xcXFxuJyArIGxpc3QuaW50cm8sXFxyXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxyXFxuICAgICAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuaWQsXFxyXFxuICAgICAgICAgICAgICAgICAgICBtaWQ6IGxpc3QudXBwZXIubWlkXFxyXFxuICAgICAgICAgICAgICAgIH1cXHJcXG4gICAgICAgICAgICB9KTtcXHJcXG4gICAgICAgIH0pO1xcclxcbiAgICB9IGNhdGNoIChlKSB7XFxyXFxuICAgICAgICBzaG93TG9hZGluZygn5YWE5byf77yM5L2g56Gu6K6k5L2g5pyJ5pS26JeP5ZCX77yM5b+r5Y675pS26JeP5LiA5Liq6KeG6aKRficpO1xcclxcbiAgICB9XFxyXFxufSBlbHNlIHtcXHJcXG4gICAgbGF0ZXJWaWV3cyA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3YyL2hpc3RvcnkvdG92aWV3L3dlYj9qc29ucD1qc29ucFxcXCIsIHtcXHJcXG4gICAgICAgIGhlYWRlcnM6IHtcXHJcXG4gICAgICAgICAgICBcXFwiQ29va2llXFxcIjogY29va2llXFxyXFxuICAgICAgICB9XFxyXFxuICAgIH0pKS5kYXRhO1xcclxcbiAgICBjb3VudCA9IGxhdGVyVmlld3MuY291bnQ7XFxyXFxuICAgIGQucHVzaCh7XFxyXFxuICAgICAgICB0aXRsZTogXFxcIuWFseaciVxcXCIgKyBjb3VudCArIFxcXCLmnaHlvoXnnIvop4bpopHorrDlvZVcXFwiLFxcclxcbiAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxyXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiXFxyXFxuICAgIH0pO1xcclxcbiAgICBsYXRlclZpZXdzLmxpc3QuZm9yRWFjaChsaXN0ID0+IHtcXHJcXG4gICAgICAgIGQucHVzaCh7XFxyXFxuICAgICAgICAgICAgdGl0bGU6IGxpc3QudGl0bGUsXFxyXFxuICAgICAgICAgICAgaW1nOiBsaXN0LnBpYyArIFxcXCJAUmVmZXJlcj1cXFwiLFxcclxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxyXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3ZpZGVvXFxcIixcXHJcXG4gICAgICAgICAgICBkZXNjOiAnVVA6JyArIGxpc3Qub3duZXIubmFtZSArICdcXFxcbicgKyBsaXN0LmRlc2MsXFxyXFxuICAgICAgICAgICAgZXh0cmE6IHtcXHJcXG4gICAgICAgICAgICAgICAgYWlkOiBsaXN0LmFpZCxcXHJcXG4gICAgICAgICAgICAgICAgbWlkOiBsaXN0Lm93bmVyLm1pZFxcclxcbiAgICAgICAgICAgIH1cXHJcXG4gICAgICAgIH0pO1xcclxcbiAgICB9KTtcXHJcXG59XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLotrPov7lcIixcInBhdGhcIjpcInRyYWNrXCIsXCJydWxlXCI6XCJ2YXIgbmV4dEluZm8gPSB7fTtcXG5cXG5pZiAocGFnZSA9PSAxKSB7XFxuXFxuwqAgwqAgaGlzdG9yaWVzID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9oaXN0b3J5L2N1cnNvcj9tYXg9MCZ2aWV3X2F0PTAmYnVzaW5lc3M9XFxcIiwge1xcblxcbsKgIMKgIMKgIMKgIGhlYWRlcnM6IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBcXFwiQ29va2llXFxcIjogY29va2llXFxuXFxuwqAgwqAgwqAgwqAgfVxcblxcbsKgIMKgIH0pKS5kYXRhO1xcblxcbsKgIMKgIG5leHRJbmZvLm1heCA9IGhpc3Rvcmllcy5jdXJzb3IubWF4O1xcblxcbsKgIMKgIG5leHRJbmZvLnZpZXdfYXQgPSBoaXN0b3JpZXMuY3Vyc29yLnZpZXdfYXQ7XFxuXFxuwqAgwqAgbmV4dEluZm8uYnVzaW5lc3MgPSBoaXN0b3JpZXMuY3Vyc29yLmJ1c2luZXNzO1xcblxcbn0gZWxzZSB7XFxuXFxuwqAgwqAgaGlzdG9yaWVzID0gSlNPTi5wYXJzZShmZXRjaChcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9oaXN0b3J5L2N1cnNvcj9tYXg9XFxcIiArIHN0b3JhZ2UwLmdldE15VmFyKEpTT04uc3RyaW5naWZ5KHBhZ2UpKS5tYXggKyBcXFwiJnZpZXdfYXQ9XFxcIiArIHN0b3JhZ2UwLmdldE15VmFyKEpTT04uc3RyaW5naWZ5KHBhZ2UpKS52aWV3X2F0ICsgXFxcIiZidXNpbmVzcz1cXFwiICsgc3RvcmFnZTAuZ2V0TXlWYXIoSlNPTi5zdHJpbmdpZnkocGFnZSkpLmJ1c2luZXNzLCB7XFxuXFxuwqAgwqAgwqAgwqAgaGVhZGVyczoge1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIFxcXCJDb29raWVcXFwiOiBjb29raWVcXG5cXG7CoCDCoCDCoCDCoCB9XFxuXFxuwqAgwqAgfSkpLmRhdGE7XFxuXFxuwqAgwqAgbmV4dEluZm8ubWF4ID0gaGlzdG9yaWVzLmN1cnNvci5tYXg7XFxuXFxuwqAgwqAgbmV4dEluZm8udmlld19hdCA9IGhpc3Rvcmllcy5jdXJzb3Iudmlld19hdDtcXG5cXG7CoCDCoCBuZXh0SW5mby5idXNpbmVzcyA9IGhpc3Rvcmllcy5jdXJzb3IuYnVzaW5lc3M7XFxuXFxufVxcblxcbnN0b3JhZ2UwLnB1dE15VmFyKEpTT04uc3RyaW5naWZ5KHBhZ2UgKyAxKSwgbmV4dEluZm8pO1xcblxcbmhpc3Rvcmllcy5saXN0LmZvckVhY2gobGlzdCA9PiB7XFxuXFxuwqAgwqAgdmlld1RpbWU9cGJ0aW1lID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikudGltZUNvbnZlcnQobGlzdC52aWV3X2F0KTtcXG5cXG7CoCDCoCBpZiAobGlzdC5oaXN0b3J5LmJ1c2luZXNzID09ICdhcnRpY2xlJykge1xcblxcbsKgIMKgIMKgIMKgIC8vIOS4k+agj+aWh+eroFxcblxcbsKgIMKgIMKgIMKgIGQucHVzaCh7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdGl0bGU6IGxpc3Quc2hvd190aXRsZT09Jyc/bGlzdC50aXRsZTpsaXN0LnNob3dfdGl0bGUsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgaW1nOiBsaXN0LmNvdmVyc1swXSArIFxcXCJAUmVmZXJlcj1cXFwiLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2FydGljbGVEZXRhaWxcXFwiLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGRlc2M6IChsaXN0LmF1dGhvcl9uYW1lPT0nJz92aWV3VGltZTonVVA6JyArIGxpc3QuYXV0aG9yX25hbWUrJ1xcXFxuJyApKyB2aWV3VGltZSxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBleHRyYToge1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlkOiBsaXN0Lmhpc3Rvcnkub2lkLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIH1cXG5cXG7CoCDCoCDCoCDCoCB9KTtcXG5cXG7CoCDCoCB9IGVsc2UgaWYobGlzdC5oaXN0b3J5LmJ1c2luZXNzID09ICdhcnRpY2xlLWxpc3QnKXtcXG5cXG7CoCDCoCDCoCDCoCAvLyDmlofnq6DliJfooajvvJ/vvIjlj43mraNpZOWtmOaUvuS9jee9ruS4jeS4gOagt++8iVxcblxcbsKgIMKgIMKgIMKgIGQucHVzaCh7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdGl0bGU6IGxpc3Quc2hvd190aXRsZT09Jyc/bGlzdC50aXRsZTpsaXN0LnNob3dfdGl0bGUsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgaW1nOiBsaXN0LmNvdmVyc1swXSArIFxcXCJAUmVmZXJlcj1cXFwiLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2FydGljbGVEZXRhaWxcXFwiLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGRlc2M6IChsaXN0LmF1dGhvcl9uYW1lPT0nJz92aWV3VGltZTonVVA6JyArIGxpc3QuYXV0aG9yX25hbWUrJ1xcXFxuJyApKyB2aWV3VGltZSxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBleHRyYToge1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlkOiBsaXN0Lmhpc3RvcnkuY2lkLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIH1cXG5cXG7CoCDCoCDCoCDCoCB9KTtcXG5cXG7CoCDCoCB9ZWxzZSBpZihsaXN0Lmhpc3RvcnkuYnVzaW5lc3MgPT0gJ3BnYycpe1xcblxcbsKgIMKgIMKgIMKgIC8vIOezu+WIl+WJp+mbhu+8iOWNlembhu+8iVxcblxcbsKgIMKgIMKgIMKgIGQucHVzaCh7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdGl0bGU6IGxpc3Quc2hvd190aXRsZT09Jyc/bGlzdC50aXRsZTpsaXN0LnNob3dfdGl0bGUsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgaW1nOiBsaXN0LmNvdmVyICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvZmlsbWVyamkjaW1tZXJzaXZlVGhlbWUjXFxcIixcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBkZXNjOiAobGlzdC5hdXRob3JfbmFtZT09Jyc/bGlzdC50YWdfbmFtZSsnXFxcXHRcXFxcdCcrbGlzdC5uZXdfZGVzYysnXFxcXG4nK3ZpZXdUaW1lOidVUDonICsgbGlzdC5hdXRob3JfbmFtZSsnXFxcXG4nK3ZpZXdUaW1lKSxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBleHRyYToge1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGVwX2lkOmxpc3QuaGlzdG9yeS5lcGlkXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgfVxcblxcbsKgIMKgIMKgIMKgIH0pO1xcblxcbsKgIMKgIH1lbHNlIHtcXG5cXG7CoCDCoCDCoCDCoCAvLyDmma7pgJp2aWRlb1xcblxcbsKgIMKgIMKgIMKgIGQucHVzaCh7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdGl0bGU6IGxpc3Quc2hvd190aXRsZT09Jyc/bGlzdC50aXRsZTpsaXN0LnNob3dfdGl0bGUsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgaW1nOiBsaXN0LmNvdmVyICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFwiLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGRlc2M6IChsaXN0LmF1dGhvcl9uYW1lPT0nJz9saXN0LnRhZ19uYW1lKydcXFxcdFxcXFx0JytsaXN0Lm5ld19kZXNjKydcXFxcbicrdmlld1RpbWU6J1VQOicgKyBsaXN0LmF1dGhvcl9uYW1lKydcXFxcbicrdmlld1RpbWUpLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGV4dHJhOiB7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYWlkOiBsaXN0Lmhpc3Rvcnkub2lkLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIH1cXG5cXG7CoCDCoCDCoCDCoCB9KTtcXG5cXG7CoCDCoCB9XFxuXFxufSk7XFxuXFxuXFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLliqjmgIFcIixcInBhdGhcIjpcImxhdGV0TmV3c1wiLFwicnVsZVwiOlwiZC5wdXNoKHtcXG5cXG7CoCDCoCBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxuXFxufSk7XFxuXFxubGF0ZW5ld3M9JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuZ2V0RHluYW1pY0RhdGEoJ215SG9tZScpO1xcblxcbmV2YWwoJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikuc2hvd0R5bmFtaWNEYXRhKCkpO1xcblxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LiT5qCP5YiX6KGoXCIsXCJwYXRoXCI6XCJhY3RpY2xlTGlzdFwiLFwicnVsZVwiOlwianM6XFxuXFxudmFyIGQ9W107XFxuXFxucGFnZT1NWV9QQUdFO1xcblxcbnVwTWlkID0gTVlfUEFSQU1TLm1pZCArIFxcXCJcXFwiO1xcblxcbmFydGljbGVMaXN0PSQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmdldFVzZXJBcnRpY2xlKHVwTWlkLHBhZ2UpO1xcblxcbmFydGljbGVOdW09YXJ0aWNsZUxpc3QuY291bnQ7XFxuXFxuaWYgKGFydGljbGVOdW09PXVuZGVmaW5lZCkge1xcblxcbsKgIMKgIGQucHVzaCh7XFxuXFxuwqAgwqAgwqAgwqAgdGl0bGU6ICfov5l1cOayoeacieS4k+agj+aWh+eroCcsXFxuXFxuwqAgwqAgwqAgwqAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuXFxuwqAgwqAgwqAgwqAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG5cXG7CoCDCoCB9KTtcXG5cXG59ZWxzZXtcXG5cXG7CoCDCoCBtYXhQYWdlID0gTWF0aC5jZWlsKGFydGljbGVOdW0gLyBhcnRpY2xlTGlzdC5wcyk7XFxuXFxuwqAgwqAgaWYgKHBhZ2UgPD0gbWF4UGFnZSkge1xcblxcbsKgIMKgIMKgIMKgIGQucHVzaCh7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgdGl0bGU6ICflvZPliY0656ysJyArIGFydGljbGVMaXN0LnBuICsgJ+mhtVxcXFx0XFxcXHRcXFxcdOWFseaciScgKyBtYXhQYWdlICsgJ+mhtSwnICsgYXJ0aWNsZU51bSArICfmnaHmlbDmja4nLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIHVybDogXFxcImhpa2VyOi8vZW1wdHlcXFwiLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuXFxuwqAgwqAgwqAgwqAgfSk7XFxuXFxuwqAgwqAgwqAgwqAgYXJ0aWNsZUxpc3QuYXJ0aWNsZXMuZm9yRWFjaChsaXN0ID0+IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBwYnRpbWU9JC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikudGltZUNvbnZlcnQobGlzdC5wdWJsaXNoX3RpbWUpO1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIGQucHVzaCh7XFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdGl0bGU6IGxpc3QudGl0bGUsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaW1nOiBsaXN0LmJhbm5lcl91cmw9PScnPyAobGlzdC5pbWFnZV91cmxzKyAnQFJlZmVyZXI9Jyk6KGxpc3QuYmFubmVyX3VybCsgJ0BSZWZlcmVyPScpLFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGRlc2M6ICfigJjigJjigJnigJk8c21hbGw+JytsaXN0LnN0YXRzLnZpZXcrJ+eci+i/h1xcXFx0XFxcXHQnK2xpc3Quc3RhdHMubGlrZSsn5Zac5qyiXFxcXHRcXFxcdCcrbGlzdC5zdGF0cy5mYXZvcml0ZSsn5pS26JePXFxcXG4nICsgcGJ0aW1lKyc8L3NtYWxsPicsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvYXJ0aWNsZURldGFpbFxcXCIsXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZXh0cmE6IHtcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCAvLyDkuJPmoI/mlofnq6BpZFxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlkOiBsaXN0LmlkXFxuXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfVxcblxcbsKgIMKgIMKgIMKgIMKgIMKgIH0pO1xcblxcbsKgIMKgIMKgIMKgIH0pO1xcblxcbsKgIMKgIH1cXG5cXG59XFxuXFxuc2V0UmVzdWx0KGQpO1xcblxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5LiT5qCP5paH56ugWDVcIixcInBhdGhcIjpcImFydGljbGVEZXRhaWxcIixcInJ1bGVcIjpcImpzOlxcblxcbnZhciBkID0gW107XFxuXFxucGFnZSA9IE1ZX1BBR0U7XFxuXFxuY3ZpZCA9IE1ZX1BBUkFNUy5pZCArIFxcXCJcXFwiO1xcblxcbmQucHVzaCh7XFxuXFxuwqAgwqAgdXJsOiBcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL3JlYWQvY3ZcXFwiK2N2aWQsXFxuXFxuwqAgwqAgY29sX3R5cGU6IFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXCIsXFxuXFxuwqAgwqAgZGVzYzogXFxcIjEwMCUmJmZsb2F0XFxcIixcXG5cXG7CoCDCoCBleHRyYToge1xcblxcbsKgIMKgIMKgIMKgIGNhbkJhY2s6IHRydWVcXG5cXG7CoCDCoCB9XFxuXFxufSlcXG5cXG5zZXRSZXN1bHQoZCk7XFxuXFxuXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCLnu7zlkIjng63pl6hcIixcInBhdGhcIjpcImhvdFZpZGVvXCIsXCJydWxlXCI6XCJsZXQgcmVzID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL3BvcHVsYXI/cG49XFxcIiArIE1ZX1BBR0UsIHtcXG5cXG7CoCDCoCBoZWFkZXJzOiB7XFxuXFxuwqAgwqAgwqAgwqAgQ29va2llOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkuY29va2llXFxuXFxuwqAgwqAgfVxcblxcbn0pKS5kYXRhXFxuXFxucmVzLmxpc3QuZm9yRWFjaChpdGVtID0+IHtcXG5cXG7CoCDCoCBkLnB1c2goe1xcblxcbsKgIMKgIMKgIMKgIHRpdGxlOiBpdGVtLnRpdGxlLFxcblxcbsKgIMKgIMKgIMKgIGltZzogaXRlbS5waWMrIFxcXCJAUmVmZXJlcj1cXFwiLFxcblxcbsKgIMKgIMKgIMKgIHVybDogXFxcImhpa2VyOi8vcGFnZS92aWRlb1xcXCIsXFxuXFxuwqAgwqAgwqAgwqAgZGVzYzogaXRlbS5wdWJfbG9jYXRpb24sXFxuXFxuwqAgwqAgwqAgwqAgY29sX3R5cGU6IFxcXCJtb3ZpZV8yXFxcIixcXG5cXG7CoCDCoCDCoCDCoCBleHRyYToge1xcblxcbsKgIMKgIMKgIMKgIMKgIMKgIFxcXCJhaWRcXFwiOiBpdGVtLmFpZCxcXG5cXG7CoCDCoCDCoCDCoCDCoCDCoCBcXFwiY2lkXFxcIjogaXRlbS5jaWQsXFxuXFxuwqAgwqAgwqAgwqAgfVxcblxcbsKgIMKgIH0pXFxuXFxufSlcXG5cXG5cXG5cIn0se1wibmFtZVwiOlwi5ZOU5ZOp5pyA5paw56ug6IqCXCIsXCJwYXRoXCI6XCJnZXRVcGRhdGVcIixcInJ1bGVcIjpcImlmIChNWV9QQVJBTVMuc2Vhc29uX2lkKSB7XFxuICAgIHNlYXNvbl9pZCA9IE1ZX1BBUkFNUy5zZWFzb25faWQgKyBcXFwiXFxcIjtcXG4gICAgRGF0YSA9IEpTT04ucGFyc2UoZmV0Y2goJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2Mvdmlldy93ZWIvc2Vhc29uP3NlYXNvbl9pZD0nICsgc2Vhc29uX2lkKSkucmVzdWx0O1xcbn0gZWxzZSB7XFxuICAgIERhdGEgPSBKU09OLnBhcnNlKGZldGNoKCdodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3ZpZXcvd2ViL3NlYXNvbj9lcF9pZD0nICsgTVlfUEFSQU1TLmVwX2lkKSkucmVzdWx0O1xcbn1cXG7ov73liafml6XljoYgPSBEYXRhLm5ld19lcC5kZXNjO1xcbuabtOaWsOi/m+W6piA9IERhdGEubmV3X2VwLnRpdGxlO1xcbuabtOaWsOeKtuaAgSA9IOi/veWJp+aXpeWOhi5tYXRjaCgv5a6M57uTfOacn+W+hS8pID8g6L+95Ymn5pel5Y6GIDogJ+abtOaWsOiHsycgKyAo5pu05paw6L+b5bqmLm1hdGNoKC9bXFxcXHU0ZTAwLVxcXFx1OWZhNV0vKSA/IOabtOaWsOi/m+W6piA6ICgn56ysJyArICjmm7TmlrDov5vluqYgPT0gJycgPyAwIDog5pu05paw6L+b5bqmKSkgKyAn6K+dJylcXG5zZXRSZXN1bHQo5pu05paw54q25oCBKTtcIn0se1wibmFtZVwiOlwidXDlkIjpm4bop4bpopFcIixcInBhdGhcIjpcImNvbGxlY3Rpb25WaWVkb1wiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG4vLyDpooTlpITnkIZcXG5wdXRNeVZhcign5Yqf6IO95oqY5Y+gJywgJ+WFsycpO1xcbmltZ0xpbmsgPSBzdG9yYWdlMC5nZXRNeVZhcign5Zu+5qCHJyk7XFxuYWlkID0gTVlfUEFSQU1TLmFpZCArIFxcXCJcXFwiO1xcbi8vIGJ2aWQgPSBNWV9QQVJBTVMuYnZpZCArIFxcXCJcXFwiO1xcbi8vIG1pZCA9IE1ZX1BBUkFNUy5taWQgKyBcXFwiXFxcIjtcXG50cnkge1xcbiAgICAvL+iOt+WPluinhumikeWIhlDkv6Hmga9cXG4gICAgdmFyIHAgPSBKU09OLnBhcnNlKGZldGNoKFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL3ZpZXc/YWlkPVxcXCIgKyBhaWQpKS5kYXRhO1xcbiAgICAvLyDlkIjpm4bkv6Hmga9cXG4gICAgdmFyIHZpZGVvRGF0YSA9IHAudWdjX3NlYXNvbjtcXG4gICAgc2V0UGFnZVRpdGxlKHZpZGVvRGF0YS50aXRsZSk7XFxuICAgIHNldFBhZ2VQaWNVcmwodmlkZW9EYXRhLmNvdmVyICsgJ0BSZWZlcmVyPScpO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHZpZGVvRGF0YS50aXRsZSxcXG4gICAgICAgIGRlc2M6dmlkZW9EYXRhLmludHJvLFxcbiAgICAgICAgaW1nOiB2aWRlb0RhdGEuY292ZXIgKyAnQFJlZmVyZXI9JyxcXG4gICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChpbnRybykgPT4ge1xcbiAgICAgICAgICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5P2Z5cGFnZScpLnJ1bGUoKGludHJvKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBkID0gW107XFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaW50cm8sXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImxvbmdfdGV4dFxcXCIsXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXG4gICAgICAgICAgICB9LCBpbnRybylcXG4gICAgICAgIH0sIHZpZGVvRGF0YS5pbnRybyksXFxuICAgICAgICBjb2xfdHlwZTogXFxcInBpY18xXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgICAgICB0aXRsZTogJ2Rt55uS5a2QJywganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2Uvc2V0dGluZyNub0hpc3RvcnkjP3J1bGU9ZG3nm5LlrZAnO1xcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH0sIHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICflvLnluZXmjqfliLYnLCBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0SXRlbSgnaXNPdmVycmlkZVNhdmUnLCAnZmFsc2UnKSA9PSAndHJ1ZScpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICdmYWxzZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lvLnluZXlsIbkuI3lj5dkbeebkuWtkOWPguaVsOaOp+WItic7XFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ2lzT3ZlcnJpZGVTYXZlJywgJ3RydWUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5by55bmV5bCG5Y+X5YiwZG3nm5LlrZDlj4LmlbDmjqfliLYnO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIH1dXFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIHRpdGxlOiAnPGZvbnQgY29sb3I9XFxcImJsdWVcXFwiPicgKyBwLm93bmVyLm5hbWUgKyAnPC9mb250PicsXFxuICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdXBIb21lXFxcIixcXG4gICAgICAgIGltZzogcC5vd25lci5mYWNlICsgXFxcIkBSZWZlcmVyPVxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICBkZXNjOiAnPHNtYWxsPjxzbWFsbD7lhbHmnIknICsgdmlkZW9EYXRhLmVwX2NvdW50ICsgJ+adoeinhumikeaVsOaNrjwvc21hbGw+PC9zbWFsbD4nLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBtaWQ6IHAub3duZXIubWlkLFxcbiAgICAgICAgICAgIHRpdGxlOiBwLm93bmVyLm5hbWUsXFxuICAgICAgICAgICAgZmFjZTogcC5vd25lci5mYWNlXFxuICAgICAgICB9XFxuICAgIH0sIHtcXG4gICAgICAgIGNvbF90eXBlOiAnbGluZSdcXG4gICAgfSk7XFxuICAgIHZhciBpbmRleCA9IDE7XFxuICAgIHN0b3JhZ2UwLnB1dFZhcigndmlkZW9TZWN0aW9ucycsIHZpZGVvRGF0YS5zZWN0aW9ucyk7XFxuICAgIHZpZGVvRGF0YS5zZWN0aW9ucy5mb3JFYWNoKGVsID0+IHtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6ICfwn5OBJyArIGVsLnRpdGxlLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChpbmRleCkgPT4ge1xcbiAgICAgICAgICAgICAgICBpZiAoZ2V0TXlWYXIoJ2lzRm9sZF8nK2luZGV4LCAneScpID09ICd5Jykge1xcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2lzRm9sZF8nK2luZGV4LCAnbicpO1xcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlSXRlbUJ5Q2xzKCdzZWN0aW9uJyArIGluZGV4ICsgJy1wYXJ0Jyk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5oqY5Y+gJztcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdpc0ZvbGRfJytpbmRleCwgJ3knKTtcXG4gICAgICAgICAgICAgICAgICAgIHZpZGVvU2VjdGlvbnMgPSBzdG9yYWdlMC5nZXRWYXIoJ3ZpZGVvU2VjdGlvbnMnKTtcXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb25QYXJ0TGlzdCA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgdmlkZW9TZWN0aW9uc1tpbmRleCAtIDFdLmVwaXNvZGVzLmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYWlkID0gaXRlbS5haWQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lkID0gaXRlbS5jaWQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc3RhdCA9IGl0ZW0uYXJjLnN0YXQ7XFxuICAgICAgICAgICAgICAgICAgICAgICAgc2VjdGlvblBhcnRMaXN0LnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnVxcXFx0XFxcXHRcXFxcdDxzbWFsbD48L2ZvbnQ+4pa277iOJyArIGl0ZW0udGl0bGUgKyAnXFxcXG5cXFxcdFxcXFx0XFxcXHRcXFxcdFxcXFx0PC9mb250Pjwvc21hbGw+PHNtYWxsPjxzbWFsbD48Zm9udCBjb2xvcj1ncmF5PuaSreaUvumHj++8micgKyBzdGF0LnZpZXcgKyAnXFxcXHRcXFxcdFxcXFx05by55bmV77yaJyArIHN0YXQuZGFubWFrdSArICdcXFxcdFxcXFx0XFxcXHTllpzmrKLvvJonICsgc3RhdC5saWtlICsgJzwvZm9udD48L3NtYWxsPjwvc21hbGw+JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKGFpZCwgY2lkLCBxbikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmJpbGlMYXp5KGFpZCwgY2lkLCBxbikucmVwbGFjZSgvOy9nLCBcXFwi77yb77ybXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGFpZCArIFxcXCJcXFwiLCBjaWQgKyBcXFwiXFxcIiwgJzExNicpLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7IGxpbmVWaXNpYmxlOiBmYWxzZSwgY2xzOiAnc2VjdGlvbicgKyBpbmRleCArICctcGFydCcsaWQ6J2FpZC0nK2FpZCsnfGNpZC0nK2NpZCB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKCdTZWN0aW9uJyArIGluZGV4LCBzZWN0aW9uUGFydExpc3QpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suWxleW8gCc7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9LCBpbmRleCksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICd0ZXh0XzEnLFxcbiAgICAgICAgICAgIGV4dHJhOiB7IGlkOiAnU2VjdGlvbicgKyBpbmRleCB9XFxuICAgICAgICB9KTtcXG4gICAgICAgIGVsLmVwaXNvZGVzLmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgYWlkID0gaXRlbS5haWQ7XFxuICAgICAgICAgICAgY2lkID0gaXRlbS5jaWQ7XFxuICAgICAgICAgICAgc3RhdCA9IGl0ZW0uYXJjLnN0YXQ7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ1cXFxcdFxcXFx0XFxcXHQ8c21hbGw+PC9mb250PuKWtu+4jicgKyBpdGVtLnRpdGxlICsgJ1xcXFxuXFxcXHRcXFxcdFxcXFx0XFxcXHRcXFxcdDwvZm9udD48L3NtYWxsPjxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9Z3JheT7mkq3mlL7ph4/vvJonICsgc3RhdC52aWV3ICsgJ1xcXFx0XFxcXHRcXFxcdOW8ueW5le+8micgKyBzdGF0LmRhbm1ha3UgKyAnXFxcXHRcXFxcdFxcXFx05Zac5qyi77yaJyArIHN0YXQubGlrZSArICc8L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPicsXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChhaWQsIGNpZCwgcW4pID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5iaWxpTGF6eShhaWQsIGNpZCwgcW4pLnJlcGxhY2UoLzsvZywgXFxcIu+8m++8m1xcXCIpO1xcbiAgICAgICAgICAgICAgICB9LCBhaWQgKyBcXFwiXFxcIiwgY2lkICsgXFxcIlxcXCIsICcxMTYnKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYTogeyBsaW5lVmlzaWJsZTogZmFsc2UsIGNsczogJ3NlY3Rpb24nICsgaW5kZXggKyAnLXBhcnQnLGlkOidhaWQtJythaWQrJ3xjaWQtJytjaWQgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9KTtcXG4gICAgICAgIGluZGV4Kys7XFxuICAgIH0pXFxufSBjYXRjaCAoZSkge1xcbiAgICBsb2coZSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogJ+mhtemdoui1sOS4ouS6hi4uLicsXFxuICAgICAgICBpbWc6ICdodHRwczovL2kwLmhkc2xiLmNvbS9iZnMvZ2VuZXJhbC9mN2I2NjcwMTFhNDY2MTU3MzJjNzAxZjRiYjFkMDdmNzkzZjhkMWRmLnBuZ0BSZWZlcmVyPScsXFxuICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXG4gICAgICAgIGRlc2M6ICflpKfmpoLnjofop4bpopHooqvlsIHnpoHvvIzmiJbogIV1cOW3sui3kei3r34nLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJwaWNfMVxcXCJcXG4gICAgfSk7XFxufVxcbnNldFJlc3VsdChkKTtcXG5cIn0se1wibmFtZVwiOlwi5Zu+5qCH5LiL6L29XCIsXCJwYXRoXCI6XCJzYXZlTG9jYWxcIixcInJ1bGVcIjpcIiQuZXhwb3J0cy5zYXZlTG9jYWwgPSAoKSA9PiB7XFxuICAgIGNvbnN0IGJhc2U2NFRvSGV4ID0gKGJhc2U2NFN0cikgPT4ge1xcbiAgICAgICAgLy8g5Yig6Zmk5YmN57yA5bm26Kej56CBQmFzZTY05a2X56ym5LiyXFxuICAgICAgICB2YXIgYmluYXJ5U3RyID0gd2luZG93MC5hdG9iKGJhc2U2NFN0ci5zcGxpdCgnLCcpWzFdKTtcXG5cXG4gICAgICAgIC8vIOi9rOaNouS4ujE26L+b5Yi25a2X56ym5LiyXFxuICAgICAgICB2YXIgaGV4U3RyID0gJyc7XFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJpbmFyeVN0ci5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIHZhciBoZXggPSBiaW5hcnlTdHIuY2hhckNvZGVBdChpKS50b1N0cmluZygxNik7XFxuICAgICAgICAgICAgaGV4U3RyICs9IChoZXgubGVuZ3RoID09PSAyID8gaGV4IDogJzAnICsgaGV4KTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBoZXhTdHI7XFxuICAgIH07XFxuICAgIHNob3dMb2FkaW5nKFxcXCLlm77moIfliJ3lp4vljJbkuK0uLi5cXFwiKTtcXG4gICAgdmFyIHR1YmlhbyA9IHt9O1xcbiAgICB0cnkge1xcbiAgICAgICAgLy8g5Ymq6LS05p2/57q/6LevXFxuICAgICAgICBodG1sID0gcmVxdWVzdCgnaHR0cHM6Ly9uZXRjdXQuY24vcC9hMWZjZjBkM2IwYTI3ZjEzJyk7XFxuICAgICAgICBkYXRhID0gaHRtbC5tYXRjaCgvey4qbm90ZV9jb250ZW50Lip1cGRhdGVkX2F0Lip9LylbMF07XFxuICAgICAgICBldmFsKCd0dWJpYW8gPScgKyBKU09OLnBhcnNlKGRhdGEpLm5vdGVfY29udGVudCk7XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIGxvZygn5Ymq6LS05p2/5Ye66ZSZLOWIh+aNouaJmOeuoee6v+i3rycpO1xcbiAgICAgICAgcm91dGUgPSBbXFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0Y29kZS5uZXQvcXFfMjM4NDc4MTkvaGlrZXIvLS9yYXcvbWFzdGVyL3R1Ymlhby5qc29uJyxcXG4gICAgICAgICAgICAnaHR0cHM6Ly9naXRlYS5jb20vY3kvaGlrZXIvcmF3L2NvbW1pdC9iZTIxNjBjNmEwMWRiODczZDlmOTY4MWJhN2U4NmVlYmZhMTE4ZDg2L3R1Ymlhby5qc29uJyxcXG4gICAgICAgICAgICAnaHR0cHM6Ly9yYXcuY29kZWh1Yi5jbi9wL2hpa2VyL2QvdHViaWFvL2dpdC9yYXcvbWFzdGVyL3R1Ymlhby5qc29uP3Rva2VuPUdHZGxJdVZHcVkzYjNMeWRJb3dya3NiVUJDZk15eDJmRjMxV1VaZW80bScsXFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0ZWUuY29tL214eGwtY3kvaGlrZXIvcmF3L21hc3Rlci90dWJpYW8uanNvbidcXG4gICAgICAgIF07XFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdXRlLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAgICAgZXZhbCgndHViaWFvID0nICsgcmVxdWVzdChyb3V0ZVtpXSkpO1xcbiAgICAgICAgICAgICAgICBpZiAodHViaWFvW1xcXCLkupTlpKdcXFwiXSAmJiB0dWJpYW9bXFxcIuWTlOWTqVxcXCJdKSB7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIGxvZygn57q/6Lev77yaJyArIHR1Ymlhb1tpXSArICfooqvlopnkuoYuLi4nKTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICAgICAgbG9nKCfnur/ot6/vvJonICsgdHViaWFvW2ldICsgJ+WHuumUmeS6hi4uLicpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICB0cnkge1xcbiAgICAgICAgdmFyIHd1ZGEgPSB0dWJpYW9bXFxcIuS6lOWkp1xcXCJdO1xcbiAgICAgICAgdmFyIGJpbGkgPSB0dWJpYW9bXFxcIuWTlOWTqVxcXCJdO1xcbiAgICAgICAgdmFyIGluZGV4ID0gMDtcXG4gICAgICAgIGZvciAobGV0IGl0ZW0gaW4gd3VkYSkge1xcbiAgICAgICAgICAgIHdyaXRlSGV4RmlsZShgaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS90dWJpYW8vJHtpdGVtfS5zdmdgLCBiYXNlNjRUb0hleCh3dWRhW2l0ZW1dKSk7XFxuICAgICAgICAgICAgbG9nKGDliJ3lp4vljJbnrKwke2luZGV4Kyt95Liq5Zu+5qCHOiR7aXRlbX0uLi5gKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGZvciAobGV0IGl0ZW0gaW4gYmlsaSkge1xcbiAgICAgICAgICAgIHdyaXRlSGV4RmlsZShgaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy8ke2l0ZW19LnBuZ2AsIGJhc2U2NFRvSGV4KGJpbGlbaXRlbV0pKTtcXG4gICAgICAgICAgICBsb2coYOWIneWni+WMluesrCR7aW5kZXgrK33kuKrlm77moIc6JHtpdGVtfS4uLmApO1xcbiAgICAgICAgfVxcbiAgICAgICAgc2hvd0xvYWRpbmcoJ+Wbvuagh+WIneWni+WMluWujOaIkO+8muWFseiuoScgKyBpbmRleCArICfkuKrlm77moIcnKTtcXG4gICAgICAgIGhpZGVMb2FkaW5nKCk7XFxuICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgIHNob3dMb2FkaW5nKCflm77moIfliJ3lp4vljJblpLHotKUnKTtcXG4gICAgICAgIGxvZygn5Zu+5qCH5Yid5aeL5YyW5aSx6LSlOicgKyBlKTtcXG4gICAgICAgIGhpZGVMb2FkaW5nKCk7XFxuICAgIH1cXG5cXG59O1xcblwifV0sXCJwYXJhbXNcIjpcIntcXFwiYWlkXFxcIjo5NjY3NzUyMjQsXFxcImJ2aWRcXFwiOlxcXCJCVjFXVzR5MWM3cFhcXFwiLFxcXCJ0aXRsZVxcXCI6XFxcIuS4gOWPo+awlOeci+WujOOAkOWMl+a0vuebl+Wik+eslOiusOOAkeabtOaWsOacgOWFqOeJiOacrO+8jOecn+WunuaVheS6i+aUuee8lu+8gVxcXCJ9XCIsXCJzYXZlZFwiOmZhbHNlLFwidGl0bGVcIjpcIkJpbGlsaVwiLFwidmVyc2lvblwiOjAsXCJ1cmxcIjpcImhpa2VyOi8vcGFnZS92aWRlb1wiLFwiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcImZpbmRfcnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG4vLyDpooTlpITnkIZcXG5wdXRNeVZhcign5Yqf6IO95oqY5Y+gJywgJ+WFsycpO1xcbmltZ0xpbmsgPSBzdG9yYWdlMC5nZXRNeVZhcign5Zu+5qCHJyk7XFxuYWlkID0gTVlfUEFSQU1TLmFpZCArIFxcXCJcXFwiO1xcbi8vIGJ2aWQgPSBNWV9QQVJBTVMuYnZpZCArIFxcXCJcXFwiO1xcbm1pZCA9IE1ZX1BBUkFNUy5taWQgKyBcXFwiXFxcIjtcXG52YXIge2Zvcm1hdFNlY29uZHN9PSQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpO1xcbnRyeSB7XFxuICAgIC8v6I635Y+W6KeG6aKR5YiGUOS/oeaBr1xcbiAgICB2YXIgcCA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2Uvdmlldz9haWQ9XFxcIiArIGFpZCkpLmRhdGE7XFxuICAgIGhhc0xpa2UgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5oYXNMaWtlKGFpZCk7XFxuICAgIGhhc0Zhdm91ciA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmhhc0Zhdm91cihhaWQpO1xcbiAgICBzZXRQYWdlVGl0bGUocC50aXRsZSk7XFxuICAgIHNldFBhZ2VQaWNVcmwocC5waWMgKyAnQFJlZmVyZXI9Jyk7XFxuICAgIC8vIOWPquaciTFQ55qE5oOF5Ya1XFxuICAgIGlmIChwLnBhZ2VzLmxlbmd0aCA9PSAxKSB7XFxuICAgICAgICBjaWQgPSBwLnBhZ2VzWzBdLmNpZDtcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHAudGl0bGUsXFxuICAgICAgICAgICAgaW1nOiBwLnBpYyArICdAUmVmZXJlcj0nLFxcbiAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChhaWQsIGNpZCwgcW4pID0+IHtcXG4gICAgICAgICAgICAgICAgLy8g55yf56a75LqG5Liq5aSn6LCx77yM5piO5piO5pu/5o2i5o6J5LqG77yMdWHlrZfnrKbkuLLlj4jlj5jlm57mnaXkuobvvIzlj4jopoHlpITnkIbkuIDmrKFcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmJpbGlMYXp5KGFpZCwgY2lkLCBxbikucmVwbGFjZSgvOy9nLCBcXFwi77yb77ybXFxcIik7XFxuICAgICAgICAgICAgfSwgYWlkICsgXFxcIlxcXCIsIGNpZCArIFxcXCJcXFwiLCAnMTEyJyksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJwaWNfMVxcXCIsXFxuICAgICAgICAgICAgZGVzYzon5pKt5pS+6YePOicrcC5zdGF0LnZpZXcrJ1xcXFx0XFxcXHRcXFxcdOW8ueW5leaVsDonK3Auc3RhdC5kYW5tYWt1KydcXFxcbuWPkeW4g+aXpeacnzonKyQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLnRpbWVDb252ZXJ0KHAuY3RpbWUpLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOidhaWQtJythaWQrJ3xjaWQtJytjaWQsXFxuICAgICAgICAgICAgICAgIGxvbmdDbGljazogW3tcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnZG3nm5LlrZAnLCBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2Uvc2V0dGluZyNub0hpc3RvcnkjP3J1bGU9ZG3nm5LlrZAnO1xcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICflvLnluZXmjqfliLYnLCBqczogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGdldEl0ZW0oJ2lzT3ZlcnJpZGVTYXZlJywgJ2ZhbHNlJykgPT0gJ3RydWUnKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ2lzT3ZlcnJpZGVTYXZlJywgJ2ZhbHNlJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lvLnluZXlsIbkuI3lj5dkbeebkuWtkOWPguaVsOaOp+WItic7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnaXNPdmVycmlkZVNhdmUnLCAndHJ1ZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5by55bmV5bCG5Y+X5YiwZG3nm5LlrZDlj4LmlbDmjqfliLYnO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH1dXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiAnPGZvbnQgY29sb3I9XFxcImJsdWVcXFwiPicgKyBwLm93bmVyLm5hbWUgKyAnPC9mb250PicsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3VwSG9tZVxcXCIsXFxuICAgICAgICAgICAgaW1nOiBwLm93bmVyLmZhY2UgKyBcXFwiQFJlZmVyZXI9XFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgbWlkOiBwLm93bmVyLm1pZCxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHAub3duZXIubmFtZSxcXG4gICAgICAgICAgICAgICAgZmFjZTogcC5vd25lci5mYWNlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICAvLyDomb3nhLblj6rmnIkxUCzkvYblj6/og73lpITkuo7lkIjpm4bop4bpopHkuK3vvIzlvoDlvoDlnKh1cOS4iuS8oOS4reWxnuS6juS4gOWll+W9seeJh1xcbiAgICAgICAgaWYgKHAudWdjX3NlYXNvbikge1xcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn8J+TgeaJgOWxnuWQiOmbhu+8mjxhIGhyZWY9XFxcImhpa2VyOi8vcGFnZS9jb2xsZWN0aW9uVmllZG9cXFwiPicrcC51Z2Nfc2Vhc29uLnRpdGxlKyc8L2E+JyxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL2NvbGxlY3Rpb25WaWVkbyNub0hpc3RvcnkjXFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcbiAgICAgICAgICAgICAgICBleHRyYTogeyBcXFwidGV4dFNpemVcXFwiOiAxMiwgYWlkOiBhaWQgfVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICB9XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogcC5zdGF0Lmxpa2UsXFxuICAgICAgICAgICAgaW1nOiBoYXNMaWtlID09IDEgPyBpbWdMaW5rLuW3sueCuei1niA6IGltZ0xpbmsu5pyq54K56LWeLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChhaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmxpa2VMb2dpYyhhaWQpXFxuICAgICAgICAgICAgfSwgYWlkKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImljb25fc21hbGxfNFxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6ICdzZXRMaWtlJ1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogcC5zdGF0LmZhdm9yaXRlLFxcbiAgICAgICAgICAgIGltZzogaGFzRmF2b3VyID8gaW1nTGluay7lt7LmlLbol48gOiBpbWdMaW5rLuacquaUtuiXjyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoYWlkKSA9PiB7XFxuICAgICAgICAgICAgICAgIHVwTWlkID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcIikpLnVzZXJNaWQ7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5mYXZvdXJMb2dpYyhhaWQsIHVwTWlkKVxcbiAgICAgICAgICAgIH0sIGFpZCksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpY29uX3NtYWxsXzRcXFwiLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiAnc2V0RmF2b3VyJ1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogJ+eojeWQjuWGjeeciycsXFxuICAgICAgICAgICAgaW1nOiBpbWdMaW5rLueojeWQjuWGjeeciyxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoYWlkKSA9PiB7XFxuICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9hcGlcXFwiKS5qdWRnZVRvdmlldyhhaWQpXFxuICAgICAgICAgICAgfSwgYWlkKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImljb25fc21hbGxfNFxcXCIsXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6ICfmn6XnnIvor4TorronLFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZScsXFxuICAgICAgICAgICAgaW1nOiBpbWdMaW5rLuafpeeci+ivhOiuuixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImljb25fc21hbGxfNFxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgXFxcImlkXFxcIjogYWlkLFxcbiAgICAgICAgICAgICAgICBcXFwidHlwZVxcXCI6IDFcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiBwLmRlc2MsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJsb25nX3RleHRcXFwiLFxcbiAgICAgICAgfSk7XFxuICAgIH0gZWxzZSB7XFxuICAgICAgICAvLyDlrZjlnKjlpJrpm4bliIZQXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiBwLnRpdGxlLFxcbiAgICAgICAgICAgIGltZzogcC5waWMgKyAnQFJlZmVyZXI9JyxcXG4gICAgICAgICAgICBkZXNjOifmkq3mlL7ph486JytwLnN0YXQudmlldysnXFxcXHRcXFxcdFxcXFx05by55bmV5pWwOicrcC5zdGF0LmRhbm1ha3UrJ1xcXFxu5Y+R5biD5pel5pyfOicrJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikudGltZUNvbnZlcnQocC5jdGltZSksXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKHApID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoJ2hpa2VyOi8vZW1wdHk/ZnlwYWdlJykucnVsZSgocCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgZCA9IFtdO1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcC5kZXNjLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwibG9uZ190ZXh0XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxuICAgICAgICAgICAgICAgIH0sIHApXFxuICAgICAgICAgICAgfSwgcCksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJwaWNfMVxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICdkbeebkuWtkCcsIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9zZXR0aW5nI25vSGlzdG9yeSM/cnVsZT1kbeebkuWtkCc7XFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+W8ueW5leaOp+WIticsIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0SXRlbSgnaXNPdmVycmlkZVNhdmUnLCAnZmFsc2UnKSA9PSAndHJ1ZScpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnaXNPdmVycmlkZVNhdmUnLCAnZmFsc2UnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W8ueW5leWwhuS4jeWPl2Rt55uS5a2Q5Y+C5pWw5o6n5Yi2JztcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICd0cnVlJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lvLnluZXlsIblj5fliLBkbeebkuWtkOWPguaVsOaOp+WItic7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfV1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6ICc8Zm9udCBjb2xvcj1cXFwiYmx1ZVxcXCI+JyArIHAub3duZXIubmFtZSArICc8L2ZvbnQ+JyxcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvdXBIb21lXFxcIixcXG4gICAgICAgICAgICBpbWc6IHAub3duZXIuZmFjZSArIFxcXCJAUmVmZXJlcj1cXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiYXZhdGFyXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBtaWQ6IHAub3duZXIubWlkLFxcbiAgICAgICAgICAgICAgICB0aXRsZTogcC5vd25lci5uYW1lLFxcbiAgICAgICAgICAgICAgICBmYWNlOiBwLm93bmVyLmZhY2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiBwLnN0YXQubGlrZSxcXG4gICAgICAgICAgICBpbWc6IGhhc0xpa2UgPT0gMSA/IGltZ0xpbmsu5bey54K56LWeIDogaW1nTGluay7mnKrngrnotZ4sXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKGFpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcIikubGlrZUxvZ2ljKGFpZClcXG4gICAgICAgICAgICB9LCBhaWQpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF80XFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogJ3NldExpa2UnXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiBwLnN0YXQuZmF2b3JpdGUsXFxuICAgICAgICAgICAgaW1nOiBoYXNGYXZvdXIgPyBpbWdMaW5rLuW3suaUtuiXjyA6IGltZ0xpbmsu5pyq5pS26JePLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChhaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgdXBNaWQgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiKSkudXNlck1pZDtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmZhdm91ckxvZ2ljKGFpZCwgdXBNaWQpXFxuICAgICAgICAgICAgfSwgYWlkKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImljb25fc21hbGxfNFxcXCIsXFxuICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgaWQ6ICdzZXRGYXZvdXInXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiAn56iN5ZCO5YaN55yLJyxcXG4gICAgICAgICAgICBpbWc6IGltZ0xpbmsu56iN5ZCO5YaN55yLLFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChhaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmp1ZGdlVG92aWV3KGFpZClcXG4gICAgICAgICAgICB9LCBhaWQpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF80XFxcIixcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogJ+afpeeci+ivhOiuuicsXFxuICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlJyxcXG4gICAgICAgICAgICBpbWc6IGltZ0xpbmsu5p+l55yL6K+E6K66LFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwiaWNvbl9zbWFsbF80XFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBcXFwiaWRcXFwiOiBhaWQsXFxuICAgICAgICAgICAgICAgIFxcXCJ0eXBlXFxcIjogMVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogJ+mAiembhuWIl+ihqCcsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCIsXFxuICAgICAgICAgICAgZGVzYzonPHNtYWxsPjxzbWFsbD7lhbEnICsgcC52aWRlb3MgKyAn5p2h6KeG6aKRPC9zbWFsbD48L3NtYWxsPicsXFxuICAgICAgICAgICAgaW1nOiBpbWdMaW5rLuWIl+ihqCxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcbiAgICAgICAgfSk7XFxuICAgICAgICBwLnBhZ2VzLmZvckVhY2goaXRlbSA9PiB7XFxuICAgICAgICAgICAgY2lkID0gaXRlbS5jaWQ7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0ucGFydCxcXG4gICAgICAgICAgICAgICAgZGVzYzpmb3JtYXRTZWNvbmRzKGl0ZW0uZHVyYXRpb24pLFxcbiAgICAgICAgICAgICAgICAvLyBpbWc6aW1nTGluay7liIZQ5YiX6KGo6aG5LFxcbiAgICAgICAgICAgICAgICBpbWc6aXRlbS5maXJzdF9mcmFtZSsnQFJlZmVyZXI9JyxcXG4gICAgICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKGFpZCwgY2lkLCBxbikgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXCIpLmJpbGlMYXp5KGFpZCwgY2lkLCBxbikucmVwbGFjZSgvOy9nLCBcXFwi77yb77ybXFxcIik7XFxuICAgICAgICAgICAgICAgIH0sIGFpZCArIFxcXCJcXFwiLCBjaWQgKyBcXFwiXFxcIiwgJzExNicpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgICAgICAgIGlkOidhaWQtJythaWQrJ3xjaWQtJytjaWQsXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSlcXG4gICAgfVxcbn0gY2F0Y2ggKGUpIHtcXG4gICAgbG9nKGUpO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6ICfpobXpnaLotbDkuKLkuoYuLi4nLFxcbiAgICAgICAgaW1nOiAnaHR0cHM6Ly9pMC5oZHNsYi5jb20vYmZzL2dlbmVyYWwvZjdiNjY3MDExYTQ2NjE1NzMyYzcwMWY0YmIxZDA3Zjc5M2Y4ZDFkZi5wbmdAUmVmZXJlcj0nLFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgICAgICBkZXNjOiAn5aSn5qaC546H6KeG6aKR6KKr5bCB56aB77yM5oiW6ICFdXDlt7Lot5Hot69+JyxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwicGljXzFcXFwiXFxuICAgIH0pO1xcbn1cXG5zZXRSZXN1bHQoZCk7XFxuXCIsXCJncm91cFwiOlwi8J+OqERSXCIsXCJ1YVwiOlwicGNcIixcInByZVJ1bGVcIjpcImpzOlxcbi8vIOWbvueJh+mihOWkhOeQhlxcbmltZ0xvY2F0aW9uID0ge1xcbiAgICBcXFwi5bey5pS26JePXFxcIjogJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaV9waWMv5bey5pS26JePLnBuZycsXFxuICAgIFxcXCLmnKrmlLbol49cXFwiOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy/mnKrmlLbol48ucG5nJyxcXG4gICAgXFxcIueojeWQjuWGjeeci1xcXCI6ICdoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGlfcGljL+eojeWQjuWGjeeciy5wbmcnLFxcbiAgICBcXFwi5pyq54K56LWeXFxcIjogJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaV9waWMv5pyq54K56LWeLnBuZycsXFxuICAgIFxcXCLlt7LngrnotZ5cXFwiOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy/lt7LngrnotZ4ucG5nJyxcXG4gICAgXFxcIua3u+WKoOWFs+azqFxcXCI6ICdoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGlfcGljL+a3u+WKoOWFs+azqC5wbmcnLFxcbiAgICBcXFwi5bey5YWz5rOoXFxcIjogJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaV9waWMv5bey5YWz5rOoLnBuZycsXFxuICAgIFxcXCLkuJPmoI9cXFwiOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy/kuJPmoI8ucG5nJyxcXG4gICAgXFxcIuafpeeci+ivhOiuulxcXCI6ICdoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGlfcGljL+afpeeci+ivhOiuui5wbmcnLFxcbiAgICBcXFwi5ZGo6L65XFxcIjogJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaV9waWMv5ZGo6L65LnBuZycsXFxuICAgIFxcXCLlj4zovrlcXFwiOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy/lj4zovrkucG5nJyxcXG4gICAgXFxcIuWIl+ihqFxcXCI6ICdoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGlfcGljL+WIl+ihqC5wbmcnLFxcbiAgICBcXFwi6K6i6ZiFXFxcIjogJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaV9waWMv6K6i6ZiFLnBuZycsXFxuICAgIFxcXCLml6XljoZcXFwiOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpX3BpYy/ml6XljoYucG5nJyxcXG4gICAgXFxcIuWKqOaAgVxcXCI6ICdoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGlfcGljL+WKqOaAgS5wbmcnLFxcbiAgICBcXFwi5Yqo5oCB6Laz6L+5XFxcIjogJ2h0dHBzOi8vY2RuMy5pY29uZmluZGVyLmNvbS9kYXRhL2ljb25zL25hdHVyZS0xNjkvMzIvZ3Jhc3NfdHVyZl9wbGFudF9sYXduX25hdHVyZV9tZWFkb3dfZ2FyZGVuX25hdHVyYWxfZW52aXJvbm1lbnQtMTI4LnBuZ0BSZWZlcmVyPScsXFxuICAgIFxcXCLlkIjpm4bmlofku7blpLlcXFwiOiAnaHR0cHM6Ly9jZG40Lmljb25maW5kZXIuY29tL2RhdGEvaWNvbnMvY29tbWVubHktbmVlZGVkLzQwMC9JY29uLTE3LTEyOC5wbmdAUmVmZXJlcj0nLFxcbiAgICBcXFwi5YiGUOWIl+ihqOmhuVxcXCI6ICdodHRwczovL2NkbjEuaWNvbmZpbmRlci5jb20vZGF0YS9pY29ucy9taW5pbWFsLXVpLTIvMjQvcGxheV9tZWRpYV9idXR0b24tMTI4LnBuZ0BSZWZlcmVyPSdcXG59XFxuc3RvcmFnZTAucHV0TXlWYXIoJ+WbvuaghycsIGltZ0xvY2F0aW9uKTtcXG5cXG4vLyog5LiL6Z2i5Luj56CB55So5LqO6Ieq5Yqo5ouJ5Y+W5Zu+5qCH77yM5peg5aWIICovXFxuaWYgKCFmaWxlRXhpc3QoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaV9waWMnKSB8fCAhZmlsZUV4aXN0KCdoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L3R1YmlhbycpKSB7XFxuICAgICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3NhdmVMb2NhbFxcXCIpLnNhdmVMb2NhbCgpO1xcbn1cXG5cXG5cXG4vLyog5LiL6Z2i5Luj56CB55So5LqO5Yid5aeL5YyW6LSm5Y+36YWN572uICovXFxuaWYgKCFmaWxlRXhpc3QoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHQnKSkge1xcbiAgICBzZXR0aW5ncyA9IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgIHVzZXJMaXN0OiBbe1xcbiAgICAgICAgICAgIGNvb2tpZTogXFxcIlxcXCIsXFxuICAgICAgICAgICAgdXNlck5hbWU6ICcnLFxcbiAgICAgICAgICAgIHVzZXJNaWQ6ICcnLFxcbiAgICAgICAgICAgIHZpcFN0YXR1czogMCxcXG4gICAgICAgICAgICBmYWNlOiAnaHR0cHM6Ly9sYW5tZWlndW9qaWFuZy5jb20vdHViaWFvL21vdmllLzIwLnN2ZycsXFxuICAgICAgICB9XSxcXG4gICAgICAgIGJmS2V5OiBcXFwiXFxcIlxcbiAgICB9KTtcXG4gICAgc2F2ZUZpbGUoXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFwiLCBzZXR0aW5ncyk7XFxufSBlbHNlIHtcXG4gICAgc2V0dGluZ3MgPSBKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHQnKSk7XFxuICAgIC8vIOWIpOaWrSBKU09OIOWvueixoeaYr+WQpua7oei2s+aIkeS7rOWumuS5ieeahOe7k+aehFxcbiAgICBpZiAodHlwZW9mIHNldHRpbmdzID09PSAnb2JqZWN0JyAmJlxcbiAgICAgICAgQXJyYXkuaXNBcnJheShzZXR0aW5ncy51c2VyTGlzdCkgJiZcXG4gICAgICAgIHNldHRpbmdzLnVzZXJMaXN0LmV2ZXJ5KHAgPT4gdHlwZW9mIHAgPT09ICdvYmplY3QnICYmIHR5cGVvZiBwLmNvb2tpZSA9PT0gJ3N0cmluZycgJiYgdHlwZW9mIHAudXNlck5hbWUgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBwLnVzZXJNaWQgPT09ICdudW1iZXInICYmIHR5cGVvZiBwLmZhY2UgPT09ICdzdHJpbmcnICYmIHR5cGVvZiBwLnZpcFN0YXR1cyA9PT0gJ251bWJlcicpICYmXFxuICAgICAgICB0eXBlb2Ygc2V0dGluZ3MuYmZLZXkgPT09ICdzdHJpbmcnXFxuICAgICkge1xcbiAgICAgICAgbG9nKCfotKblj7fphY3nva7mlofku7bmraPluLgnKTtcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIGxvZygn5Yid5aeL5YyWL+WkjeWOn+i0puWPt+mFjee9ruaWh+S7ticpO1xcbiAgICAgICAgc2V0dGluZyA9ICcnO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICAvLyDov4Hnp7vljp/phY3nva7mlofku7bkuK3nmoTotKblj7fkv6Hmga9cXG4gICAgICAgICAgICBvcmlnaW5Vc2VyU2V0dGluZyA9IEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dCcpKTtcXG4gICAgICAgICAgICBsb2cob3JpZ2luVXNlclNldHRpbmcpO1xcbiAgICAgICAgICAgIGNvb2tpZSA9IG9yaWdpblVzZXJTZXR0aW5nLmNvb2tpZTtcXG4gICAgICAgICAgICB1c2VyTmFtZSA9IG9yaWdpblVzZXJTZXR0aW5nLnVzZXJOYW1lO1xcbiAgICAgICAgICAgIHVzZXJNaWQgPSBvcmlnaW5Vc2VyU2V0dGluZy51c2VyTWlkO1xcbiAgICAgICAgICAgIGZhY2UgPSBvcmlnaW5Vc2VyU2V0dGluZy5mYWNlO1xcbiAgICAgICAgICAgIHZpcFN0YXR1cyA9IG9yaWdpblVzZXJTZXR0aW5nLnZpcFN0YXR1cztcXG4gICAgICAgICAgICBpZihjb29raWU9PT11bmRlZmluZWQpe3NldHRpbmc9J3tcXFwidXNlckxpc3RcXFwiOltdLFxcXCJiZktleVxcXCI6XFxcIlxcXCJ9Jzt9ZWxzZXtcXG4gICAgICAgICAgICAgICAgc2V0dGluZyA9IEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICAgICAgICAgIHVzZXJMaXN0OiBbe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tpZTogY29va2llLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVzZXJOYW1lOiB1c2VyTmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1c2VyTWlkOiB1c2VyTWlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhY2U6IGZhY2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdmlwU3RhdHVzOiB2aXBTdGF0dXNcXG4gICAgICAgICAgICAgICAgICAgIH1dLFxcbiAgICAgICAgICAgICAgICAgICAgYmZLZXk6IFxcXCJcXFwiXFxuICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICBsb2coXFxcIuayoeacieaXp+eahOWQiOazleeahOmFjee9ruaWh+S7tlxcXCIpO1xcbiAgICAgICAgICAgIHNldHRpbmcgPSBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgIHVzZXJMaXN0OiBbXSxcXG4gICAgICAgICAgICAgICAgYmZLZXk6IFxcXCJcXFwiXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgICAgICBzYXZlRmlsZShcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXCIsIHNldHRpbmcpO1xcbiAgICB9XFxufVxcblwiLFwicGFnZXNcIjpcIlt7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLliIbnsbvniYflupNcXFwiLFxcXCJwYXRoXFxcIjpcXFwidmF1bHRcXFwiLFxcXCJydWxlXFxcIjpcXFwi6aG26YOo5aSn57G7ID0gWyflm73liJsnLCAn55S16KeGJywgJ+e6quW9leeJhycsICfnu7zoibonLCAn55Wq5YmnJywgJ+eUteW9sSddXFxcXG5pZiAocGFnZSA9PSAxKSB7XFxcXG4gICAgLy8g5oqY5Y+g5byA5YWzXFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IGdldE15VmFyKCfmipjlj6AnLCAn5YWzJykgPT0gJ+WFsycgPyAn4oCc4oCc4oCd4oCdPGI+PHNwYW4gc3R5bGU9XFxcXFxcXCJjb2xvcjogI0ZGMDAwMFxcXFxcXFwiPuKIqDwvc3Bhbj48L2I+JyA6ICfigJzigJzigJ3igJ08Yj48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiAjMWFhZDE5XFxcXFxcXCI+4oinPC9zcGFuPjwvYj4nLFxcXFxuICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgaWYgKGdldE15VmFyKCfmipjlj6AnLCAn5YWzJykgPT0gJ+W8gCcpIHtcXFxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcign5oqY5Y+gJywgJ+WFsycpO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBwdXRNeVZhcign5oqY5Y+gJywgJ+W8gCcpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCI7XFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcXFxuICAgIH0pXFxcXG4gICAg6aG26YOo5aSn57G7LmZvckVhY2gobGkgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGxpID09IGdldE15VmFyKCflpKfnsbsnLCAn5Zu95YibJykgPyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9IzFhYWQxOT4nICsgbGkgKyAnPC9mb250PjwvYj4nIDogbGksXFxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGxpKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoJ+Wkp+exuycsIGxpKTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB9LCBsaSksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcXFxuICAgICAgICB9KVxcXFxuICAgIH0pO1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxcXG4gICAgfSlcXFxcbn1cXFxcbi8vIOmhtumDqOWIhuexu+WPguaVsOaYoOWwhFxcXFxuc3dpdGNoIChnZXRNeVZhcign5aSn57G7JywgJ+WbveWImycpKSB7XFxcXG4gICAgY2FzZSAn5Zu95YibJzpcXFxcbiAgICAgICAgc2Vhc29uVHlwZSA9IDQ7XFxcXG4gICAgICAgIGlmIChnZXRNeVZhcign5oqY5Y+gJywgJ+WFsycpID09ICflvIAnKSB7XFxcXG4gICAgICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxcXG4gICAgICAgICAgICAgICAgaHRtbCA9IGZldGNoKCdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vZ3VvY2h1YW5nL2luZGV4Jyk7XFxcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoID0gcGRmYShodG1sLCAnLmZpbHRlci1saXN0JiYuZmlsdGVyLWJsb2NrJyk7XFxcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoLmZvckVhY2godWwgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICDnrZvpgInmnaHku7YgPSBwZGZoKHVsLCAnLmZpbHRlci1uYW1lJiZUZXh0Jyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqCA9IHBkZmEodWwsICd1bCYmbGknKTtcXFxcbiAgICAgICAgICAgICAgICAgICAg5a2Q5YiG57G75YiX6KGoLmZvckVhY2gobGkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBkZmgobGksICdsaSYmVGV4dCcpID09ICflhbbku5YnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIo562b6YCJ5p2h5Lu2LCAn5YWo6YOoJykgPT0gcGRmaChsaSwgJ2xpJiZUZXh0JykgPyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9IzFhYWQxOT4nICsgcGRmaChsaSwgJ2xpJiZUZXh0JykgKyAnPC9mb250PjwvYj4nIDogcGRmaChsaSwgJ2xpJiZUZXh0JyksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChsaSwg562b6YCJ5p2h5Lu2KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKOetm+mAieadoeS7tiwgcGRmaChsaSwgJ2xpJiZUZXh0JykpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGxpLCDnrZvpgInmnaHku7YpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfnlLXop4YnOlxcXFxuICAgICAgICBzZWFzb25UeXBlID0gNTtcXFxcbiAgICAgICAgaWYgKGdldE15VmFyKCfmipjlj6AnLCAn5YWzJykgPT0gJ+W8gCcpIHtcXFxcbiAgICAgICAgICAgIGlmIChwYWdlID09IDEpIHtcXFxcbiAgICAgICAgICAgICAgICBodG1sID0gZmV0Y2goJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS90di9pbmRleCcpO1xcXFxuICAgICAgICAgICAgICAgIOWIhuexu+WIl+ihqCA9IHBkZmEoaHRtbCwgJy5maWx0ZXItbGlzdCYmLmZpbHRlci1ibG9jaycpO1xcXFxuICAgICAgICAgICAgICAgIOWIhuexu+WIl+ihqC5mb3JFYWNoKHVsID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAg562b6YCJ5p2h5Lu2ID0gcGRmaCh1bCwgJy5maWx0ZXItbmFtZSYmVGV4dCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICDlrZDliIbnsbvliJfooaggPSBwZGZhKHVsLCAndWwmJmxpJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqC5mb3JFYWNoKGxpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZGZoKGxpLCAnbGkmJlRleHQnKSA9PSAn5YW25LuWJykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKOetm+mAieadoeS7tiwgJ+WFqOmDqCcpID09IHBkZmgobGksICdsaSYmVGV4dCcpID8gJ+KAnOKAnOKAneKAnTxiPjxmb250IGNvbG9yPSMxYWFkMTk+JyArIHBkZmgobGksICdsaSYmVGV4dCcpICsgJzwvZm9udD48L2I+JyA6IHBkZmgobGksICdsaSYmVGV4dCcpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobGksIOetm+mAieadoeS7tikgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcijnrZvpgInmnaHku7YsIHBkZmgobGksICdsaSYmVGV4dCcpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBsaSwg562b6YCJ5p2h5Lu2KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAn57qq5b2V54mHJzpcXFxcbiAgICAgICAgc2Vhc29uVHlwZSA9IDM7XFxcXG4gICAgICAgIGlmIChnZXRNeVZhcign5oqY5Y+gJywgJ+WFsycpID09ICflvIAnKSB7XFxcXG4gICAgICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxcXG4gICAgICAgICAgICAgICAgaHRtbCA9IGZldGNoKCdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vZG9jdW1lbnRhcnkvaW5kZXgvJyk7XFxcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoID0gcGRmYShodG1sLCAnLmZpbHRlci1saXN0JiYuZmlsdGVyLWJsb2NrJyk7XFxcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoLmZvckVhY2godWwgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICDnrZvpgInmnaHku7YgPSBwZGZoKHVsLCAnLmZpbHRlci1uYW1lJiZUZXh0Jyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqCA9IHBkZmEodWwsICd1bCYmbGknKTtcXFxcbiAgICAgICAgICAgICAgICAgICAg5a2Q5YiG57G75YiX6KGoLmZvckVhY2gobGkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBkZmgobGksICdsaSYmVGV4dCcpID09ICflhbbku5YnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIo562b6YCJ5p2h5Lu2LCAn5YWo6YOoJykgPT0gcGRmaChsaSwgJ2xpJiZUZXh0JykgPyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9IzFhYWQxOT4nICsgcGRmaChsaSwgJ2xpJiZUZXh0JykgKyAnPC9mb250PjwvYj4nIDogcGRmaChsaSwgJ2xpJiZUZXh0JyksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChsaSwg562b6YCJ5p2h5Lu2KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKOetm+mAieadoeS7tiwgcGRmaChsaSwgJ2xpJiZUZXh0JykpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGxpLCDnrZvpgInmnaHku7YpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfnu7zoibonOlxcXFxuICAgICAgICBzZWFzb25UeXBlID0gNztcXFxcbiAgICAgICAgaWYgKGdldE15VmFyKCfmipjlj6AnLCAn5YWzJykgPT0gJ+W8gCcpIHtcXFxcbiAgICAgICAgICAgIGlmIChwYWdlID09IDEpIHtcXFxcbiAgICAgICAgICAgICAgICBodG1sID0gZmV0Y2goJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS92YXJpZXR5L2luZGV4Jyk7XFxcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoID0gcGRmYShodG1sLCAnLmZpbHRlci1saXN0JiYuZmlsdGVyLWJsb2NrJyk7XFxcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoLmZvckVhY2godWwgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICDnrZvpgInmnaHku7YgPSBwZGZoKHVsLCAnLmZpbHRlci1uYW1lJiZUZXh0Jyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqCA9IHBkZmEodWwsICd1bCYmbGknKTtcXFxcbiAgICAgICAgICAgICAgICAgICAg5a2Q5YiG57G75YiX6KGoLmZvckVhY2gobGkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBkZmgobGksICdsaSYmVGV4dCcpID09ICflhbbku5YnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIo562b6YCJ5p2h5Lu2LCAn5YWo6YOoJykgPT0gcGRmaChsaSwgJ2xpJiZUZXh0JykgPyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9IzFhYWQxOT4nICsgcGRmaChsaSwgJ2xpJiZUZXh0JykgKyAnPC9mb250PjwvYj4nIDogcGRmaChsaSwgJ2xpJiZUZXh0JyksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChsaSwg562b6YCJ5p2h5Lu2KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKOetm+mAieadoeS7tiwgcGRmaChsaSwgJ2xpJiZUZXh0JykpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGxpLCDnrZvpgInmnaHku7YpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfnlarliacnOlxcXFxuICAgICAgICBzZWFzb25UeXBlID0gMTtcXFxcbiAgICAgICAgaWYgKGdldE15VmFyKCfmipjlj6AnLCAn5YWzJykgPT0gJ+W8gCcpIHtcXFxcbiAgICAgICAgICAgIGlmIChwYWdlID09IDEpIHtcXFxcbiAgICAgICAgICAgICAgICBodG1sID0gZmV0Y2goJ2h0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9hbmltZS9pbmRleCcpO1xcXFxuICAgICAgICAgICAgICAgIOWIhuexu+WIl+ihqCA9IHBkZmEoaHRtbCwgJy5maWx0ZXItbGlzdCYmLmZpbHRlci1ibG9jaycpO1xcXFxuICAgICAgICAgICAgICAgIOWIhuexu+WIl+ihqC5mb3JFYWNoKHVsID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAg562b6YCJ5p2h5Lu2ID0gcGRmaCh1bCwgJy5maWx0ZXItbmFtZSYmVGV4dCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICDlrZDliIbnsbvliJfooaggPSBwZGZhKHVsLCAndWwmJmxpJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqC5mb3JFYWNoKGxpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwZGZoKGxpLCAnbGkmJlRleHQnKSA9PSAn5YW25LuWJykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKOetm+mAieadoeS7tiwgJ+WFqOmDqCcpID09IHBkZmgobGksICdsaSYmVGV4dCcpID8gJ+KAnOKAnOKAneKAnTxiPjxmb250IGNvbG9yPSMxYWFkMTk+JyArIHBkZmgobGksICdsaSYmVGV4dCcpICsgJzwvZm9udD48L2I+JyA6IHBkZmgobGksICdsaSYmVGV4dCcpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgobGksIOetm+mAieadoeS7tikgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcijnrZvpgInmnaHku7YsIHBkZmgobGksICdsaSYmVGV4dCcpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBsaSwg562b6YCJ5p2h5Lu2KSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYmxhbmtfYmxvY2snXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAn55S15b2xJzpcXFxcbiAgICAgICAgc2Vhc29uVHlwZSA9IDI7XFxcXG4gICAgICAgIGlmIChnZXRNeVZhcign5oqY5Y+gJywgJ+WFsycpID09ICflvIAnKSB7XFxcXG4gICAgICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxcXG4gICAgICAgICAgICAgICAgaHRtbCA9IGZldGNoKCdodHRwczovL3d3dy5iaWxpYmlsaS5jb20vbW92aWUvaW5kZXgnKTtcXFxcbiAgICAgICAgICAgICAgICDliIbnsbvliJfooaggPSBwZGZhKGh0bWwsICcuZmlsdGVyLWxpc3QmJi5maWx0ZXItYmxvY2snKTtcXFxcbiAgICAgICAgICAgICAgICDliIbnsbvliJfooaguZm9yRWFjaCh1bCA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIOetm+mAieadoeS7tiA9IHBkZmgodWwsICcuZmlsdGVyLW5hbWUmJlRleHQnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAg5a2Q5YiG57G75YiX6KGoID0gcGRmYSh1bCwgJ3VsJiZsaScpO1xcXFxuICAgICAgICAgICAgICAgICAgICDlrZDliIbnsbvliJfooaguZm9yRWFjaChsaSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAocGRmaChsaSwgJ2xpJiZUZXh0JykgPT0gJ+WFtuS7licpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBnZXRNeVZhcijnrZvpgInmnaHku7YsICflhajpg6gnKSA9PSBwZGZoKGxpLCAnbGkmJlRleHQnKSA/ICfigJzigJzigJ3igJ08Yj48Zm9udCBjb2xvcj0jMWFhZDE5PicgKyBwZGZoKGxpLCAnbGkmJlRleHQnKSArICc8L2ZvbnQ+PC9iPicgOiBwZGZoKGxpLCAnbGkmJlRleHQnKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGxpLCDnrZvpgInmnaHku7YpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIo562b6YCJ5p2h5Lu2LCBwZGZoKGxpLCAnbGkmJlRleHQnKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSwgbGksIOetm+mAieadoeS7tiksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgIHNlYXNvblR5cGUgPSA0O1xcXFxuICAgICAgICBpZiAoZ2V0TXlWYXIoJ+aKmOWPoCcsICflhbMnKSA9PSAn5byAJykge1xcXFxuICAgICAgICAgICAgaWYgKHBhZ2UgPT0gMSkge1xcXFxuICAgICAgICAgICAgICAgIGh0bWwgPSBmZXRjaCgnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL2FuaW1lL2luZGV4Jyk7XFxcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoID0gcGRmYShodG1sLCAnLmZpbHRlci1saXN0JiYuZmlsdGVyLWJsb2NrJyk7XFxcXG4gICAgICAgICAgICAgICAg5YiG57G75YiX6KGoLmZvckVhY2godWwgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICDnrZvpgInmnaHku7YgPSBwZGZoKHVsLCAnLmZpbHRlci1uYW1lJiZUZXh0Jyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIOWtkOWIhuexu+WIl+ihqCA9IHBkZmEodWwsICd1bCYmbGknKTtcXFxcbiAgICAgICAgICAgICAgICAgICAg5a2Q5YiG57G75YiX6KGoLmZvckVhY2gobGkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHBkZmgobGksICdsaSYmVGV4dCcpID09ICflhbbku5YnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZ2V0TXlWYXIo562b6YCJ5p2h5Lu2LCAn5YWo6YOoJykgPT0gcGRmaChsaSwgJ2xpJiZUZXh0JykgPyAn4oCc4oCc4oCd4oCdPGI+PGZvbnQgY29sb3I9IzFhYWQxOT4nICsgcGRmaChsaSwgJ2xpJiZUZXh0JykgKyAnPC9mb250PjwvYj4nIDogcGRmaChsaSwgJ2xpJiZUZXh0JyksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChsaSwg562b6YCJ5p2h5Lu2KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKOetm+mAieadoeS7tiwgcGRmaChsaSwgJ2xpJiZUZXh0JykpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSh0cnVlKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIGxpLCDnrZvpgInmnaHku7YpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdibGFua19ibG9jaydcXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBicmVhaztcXFxcbn1cXFxcbi8vIOWtkOWIhuexu+WPguaVsOaYoOWwhFxcXFxuc3dpdGNoIChnZXRNeVZhcign57G75Z6LJywgJ+WFqOmDqCcpKSB7XFxcXG4gICAgY2FzZSAn5q2j54mHJzpcXFxcbiAgICAgICAgc2Vhc29uX3ZlcnNpb24gPSAxO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfnlLXlvbEnOlxcXFxuICAgICAgICBzZWFzb25fdmVyc2lvbiA9IDI7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WFtuS7lic6XFxcXG4gICAgICAgIHNlYXNvbl92ZXJzaW9uID0gMztcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgZGVmYXVsdDpcXFxcbiAgICAgICAgc2Vhc29uX3ZlcnNpb24gPSAtMTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG59XFxcXG5zd2l0Y2ggKGdldE15VmFyKCfphY3pn7MnLCAn5YWo6YOoJykpIHtcXFxcbiAgICBjYXNlICfljp/lo7AnOlxcXFxuICAgICAgICBzcG9rZW5fbGFuZ3VhZ2VfdHlwZSA9IDE7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+S4reaWh+mFjemfsyc6XFxcXG4gICAgICAgIHNwb2tlbl9sYW5ndWFnZV90eXBlID0gMjtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgZGVmYXVsdDpcXFxcbiAgICAgICAgc3Bva2VuX2xhbmd1YWdlX3R5cGUgPSAtMTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG59XFxcXG5zd2l0Y2ggKGdldE15VmFyKCflnLDljLonLCAn5YWo6YOoJykpIHtcXFxcbiAgICBjYXNlICfkuK3lm73lpKfpmYYnOlxcXFxuICAgICAgICBhcmVhID0gMTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAn5pel5pysJzpcXFxcbiAgICAgICAgYXJlYSA9IDI7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+e+juWbvSc6XFxcXG4gICAgICAgIGFyZWEgPSAzO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfoi7Hlm70nOlxcXFxuICAgICAgICBhcmVhID0gNDtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAn5Lit5Zu95riv5Y+wJzpcXFxcbiAgICAgICAgYXJlYSA9IFs2LCA3XTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAn6Z+p5Zu9JzpcXFxcbiAgICAgICAgYXJlYSA9IDg7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+azleWbvSc6XFxcXG4gICAgICAgIGFyZWEgPSA5O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfms7Dlm70nOlxcXFxuICAgICAgICBhcmVhID0gMTA7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+ilv+ePreeJmSc6XFxcXG4gICAgICAgIGFyZWEgPSAxMztcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAn5b635Zu9JzpcXFxcbiAgICAgICAgYXJlYSA9IDE1O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfmhI/lpKfliKknOlxcXFxuICAgICAgICBhcmVhID0gMzU7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WFtuS7lic6XFxcXG4gICAgICAgIC8vIOWPquaYr+eVquWJp+eahOaDheWGtV/lhbE1Ne+8jOimgeWHj+WOu+WHuueOsOeahOKAlOKAlOeul+S6hu+8jOebtOaOpeWcqOWKqOaAgeWIhuexu+eahOaXtuWAmeWOu+aOieS6hlxcXFxuICAgICAgICBhcmVhID0gWzEsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMCwgMjEsIDIyLCAyMywgMjQsIDI1LCAyNiwgMjcsIDI4LCAyOSwgMzAsIDMxLCAzMiwgMzMsIDM0LCAzNSwgMzYsIDM3LCAzOCwgMzksIDQwLCA0MSwgNDIsIDQzLCA0NCwgNDUsIDQ2LCA0NywgNDgsIDQ5LCA1MCwgNTEsIDUyLCA1MywgNTQsIDU1XTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgZGVmYXVsdDpcXFxcbiAgICAgICAgYXJlYSA9IC0xO1xcXFxuICAgICAgICBicmVhaztcXFxcbn1cXFxcbnN3aXRjaCAoZ2V0TXlWYXIoJ+eKtuaAgScsICflhajpg6gnKSkge1xcXFxuICAgIGNhc2UgJ+WujOe7kyc6XFxcXG4gICAgICAgIGlzX2ZpbmlzaCA9IDE7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+i/nui9vSc6XFxcXG4gICAgICAgIGlzX2ZpbmlzaCA9IDA7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgIGlzX2ZpbmlzaCA9IC0xO1xcXFxuICAgICAgICBicmVhaztcXFxcbn1cXFxcbnN3aXRjaCAoZ2V0TXlWYXIoJ+WHuuWTgScsICflhajpg6gnKSkge1xcXFxuICAgIGNhc2UgJ+Wkruinhic6XFxcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gNDtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAnQkJDJzpcXFxcbiAgICAgICAgcHJvZHVjZXJfaWQgPSAxO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfmjqLntKLpopHpgZMnOlxcXFxuICAgICAgICBwcm9kdWNlcl9pZCA9IDc7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WbveWutuWcsOeQhic6XFxcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gMTQ7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ05ISyc6XFxcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gMjtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAn5Y6G5Y+y6aKR6YGTJzpcXFxcbiAgICAgICAgcHJvZHVjZXJfaWQgPSA2O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfljavop4YnOlxcXFxuICAgICAgICBwcm9kdWNlcl9pZCA9IDg7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+iHquWItic6XFxcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gOTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAnSVRWJzpcXFxcbiAgICAgICAgcHJvZHVjZXJfaWQgPSA1O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICdTS1knOlxcXFxuICAgICAgICBwcm9kdWNlcl9pZCA9IDM7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ1pERic6XFxcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gMTA7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WQiOS9nOacuuaehCc6XFxcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gMTE7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WbveWGheWFtuS7lic6XFxcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gMTI7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WbveWkluWFtuWugyc6XFxcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gMTM7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgIHByb2R1Y2VyX2lkID0gLTE7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxufVxcXFxuc3dpdGNoIChnZXRNeVZhcign54mI5p2DJywgJ+WFqOmDqCcpKSB7XFxcXG4gICAgY2FzZSAn54us5a62JzpcXFxcbiAgICAgICAgY29weXJpZ2h0ID0gMztcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAn5YW25LuWJzpcXFxcbiAgICAgICAgY29weXJpZ2h0ID0gWzEsIDIsIDRdO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBkZWZhdWx0OlxcXFxuICAgICAgICBjb3B5cmlnaHQgPSAtMTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG59XFxcXG5zd2l0Y2ggKGdldE15VmFyKCfku5jotLknLCAn5YWo6YOoJykpIHtcXFxcbiAgICBjYXNlICflhY3otLknOlxcXFxuICAgICAgICBzZWFzb25fc3RhdHVzID0gMTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAn5LuY6LS5JzpcXFxcbiAgICAgICAgc2Vhc29uX3N0YXR1cyA9IFsyLCA2XTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAn5aSn5Lya5ZGYJzpcXFxcbiAgICAgICAgc2Vhc29uX3N0YXR1cyA9IFs0LCA2XTtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgZGVmYXVsdDpcXFxcbiAgICAgICAgc2Vhc29uX3N0YXR1cyA9IC0xO1xcXFxuICAgICAgICBicmVhaztcXFxcbn1cXFxcbnN3aXRjaCAoZ2V0TXlWYXIoJ+Wto+W6picsICflhajpg6gnKSkge1xcXFxuICAgIGNhc2UgJzHmnIgnOlxcXFxuICAgICAgICBzZWFzb25fbW9udGggPSAxO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICc05pyIJzpcXFxcbiAgICAgICAgc2Vhc29uX21vbnRoID0gNDtcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSAnN+aciCc6XFxcXG4gICAgICAgIHNlYXNvbl9tb250aCA9IDc7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJzEw5pyIJzpcXFxcbiAgICAgICAgc2Vhc29uX21vbnRoID0gMTA7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgIHNlYXNvbl9tb250aCA9IC0xO1xcXFxuICAgICAgICBicmVhaztcXFxcbn1cXFxcbi8vIOWIpOaWreWSjOaYoOWwhOW5tOS7vVxcXFxuc3dpdGNoIChnZXRNeVZhcign5aSn57G7JywgJ+WbveWImycpKSB7XFxcXG4gICAgY2FzZSAn5Zu95YibJzpcXFxcbiAgICBjYXNlICfnlarliacnOlxcXFxuICAgICAgICAvLyDnlarliaflkozlm73liJvjgJDkuZ/mmK/lj6vlgZrlubTku73kvYblj4LmlbDlkI3jgIHmoLzlvI/lkozlhbbku5bliIbnsbvkuI3kuIDmoLfjgJFcXFxcbiAgICAgICAgYW5pbWVfeWVhciA9IGdldE15VmFyKCflubTku70nLCAn5YWo6YOoJyk7XFxcXG4gICAgICAgIHN3aXRjaCAoYW5pbWVfeWVhci5pbmNsdWRlcygnLScpKSB7XFxcXG4gICAgICAgICAgICBjYXNlIHRydWU6XFxcXG4gICAgICAgICAgICAgICAgZWFybHkgPSBhbmltZV95ZWFyLnNwbGl0KCctJylbMV07XFxcXG4gICAgICAgICAgICAgICAgbGF0ZXIgPSBhbmltZV95ZWFyLnNwbGl0KCctJylbMF07XFxcXG4gICAgICAgICAgICAgICAgeWVhciA9IGBbJHtlYXJseX0sJHtOdW1iZXIobGF0ZXIpICsgMX0pYDtcXFxcbiAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgIGNhc2UgZmFsc2U6XFxcXG4gICAgICAgICAgICAgICAgc3dpdGNoIChhbmltZV95ZWFyKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzkw5bm05LujJzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXIgPSAnWzE5OTAsMjAwMCknO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzgw5bm05LujJzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXIgPSAnWzE5ODAsMTk5MCknO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+abtOaXqSc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB5ZWFyID0gJ1ssMTk4MCknO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WFqOmDqCc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB5ZWFyID0gLTE7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHllYXIgPSBgWyR7YW5pbWVfeWVhcn0sJHtOdW1iZXIoYW5pbWVfeWVhcikgKyAxfSlgO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgZGVmYXVsdDpcXFxcbiAgICAgICAgLy8g6Zmk5LqG55Wq5Ymn5ZKM5Zu95Yib55qE5YW25LuW5YiG57G7XFxcXG4gICAgICAgIHR2X3llYXIgPSBnZXRNeVZhcign5bm05Lu9JywgJ+WFqOmDqCcpO1xcXFxuICAgICAgICBzd2l0Y2ggKHR2X3llYXIuaW5jbHVkZXMoJy0nKSkge1xcXFxuICAgICAgICAgICAgY2FzZSB0cnVlOlxcXFxuICAgICAgICAgICAgICAgIGVhcmx5ID0gdHZfeWVhci5zcGxpdCgnLScpWzFdO1xcXFxuICAgICAgICAgICAgICAgIGxhdGVyID0gdHZfeWVhci5zcGxpdCgnLScpWzBdO1xcXFxuICAgICAgICAgICAgICAgIHJlbGVhc2VfZGF0ZSA9IGBbJHtlYXJseX0tMDEtMDEgMDA6MDA6MDAsJHtOdW1iZXIobGF0ZXIpICsgMX0tMDEtMDEgMDA6MDA6MDApYFxcXFxuICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgY2FzZSBmYWxzZTpcXFxcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHR2X3llYXIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnOTDlubTku6MnOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZV9kYXRlID0gJ1sxOTkwLTAxLTAxIDAwOjAwOjAwLDIwMDAtMDEtMDEgMDA6MDA6MDApJ1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJzgw5bm05LujJzpcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlbGVhc2VfZGF0ZSA9ICdbMTk4MC0wMS0wMSAwMDowMDowMCwxOTkwLTAxLTAxIDAwOjAwOjAwKSdcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICBjYXNlICfmm7Tml6knOlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZV9kYXRlID0gJ1ssMTk4MC0wMS0wMSAwMDowMDowMCknO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ+WFqOmDqCc6XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWxlYXNlX2RhdGUgPSAtMTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVsZWFzZV9kYXRlID0gYFske3R2X3llYXJ9LTAxLTAxIDAwOjAwOjAwLCR7TnVtYmVyKHR2X3llYXIpICsgMX0tMDEtMDEgMDA6MDA6MDApYDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxufVxcXFxuc3dpdGNoIChnZXRNeVZhcign6aOO5qC8JywgJ+WFqOmDqCcpKSB7XFxcXG4gICAgY2FzZSAn55S15b2xJzpcXFxcbiAgICAgICAgc3R5bGVfaWQgPSAtMTA7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIC8vIOeVquWJp+agj+ebrlxcXFxuICAgIGNhc2UgJ+WOn+WImyc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTA7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+a8q+eUu+aUuSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTE7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+Wwj+ivtOaUuSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTI7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+a4uOaIj+aUuSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTM7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+eJueaRhCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTQ7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+W4g+iii+aIjyc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTU7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+eDreihgCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTY7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+epv+i2iic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTc7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+Wlh+W5uyc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwMTg7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIC8vIOWSi+i3s+S6huS4gOS4quaNj35cXFxcbiAgICBjYXNlICfmiJjmlpcnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDIwO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfmkJ7nrJEnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDIxO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfml6XluLgnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDIyO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfnp5HlubsnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDIzO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfokIzns7snOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDI0O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfmsrvmhIgnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDI1O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfmoKHlm60nOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDI2O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICflsJHlhL8nOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDI3O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfms6HpnaInOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDI4O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfmgYvniLEnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDI5O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICflsJHlpbMnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDMwO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfprZTms5UnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDMxO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICflhpLpmaknOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDMyO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfljoblj7InOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDMzO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfmnrbnqbonOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDM0O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfmnLrmiJgnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDM1O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfnpZ7prZQnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDM2O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICflo7DmjqcnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDM3O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfov5DliqgnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDM4O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICflirHlv5cnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDM5O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfpn7PkuZAnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDQwO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfmjqjnkIYnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDQxO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfnpL7lm6InOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDQyO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfmmbrmlpcnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDQzO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICflgqzms6onOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDQ0O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfnvo7po58nOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDQ1O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICflgbblg48nOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDQ2O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfkuZnlpbMnOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDQ3O1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlICfogYzlnLonOlxcXFxuICAgICAgICBzdHlsZV9pZCA9IDEwMDQ4O1xcXFxuICAgICAgICBicmVhaztcXFxcblxcXFxuICAgIC8vIOe7vOiJuuagj+ebruOAgeeUteW9sVxcXFxuICAgIGNhc2UgJ+WJp+aDhSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTA7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WWnOWJpyc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTE7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+eIseaDhSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTI7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WKqOS9nCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTM7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+aBkOaAlic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTQ7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+eKr+e9qic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTU7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+aDiuaCmic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTY7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+aCrOeWkSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTc7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+aImOS6iSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTg7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WKqOeUuyc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNTk7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+S8oOiusCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjA7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WutuW6rSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjE7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+atjOiInic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjI7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+e6quWunic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjM7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+eBvumavic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjQ7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+S6uuaWhyc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjU7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+enkeaKgCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjY7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+Wuh+WumSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjg7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+iQjOWuoCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNjk7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+ekvuS8mic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzA7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WKqOeJqSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzE7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+iHqueEtic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzI7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WMu+eWlyc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzM7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WGm+S6iyc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzQ7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+e9quahiCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzU7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+elnuenmCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzY7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+aXheihjCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzc7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+atpuS+oCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzg7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+mdkuaYpSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwNzk7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+mDveW4gic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODA7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WPpOijhSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODE7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+iwjeaImCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODI7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+e7j+WFuCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODM7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+aDheaEnyc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODQ7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+elnuivnSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODU7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+W5tOS7oyc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODY7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WGnOadkSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODc7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WIkeS+pic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODg7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WGm+aXhSc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwODk7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+iuv+iwiCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTA7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+iEseWPo+engCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTE7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+ecn+S6uuengCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTI7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+mAieengCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTQ7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+aXhea4uCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTU7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+aZmuS8mic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTg7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+a8lOWUseS8mic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTY7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+S6suWtkCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTc7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+WFu+aIkCc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAwOTk7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgJ+aWh+WMlic6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAxMDA7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIC8vIOeUteW9seagj+ebrlxcXFxuICAgIGNhc2UgJ+efreeJhyc6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gMTAxMDQ7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgIHN0eWxlX2lkID0gLTE7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxufVxcXFxuLy8g5pig5bCE55yf5a6e6K+35rGC5Zyw5Z2AXFxcXG5zd2l0Y2ggKHNlYXNvblR5cGUpIHtcXFxcbiAgICBjYXNlIDQ6XFxcXG4gICAgICAgIC8vIOWbveWIm1xcXFxuICAgICAgICB0cnVlX3VybCA9ICdodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3NlYXNvbi9pbmRleC9yZXN1bHQ/c2Vhc29uX3ZlcnNpb249JyArIHNlYXNvbl92ZXJzaW9uICsgJyZpc19maW5pc2g9JyArIGlzX2ZpbmlzaCArICcmY29weXJpZ2h0PScgKyBjb3B5cmlnaHQgKyAnJnNlYXNvbl9zdGF0dXM9JyArIHNlYXNvbl9zdGF0dXMgKyAnJnllYXI9JyArIHllYXIgKyAnJnN0eWxlX2lkPScgKyBzdHlsZV9pZCArICcmb3JkZXI9MyZzdD00JnNvcnQ9MCZwYWdlPScgKyBwYWdlICsgJyZzZWFzb25fdHlwZT00JnBhZ2VzaXplPTMwJnR5cGU9MSdcXFxcbiAgICAgICAgYnJlYWs7XFxcXG4gICAgY2FzZSA1OlxcXFxuICAgICAgICAvLyDnlLXop4bliadcXFxcbiAgICAgICAgdHJ1ZV91cmwgPSAnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3BnYy9zZWFzb24vaW5kZXgvcmVzdWx0P2FyZWE9JyArIGFyZWEgKyAnJnN0eWxlX2lkPScgKyBzdHlsZV9pZCArICcmcmVsZWFzZV9kYXRlPScgKyByZWxlYXNlX2RhdGUgKyAnJnNlYXNvbl9zdGF0dXM9JyArIHNlYXNvbl9zdGF0dXMgKyAnJm9yZGVyPTImc3Q9NSZzb3J0PTAmcGFnZT0nICsgcGFnZSArICcmc2Vhc29uX3R5cGU9NSZwYWdlc2l6ZT0zMCZ0eXBlPTEnXFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgNzpcXFxcbiAgICAgICAgLy8g57u86Im6XFxcXG4gICAgICAgIHRydWVfdXJsID0gJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2Mvc2Vhc29uL2luZGV4L3Jlc3VsdD9zZWFzb25fc3RhdHVzPScgKyBzZWFzb25fc3RhdHVzICsgJyZzdHlsZV9pZD0nICsgc3R5bGVfaWQgKyAnJm9yZGVyPTImc3Q9NyZzb3J0PTAmcGFnZT0nICsgcGFnZSArICcmc2Vhc29uX3R5cGU9NyZwYWdlc2l6ZT0zMCZ0eXBlPTEnO1xcXFxuICAgICAgICBicmVhaztcXFxcbiAgICBjYXNlIDE6XFxcXG4gICAgICAgIC8vIOeVquWJp1xcXFxuICAgICAgICB0cnVlX3VybCA9ICdodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3NlYXNvbi9pbmRleC9yZXN1bHQ/c2Vhc29uX3ZlcnNpb249JyArIHNlYXNvbl92ZXJzaW9uICsgJyZzcG9rZW5fbGFuZ3VhZ2VfdHlwZT0nICsgc3Bva2VuX2xhbmd1YWdlX3R5cGUgKyAnJmFyZWE9JyArIGFyZWEgKyAnJmlzX2ZpbmlzaD0nICsgaXNfZmluaXNoICsgJyZjb3B5cmlnaHQ9JyArIGNvcHlyaWdodCArICcmc2Vhc29uX3N0YXR1cz0nICsgc2Vhc29uX3N0YXR1cyArICcmc2Vhc29uX21vbnRoPScgKyBzZWFzb25fbW9udGggKyAnJnllYXI9JyArIHllYXIgKyAnJnN0eWxlX2lkPScgKyBzdHlsZV9pZCArICcmb3JkZXI9MyZzdD0xJnNvcnQ9MCZwYWdlPScgKyBwYWdlICsgJyZzZWFzb25fdHlwZT0xJnBhZ2VzaXplPTMwJnR5cGU9MSc7XFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgMzpcXFxcbiAgICAgICAgLy8g57qq5b2V54mHXFxcXG4gICAgICAgIHRydWVfdXJsID0gJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2Mvc2Vhc29uL2luZGV4L3Jlc3VsdD9zdHlsZV9pZD0nICsgc3R5bGVfaWQgKyAnJnByb2R1Y2VyX2lkPScgKyBwcm9kdWNlcl9pZCArICcmcmVsZWFzZV9kYXRlPScgKyByZWxlYXNlX2RhdGUgKyAnJnNlYXNvbl9zdGF0dXM9JyArIHNlYXNvbl9zdGF0dXMgKyAnJm9yZGVyPTImc3Q9MyZzb3J0PTAmcGFnZT0nICsgcGFnZSArICcmc2Vhc29uX3R5cGU9MyZwYWdlc2l6ZT0zMCZ0eXBlPTEnXFxcXG4gICAgICAgIGJyZWFrO1xcXFxuICAgIGNhc2UgMjpcXFxcbiAgICAgICAgLy8g55S15b2xXFxcXG4gICAgICAgIHRydWVfdXJsID0gJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2Mvc2Vhc29uL2luZGV4L3Jlc3VsdD9hcmVhPScgKyBhcmVhICsgJyZzdHlsZV9pZD0nICsgc3R5bGVfaWQgKyAnJnJlbGVhc2VfZGF0ZT0nICsgcmVsZWFzZV9kYXRlICsgJyZzZWFzb25fc3RhdHVzPScgKyBzZWFzb25fc3RhdHVzICsgJyZvcmRlcj0yJnN0PTImc29ydD0wJnBhZ2U9JyArIHBhZ2UgKyAnJnNlYXNvbl90eXBlPTImcGFnZXNpemU9MzAmdHlwZT0xJ1xcXFxuICAgICAgICBicmVhaztcXFxcbn1cXFxcbnRydWVfdXJsID0gZW5jb2RlVVJJKHRydWVfdXJsKTtcXFxcbmxpc3QgPSBKU09OLnBhcnNlKGZldGNoKHRydWVfdXJsKSkuZGF0YS5saXN0O1xcXFxudHJ5IHtcXFxcbiAgICBsaXN0LmZvckVhY2gobW92aWUgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IG1vdmllLnRpdGxlLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9maWxtZXJqaSNpbW1lcnNpdmVUaGVtZSNcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGltZzogbW92aWUuY292ZXIgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZGVzYzogbW92aWUub3JkZXIsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzMnLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICBzZWFzb25faWQ6IG1vdmllLnNlYXNvbl9pZFxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9KTtcXFxcbn0gY2F0Y2ggKGUpIHtcXFxcbiAgICBsb2coJ+W3sue7j+aKtei+vumhteW6lScgKyBNWV9QQUdFKTtcXFxcbn1cXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIueDreaYoOaXtumXtOihqFxcXCIsXFxcInBhdGhcXFwiOlxcXCJVcGRhdGVUYWJsZXNcXFwiLFxcXCJydWxlXFxcIjpcXFwiZnVuY3Rpb24gY29sb3IodGV4dCwgY29sb3IpIHtcXFxcblxcXFxuwqAgwqAgdGV4dCArPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuXFxcXG7CoCDCoCBpZiAodGV4dC5pbmRleE9mKFxcXFxcXFwi4oCc4oCc4oCd4oCdXFxcXFxcXCIpID09PSAwKSB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIHRleHQucmVwbGFjZShcXFxcXFxcIuKAnOKAnOKAneKAnVxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcblxcXFxuwqAgwqAgfVxcXFxuXFxcXG7CoCDCoCByZXR1cm4gXFxcXFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0nXFxcXFxcXCIgKyBjb2xvciArIFxcXFxcXFwiJz5cXFxcXFxcIiArIHRleHQgKyBcXFxcXFxcIjwvZm9udD5cXFxcXFxcIjtcXFxcblxcXFxufVxcXFxuXFxcXG52YXIgdGFicyA9IHtcXFxcblxcXFxuwqAgwqAgXFxcXFxcXCLnlarliadcXFxcXFxcIjogMSxcXFxcblxcXFxuwqAgwqAgXFxcXFxcXCLnuqrlvZXniYdcXFxcXFxcIjogMyxcXFxcblxcXFxuwqAgwqAgXFxcXFxcXCLlm73liJtcXFxcXFxcIjogNFxcXFxuXFxcXG59XFxcXG5cXFxcbmlmIChNWV9QQUdFID09IDEpIHtcXFxcblxcXFxuwqAgwqAgT2JqZWN0LmtleXModGFicykuZm9yRWFjaChpdGVtID0+IHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgZC5wdXNoKHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgdGl0bGU6IChnZXRNeVZhcihcXFxcXFxcImp1amlcXFxcXFxcIiwgXFxcXFxcXCLlm73liJtcXFxcXFxcIikgPT0gaXRlbSA/IGNvbG9yKGl0ZW0sIFxcXFxcXFwicmVkXFxcXFxcXCIpIDogaXRlbSksXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIHVybDogJCgpLmxhenlSdWxlKChhKSA9PiB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHB1dE15VmFyKFxcXFxcXFwianVqaVxcXFxcXFwiLCBhKVxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZWZyZXNoUGFnZSgpXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5YiH5o2i5oiQ5YqfXFxcXFxcXCJcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgfSwgaXRlbSksXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIGNvbF90eXBlOiBcXFxcXFxcInNjcm9sbF9idXR0b25cXFxcXFxcIlxcXFxuXFxcXG7CoCDCoCDCoCDCoCB9KVxcXFxuXFxcXG7CoCDCoCB9KVxcXFxuXFxcXG7CoCDCoCBkLnB1c2goe1xcXFxuXFxcXG7CoCDCoCDCoCDCoCBjb2xfdHlwZTogXFxcXFxcXCJsaW5lXFxcXFxcXCJcXFxcblxcXFxuwqAgwqAgfSlcXFxcblxcXFxuwqAgwqAgbGV0IGRheXMgPSA3XFxcXG5cXFxcbsKgIMKgIGZvciAobGV0IGkgPSAxOyBpIDwgZGF5czsgaSsrKSB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIGQucHVzaCh7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiAoZ2V0TXlWYXIoXFxcXFxcXCJmcm9tXFxcXFxcXCIsIFxcXFxcXFwiMVxcXFxcXFwiKSA9PSBpICsgXFxcXFxcXCJcXFxcXFxcIiA/IGNvbG9yKGkgKyBcXFxcXFxcIuWkqeWJjVxcXFxcXFwiLCBcXFxcXFxcInJlZFxcXFxcXFwiKSA6IGkgKyBcXFxcXFxcIuWkqeWJjVxcXFxcXFwiKSxcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgdXJsOiAkKCkubGF6eVJ1bGUoKGkpID0+IHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcHV0TXlWYXIoXFxcXFxcXCJmcm9tXFxcXFxcXCIsIGkgKyBcXFxcXFxcIlxcXFxcXFwiKVxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZWZyZXNoUGFnZSgpXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIlxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCB9LCBpKSxcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgY29sX3R5cGU6IFxcXFxcXFwic2Nyb2xsX2J1dHRvblxcXFxcXFwiXFxcXG5cXFxcbsKgIMKgIMKgIMKgIH0pXFxcXG5cXFxcbsKgIMKgIH1cXFxcblxcXFxuwqAgwqAgZC5wdXNoKHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgY29sX3R5cGU6IFxcXFxcXFwibGluZVxcXFxcXFwiXFxcXG5cXFxcbsKgIMKgIH0pXFxcXG5cXFxcbsKgIMKgIGZvciAobGV0IGkgPSAxOyBpIDwgZGF5czsgaSsrKSB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIGQucHVzaCh7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiAoZ2V0TXlWYXIoXFxcXFxcXCJ0b1xcXFxcXFwiLCBcXFxcXFxcIjFcXFxcXFxcIikgPT0gaSArIFxcXFxcXFwiXFxcXFxcXCIgPyBjb2xvcihpICsgXFxcXFxcXCLlpKnlkI5cXFxcXFxcIiwgXFxcXFxcXCJyZWRcXFxcXFxcIikgOiBpICsgXFxcXFxcXCLlpKnlkI5cXFxcXFxcIiksXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIHVybDogJCgpLmxhenlSdWxlKChpKSA9PiB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHB1dE15VmFyKFxcXFxcXFwidG9cXFxcXFxcIiwgaSArIFxcXFxcXFwiXFxcXFxcXCIpXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIHJlZnJlc2hQYWdlKClcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIH0sIGkpLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBjb2xfdHlwZTogXFxcXFxcXCJzY3JvbGxfYnV0dG9uXFxcXFxcXCJcXFxcblxcXFxuwqAgwqAgwqAgwqAgfSlcXFxcblxcXFxuwqAgwqAgfVxcXFxuXFxcXG5cXFxcbsKgIMKgICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuZ2V0TW92aWVzKHRhYnNbZ2V0TXlWYXIoXFxcXFxcXCJqdWppXFxcXFxcXCIsIFxcXFxcXFwi5Zu95YibXFxcXFxcXCIpXSwgZ2V0TXlWYXIoXFxcXFxcXCJmcm9tXFxcXFxcXCIsIFxcXFxcXFwiMVxcXFxcXFwiKSwgZ2V0TXlWYXIoXFxcXFxcXCJ0b1xcXFxcXFwiLCBcXFxcXFxcIjFcXFxcXFxcIikpLmZvckVhY2goaXRlbSA9PiB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIGQucHVzaCh7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiBpdGVtLmRhdGUgKyBcXFxcXFxcIiDlkahcXFxcXFxcIiArIGl0ZW0uZGF5X29mX3dlZWssXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfMVxcXFxcXFwiLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiXFxcXG5cXFxcbsKgIMKgIMKgIMKgIH0pXFxcXG5cXFxcbsKgIMKgIMKgIMKgIGl0ZW0uZXBpc29kZXMuZm9yRWFjaChpID0+IHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgZC5wdXNoKHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdGl0bGU6IGkudGl0bGUsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGltZzogaS5jb3ZlcisnQFJlZmVyZXI9JyxcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZGVzYzppLnB1Yl9pbmRleC5tYXRjaCgv5Y2z5bCGLyk/J+KAmOKAmOKAmeKAmTxmb250IGNvbG9yPVxcXFxcXFwicmVkXFxcXFxcXCI+JytpLnB1Yl9pbmRleCsnXFxcXFxcXFxuJytpLnB1Yl90aW1lKyc8L2ZvbnQ+JzogaS5wdWJfaW5kZXgrICdcXFxcXFxcXG4nICsgaS5wdWJfdGltZSxcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9maWxtZXJqaSNpbW1lcnNpdmVUaGVtZSNcXFxcXFxcIixcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZXh0cmE6IHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgXFxcXFxcXCJzZWFzb25faWRcXFxcXFxcIjogaS5zZWFzb25faWRcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfVxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCB9KVxcXFxuXFxcXG7CoCDCoCDCoCDCoCB9KVxcXFxuXFxcXG7CoCDCoCB9KVxcXFxuXFxcXG59XFxcXG5cXFxcblxcXFxuXFxcXG5cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLnmbvlvZVcXFwiLFxcXCJwYXRoXFxcIjpcXFwibG9naW5cXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxuc2V0UGFnZVRpdGxlKCfotKblj7fnmbvlvZXpobXpnaInKVxcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogJ2Nvb2tpZeeZu+W9lScsXFxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCgpID0+IHtcXFxcbiAgICAgICAgcmV0dXJuICQoJycsICfor7fovpPlhaXkvaDnmoRjb29raWUnKS5pbnB1dCgoKSA9PiB7XFxcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT0gXFxcXFxcXCJcXFxcXFxcIikgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly9jb29raWXkuI3og73kuLrnqbpcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIGxldCB1c2VyaW5mbyA9IEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL25hdlxcXFxcXFwiLCB7XFxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBpbnB1dFxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pKS5kYXRhO1xcXFxuICAgICAgICAgICAgaWYgKHVzZXJpbmZvLmlzTG9naW4gPT09IGZhbHNlKSByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+S9oOeahGNvb2tpZeiyjOS8vOWkseaViOS6huWWlH5cXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIHVzZXJJbmZvID0ge1xcXFxuICAgICAgICAgICAgICAgIGNvb2tpZTogaW5wdXQsXFxcXG4gICAgICAgICAgICAgICAgdXNlck5hbWU6IHVzZXJpbmZvLnVuYW1lLFxcXFxuICAgICAgICAgICAgICAgIHVzZXJNaWQ6ICB1c2VyaW5mby5taWQsXFxcXG4gICAgICAgICAgICAgICAgdmlwU3RhdHVzOiB1c2VyaW5mby52aXBTdGF0dXMsXFxcXG4gICAgICAgICAgICAgICAgZmFjZTogdXNlcmluZm8uZmFjZSArIFxcXFxcXFwiQFJlZmVyZXI9XFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHNldHRpbmcgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKTtcXFxcbiAgICAgICAgICAgIHNldHRpbmcudXNlckxpc3QudW5zaGlmdCh1c2VySW5mbyk7XFxcXG4gICAgICAgICAgICAvLyDov4fmu6Tmjoljb29raWXkuLrnqbrnmoTlhYPntKBcXFxcbiAgICAgICAgICAgIHNldHRpbmcudXNlckxpc3QgPSBzZXR0aW5nLnVzZXJMaXN0LmZpbHRlcih1c2VyID0+IHVzZXIuY29va2llICE9PSAnJyk7XFxcXG4gICAgICAgICAgICBzYXZlRmlsZShcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIiwgSlNPTi5zdHJpbmdpZnkoc2V0dGluZykpO1xcXFxuICAgICAgICAgICAgYmFjayh0cnVlKTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8vY29va2ll6K6+572u5oiQ5YqfXFxcXFxcXCI7XFxcXG4gICAgICAgIH0pXFxcXG4gICAgfSksXFxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcXFxufSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiAn55m76ZmG6K+05piOJyxcXFxcbiAgICBkZXNjOiBcXFxcXFxcIumhtemdouS4i+aWueeZu+mZhuaIkOWKn+WQju+8jOWGjeeCueWHu+ehruiupOeZu+W9leWNs+WPr1xcXFxcXFwiLFxcXFxuICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJ1xcXFxufSwge1xcXFxuICAgIHRpdGxlOiAn55m76ZmG5oiQ5Yqf5ZCO77yM5YaN54K55oiR77yBJyxcXFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAvLyDov5nph4zotJ/otKPlhplDb29raWXvvIzlhYjor7vvvIzlho3ov73liqBcXFxcbiAgICAgICAgY29va2llID0gZ2V0VmFyKCdiaWxpQ29va2llJywnJyk7XFxcXG4gICAgICAgIGxvZyhcXFxcXFxcIuiOt+WPluWIsOeahGNvb2tpZTpcXFxcXFxcIitjb29raWUpO1xcXFxuICAgICAgICBpZiAoY29va2llID09IFxcXFxcXFwiXFxcXFxcXCIpIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v6I635Y+WY29va2ll5aSx6LSl77yM5YaN562J562J55yL77yfXFxcXFxcXCI7XFxcXG4gICAgICAgIGxldCB1c2VyaW5mbyA9IEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL25hdlxcXFxcXFwiLCB7XFxcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogY29va2llXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pKS5kYXRhO1xcXFxuICAgICAgICBpZiAodXNlcmluZm8uaXNMb2dpbiA9PT0gZmFsc2UpIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5L2g5YWI55m75b2V77yM5YaN6I635Y+WY29va2ll77yMT0vvvJ9cXFxcXFxcIjtcXFxcbiAgICAgICAgdXNlckluZm8gPSB7XFxcXG4gICAgICAgICAgICBjb29raWU6IGNvb2tpZSxcXFxcbiAgICAgICAgICAgIHVzZXJOYW1lOiB1c2VyaW5mby51bmFtZSxcXFxcbiAgICAgICAgICAgIHVzZXJNaWQ6ICB1c2VyaW5mby5taWQsXFxcXG4gICAgICAgICAgICB2aXBTdGF0dXM6IHVzZXJpbmZvLnZpcFN0YXR1cyxcXFxcbiAgICAgICAgICAgIGZhY2U6IHVzZXJpbmZvLmZhY2UgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgc2V0dGluZyA9IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpO1xcXFxuICAgICAgICBzZXR0aW5nLnVzZXJMaXN0LnVuc2hpZnQodXNlckluZm8pO1xcXFxuICAgICAgICAvLyDov4fmu6Tmjoljb29raWXkuLrnqbrnmoTlhYPntKBcXFxcbiAgICAgICAgc2V0dGluZy51c2VyTGlzdCA9IHNldHRpbmcudXNlckxpc3QuZmlsdGVyKHVzZXIgPT4gdXNlci5jb29raWUgIT09ICcnKTtcXFxcbiAgICAgICAgc2F2ZUZpbGUoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIsIEpTT04uc3RyaW5naWZ5KHNldHRpbmcpKTtcXFxcbiAgICAgICAgYmFjayh0cnVlKTtcXFxcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+WmguaenOayoeacieeZu+mZhuaIkOWKn++8jOW7uuiuruS9oOS4i+asoeeZu+mZhuaIkOWKn+WQjuS4jeimgeeCuemCo+S5iOW/q34nXFxcXG4gICAgfSksXFxcXG4gICAgY29sX3R5cGU6ICd0ZXh0XzEnXFxcXG59LCB7XFxcXG4gICAgdXJsOiBcXFxcXFxcImh0dHBzOi8vbS5iaWxpYmlsaS5jb20vXFxcXFxcXCIsXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwieDVfd2Vidmlld19zaW5nbGVcXFxcXFxcIixcXFxcbiAgICBkZXNjOiBcXFxcXFxcImxpc3QmJnNjcmVlbi0zMDBcXFxcXFxcIixcXFxcbiAgICBleHRyYToge1xcXFxuICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICB2YXIgdG9rZW5fdGltZXIgPSBmdW5jdGlvbiAoKSB7XFxcXG4gICAgICAgICAgICAgICAgdmFyIHRpbWVyID0gc2V0SW50ZXJ2YWwoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBjb29raWUgPSBmYmEuZ2V0Q29va2llKFxcXFxcXFwiaHR0cHM6Ly9tLmJpbGliaWxpLmNvbS9cXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgIGZiYS5wdXRWYXIoJ2JpbGlDb29raWUnLCBjb29raWUpO1xcXFxuICAgICAgICAgICAgICAgIH0sIDEwMClcXFxcbiAgICAgICAgICAgIH07XFxcXG4gICAgICAgICAgICB0b2tlbl90aW1lcigpO1xcXFxuICAgICAgICB9KSxcXFxcbiAgICAgICAgY2FuQmFjazogdHJ1ZSxcXFxcbiAgICAgICAgdWE6IE1PQklMRV9VQVxcXFxuICAgIH1cXFxcbn0pXFxcXG5zZXRSZXN1bHQoZCk7XFxcXG5cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLlvbHop4bkuoznuqdcXFwiLFxcXCJwYXRoXFxcIjpcXFwiZmlsbWVyamlcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG4vLyDmlbDmja7lrprkvY1cXFxcbnZhciBkID0gW107XFxcXG5pZiAoTVlfUEFSQU1TLnNlYXNvbl9pZCkge1xcXFxuICAgIHNlYXNvbl9pZCA9IE1ZX1BBUkFNUy5zZWFzb25faWQgKyBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgIERhdGEgPSBKU09OLnBhcnNlKGZldGNoKCdodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3ZpZXcvd2ViL3NlYXNvbj9zZWFzb25faWQ9JyArIHNlYXNvbl9pZCkpLnJlc3VsdDtcXFxcbn0gZWxzZSB7XFxcXG4gICAgRGF0YSA9IEpTT04ucGFyc2UoZmV0Y2goJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS9wZ2Mvdmlldy93ZWIvc2Vhc29uP2VwX2lkPScgKyBNWV9QQVJBTVMuZXBfaWQpKS5yZXN1bHQ7XFxcXG59XFxcXG5pZiAoIURhdGEuY292ZXIubWF0Y2goL2h0dHBzLykpIHtcXFxcbiAgICDlsIHpnaIgPSBEYXRhLmNvdmVyLnJlcGxhY2UoJ2h0dHAnLCAnaHR0cHMnKSArIFxcXFxcXFwiQFJlZmVyZXI9XFxcXFxcXCI7XFxcXG59IGVsc2Uge1xcXFxuICAgIOWwgemdoiA9IERhdGEuY292ZXIgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiO1xcXFxufVxcXFxudHJ5IHtcXFxcbiAgICDlnLDljLogPSBEYXRhLmFyZWFzWzBdLm5hbWU7XFxcXG59IGNhdGNoIChlKSB7XFxcXG4gICAg5Zyw5Yy6ID0gJ+WcsOWMuuaaguaXoCc7XFxcXG59XFxcXG7nroDku4sgPSBEYXRhLmV2YWx1YXRlO1xcXFxuLy8g5q2j54mHXFxcXG7nsbvlnosgPSBEYXRhLnBvc2l0aXZlLnRpdGxlO1xcXFxu5LiK5pig5pe26Ze0ID0gRGF0YS5wdWJsaXNoLnB1Yl90aW1lO1xcXFxudHJ5IHtcXFxcbiAgICDlvpfliIYgPSBEYXRhLnJhdGluZy5zY29yZTtcXFxcbn0gY2F0Y2ggKGUpIHtcXFxcbiAgICDlvpfliIYgPSAn5pqC5peg5b6XJztcXFxcbn1cXFxcbui/veWJp+aXpeWOhiA9IERhdGEubmV3X2VwLmRlc2M7XFxcXG7mm7TmlrDov5vluqYgPSBEYXRhLm5ld19lcC50aXRsZTtcXFxcbuW9seeJh+WQjeensCA9IERhdGEudGl0bGU7XFxcXG7nrKzkuozmoIfpopggPSBEYXRhLnNoYXJlX3N1Yl90aXRsZTtcXFxcbuWJp+mbhuWIl+ihqCA9IERhdGEuZXBpc29kZXMuZmlsdGVyKChsaXN0KSA9PiB7XFxcXG4gICAgLy8g6L+H5ruk6aKE5ZGK44CB6Iqx57WuXFxcXG4gICAgaWYgKGdldEl0ZW0oJ3ByZXZpZXdTd2l0Y2gnLCAnZm9sZCcpID09PSAnZm9sZCcgJiYgbGlzdC5iYWRnZS5tYXRjaCgv6aKEfOiKsee1ri8pKSB7XFxcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXFxcbiAgICB9XFxcXG59KTtcXFxcbuefreiuryA9IFxcXFxcXFwi4q2QXFxcXFxcXCIgKyDnsbvlnosgKyBcXFxcXFxcIuKtkFxcXFxcXFwiICsg56ys5LqM5qCH6aKYICsgJ1xcXFxcXFxcbicgKyDlnLDljLogKyAnLScgKyDlvpfliIYgKyAn5YiGXFxcXFxcXFxuLScgKyDkuIrmmKDml7bpl7QgKyAnLSc7XFxcXG4vLyDph43lrprkuYnkuoznuqfpobXpnaLmlbDmja5cXFxcbnNldFBhZ2VUaXRsZSjlvbHniYflkI3np7ApO1xcXFxuc2V0UGFnZVBpY1VybCjlsIHpnaIpO1xcXFxuLy8g5YmN572u5Y+C5pWw5ZKM6aKE5aSE55CGLS0tXFxcXG5pbWdMaW5rID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ+WbvuaghycpO1xcXFxuLy8g5YWo5bGAbGF6eeKAlOKAlOebtOmTvivmlq3mj5JcXFxcbnZhciBsYXp5ID0gJCgnJykubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgIHZpZGVvUGFybXMgPSBmaW5kSXRlbShpbnB1dCk7XFxcXG4gICAgYWlkID0gdmlkZW9QYXJtcy5leHRyYS5haWQ7XFxcXG4gICAgYnZpZCA9IHZpZGVvUGFybXMuZXh0cmEuYnZpZDtcXFxcbiAgICBjaWQgPSB2aWRlb1Bhcm1zLmV4dHJhLmNpZDtcXFxcbiAgICBiYWRnZSA9IHZpZGVvUGFybXMuZXh0cmEuYmFkZ2U7XFxcXG4gICAgLy8g5o+Q5Lqk5Y6G5Y+y6K6w5b2VXFxcXG4gICAgJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5yZXBvcnRQcm9jZXNzKGFpZCwgY2lkKTtcXFxcbiAgICB2aXBTdGF0dXMgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS52aXBTdGF0dXM7XFxcXG4gICAgaWYgKHZpcFN0YXR1cyAhPSAwKSB7XFxcXG4gICAgICAgIC8vIOWkp+S8muWRmFxcXFxuICAgICAgICBpZiAoYmFkZ2UubWF0Y2goL+S7mOi0uS8pKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gJChbJ+mtlOaWreino+aekCcsICflt7LotK3kubAnXSwgMSkuc2VsZWN0KChpbnB1dCwgYWlkLCBjaWQpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gJ+mtlOaWreino+aekCcpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZXZhbChmZXRjaCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcycsIHt9KSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UobGluayk7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuYmlsaUxhenkoYWlkLCBjaWQsIDExNikucmVwbGFjZSgvOy9nLCBcXFxcXFxcIu+8m++8m1xcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9LCBsaW5rLCBhaWQsIGNpZClcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmJpbGlMYXp5KGFpZCwgY2lkLCAxMTYpLnJlcGxhY2UoLzsvZywgXFxcXFxcXCLvvJvvvJtcXFxcXFxcIik7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICAvLyDmma7pgJrnlKjmiLdcXFxcbiAgICAgICAgdmFyIHNldHRpbmc9SlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSk7XFxcXG4gICAgICAgIHZhciBoYXNCZktleT1zZXR0aW5nLmJmS2V5IT0nJz90cnVlOmZhbHNlO1xcXFxuICAgICAgICBpZiAoIWhhc0JmS2V5KSB7XFxcXG4gICAgICAgICAgICBpZiAoYmFkZ2UubWF0Y2goL+S8muWRmHzku5jotLkvKSkge1xcXFxuICAgICAgICAgICAgICAgIGV2YWwoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnLCB7fSkpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBheXRtUGFyc2UoaW5wdXQpO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5iaWxpTGF6eShhaWQsIGNpZCwgMTE2KS5yZXBsYWNlKC87L2csIFxcXFxcXFwi77yb77ybXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgLy8g5YWx5Lqr5Lya5ZGY5pKt5pS+5p2D55uKXFxcXG4gICAgICAgICAgICBpZiAoYmFkZ2UubWF0Y2goL+S7mOi0uS8pKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoWyfprZTmlq3op6PmnpAnLCAn5bey6LSt5LmwJ10sIDEpLnNlbGVjdCgoaW5wdXQsIGFpZCwgY2lkKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSAn6a2U5pat6Kej5p6QJykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChmZXRjaCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcycsIHt9KSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKGxpbmspO1xcXFxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuYmlsaUxhenkoYWlkLCBjaWQsIDExNikucmVwbGFjZSgvOy9nLCBcXFxcXFxcIu+8m++8m1xcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0sIGxpbmssIGFpZCwgY2lkKVxcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5iaWxpTGF6eShhaWQsIGNpZCwgMTE2KS5yZXBsYWNlKC87L2csIFxcXFxcXFwi77yb77ybXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxufSk7XFxcXG52YXIgQ29sb3IgPSBcXFxcXFxcIiMxOUI4OURcXFxcXFxcIjtcXFxcbnZhciDmr4/pobXpm4bmlbAgPSAzMDtcXFxcbnZhciDmkJzntKLmqKHlvI8gPSAn5YiG57uEJztcXFxcbnZhciDosIPnlKjlkI3np7AgPSAn566A5b2xJztcXFxcbnB1dE15VmFyKCfmipjlj6AnLCAn5YWzJyk7XFxcXG5wdXRNeVZhcign5pel5Y6GJywgJ+WFsycpO1xcXFxucHV0TXlWYXIoJ0RhdGEnLCBEYXRhKTtcXFxcbnB1dE15VmFyKCdsYXp5JywgbGF6eSk7XFxcXG4vLyDmuIXpmaTlj5jph49cXFxcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgY2xlYXJNeVZhcign5YiG6ZuG6LW3Jyk7XFxcXG4gICAgY2xlYXJNeVZhcign5YiG6ZuG57uIJyk7XFxcXG4gICAgY2xlYXJNeVZhcign5oqY5Y+gJyk7XFxcXG4gICAgY2xlYXJNeVZhcign5pel5Y6GJyk7XFxcXG4gICAgY2xlYXJNeVZhcignRGF0YScpO1xcXFxuICAgIGNsZWFyTXlWYXIoJ2xhenknKTtcXFxcbiAgICBjbGVhck15VmFyKCfliafpm4bliJfooagnKTtcXFxcbn0pKVxcXFxuLy8g6K6+572u5Yqo5oCB5pyA5paw56ug6IqCXFxcXG5zZXRMYXN0Q2hhcHRlclJ1bGUoJ2pzOicgKyAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2dldFVwZGF0ZScpKS5ydWxlKTtcXFxcbn0pKTtcXFxcbi8vIOmhtemdouWGheWuueato+aWhy0tLVxcXFxuLy8g5Z+65pys5L+h5oGv5qih5Z2XXFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiDnn63orq8sXFxcXG4gICAgZGVzYzog566A5LuLID09ICcnID8gJ+aaguaXoOeugOS7iycgOiDnroDku4suc3Vic3RyaW5nKDAsIDQ1KSArICfigJjigJjigJnigJnigKY8Zm9udCBjb2xvcj1cXFxcXFxcIiMxQzFDMUNcXFxcXFxcIj7or6bmg4U8L2ZvbnQ+JyxcXFxcbiAgICBpbWc6IOWwgemdoixcXFxcbiAgICB1cmw6ICQoKS5ydWxlKCjnroDku4spID0+IHtcXFxcbiAgICAgICAgcmVzID0ge307XFxcXG4gICAgICAgIHZhciBkID0gW107XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogJ+W9seeJh+eugOS7i++8micgKyAnXFxcXFxcXFxuXFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0JyArIOeugOS7iyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbG9uZ190ZXh0J1xcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgcmVzLmRhdGEgPSBkO1xcXFxuICAgICAgICBzZXRIb21lUmVzdWx0KHJlcyk7XFxcXG4gICAgfSwg566A5LuLKSxcXFxcbiAgICBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljX2JsdXInLFxcXFxuICAgIGV4dHJhOiB7XFxcXG4gICAgICAgIGxvbmdDbGljazogW3tcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn6aKE5ZGK44CB6Iqx57Wu5byA5YWzJywganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGlmIChnZXRJdGVtKCdwcmV2aWV3U3dpdGNoJywgJ2ZvbGQnKSA9PSAnZm9sZCcpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgncHJldmlld1N3aXRjaCcsICdvcGVuJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+mihOWRiuW3sue7j+WIh+aNouS4uuWxleekun5cXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdwcmV2aWV3U3dpdGNoJywgJ2ZvbGQnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v6aKE5ZGK5LiN5YaN5bGV56S6flxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICB0aXRsZTogJ2Rt55uS5a2QJywganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9wYWdlL3NldHRpbmcjbm9IaXN0b3J5Iz9ydWxlPWRt55uS5a2QJztcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn5by55bmV5o6n5Yi2JywganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGlmIChnZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICdmYWxzZScpID09ICd0cnVlJykge1xcXFxuICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICdmYWxzZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5by55bmV5bCG5LiN5Y+XZG3nm5LlrZDlj4LmlbDmjqfliLYnO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ2lzT3ZlcnJpZGVTYXZlJywgJ3RydWUnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W8ueW5leWwhuWPl+WIsGRt55uS5a2Q5Y+C5pWw5o6n5Yi2JztcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9XVxcXFxuICAgIH1cXFxcbn0pO1xcXFxuLy8g5pu05paw5pel5Y6G5qih5Z2XXFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiAn5pel5Y6GJyxcXFxcbiAgICBpbWc6IGltZ0xpbmsu5pel5Y6GLFxcXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgo6L+95Ymn5pel5Y6GLCDmm7TmlrDov5vluqYpID0+IHtcXFxcbiAgICAgICAgaWYgKGdldE15VmFyKCfml6XljoYnLCAn5YWzJykgPT0gJ+W8gCcpIHtcXFxcbiAgICAgICAgICAgIGRlbGV0ZUl0ZW0oJ+i/veWJp+aXpeWOhicpO1xcXFxuICAgICAgICAgICAgcHV0TXlWYXIoJ+aXpeWOhicsICflhbMnKTtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGFkZEl0ZW1BZnRlcign5pi+56S65qih5byPJywge1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiDov73liafml6XljoYubWF0Y2goL+WujOe7k3zmnJ/lvoUvKSA/IOi/veWJp+aXpeWOhiA6IOi/veWJp+aXpeWOhiArICc8YnI+PGZvbnQgY29sb3I9XFxcXFxcXCJyZWRcXFxcXFxcIj7mm7TmlrDoh7MnICsgKOabtOaWsOi/m+W6pi5tYXRjaCgvW1xcXFxcXFxcdTRlMDAtXFxcXFxcXFx1OWZhNV0vKSA/IOabtOaWsOi/m+W6piA6ICgn56ysJyArICjmm7TmlrDov5vluqYgPT0gJycgPyAwIDog5pu05paw6L+b5bqmKSArICfor50nKSkgKyAnPC9mb250PicsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwicmljaF90ZXh0XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWQ6ICfov73liafml6XljoYnXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICBwdXRNeVZhcign5pel5Y6GJywgJ+W8gCcpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LliIfmjaLml6XljobkuLo6JyArIGdldE15VmFyKCfml6XljoYnLCAn5byAJylcXFxcbiAgICB9LCDov73liafml6XljoYsIOabtOaWsOi/m+W6piksXFxcXG4gICAgY29sX3R5cGU6ICdpY29uXzUnXFxcXG59KTtcXFxcbi8vIOiuoumYheaooeWdl1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogJ+iuoumYhScsXFxcXG4gICAgaW1nOiBpbWdMaW5rLuiuoumYhSxcXFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICBzZWxlY3Rpb25MaXN0ID0gWyforqLpmIUnLCAn5Y+W5raI6K6i6ZiFJ107XFxcXG4gICAgICAgIHJldHVybiAkKHNlbGVjdGlvbkxpc3QsIDIpLnNlbGVjdCgoKSA9PiB7XFxcXG4gICAgICAgICAgICBzZWFzb25faWQgPSBKU09OLnBhcnNlKGdldE15VmFyKCdEYXRhJykpLnNlYXNvbl9pZDtcXFxcbiAgICAgICAgICAgIGlmIChpbnB1dCA9PSAn6K6i6ZiFJykge1xcXFxuICAgICAgICAgICAgICAgIHJlcyA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuc3Vic2NyaWJlRmlsbShzZWFzb25faWQpO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXMgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmNhbmNlbFN1YnNjcmliZUZpbG0oc2Vhc29uX2lkKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly8nICsgcmVzO1xcXFxuICAgICAgICB9KTtcXFxcbiAgICB9KSxcXFxcbiAgICBjb2xfdHlwZTogJ2ljb25fNSdcXFxcbn0pO1xcXFxuLy8g6K+E6K665qih5Z2XXFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiAn6K+E6K66JyxcXFxcbiAgICBpbWc6IGltZ0xpbmsu5p+l55yL6K+E6K66LFxcXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG4gICAgICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5JykucnVsZSgoKSA9PiB7XFxcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcXFxuICAgICAgICAgICAgTGlzdCA9IEpTT04ucGFyc2UoZ2V0TXlWYXIoJ0RhdGEnKSkuZXBpc29kZXM7XFxcXG4gICAgICAgICAgICBMaXN0LmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGl0ZW0uc2hhcmVfY29weSArICc8Zm9udCBjb2xvcj1cXFxcXFxcIiMzM2NjY2NcXFxcXFxcIj5cXFxcdOKerjwvZm9udD4nLFxcXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGl0ZW0uY292ZXIgKyAnQFJlZmVyZXI9JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiYXZhdGFyXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcImlkXFxcXFxcXCI6IGl0ZW0uYWlkLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJ0eXBlXFxcXFxcXCI6IDFcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICBzZXRSZXN1bHQoZCk7XFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH0pLFxcXFxuICAgIGNvbF90eXBlOiAnaWNvbl81J1xcXFxufSk7XFxcXG5cXFxcbi8vIOeyvuW9qee7p+e7reaooeWdl1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogJ+WRqOi+uScsXFxcXG4gICAgaW1nOiBpbWdMaW5rLuWRqOi+uSxcXFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICBEYXRhID0gSlNPTi5wYXJzZShnZXRNeVZhcignRGF0YScpKTtcXFxcbiAgICAgICAgLy8g5pyJ5Lqb5rKh5pyJ55u05o6l5Y675o6J5oeS5b6X5aSE55CGflxcXFxuICAgICAgICBpZiAoRGF0YS5zZWN0aW9uKSB7XFxcXG4gICAgICAgICAgICDlkajovrnmlbDnu4QgPSBbXFxcXFxcXCLwn4+377iP55u45YWz57O75YiXXFxcXFxcXCIsIFxcXFxcXFwi8J+ko1BWJuiKsee1rlxcXFxcXFwiLCBcXFxcXFxcIvCfjYnnq5blsY/kuZ/nsr7lvalcXFxcXFxcIiwgXFxcXFxcXCLwn5Sl57K+5b2p5LqM5YibXFxcXFxcXCJdO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAg5ZGo6L655pWw57uEID0gW1xcXFxcXFwi8J+Pt++4j+ebuOWFs+ezu+WIl1xcXFxcXFwiXTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvLyDlkajovrnmlbDnu4QgPSBbXFxcXFxcXCLwn4+377iP55u45YWz57O75YiXXFxcXFxcXCIsIFxcXFxcXFwi8J+ko1BWJuiKsee1rlxcXFxcXFwiLCBcXFxcXFxcIuerluWxj+S5n+eyvuW9qVxcXFxcXFwiLCBcXFxcXFxcIueyvuW9qeS6jOWIm1xcXFxcXFwiXTtcXFxcbiAgICAgICAgcmV0dXJuICQo5ZGo6L655pWw57uELCAxLCAn4YOm57K+5b2p57un57utJykuc2VsZWN0KCgpID0+IHtcXFxcbiAgICAgICAgICAgIERhdGEgPSBKU09OLnBhcnNlKGdldE15VmFyKCdEYXRhJykpO1xcXFxuICAgICAgICAgICAgbGF6eSA9IGdldE15VmFyKCdsYXp5Jyk7XFxcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09ICfwn4+377iP55u45YWz57O75YiXJykge1xcXFxuICAgICAgICAgICAgICAgIOezu+WIl+WQjeensCA9IERhdGEuc2Vhc29uX3RpdGxlXFxcXG4gICAgICAgICAgICAgICAg57O75YiX5pWw5o2uID0gRGF0YS5zZWFzb25zO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAkKCkucnVsZSgo57O75YiX5pWw5o2uKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGQgPSBbXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgc2V0UGFnZVRpdGxlKCfwn4+377iP55u45YWz57O75YiXJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmICjns7vliJfmlbDmja4gPT0gW10gfHwg57O75YiX5pWw5o2uID09ICcnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGJpZz48Zm9udCBjb2xvcj1cXFxcXFxcInJlZFxcXFxcXFwiPuKtkOivpeW9seeJh+ayoeacieebuOWFs+ezu+WIl+WTpn7irZA8L2ZvbnQ+PC9iaWc+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICd0b2FzdDovL+mDveayoeacie+8jO+8jOS9oOeCueWVpeWRgH4nLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmlazor7fmnJ/lvoV+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICDns7vliJfmlbDmja4uZm9yRWFjaChsaXN0ID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3Quc2Vhc29uX3RpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZzogKGxpc3QuaG9yaXpvbnRhbF9jb3Zlcl8xNjEwID09ICcnID8gKGxpc3QuaG9yaXpvbnRhbF9jb3Zlcl8xNjkgPT0gJycgPyBsaXN0LmNvdmVyIDogbGlzdC5ob3Jpem9udGFsX2NvdmVyXzE2OSkgOiBsaXN0Lmhvcml6b250YWxfY292ZXJfMTYxMCkgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9maWxtZXJqaSNpbW1lcnNpdmVUaGVtZSMnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGxpc3QubmV3X2VwLmluZGV4X3Nob3csXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcImVwX2lkXFxcXFxcXCI6IGxpc3QubmV3X2VwLmlkXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICBzZXRIb21lUmVzdWx0KGQpO1xcXFxuICAgICAgICAgICAgICAgIH0sIOezu+WIl+aVsOaNrilcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09ICfwn6SjUFYm6Iqx57WuJykge1xcXFxuICAgICAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIFBW5ZKM6Iqx57Wu5pWw5o2uID0gRGF0YS5zZWN0aW9uWzBdLmVwaXNvZGVzO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgpLnJ1bGUoKFBW5ZKM6Iqx57Wu5pWw5o2uLCBsYXp5KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkID0gW107XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRQYWdlVGl0bGUoJ/CfpKNQViboirHnta4nKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChQVuWSjOiKsee1ruaVsOaNriA9PSBbXSB8fCBQVuWSjOiKsee1ruaVsOaNriA9PSAnJykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn4oCY4oCY4oCZ4oCZPGJpZz48Zm9udCBjb2xvcj1cXFxcXFxcInJlZFxcXFxcXFwiPuKtkOivpeW9seeJhy/op4bpopHmsqHmnInnm7jlhbNQVuWSjOiKsee1ruWTpn7irZA8L2ZvbnQ+PC9iaWc+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAndG9hc3Q6Ly/pg73msqHmnInvvIzvvIzkvaDngrnllaXlkYB+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJ+aVrOivt+acn+W+hX4nLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBQVuWSjOiKsee1ruaVsOaNri5mb3JFYWNoKGxpc3QgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LnRpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QuY292ZXIgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGxpc3QubGluayArIGxhenksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGxpc3Quc3VidGl0bGUgKyAnXFxcXFxcXFxuJyArIGxpc3QubG9uZ190aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBsaXN0LmxpbmssXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYWlkLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnZpZDogbGlzdC5idmlkLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lkOiBsaXN0LmNpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhZGdlOiBsaXN0LmJhZGdlXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSwgUFblkozoirHnta7mlbDmja4sIGxhenkpXFxcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5rKh5pyJ5pWw5o2u5ZOmfidcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSAn8J+NieerluWxj+S5n+eyvuW9qScpIHtcXFxcbiAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICDnq5blsY/kuZ/nsr7lvanmlbDmja4gPSBEYXRhLnNlY3Rpb25bMV0uZXBpc29kZXM7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCkucnVsZSgo56uW5bGP5Lmf57K+5b2p5pWw5o2uLCBsYXp5KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkID0gW107XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRQYWdlVGl0bGUoJ/CfjYnnq5blsY/kuZ/nsr7lvaknKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICjnq5blsY/kuZ/nsr7lvanmlbDmja4gPT0gW10gfHwg56uW5bGP5Lmf57K+5b2p5pWw5o2uID09ICcnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfigJjigJjigJnigJk8YmlnPjxmb250IGNvbG9yPVxcXFxcXFwicmVkXFxcXFxcXCI+4q2Q6K+l5b2x54mHL+inhumikeayoeacieebuOWFs+erluWxj+efreinhumikeWTpn7irZA8L2ZvbnQ+PC9iaWc+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiAndG9hc3Q6Ly/pg73msqHmnInvvIzvvIzkvaDngrnllaXlkYB+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogJ+aVrOivt+acn+W+hX4nLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICDnq5blsY/kuZ/nsr7lvanmlbDmja4uZm9yRWFjaChsaXN0ID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC50aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBsaXN0LmNvdmVyICsgXFxcXFxcXCJAUmVmZXJlcj1cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBsaXN0LmxpbmsgKyBsYXp5LFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBsaXN0LnN1YnRpdGxlICsgJ1xcXFxcXFxcbicgKyBsaXN0LmxvbmdfdGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5saW5rLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYWlkOiBsaXN0LmFpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ2aWQ6IGxpc3QuYnZpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNpZDogbGlzdC5jaWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYWRnZTogbGlzdC5iYWRnZVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldEhvbWVSZXN1bHQoZCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0sIOerluWxj+S5n+eyvuW9qeaVsOaNriwgbGF6eSlcXFxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/msqHmnInmlbDmja7lk6Z+J1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09ICfwn5Sl57K+5b2p5LqM5YibJykge1xcXFxuICAgICAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIOeyvuW9qeS6jOWIm+aVsOaNriA9IERhdGEuc2VjdGlvblsyXS5lcGlzb2RlcztcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoKS5ydWxlKCjnsr7lvankuozliJvmlbDmja4sIGxhenkpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQgPSBbXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNldFBhZ2VUaXRsZSgn8J+UpeeyvuW9qeS6jOWImycpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKOeyvuW9qeS6jOWIm+aVsOaNriA9PSBbXSB8fCDnsr7lvankuozliJvmlbDmja4gPT0gJycpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+KAmOKAmOKAmeKAmTxiaWc+PGZvbnQgY29sb3I9XFxcXFxcXCJyZWRcXFxcXFxcIj7irZDor6XlvbHniYcv6KeG6aKR5rKh5pyJ5LqM5Yib5L2c5ZOB5ZOmfuKtkDwvZm9udD48L2JpZz4nLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICd0b2FzdDovL+mDveayoeacie+8jO+8jOS9oOeCueWVpeWRgH4nLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAn5pWs6K+35pyf5b6FficsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIOeyvuW9qeS6jOWIm+aVsOaNri5mb3JFYWNoKGxpc3QgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOmSiOWvuemDqOWIhuWPguaVsOe8uuWkseeahOaDheWGteWmguWHoeS6uuS/ruS7meS8oOWGmeeahO+8jO+8jFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChsaXN0LmFpZCA9PSAwIHx8IGxpc3QuY2lkID09IDApIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmllZGVvRGF0YSA9IEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL3ZpZXc/YWlkPVxcXFxcXFwiICsgbGlzdC5saW5rLnNwbGl0KCdhdicpWzFdLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFBDX1VBLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiAnaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tLydcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtZXRob2Q6IFxcXFxcXFwiR0VUXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSkpLmRhdGE7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZCA9IHZpZWRlb0RhdGEuYWlkO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBidmlkID0gdmllZGVvRGF0YS5idmlkO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaWQgPSB2aWVkZW9EYXRhLmNpZDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQgPSBsaXN0LmFpZDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnZpZCA9IGxpc3QuYnZpZDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2lkID0gbGlzdC5jaWQ7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LnRpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QuY292ZXIgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGxpc3QubGluayArIGxhenksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGxpc3Quc3VidGl0bGUgKyAnXFxcXFxcXFxuJyArIGxpc3QubG9uZ190aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBsaXN0LmxpbmssXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQ6IGFpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJ2aWQ6IGJ2aWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaWQ6IGNpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhZGdlOiBsaXN0LmJhZGdlXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSwg57K+5b2p5LqM5Yib5pWw5o2uLCBsYXp5KVxcXFxuICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+ayoeacieaVsOaNruWTpn4nXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/mraPlnKjov5vlhaVcXFxcXFxcIiArIGlucHV0ICsgXFxcXFxcXCLnlYzpnaIuLi5cXFxcXFxcIjtcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9KSxcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJpY29uXzVcXFxcXFxcIixcXFxcbiAgICBleHRyYToge1xcXFxuICAgICAgICBpZDogJ+eyvuW9qee7p+e7rSdcXFxcbiAgICB9XFxcXG59KTtcXFxcbi8vIOaYvuekuuaooeW8j+abtOaUueaooeWdl1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogZ2V0SXRlbSgn5qih5byPJywgJ+WPjOi+uScpLFxcXFxuICAgIGltZzogZ2V0SXRlbSgn5qih5byPJywgJ+WPjOi+uScpID09ICfliJfooagnID8gaW1nTGluay7liJfooaggOiBpbWdMaW5rLuWPjOi+uSxcXFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICDmmL7npLrnmoTliafpm4bliJfooaggPSBKU09OLnBhcnNlKGdldE15VmFyKCfmmL7npLrnmoTliafpm4bliJfooagnKSk7XFxcXG4gICAgICAgIGlmIChnZXRJdGVtKCfmqKHlvI8nLCAn5Y+M6L65JykgPT0gJ+WIl+ihqCcpIHtcXFxcbiAgICAgICAgICAgIOaYvuekuueahOWJp+mbhuWIl+ihqC5mb3JFYWNoKGVsID0+IHtcXFxcbiAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKGVsLmxpbmssIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8yJyxcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgc2V0SXRlbSgn5qih5byPJywgJ+WPjOi+uScpXFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICDmmL7npLrnmoTliafpm4bliJfooaguZm9yRWFjaChlbCA9PiB7XFxcXG4gICAgICAgICAgICAgICAgdXBkYXRlSXRlbShlbC5saW5rLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIHNldEl0ZW0oJ+aooeW8jycsICfliJfooagnKVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGltZ0xpbmsgPSBzdG9yYWdlMC5nZXRNeVZhcign5Zu+5qCHJyk7XFxcXG4gICAgICAgIHVwZGF0ZUl0ZW0oJ+aYvuekuuaooeW8jycsIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBnZXRJdGVtKCfmqKHlvI8nLCAn5Y+M6L65JyksXFxcXG4gICAgICAgICAgICBpbWc6IGdldEl0ZW0oJ+aooeW8jycsICflj4zovrknKSA9PSAn5YiX6KGoJyA/IGltZ0xpbmsu5YiX6KGoIDogaW1nTGluay7lj4zovrksXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5bey5YiH5o2i5qih5byP5Li6OicgKyBnZXRJdGVtKCfmqKHlvI8nLCAn5Y+M6L65JylcXFxcbiAgICB9KSxcXFxcbiAgICBjb2xfdHlwZTogJ2ljb25fNScsXFxcXG4gICAgZXh0cmE6IHtcXFxcbiAgICAgICAgaWQ6ICfmmL7npLrmqKHlvI8nXFxcXG4gICAgfVxcXFxufSwge1xcXFxuICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaycsXFxcXG59KTtcXFxcbi8vIOmAieaPkuaooeWdl+KAlOKAlOWxgOmDqOWIt+aWsOeJiFxcXFxu5p2l5rqQID0gJ2JsJztcXFxcbnB1dE15VmFyKCfnroDmj5InLCAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICBsZXQgdGl0bGVBcnIgPSBbXVxcXFxuICAgIHNldEZpbGUgPSByZWFkRmlsZSgnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nKTtcXFxcbiAgICB0cnkge1xcXFxuICAgICAgICBldmFsKCdqc29uPScgKyBzZXRGaWxlKTtcXFxcbiAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgIGxvZygnSnNvbuino+aekOWPkeeUn+S6humUmeivrzonICsgZS5tZXNzYWdlKTtcXFxcbiAgICB9XFxcXG4gICAgdGl0bGVBcnIgPSBqc29uLnRpdGxlO1xcXFxuICAgIGxldCBiYXJyeTEgPSBbJ+Kcje+4j+i+heWKqSddO1xcXFxuICAgIGxldCBiYXJyeTIgPSBbJ/Cfk6bvuI/prZTmlq0nXTtcXFxcbiAgICBsZXQgYmFycnkzID0gWyfwn5SN5pCc57SiJ107XFxcXG4gICAgdGl0bGVBcnIgPSBiYXJyeTMuY29uY2F0KHRpdGxlQXJyKTtcXFxcbiAgICB0aXRsZUFyciA9IGJhcnJ5Mi5jb25jYXQodGl0bGVBcnIpO1xcXFxuICAgIHRpdGxlQXJyID0gYmFycnkxLmNvbmNhdCh0aXRsZUFycik7XFxcXG4gICAgZXZhbCgnb3A9anNvbi5zZXR0aW5ncy4nICsg5p2l5rqQKTtcXFxcbiAgICB0aXRsZUFyciA9IHRpdGxlQXJyLm1hcCgoaXQpID0+IHtcXFxcbiAgICAgICAgcmV0dXJuIGl0ID09PSBvcCA/ICfwn5GJJyArIGl0IDogaXQ7XFxcXG4gICAgfSk7XFxcXG4gICAgcHV0TXlWYXIoJ+ino+aekOaVsOe7hCcsIHRpdGxlQXJyKTtcXFxcbiAgICBwdXRNeVZhcignc2V0RmlsZScsIHNldEZpbGUpO1xcXFxufSkpXFxcXG5ldmFsKGdldE15VmFyKCfnroDmj5InKSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiAn6Kej5p6Q77ya8J+UmDxmb250IGNvbG9yPVxcXFxcXFwiJyArIENvbG9yICsgJ1xcXFxcXFwiPicgKyBvcCArICc8L2ZvbnQ+XFxcXFxcXFx0XFxcXFxcXFx06aG156CB77yaPGZvbnQgY29sb3I9XFxcXFxcXCInICsgQ29sb3IgKyAnXFxcXFxcXCI+JyArICgoZ2V0TXlWYXIoJ+WIhumbhui1tycsICfpppbpobUnKSA9PSAn6aaW6aG1JykgPyAn6aaW6aG1JyA6IChnZXRNeVZhcign5YiG6ZuG6LW3JykgKyAnLScgKyBnZXRNeVZhcign5YiG6ZuG57uIJykpKSArICc8L2ZvbnQ+JyxcXFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGpzb24sIOadpea6kCwgQ29sb3IsIG9wLCDlvbHniYflkI3np7AsIOaQnOe0ouaooeW8jywg6LCD55So5ZCN56ewKSA9PiB7XFxcXG4gICAgICAgIGV2YWwoZ2V0TXlWYXIoJ+eugOaPkicpKTtcXFxcbiAgICAgICAgcmV0dXJuICQoZXZhbChnZXRNeVZhcign6Kej5p6Q5pWw57uEJykpLCAzKS5zZWxlY3QoKGpzb24sIOadpea6kCwgQ29sb3IsIG9wLCDlvbHniYflkI3np7AsIOaQnOe0ouaooeW8jywg6LCD55So5ZCN56ewKSA9PiB7XFxcXG4gICAgICAgICAgICBzZXRGaWxlID0gZ2V0TXlWYXIoJ3NldEZpbGUnKTtcXFxcbiAgICAgICAgICAgIGlucHV0ID0gaW5wdXQucmVwbGFjZSgv8J+RiS9nLCAnJyk7XFxcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT09ICfinI3vuI/ovoXliqknKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoKS5ydWxlKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9ob21lP3J1bGU96YWN572u5Yqp5omLJykpLnJ1bGUpO1xcXFxuICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSAn8J+Tpu+4j+mtlOaWrScpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL3BhZ2UvUm91dGU/cnVsZT1NeUZpZWxk4bSw4oG/JnR5cGU957yW6L6RI25vSGlzdG9yeSNcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09ICfwn5SN5pCc57SiJykge1xcXFxuICAgICAgICAgICAgICAgIGlmICjmkJzntKLmqKHlvI8gPT0gJ+WIhue7hCcpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9zZWFyY2g/cz1cXFxcXFxcIiArIOW9seeJh+WQjeensCArIFxcXFxcXFwiJmdyb3VwPVxcXFxcXFwiICsg6LCD55So5ZCN56ewO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vc2VhcmNoP3M9XFxcXFxcXCIgKyDlvbHniYflkI3np7AgKyBcXFxcXFxcIiZydWxlPVxcXFxcXFwiICsg6LCD55So5ZCN56ewO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIC8vIOWOn+WFiOeahOmFjee9rlxcXFxuICAgICAgICAgICAgb3JpZ2luU2V0dGluZ3MgPSBKU09OLnN0cmluZ2lmeShqc29uLnNldHRpbmdzKTtcXFxcbiAgICAgICAgICAgIC8vIOS/ruaUuemFjee9rlxcXFxuICAgICAgICAgICAgZXZhbCgnanNvbi5zZXR0aW5ncy4nICsg5p2l5rqQICsgJz1pbnB1dDsnKTtcXFxcbiAgICAgICAgICAgIHNldEZpbGUgPSBzZXRGaWxlLnJlcGxhY2Uob3JpZ2luU2V0dGluZ3MsIEpTT04uc3RyaW5naWZ5KGpzb24uc2V0dGluZ3MpKTtcXFxcbiAgICAgICAgICAgIHNhdmVGaWxlKCdoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvbicsIHNldEZpbGUpO1xcXFxuICAgICAgICAgICAgLy8g5Yi35paw5YWD57SgXFxcXG4gICAgICAgICAgICBldmFsKGdldE15VmFyKCfnroDmj5InKSk7XFxcXG4gICAgICAgICAgICB1cGRhdGVJdGVtKCdvcCcsIHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+ino+aekO+8mvCflJg8Zm9udCBjb2xvcj1cXFxcXFxcIicgKyBDb2xvciArICdcXFxcXFxcIj4nICsgb3AgKyAnPC9mb250PlxcXFxcXFxcdFxcXFxcXFxcdOmhteegge+8mjxmb250IGNvbG9yPVxcXFxcXFwiJyArIENvbG9yICsgJ1xcXFxcXFwiPicgKyAoKGdldE15VmFyKCfliIbpm4botbcnLCAn6aaW6aG1JykgPT0gJ+mmlumhtScpID8gJ+mmlumhtScgOiAoZ2V0TXlWYXIoJ+WIhumbhui1tycpICsgJy0nICsgZ2V0TXlWYXIoJ+WIhumbhue7iCcpKSkgKyAnPC9mb250PicsXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5YiH5o2i6Kej5p6Q5Y+j5Li6OlxcXFxcXFwiICsgaW5wdXQ7XFxcXG4gICAgICAgIH0sIGpzb24sIOadpea6kCwgQ29sb3IsIG9wLCDlvbHniYflkI3np7AsIOaQnOe0ouaooeW8jywg6LCD55So5ZCN56ewKVxcXFxuICAgIH0sIGpzb24sIOadpea6kCwgQ29sb3IsIG9wLCDlvbHniYflkI3np7AsIOaQnOe0ouaooeW8jywg6LCD55So5ZCN56ewKSxcXFxcbiAgICBpbWc6ICdoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L3R1Ymlhby9iaWxpYmlsaS5zdmcnLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcImF2YXRhclxcXFxcXFwiLFxcXFxuICAgIGV4dHJhOiB7XFxcXG4gICAgICAgIGlkOiAnb3AnXFxcXG4gICAgfVxcXFxufSk7XFxcXG4vLyDmu5rliqjliafpm4bmnaHmoI9cXFxcbuWJp+mbhumVv+W6piA9IOWJp+mbhuWIl+ihqC5sZW5ndGg7XFxcXG5pZiAo5Ymn6ZuG6ZW/5bqmID4g5q+P6aG16ZuG5pWwKSB7XFxcXG4gICAgcHV0TXlWYXIoJ+WIt+aWsOmAiembhicsICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICBwdXRNeVZhcign5YiG6ZuG6LW3Jywgc3RhcnQpO1xcXFxuICAgICAgICBwdXRNeVZhcign5YiG6ZuG57uIJywgZW5kKTtcXFxcbiAgICAgICAgZXZhbChnZXRNeVZhcign566A5o+SJykpO1xcXFxuICAgICAgICB1cGRhdGVJdGVtKCdvcCcsIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn6Kej5p6Q77ya8J+UmDxmb250IGNvbG9yPVxcXFxcXFwiJyArIENvbG9yICsgJ1xcXFxcXFwiPicgKyBvcCArICc8L2ZvbnQ+XFxcXFxcXFx0XFxcXFxcXFx06aG156CB77yaPGZvbnQgY29sb3I9XFxcXFxcXCInICsgQ29sb3IgKyAnXFxcXFxcXCI+JyArICgoZ2V0TXlWYXIoJ+WIhumbhui1tycsICfpppbpobUnKSA9PSAn6aaW6aG1JykgPyAn6aaW6aG1JyA6IChnZXRNeVZhcign5YiG6ZuG6LW3JykgKyAnLScgKyBnZXRNeVZhcign5YiG6ZuG57uIJykpKSArICc8L2ZvbnQ+JyxcXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgLy8g5Yig6ZmkXFxcXG4gICAgICAgIOaYvuekuueahOWJp+mbhuWIl+ihqCA9IEpTT04ucGFyc2UoZ2V0TXlWYXIoJ+aYvuekuueahOWJp+mbhuWIl+ihqCcpKTtcXFxcbiAgICAgICAg5pi+56S655qE5Ymn6ZuG5YiX6KGoLmZvckVhY2goZWwgPT4ge1xcXFxuICAgICAgICAgICAgZGVsZXRlSXRlbShlbC5saW5rKTtcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIC8vIOa3u+WKoFxcXFxuICAgICAgICBsYXp5ID0gZ2V0TXlWYXIoJ2xhenknKTtcXFxcbiAgICAgICAg5Ymn6ZuG5YiX6KGoID0gSlNPTi5wYXJzZShnZXRNeVZhcign5Ymn6ZuG5YiX6KGoJykpO1xcXFxuICAgICAgICDmmL7npLrnmoTliafpm4bliJfooaggPSDliafpm4bliJfooaguc2xpY2Uoc3RhcnQgLSAxLCBlbmQpO1xcXFxuICAgICAgICBuZXdBcnJheSA9IFtdO1xcXFxuICAgICAgICBpbmRleCA9IDE7XFxcXG4gICAgICAgIOaYvuekuueahOWJp+mbhuWIl+ihqC5mb3JFYWNoKGxpc3QgPT4ge1xcXFxuICAgICAgICAgICAgaWYgKGdldEl0ZW0oJ+aooeW8jycsICflj4zovrknKSA9PSAn5YiX6KGoJykge1xcXFxuICAgICAgICAgICAgICAgIG5ld0FycmF5LnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5sb25nX3RpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QuY292ZXIgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGxpc3QubGluayArIGxhenksXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IGxpc3QudGl0bGUubWF0Y2goL1swLTldLykgPyAobGlzdC5iYWRnZSArICfnrKwnICsgbGlzdC50aXRsZSArICfor50nKSA6IGxpc3QudGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5saW5rLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYWlkOiBsaXN0LmFpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ2aWQ6IGxpc3QuYnZpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpZDogbGlzdC5jaWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWRnZTogbGlzdC5iYWRnZVxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIG5ld0FycmF5LnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5sb25nX3RpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QuY292ZXIgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGxpc3QubGluayArIGxhenksXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IGxpc3QudGl0bGUubWF0Y2goL1swLTldLykgPyAobGlzdC5iYWRnZSArICfnrKwnICsgbGlzdC50aXRsZSArICfor50nKSA6IGxpc3QudGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMicsXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5saW5rLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYWlkOiBsaXN0LmFpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJ2aWQ6IGxpc3QuYnZpZCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNpZDogbGlzdC5jaWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBiYWRnZTogbGlzdC5iYWRnZVxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpbmRleCArPSAxO1xcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgYWRkSXRlbUFmdGVyKGdldE15VmFyKCfmnKvpobUnKSwgbmV3QXJyYXkpO1xcXFxuICAgICAgICBwdXRNeVZhcign5pi+56S655qE5Ymn6ZuG5YiX6KGoJywg5pi+56S655qE5Ymn6ZuG5YiX6KGoKTtcXFxcbiAgICB9KSk7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxcXG4gICAgICAgIHRpdGxlOiAn4oi3JyxcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIGlkOiAn5Y2g5L2N56ymJyxcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG4gICAgcHV0TXlWYXIoJ+WIhumbhui1tycsIDEpO1xcXFxuICAgIHB1dE15VmFyKCfliIbpm4bnu4gnLCDmr4/pobXpm4bmlbApO1xcXFxuICAgIHB1dE15VmFyKCfliafpm4bliJfooagnLCDliafpm4bliJfooagpO1xcXFxuICAgIOaAu+mhteaVsCA9IE1hdGguY2VpbCjliafpm4bplb/luqYgLyDmr4/pobXpm4bmlbApO1xcXFxuICAgIHN0YXJ0ID0gMTtcXFxcbiAgICBlbmQgPSDmr4/pobXpm4bmlbA7XFxcXG4gICAgZm9yIChsZXQgcGFnZSA9IDE7IHBhZ2UgPD0g5oC76aG15pWwOyBwYWdlKyspIHtcXFxcbiAgICAgICAgaWYgKGVuZCA+IOWJp+mbhumVv+W6pikge1xcXFxuICAgICAgICAgICAgZW5kID0g5Ymn6ZuG6ZW/5bqmO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogc3RhcnQgKyAnLScgKyBlbmQsXFxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoc3RhcnQsIGVuZCwgQ29sb3IsIOadpea6kCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGV2YWwoZ2V0TXlWYXIoJ+WIt+aWsOmAiembhicpKTtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB9LCBzdGFydCwgZW5kLCBDb2xvciwg5p2l5rqQKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgIGlkOiBzdGFydCArICctJyArIGVuZFxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgaWYgKGVuZCA8IOWJp+mbhumVv+W6pikge1xcXFxuICAgICAgICAgICAgc3RhcnQgKz0g5q+P6aG16ZuG5pWwO1xcXFxuICAgICAgICAgICAgZW5kICs9IOavj+mhtembhuaVsDtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICAvLyDorrDlvZXmnKvpobXnmoRpZFxcXFxuICAgIHB1dE15VmFyKCfmnKvpobUnLCBzdGFydCArICctJyArIGVuZCk7XFxcXG59IGVsc2Uge1xcXFxuICAgIHB1dE15VmFyKCfliIbpm4botbcnLCAxKTtcXFxcbiAgICBwdXRNeVZhcign5YiG6ZuG57uIJywg5Ymn6ZuG6ZW/5bqmKTtcXFxcbn1cXFxcbi8vIOWxleekuuWJp+mbhjpcXFxcbuaYvuekuueahOWJp+mbhuWIl+ihqCA9IOWJp+mbhuWIl+ihqC5zbGljZSgwLCBnZXRNeVZhcign5YiG6ZuG57uIJykpO1xcXFxucHV0TXlWYXIoJ+aYvuekuueahOWJp+mbhuWIl+ihqCcsIOaYvuekuueahOWJp+mbhuWIl+ihqCk7XFxcXG5pbmRleCA9IDE7XFxcXG7mmL7npLrnmoTliafpm4bliJfooaguZm9yRWFjaChsaXN0ID0+IHtcXFxcbiAgICBpZiAoZ2V0SXRlbSgn5qih5byPJywgJ+WPjOi+uScpID09ICfliJfooagnKSB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogbGlzdC5sb25nX3RpdGxlLFxcXFxuICAgICAgICAgICAgaW1nOiBsaXN0LmNvdmVyICsgXFxcXFxcXCJAUmVmZXJlcj1cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIHVybDogbGlzdC5saW5rICsgbGF6eSxcXFxcbiAgICAgICAgICAgIGRlc2M6IGxpc3QudGl0bGUubWF0Y2goL1swLTldLykgPyAobGlzdC5iYWRnZSArICfnrKwnICsgbGlzdC50aXRsZSArICfor50nKSA6IGxpc3QudGl0bGUsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICBpZDogbGlzdC5saW5rLFxcXFxuICAgICAgICAgICAgICAgIGFpZDogbGlzdC5haWQsXFxcXG4gICAgICAgICAgICAgICAgYnZpZDogbGlzdC5idmlkLFxcXFxuICAgICAgICAgICAgICAgIGNpZDogbGlzdC5jaWQsXFxcXG4gICAgICAgICAgICAgICAgYmFkZ2U6IGxpc3QuYmFkZ2VcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSk7XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBsaXN0LmxvbmdfdGl0bGUsXFxcXG4gICAgICAgICAgICBpbWc6IGxpc3QuY292ZXIgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdXJsOiBsaXN0LmxpbmsgKyBsYXp5LFxcXFxuICAgICAgICAgICAgZGVzYzogbGlzdC50aXRsZS5tYXRjaCgvWzAtOV0vKSA/IChsaXN0LmJhZGdlICsgJ+esrCcgKyBsaXN0LnRpdGxlICsgJ+ivnScpIDogbGlzdC50aXRsZSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMicsXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgIGlkOiBsaXN0LmxpbmssXFxcXG4gICAgICAgICAgICAgICAgYWlkOiBsaXN0LmFpZCxcXFxcbiAgICAgICAgICAgICAgICBidmlkOiBsaXN0LmJ2aWQsXFxcXG4gICAgICAgICAgICAgICAgY2lkOiBsaXN0LmNpZCxcXFxcbiAgICAgICAgICAgICAgICBiYWRnZTogbGlzdC5iYWRnZVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG4gICAgaW5kZXggKz0gMTtcXFxcbn0pO1xcXFxuc2V0UmVzdWx0KGQpO1xcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwidXDkuLvpobVcXFwiLFxcXCJwYXRoXFxcIjpcXFwidXBIb21lXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbi8vIOmihOWkhOeQhlxcXFxucHV0TXlWYXIoJ3VwSW5mbycsICflhbMnKTtcXFxcbnNldFBhZ2VUaXRsZShNWV9QQVJBTVMudGl0bGUpO1xcXFxuaW1nTGluayA9IHN0b3JhZ2UwLmdldE15VmFyKCflm77moIcnKTtcXFxcbi8vIOmYsuatouWPjeeIrOiZq++8jOS7juS4iuS4gOS4qumhtemdouS8oOmAkuaVsOaNruKAlOKAlOWPjeeIrOiZq+S4pemHjVxcXFxudXBNaWQgPSBNWV9QQVJBTVMubWlkICsgXFxcXFxcXCJcXFxcXFxcIjtcXFxcbnVwTmFtZSA9IE1ZX1BBUkFNUy50aXRsZTtcXFxcbnVwRmFjZSA9IE1ZX1BBUkFNUy5mYWNlO1xcXFxucmVsYXRpb24gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLnVzZXJNYXBwaW5nKHVwTWlkKTtcXFxcbi8vIOWktOWDj+agj1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogJzxmb250IGNvbG9yPVxcXFxcXFwiYmx1ZVxcXFxcXFwiPicgKyB1cE5hbWUgKyAnPC9mb250PicsXFxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh1cE1pZCkgPT4ge1xcXFxuICAgICAgICBpZiAoZ2V0TXlWYXIoJ3VwSW5mbycsICflhbMnKSA9PSAn5byAJykge1xcXFxuICAgICAgICAgICAgZGVsZXRlSXRlbSgndXBJbmZvJyk7XFxcXG4gICAgICAgICAgICBwdXRNeVZhcigndXBJbmZvJywgJ+WFsycpO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgICAgICAvLyDnlKjmiLfln7rmnKzkv6Hmga9cXFxcbiAgICAgICAgICAgICAgICBxdWVyeUpzb24gPSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIG1pZDogdXBNaWQsXFxcXG4gICAgICAgICAgICAgICAgICAgIHRva2VuOiAnJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgcGxhdGZvcm06ICd3ZWInLFxcXFxuICAgICAgICAgICAgICAgICAgICB3ZWJfbG9jYXRpb246IDE1NTAxMDFcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgcGFybXMgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmdldFdiaUVuYyhxdWVyeUpzb24pO1xcXFxuICAgICAgICAgICAgICAgIGluZm9MaW5rID0gJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3NwYWNlL3diaS9hY2MvaW5mbz8nICsgcGFybXM7XFxcXG4gICAgICAgICAgICAgICAgdXBEYXRhID0gSlNPTi5wYXJzZShmZXRjaChpbmZvTGluaywge1xcXFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjogUENfVUEsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBjb29raWU9SlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9KSkuZGF0YTtcXFxcbiAgICAgICAgICAgICAgICB1cE5hbWUgPSB1cERhdGEubmFtZTtcXFxcbiAgICAgICAgICAgICAgICB1cFNleCA9IHVwRGF0YS5zZXg7XFxcXG4gICAgICAgICAgICAgICAgdXBTaWduID0gdXBEYXRhLnNpZ247XFxcXG4gICAgICAgICAgICAgICAgdXBCaXJ0aGRheSA9IHVwRGF0YS5iaXJ0aGRheTtcXFxcbiAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICB1cFNjaG9vbCA9IHVwRGF0YS5zY2hvb2wubmFtZTtcXFxcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHVwU2Nob29sID0gJyc7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHVwSWRlbnRpZmljYXRpb24gPSB1cERhdGEub2ZmaWNpYWwudGl0bGU7XFxcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgICAgICB1cElkZW50aWZpY2F0aW9uID0gJyc7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIGFkZEl0ZW1BZnRlcignY3VycmVudFVwJywge1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ3VwOicgKyB1cE5hbWUgKyAnXFxcXFxcXFxubWlkOicgKyB1cE1pZCArICdcXFxcXFxcXG7mgKfliKs6JyArIHVwU2V4ICsgJ1xcXFxcXFxcbueUn+aXpTonICsgKHVwQmlydGhkYXkgPT0gJycgPyAn5pyq5aGr5YaZJyA6IHVwQmlydGhkYXkpICsgJ1xcXFxcXFxcbicgKyAodXBTY2hvb2wgPT0gJycgPyAnJyA6ICflrabmoKE6JyArIHVwU2Nob29sICsgJ1xcXFxcXFxcbicpICsgKHVwU2lnbiA9PSAnJyA/ICdcXFxcXFxcXG4nIDogdXBTaWduICsgJ1xcXFxcXFxcbicpICsgKHVwSWRlbnRpZmljYXRpb24gPT0gJycgPyAnJyA6ICforqTor4E6JyksXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xvbmdfdGV4dCcsXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogJ3VwSW5mbydcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgIGFkZEl0ZW1BZnRlcignY3VycmVudFVwJywge1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+WlveWDj+WHuuS6hueCueaEj+Wklu+8n+S7gOS5iOmDveacqOacieWRon4nLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsb25nX3RleHQnLFxcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ICd1cEluZm8nXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHB1dE15VmFyKCd1cEluZm8nLCAn5byAJyk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+S/oeaBr+aKmOWPoDonICsgZ2V0TXlWYXIoJ3VwSW5mbycsICflvIAnKVxcXFxuICAgIH0sIHVwTWlkKSxcXFxcbiAgICBpbWc6IHVwRmFjZSArIFxcXFxcXFwiQFJlZmVyZXI9XFxcXFxcXCIsXFxcXG4gICAgY29sX3R5cGU6IFxcXFxcXFwiYXZhdGFyXFxcXFxcXCIsXFxcXG4gICAgZXh0cmE6IHtcXFxcbiAgICAgICAgaWQ6ICdjdXJyZW50VXAnXFxcXG4gICAgfVxcXFxufSwge1xcXFxuICAgIGNvbF90eXBlOiAnbGluZSdcXFxcbn0pO1xcXFxuLy8g5YWs5ZGKXFxcXG5ub3RpY2VUZXh0ID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc3BhY2Uvbm90aWNlP21pZD0nICsgdXBNaWQgKyAnJmpzb25wPWpzb25wJywge1xcXFxuICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFBDX1VBLFxcXFxuICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcXFxcXCIsXFxcXG4gICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IGNvb2tpZT1KU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXFxcbiAgICB9XFxcXG59KSkuZGF0YTtcXFxcbmlmIChub3RpY2VUZXh0ICE9ICcnKSB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6ICflhazlkYonLFxcXFxuICAgICAgICB1cmw6ICQoKS5ydWxlKChub3RpY2VUZXh0KSA9PiB7XFxcXG4gICAgICAgICAgICB2YXIgZCA9IFtdO1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+WFrOWRiu+8micgKyAnXFxcXFxcXFxuXFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0JyArIG5vdGljZVRleHQsXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsb25nX3RleHQnXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIHNldEhvbWVSZXN1bHQoZCk7XFxcXG4gICAgICAgIH0sIG5vdGljZVRleHQpLFxcXFxuICAgICAgICBkZXNjOiBub3RpY2VUZXh0ID09ICcnID8gJ+aaguaXoOWFrOWRiicgOiBub3RpY2VUZXh0LFxcXFxuICAgICAgICBjb2xfdHlwZTogJ3RleHRfMScsXFxcXG4gICAgfSk7XFxcXG59XFxcXG5kLnB1c2goe1xcXFxuICAgIGNvbF90eXBlOiAnbGluZSdcXFxcbn0sIHtcXFxcbiAgICB0aXRsZTogcmVsYXRpb24sXFxcXG4gICAgaW1nOiByZWxhdGlvbiA9PSAn5pyq5YWz5rOoJyA/IGltZ0xpbmsu5re75Yqg5YWz5rOoIDogaW1nTGluay7lt7LlhbPms6gsXFxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKHVwTWlkKSA9PiB7XFxcXG4gICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmNoYW5nZVVzZXJSZWxhdGlvbih1cE1pZCwgMTEpXFxcXG4gICAgfSwgdXBNaWQpLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcImljb25fc21hbGxfNFxcXFxcXFwiLFxcXFxuICAgIGV4dHJhOiB7XFxcXG4gICAgICAgIGlkOiAncmVsYXRpb24nXFxcXG4gICAgfVxcXFxufSwge1xcXFxuICAgIHRpdGxlOiAn5Yqo5oCBJyxcXFxcbiAgICBpbWc6IGltZ0xpbmsu5Yqo5oCBLFxcXFxuICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKCh1cE1pZCkgPT4ge1xcXFxuICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eT9wPWZ5cGFnZScpLnJ1bGUoKHVwTWlkKSA9PiB7XFxcXG4gICAgICAgICAgICBsZXQgZCA9IFtdO1xcXFxuICAgICAgICAgICAgbGF0ZW5ld3MgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmdldER5bmFtaWNEYXRhKCd1cFNwYWNlJywgdXBNaWQpO1xcXFxuICAgICAgICAgICAgZXZhbCgkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLnNob3dEeW5hbWljRGF0YSgpKTtcXFxcbiAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXFxcbiAgICAgICAgfSwgdXBNaWQpXFxcXG4gICAgfSwgdXBNaWQpLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcImljb25fc21hbGxfNFxcXFxcXFwiLFxcXFxufSwge1xcXFxuICAgIHRpdGxlOiAn5LiT5qCPJyxcXFxcbiAgICBpbWc6IGltZ0xpbmsu5LiT5qCPLFxcXFxuICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvYWN0aWNsZUxpc3Q/cD1meXBhZ2VcXFxcXFxcIixcXFxcbiAgICBjb2xfdHlwZTogXFxcXFxcXCJpY29uX3NtYWxsXzRcXFxcXFxcIixcXFxcbiAgICBleHRyYToge1xcXFxuICAgICAgICBtaWQ6IHVwTWlkXFxcXG4gICAgfVxcXFxufSlcXFxcbi8vIOeUqOaIt+inhumikS3lkIjpm4bjgIHns7vliJdcXFxcbnVwVmlkZW8gPSBKU09OLnBhcnNlKGZldGNoKCdodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9wb2x5bWVyL3NwYWNlL3NlYXNvbnNfc2VyaWVzX2xpc3Q/bWlkPScgKyB1cE1pZCArICcmcGFnZV9udW09MSZwYWdlX3NpemU9MTAnLCB7XFxcXG4gICAgaGVhZGVyczoge1xcXFxuICAgICAgICBcXFxcXFxcIlVzZXItQWdlbnRcXFxcXFxcIjogUENfVUEsXFxcXG4gICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFxcXFxcIlxcXFxuICAgIH1cXFxcbn0pKS5kYXRhLml0ZW1zX2xpc3RzO1xcXFxuLy8g6KeG6aKR5ZCI6ZuG44CB57O75YiXXFxcXG50cnkge1xcXFxuICAgIHVwVmlkZW8uc2Vhc29uc19saXN0LmZvckVhY2gobGlzdCA9PiB7XFxcXG4gICAgICAgIHNlYXNvbl9pZCA9IGxpc3QubWV0YS5zZWFzb25faWQ7XFxcXG4gICAgICAgIC8vIOagh+mimC3ot7Povazmm7TlpJpcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAnPGZvbnQgY29sb3I9XFxcXFxcXCIjMzNjY2NjXFxcXFxcXCI+JyArIGxpc3QubWV0YS5uYW1lLnN1YnN0cmluZygwLCAzMCkgKyAnPC9mb250PlxcXFxcXFxcdFxcXFxcXFxcdDxmb250IGNvbG9yPVxcXFxcXFwicmVkXFxcXFxcXCI+JyArIGxpc3QubWV0YS50b3RhbCArICc8L2ZvbnQ+XFxcXHTinq4nLFxcXFxuICAgICAgICAgICAgaW1nOiBpbWdMaW5rLuWQiOmbhuaWh+S7tuWkuSxcXFxcbiAgICAgICAgICAgIC8vIGltZzogbGlzdC5tZXRhLmNvdmVyKydAUmVmZXJlcj0nLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKHVwTWlkLCBzZWFzb25faWQpID0+IHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJCgnaGlrZXI6Ly9lbXB0eT9meXBhZ2UnKS5ydWxlKCh1cE1pZCwgc2Vhc29uX2lkKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciBkID0gW107XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCB1ID0gJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3BvbHltZXIvc3BhY2Uvc2Vhc29uc19hcmNoaXZlc19saXN0P21pZD0nICsgdXBNaWQgKyAnJnNlYXNvbl9pZD0nICsgc2Vhc29uX2lkICsgJyZzb3J0X3JldmVyc2U9ZmFsc2UmcGFnZV9udW09JyArIE1ZX1BBR0UgKyAnJnBhZ2Vfc2l6ZT0zMCc7XFxcXG4gICAgICAgICAgICAgICAgICAgIFZpZGVvID0gSlNPTi5wYXJzZShmZXRjaCh1LCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFBDX1VBLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9KSkuZGF0YTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbWF4UGFnZSA9IE1hdGguY2VpbChWaWRlby5wYWdlLnRvdGFsIC8gVmlkZW8ucGFnZS5wYWdlX3NpemUpO1xcXFxuICAgICAgICAgICAgICAgICAgICBpZiAoTVlfUEFHRSA8PSBtYXhQYWdlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5b2T5YmNOuesrCcgKyBWaWRlby5wYWdlLnBhZ2VfbnVtICsgJ+mhtVxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdOWFseaciScgKyBtYXhQYWdlICsgJ+mhtSwnICsgVmlkZW8ucGFnZS50b3RhbCArICfmnaHmlbDmja4nLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBWaWRlby5hcmNoaXZlcy5mb3JFYWNoKGxpc3QgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LnRpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QucGljICsgJ0BSZWZlcmVyPScsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmkq3mlL7ph4/vvJonICsgbGlzdC5zdGF0LnZpZXcsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZDogbGlzdC5haWRcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKTtcXFxcbiAgICAgICAgICAgICAgICB9LCB1cE1pZCwgc2Vhc29uX2lkKVxcXFxuICAgICAgICAgICAgfSwgdXBNaWQsIHNlYXNvbl9pZClcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGlmIChsaXN0LmFyY2hpdmVzID09PSB1bmRlZmluZWQpIHtcXFxcbiAgICAgICAgICAgIGxvZyhsaXN0Lm1ldGEubmFtZSArICfkuLrnqbonKTtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGlmIChsaXN0LmFyY2hpdmVzLmxlbmd0aCA8IDIpIHtcXFxcbiAgICAgICAgICAgICAgICBsaXN0LmFyY2hpdmVzLmZvckVhY2gobGlzdCA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC50aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5waWMgKyAnQFJlZmVyZXI9JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmkq3mlL7ph4/vvJonICsgbGlzdC5zdGF0LnZpZXcsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS92aWRlb1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYWlkXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChsaXN0LmFyY2hpdmVzLmxlbmd0aCA9PSAwKSB7XFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5aW95a625LyZ77yM6L+Z5a625LyZ5rKh5pyJ5ZCI6ZuG6KeG6aKR77yBXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi6KaB5LiN5Y6754K55Ye75YWo6YOo6KeG6aKR55yL55yLflxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI7IGkrKykge1xcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QuYXJjaGl2ZXNbaV0udGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QuYXJjaGl2ZXNbaV0ucGljICsgJ0BSZWZlcmVyPScsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAn5pKt5pS+6YeP77yaJyArIGxpc3QuYXJjaGl2ZXNbaV0uc3RhdC52aWV3LFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWlkOiBsaXN0LmFyY2hpdmVzW2ldLmFpZFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcbn0gY2F0Y2ggKGUpIHtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogJ+WQiOmbhuS4uuepuicsXFxcXG4gICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcXFxuICAgICAgICBkZXNjOiAnU29ycnks5rKh5pyJ5pWw5o2u5ZGificsXFxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxcXG4gICAgfSk7XFxcXG59XFxcXG50cnkge1xcXFxuICAgIHVwVmlkZW8uc2VyaWVzX2xpc3QuZm9yRWFjaChsaXN0ID0+IHtcXFxcbiAgICAgICAgc2VyaWVzX2lkID0gbGlzdC5tZXRhLnNlcmllc19pZDtcXFxcbiAgICAgICAgLy8g5qCH6aKYLei3s+i9rOabtOWkmlxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6ICc8Zm9udCBjb2xvcj1cXFxcXFxcIiMzM2NjY2NcXFxcXFxcIj4nICsgbGlzdC5tZXRhLm5hbWUuc3Vic3RyaW5nKDAsIDMwKSArICc8L2ZvbnQ+XFxcXFxcXFx0XFxcXFxcXFx0PGZvbnQgY29sb3I9XFxcXFxcXCJyZWRcXFxcXFxcIj4nICsgbGlzdC5tZXRhLnRvdGFsICsgJzwvZm9udD5cXFxcdOKericsXFxcXG4gICAgICAgICAgICBpbWc6IGltZ0xpbmsu5ZCI6ZuG5paH5Lu25aS5LFxcXFxuICAgICAgICAgICAgLy8gaW1nOiBsaXN0Lm1ldGEuY292ZXIrJ0BSZWZlcmVyPScsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcicsXFxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgodXBNaWQsIHNlcmllc19pZCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5P2Z5cGFnZScpLnJ1bGUoKHVwTWlkLCBzZXJpZXNfaWQpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdmFyIGQgPSBbXTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHUgPSAnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc2VyaWVzL2FyY2hpdmVzP21pZD0nICsgdXBNaWQgKyAnJnNlcmllc19pZD0nICsgc2VyaWVzX2lkICsgJyZvbmx5X25vcm1hbD10cnVlJnNvcnQ9ZGVzYyZwbj0nICsgTVlfUEFHRSArICcmcHM9MzAnO1xcXFxuICAgICAgICAgICAgICAgICAgICBWaWRlbyA9IEpTT04ucGFyc2UoZmV0Y2godSwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiVXNlci1BZ2VudFxcXFxcXFwiOiBQQ19VQSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSkpLmRhdGE7XFxcXG4gICAgICAgICAgICAgICAgICAgIG1heFBhZ2UgPSBNYXRoLmNlaWwoVmlkZW8ucGFnZS50b3RhbCAvIFZpZGVvLnBhZ2Uuc2l6ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmIChNWV9QQUdFIDw9IG1heFBhZ2UpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICflvZPliY0656ysJyArIFZpZGVvLnBhZ2UubnVtICsgJ+mhtVxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdOWFseaciScgKyBtYXhQYWdlICsgJ+mhtSwnICsgVmlkZW8ucGFnZS50b3RhbCArICfmnaHmlbDmja4nLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBWaWRlby5hcmNoaXZlcy5mb3JFYWNoKGxpc3QgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0LnRpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QucGljICsgJ0BSZWZlcmVyPScsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmkq3mlL7ph4/vvJonICsgbGlzdC5zdGF0LnZpZXcsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZDogbGlzdC5haWRcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKTtcXFxcbiAgICAgICAgICAgICAgICB9LCB1cE1pZCwgc2VyaWVzX2lkKVxcXFxuICAgICAgICAgICAgfSwgdXBNaWQsIHNlcmllc19pZClcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGlmIChsaXN0LmFyY2hpdmVzID09PSB1bmRlZmluZWQpIHtcXFxcbiAgICAgICAgICAgIGxvZyhsaXN0Lm1ldGEubmFtZSArICfkuLrnqbonKTtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIGlmIChsaXN0LmFyY2hpdmVzLmxlbmd0aCA8IDIpIHtcXFxcbiAgICAgICAgICAgICAgICBsaXN0LmFyY2hpdmVzLmZvckVhY2gobGlzdCA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC50aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogbGlzdC5waWMgKyAnQFJlZmVyZXI9JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmkq3mlL7ph4/vvJonICsgbGlzdC5zdGF0LnZpZXcsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS92aWRlb1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYWlkXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChsaXN0LmFyY2hpdmVzLmxlbmd0aCA9PSAwKSB7XFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5aW95a625LyZ77yM6L+Z5a625LyZ5rKh5pyJ5ZCI6ZuG6KeG6aKR77yBXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwi6KaB5LiN5Y6754K55Ye75YWo6YOo6KeG6aKR55yL55yLflxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IDI7IGkrKykge1xcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QuYXJjaGl2ZXNbaV0udGl0bGUsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QuYXJjaGl2ZXNbaV0ucGljICsgJ0BSZWZlcmVyPScsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiAn5pKt5pS+6YeP77yaJyArIGxpc3QuYXJjaGl2ZXNbaV0uc3RhdC52aWV3LFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWlkOiBsaXN0LmFyY2hpdmVzW2ldLmFpZFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcbn0gY2F0Y2ggKGUpIHtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogJ+ezu+WIl+S4uuepuicsXFxcXG4gICAgICAgIHVybDogJ2hpa2VyOi8vZW1wdHknLFxcXFxuICAgICAgICBkZXNjOiAnU29ycnks5rKh5pyJ5pWw5o2u5ZGificsXFxcXG4gICAgICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxcXG4gICAgfSk7XFxcXG59XFxcXG4vLyB1cOaKleeov1xcXFxuZC5wdXNoKHtcXFxcbiAgICB0aXRsZTogJ1RB55qE6KeG6aKRLOeCueWHu+WxleW8gOWFqOmDqCcsXFxcXG4gICAgY29sX3R5cGU6ICd0ZXh0X2NlbnRlcl8xJyxcXFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgodXBNaWQpID0+IHtcXFxcbiAgICAgICAgcmV0dXJuICQoKS5ydWxlKCh1cE1pZCkgPT4ge1xcXFxuICAgICAgICAgICAgdmFyIGQgPSBbXTtcXFxcbiAgICAgICAgICAgIHRyeSB7XFxcXG4gICAgICAgICAgICAgICAgcXVlcnlKc29uID0ge1xcXFxuICAgICAgICAgICAgICAgICAgICBtaWQ6IHVwTWlkLFxcXFxuICAgICAgICAgICAgICAgICAgICBwczogMzAsXFxcXG4gICAgICAgICAgICAgICAgICAgIHRpZDogZ2V0TXlWYXIoJ190aWQnLCAnMCcpLFxcXFxuICAgICAgICAgICAgICAgICAgICBzcGVjaWFsX3R5cGU6ICcnLFxcXFxuICAgICAgICAgICAgICAgICAgICBwbjogZ2V0TXlWYXIoJ19wYWdlJywgJzEnKSxcXFxcbiAgICAgICAgICAgICAgICAgICAga2V5d29yZDogJycsXFxcXG4gICAgICAgICAgICAgICAgICAgIG9yZGVyOiAncHViZGF0ZScsXFxcXG4gICAgICAgICAgICAgICAgICAgIHBsYXRmb3JtOiAnd2ViJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgLy8gd2ViX2xvY2F0aW9uOiAxNTUwMTAxLFxcXFxuICAgICAgICAgICAgICAgICAgICBvcmRlcl9hdm9pZGVkOiB0cnVlXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIHBhcm1zID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5nZXRXYmlFbmMocXVlcnlKc29uKTtcXFxcbiAgICAgICAgICAgICAgICBkYXRhTGluayA9ICdodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9zcGFjZS93YmkvYXJjL3NlYXJjaD8nICsgcGFybXM7XFxcXG4gICAgICAgICAgICAgICAgdXBWaWRlb0RhdGEgPSBKU09OLnBhcnNlKGZldGNoKGRhdGFMaW5rLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiVXNlci1BZ2VudFxcXFxcXFwiOiBQQ19VQSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IGNvb2tpZT1KU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0pKS5kYXRhO1xcXFxuICAgICAgICAgICAgICAgIHRsaXN0ID0gdXBWaWRlb0RhdGEubGlzdC50bGlzdDtcXFxcbiAgICAgICAgICAgICAgICB2bGlzdCA9IHVwVmlkZW9EYXRhLmxpc3Qudmxpc3Q7XFxcXG4gICAgICAgICAgICAgICAgLy8g5YiG57G75ZKM6aG156CBXFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGdldE15VmFyKCdfdGlkJywgJzAnKSA9PSAwID8gJ+KAmOKAmOKAmeKAmTxmb250IGNvbG9yPVxcXFxcXFwicmVkXFxcXFxcXCI+5YWo6YOoPC9mb250PicgOiAn5YWo6YOoJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ190aWQnLCAoMCArIFxcXFxcXFwiXFxcXFxcXCIpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdfcGFnZScsICgxICsgXFxcXFxcXCJcXFxcXFxcIikpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgZm9yIChpdGVtIGluIHRsaXN0KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogKHRsaXN0W2l0ZW1dLnRpZCArIFxcXFxcXFwiXFxcXFxcXCIpID09IGdldE15VmFyKCdfdGlkJywgJzAnKSA/ICfigJjigJjigJnigJk8Zm9udCBjb2xvcj1cXFxcXFxcInJlZFxcXFxcXFwiPicgKyAodGxpc3RbaXRlbV0ubmFtZSArIGAoJHt0bGlzdFtpdGVtXS5jb3VudH0pYCkgKyAnPC9mb250PicgOiAodGxpc3RbaXRlbV0ubmFtZSArIGAoJHt0bGlzdFtpdGVtXS5jb3VudH0pYCksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgodGlkKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ190aWQnLCAodGlkICsgXFxcXFxcXCJcXFxcXFxcIikpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdfcGFnZScsICgxICsgXFxcXFxcXCJcXFxcXFxcIikpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHRsaXN0W2l0ZW1dLnRpZCksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJyxcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICBtYXhQYWdlID0gTWF0aC5jZWlsKHVwVmlkZW9EYXRhLnBhZ2UuY291bnQgLyB1cFZpZGVvRGF0YS5wYWdlLnBzKTtcXFxcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBwYWdlID0gMTsgcGFnZSA8PSBtYXhQYWdlOyBwYWdlKyspIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAocGFnZSArIFxcXFxcXFwiXFxcXFxcXCIpID09IGdldE15VmFyKCdfcGFnZScsICcxJykgPyAn4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9XFxcXFxcXCJyZWRcXFxcXFxcIj4nICsgKHBhZ2UgKyBcXFxcXFxcIlxcXFxcXFwiKSArICc8L2ZvbnQ+JyA6IChwYWdlICsgXFxcXFxcXCJcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgocGFnZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdfcGFnZScsIChwYWdlICsgXFxcXFxcXCJcXFxcXFxcIikpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIHBhZ2UpLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIC8vIOW5s+mTuuinhumikVxcXFxuICAgICAgICAgICAgICAgIHZsaXN0LmZvckVhY2goaXRlbSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHB1YnRpbWUgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLnRpbWVDb252ZXJ0KGl0ZW0uY3JlYXRlZCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS50aXRsZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZzogaXRlbS5waWMgKyAnQFJlZmVyZXI9JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6ICfmkq3mlL7ph4/vvJonICsgaXRlbS5wbGF5ICsgJ1xcXFxcXFxcbicgKyBwdWJ0aW1lLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvdmlkZW9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWlkOiBpdGVtLmFpZFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+mhtemdoui1sOS4ouS6hi4uLicsXFxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogJ2h0dHBzOi8vaTAuaGRzbGIuY29tL2Jmcy9nZW5lcmFsL2Y3YjY2NzAxMWE0NjYxNTczMmM3MDFmNGJiMWQwN2Y3OTNmOGQxZGYucG5nQFJlZmVyZXI9JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6ICflpKrpopHnuYHkuobvvIHnqI3lkI7lho3or5V+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwicGljXzFcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgc2V0SG9tZVJlc3VsdChkKTtcXFxcbiAgICAgICAgfSwgdXBNaWQpXFxcXG4gICAgfSwgdXBNaWQpXFxcXG59KTtcXFxcbnNldFJlc3VsdChkKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJ1cOaQnOe0olxcXCIsXFxcInBhdGhcXFwiOlxcXCJ1cFNlYXJjaFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnNlYXdvcmQgPSBNWV9QQVJBTVMuc2Vhd29yZDtcXFxcbnZhciBkID0gW107XFxcXG5yZXN1bHREYXRhPSQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuZ2V0U2VhcmNoUmVzKCdiaWxpX3VzZXInLHNlYXdvcmQsTVlfUEFHRSwzNik7XFxcXG5pZiAoTVlfUEFHRSA8PSByZXN1bHREYXRhLm51bVBhZ2VzKSB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6ICflvZPliY0656ysJyArIHJlc3VsdERhdGEucGFnZSArICfpobVcXFxcXFxcXHRcXFxcXFxcXHRcXFxcXFxcXHTlhbHmnIknICsgcmVzdWx0RGF0YS5udW1QYWdlcyArICfpobUsJyArIHJlc3VsdERhdGEubnVtUmVzdWx0cyArICfmnaHmlbDmja4nLFxcXFxuICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgfSk7XFxcXG4gICAgcmVzdWx0RGF0YS5yZXN1bHQuZm9yRWFjaChsaXN0ID0+IHtcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIjxiaWc+PGZvbnQgY29sb3I9J2JsdWUnPlxcXFxcXFwiICsgbGlzdC51bmFtZSArIFxcXFxcXFwiPC9mb250PjwvYmlnPjxzbWFsbD5cXFxcXFxcIiArIGxpc3QudXNpZ24gKyBcXFxcXFxcIjwvc21hbGw+XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBpbWc6ICdodHRwczovLycgKyBsaXN0LnVwaWMgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS91cEhvbWVcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgbWlkOiBsaXN0Lm1pZCxcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC51bmFtZSxcXFxcbiAgICAgICAgICAgICAgICBmYWNlOiAnaHR0cHM6Ly8nICsgbGlzdC51cGljXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH0pO1xcXFxufVxcXFxuc2V0U2VhcmNoUmVzdWx0KGQpO1xcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwidmlkZW/mkJzntKJcXFwiLFxcXCJwYXRoXFxcIjpcXFwidmlkZW9TZWFyY2hcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5zZWF3b3JkID0gTVlfUEFSQU1TLnNlYXdvcmQ7XFxcXG52YXIgZCA9IFtdO1xcXFxudmFyIHJlc3VsdERhdGE9JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5nZXRTZWFyY2hSZXMoJ3ZpZGVvJyxzZWF3b3JkLE1ZX1BBR0UsNDIpO1xcXFxudmFyIHt0aW1lQ29udmVydH09JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKTtcXFxcbmlmIChNWV9QQUdFIDw9IHJlc3VsdERhdGEubnVtUGFnZXMpIHtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICB0aXRsZTogJ+W9k+WJjTrnrKwnICsgcmVzdWx0RGF0YS5wYWdlICsgJ+mhtVxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdOWFseaciScgKyByZXN1bHREYXRhLm51bVBhZ2VzICsgJ+mhtSwnICsgcmVzdWx0RGF0YS5udW1SZXN1bHRzICsgJ+adoeaVsOaNricsXFxcXG4gICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIixcXFxcbiAgICB9KTtcXFxcbiAgICByZXN1bHREYXRhLnJlc3VsdC5mb3JFYWNoKGxpc3QgPT4ge1xcXFxuICAgICAgICAvLyB0aXRsZT1saXN0LnRpdGxlLnJlcGxhY2UoJzxlbSBjbGFzcz1cXFxcXFxcXFxcXFxcXFwia2V5d29yZFxcXFxcXFxcXFxcXFxcXCI+JywnPGZvbnQgY29sb3I9XFxcXFxcXCJyZWRcXFxcXFxcIj4nKS5yZXBsYWNlKCc8L2VtPicsJzwvZm9udD4nKVxcXFxuICAgICAgICB0aXRsZSA9IGxpc3QudGl0bGUucmVwbGFjZSgvPGVtIGNsYXNzPVxcXFxcXFxcXFxcXFxcXCJrZXl3b3JkXFxcXFxcXFxcXFxcXFxcIj4vZywgJycpLnJlcGxhY2UoLzxcXFxcXFxcXC9lbT4vZywgJycpXFxcXG4gICAgICAgIHBidGltZT10aW1lQ29udmVydChsaXN0LnB1YmRhdGUpO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IHRpdGxlLFxcXFxuICAgICAgICAgICAgaW1nOiAnaHR0cHM6Ly8nICsgbGlzdC5waWMgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZGVzYzogJ+KAnOKAnOKAneKAnTxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9XFxcXFxcXCJncmV5XFxcXFxcXCI+5pKt5pS+6YePOicrbGlzdC5wbGF5KydcXFxcXFxcXHRcXFxcXFxcXHRcXFxcXFxcXHTlvLnluZU6JytsaXN0LmRhbm1ha3UrJ1xcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdOWWnOasojonK2xpc3QubGlrZSsnXFxcXFxcXFxu5Y+R5biD5pe26Ze0OicrcGJ0aW1lKyc8L2ZvbnQ+PC9zbWFsbD48L3NtYWxsPicsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS92aWRlb1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAvLyDop4bpopHmoIfor4ZcXFxcbiAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYWlkLFxcXFxuICAgICAgICAgICAgICAgIGJ2aWQ6bGlzdC5idmlkLFxcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiB0aXRsZVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9KTtcXFxcbn1cXFxcbnNldFNlYXJjaFJlc3VsdChkKTtcXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8xX2xlZnRfcGljXFxcIixcXFwibmFtZVxcXCI6XFxcIuaOqOmAgVxcXCIsXFxcInBhdGhcXFwiOlxcXCJmZWVkXFxcIixcXFwicnVsZVxcXCI6XFxcIiQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuZ2V0RmVlZCgpLmZvckVhY2goaXRlbSA9PiB7XFxcXG5cXFxcbsKgIMKgIGQucHVzaCh7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIHRpdGxlOiBpdGVtLnRpdGxlLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCBpbWc6IGl0ZW0ucGljKydAUmVmZXJlcj0nLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCBkZXNjOiAndXA6JyArIGl0ZW0ub3duZXIubmFtZSArICdcXFxcXFxcXG4nICsgaXRlbS5zdGF0LnZpZXcgKyBcXFxcXFxcIuaSreaUvuKAu1xcXFxcXFwiICsgaXRlbS5zdGF0Lmxpa2UgKyBcXFxcXFxcIueCuei1nlxcXFxcXFwiLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3ZpZGVvXFxcXFxcXCIsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIGV4dHJhOiB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIC8vIGlk5YW25a6e5pivYWlkXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIGFpZDogaXRlbS5pZCxcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgY2lkOiBpdGVtLmNpZCxcXFxcblxcXFxuwqAgwqAgwqAgwqAgfVxcXFxuXFxcXG7CoCDCoCB9KVxcXFxuXFxcXG59KVxcXFxuXFxcXG5cXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJ0ZXh0XzFcXFwiLFxcXCJuYW1lXFxcIjpcXFwiQVBJXFxcIixcXFwicGF0aFxcXCI6XFxcImFwaVxcXCIsXFxcInJ1bGVcXFwiOlxcXCIvLyBwYXJ0MTrogZrlkIjlh73mlbAtLS0tLS0tLS0tLS0tLS0tXFxcXG4vLyDnmbvlvZXpqozor4FcXFxcbiQuZXhwb3J0cy5pc0xvZ2dlZEluID0gZnVuY3Rpb24gKCkge1xcXFxuICAgIGlmIChmaWxlRXhpc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKSB7XFxcXG4gICAgICAgIGJpbGlEYXRhID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSk7XFxcXG4gICAgICAgIGlmIChiaWxpRGF0YS51c2VyTGlzdC5sZW5ndGggPT0gMCkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcInVzZXJOYW1lXFxcXFxcXCI6ICfmnKrnmbvlvZUnLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwidXNlck1pZFxcXFxcXFwiOiAnJyxcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcInVzZXJGYWNlXFxcXFxcXCI6ICcnLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwidHlwZVxcXFxcXFwiOiBmYWxzZVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBjdXJyZW50VXNlciA9IGJpbGlEYXRhLnVzZXJMaXN0WzBdO1xcXFxuICAgICAgICB2YXIgY29va2llID0gY3VycmVudFVzZXIuY29va2llO1xcXFxuICAgICAgICBsZXQgdXNlcmluZm8gPSBKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9uYXZcXFxcXFxcIiwge1xcXFxuICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IGNvb2tpZVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KSkuZGF0YTtcXFxcbiAgICAgICAgaWYgKHVzZXJpbmZvLmlzTG9naW4gPT09IGZhbHNlKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwidXNlck5hbWVcXFxcXFxcIjogJ+acqueZu+W9lScsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJ1c2VyTWlkXFxcXFxcXCI6ICcnLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwidXNlckZhY2VcXFxcXFxcIjogJycsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJ0eXBlXFxcXFxcXCI6IGZhbHNlXFxcXG4gICAgICAgICAgICB9KVxcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgY3VycmVudFVzZXIudXNlck5hbWUgPSB1c2VyaW5mby51bmFtZTtcXFxcbiAgICAgICAgICAgIGN1cnJlbnRVc2VyLnVzZXJNaWQgPSB1c2VyaW5mby5taWQ7XFxcXG4gICAgICAgICAgICAvLyAx77ya5Lya5ZGY5byA6YCa77ybMO+8muacquW8gOmAmlxcXFxuICAgICAgICAgICAgY3VycmVudFVzZXIudmlwU3RhdHVzID0gdXNlcmluZm8udmlwU3RhdHVzO1xcXFxuICAgICAgICAgICAgY3VycmVudFVzZXIuZmFjZSA9IHVzZXJpbmZvLmZhY2UgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ2hpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHQnLCBKU09OLnN0cmluZ2lmeShiaWxpRGF0YSkpO1xcXFxuICAgICAgICAgICAgLy8gcmV0dXJuIHRydWU7XFxcXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwidXNlck5hbWVcXFxcXFxcIjogY3VycmVudFVzZXIudXNlck5hbWUsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJ1c2VyTWlkXFxcXFxcXCI6IGN1cnJlbnRVc2VyLnVzZXJNaWQsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJ1c2VyRmFjZVxcXFxcXFwiOiBjdXJyZW50VXNlci5mYWNlLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwidHlwZVxcXFxcXFwiOiB0cnVlXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICBcXFxcXFxcInVzZXJOYW1lXFxcXFxcXCI6ICfmnKrnmbvlvZUnLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJ1c2VyTWlkXFxcXFxcXCI6ICcnLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJ1c2VyRmFjZVxcXFxcXFwiOiAnJyxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwidHlwZVxcXFxcXFwiOiBmYWxzZVxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG59XFxcXG4vLyDlk5Tlk6nop4bpopHop6PmnpDvvJrojrflj5bmkq3mlL7lnLDlnYAr5o+Q5Lqk5pKt5pS+6K6w5b2VXFxcXG4kLmV4cG9ydHMuYmlsaUxhenkgPSBmdW5jdGlvbiAoaWQsIGNpZCwgcW4pIHtcXFxcbiAgICAvLyDph43nva7ljp/nlJ/lvLnluZXnu5/kuIDlvLnluZXlpKflsI/jgIHkv67mlLnmraXplb9cXFxcbiAgICBmdW5jdGlvbiBvdmVycmlkZVNhdmUoZG0pIHtcXFxcbiAgICAgICAgdmFyIGRhbm11RGF0YSA9IHJlcXVlc3QoZG0pO1xcXFxuICAgICAgICAvLyDlrZfkvZPlpKflsI/jgIHlvLnluZXmraXplb9cXFxcbiAgICAgICAgdmFyIGRhbm11U2V0dGluZyA9IEpTT04ucGFyc2UocmVhZEZpbGUoJ2hpa2VyOi8vZmlsZXMvZG3nm5LlrZAvc2V0dGluZ3MuanNvbicpKTtcXFxcbiAgICAgICAgdmFyIHNpemUgPSBkYW5tdVNldHRpbmcuZm9udFNpemU7XFxcXG4gICAgICAgIHZhciBzdGVwID0gZGFubXVTZXR0aW5nLnN0ZXA7XFxcXG4gICAgICAgIHZhciBkYXRhID0gJyc7XFxcXG4gICAgICAgIHRkID0gcGRmYShkYW5tdURhdGEsICdpJiZkJyk7XFxcXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGQubGVuZ3RoOyBpICs9IHN0ZXApIHtcXFxcbiAgICAgICAgICAgIHRpbWVwb2ludCA9IHBkZmgodGRbaV0sICdkJiZwJykuc3BsaXQoXFxcXFxcXCIsXFxcXFxcXCIpWzBdO1xcXFxuICAgICAgICAgICAgY3QgPSBwZGZoKHRkW2ldLCAnZCYmcCcpLnNwbGl0KFxcXFxcXFwiLFxcXFxcXFwiKVsxXTtcXFxcbiAgICAgICAgICAgIGNvbG9yID0gcGRmaCh0ZFtpXSwgJ2QmJnAnKS5zcGxpdChcXFxcXFxcIixcXFxcXFxcIilbM107XFxcXG4gICAgICAgICAgICAvLyDlvLnluZXlhoXlrrlcXFxcbiAgICAgICAgICAgIGNvbnRlbnQgPSBwZGZoKHRkW2ldLCAnZCYmVGV4dCcpO1xcXFxuICAgICAgICAgICAgaWYgKGNvbnRlbnQuaW5kZXhPZignPCcpICE9IC0xIHx8IGNvbnRlbnQuaW5kZXhPZignPicpICE9IC0xIHx8IGNvbnRlbnQuaW5kZXhPZignJicpICE9IC0xIHx8IGNvbnRlbnQuaW5kZXhPZignXFxcXFxcXFx1MDAwMCcpICE9IC0xIHx8IGNvbnRlbnQuaW5kZXhPZignXFxcXFxcXFxiJykgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHRlbXBkYXRhID0gYDxkIHA9XFxcXFxcXCIke01hdGgucm91bmQodGltZXBvaW50KX0sJHtjdH0sJHtzaXplfSwke2NvbG9yfSwwXFxcXFxcXCI+JHtjb250ZW50fTwvZD5cXFxcXFxcXG5gO1xcXFxuICAgICAgICAgICAgZGF0YSArPSB0ZW1wZGF0YTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBkYW5tdXN0ciA9IGA8P3htbCB2ZXJzaW9uPVxcXFxcXFwiMS4wXFxcXFxcXCIgZW5jb2Rpbmc9XFxcXFxcXCJVVEYtOFxcXFxcXFwiPz5cXFxcXFxcXG48aT5cXFxcXFxcXG4ke2RhdGF9PC9pPmA7XFxcXG4gICAgICAgIHNhdmVGaWxlKGRtLCBkYW5tdXN0cik7XFxcXG4gICAgfVxcXFxuICAgIC8vIOWIpOaWreaYr+WQpumHjeWGmVxcXFxuICAgIHZhciBkbSA9ICdodHRwczovL2NvbW1lbnQuYmlsaWJpbGkuY29tLycgKyBjaWQgKyAnLnhtbCc7XFxcXG4gICAgaWYgKGdldEl0ZW0oJ2lzT3ZlcnJpZGVTYXZlJywgJ2ZhbHNlJykgPT0gJ3RydWUnKSB7XFxcXG4gICAgICAgIGZpbGUgPSAnaHR0cHM6Ly9jb21tZW50LmJpbGliaWxpLmNvbS8nICsgY2lkICsgJy54bWwnO1xcXFxuICAgICAgICBkbSA9ICdoaWtlcjovL2ZpbGVzL2NhY2hlL2Rhbm11LycgKyAnYmlsaV9mcm9tXycgKyBnZXRQYWdlVGl0bGUoKSArICcueG1sJztcXFxcbiAgICAgICAgZG93bmxvYWRGaWxlKGZpbGUsIGRtKTtcXFxcbiAgICAgICAgb3ZlcnJpZGVTYXZlKGRtKTtcXFxcbiAgICB9XFxcXG4gICAgdmFyIGRhdGEgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmdldFVybChpZCwgY2lkLCBxbik7XFxcXG4gICAgLy8g5o+Q5Lqk5Y6G5Y+y6K6w5b2VXFxcXG4gICAgJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5yZXBvcnRQcm9jZXNzKGlkLCBjaWQpO1xcXFxuICAgIC8vIHF1YWxpdHlOdW09ZGFzaC5hdWRpby5sZW5ndGg75LiN6ZyA6KaB5LqG77yM5om+5Yiw5LqG5pu05aW955qE5Yik5pat5pa55rOV77yM6Jm954S25oiR5bm25LiN55+l6YGT6L+Z5Lqb5Y+C5pWw55qE5ZCr5LmJ5piv5LuA5LmIXFxcXG4gICAgdmlkZW9MaXN0ID0gW107XFxcXG4gICAgYXVkaW9MaXN0ID0gW107XFxcXG4gICAgbmFtZUxpc3QgPSBbXTtcXFxcbiAgICBoZWFkZXJzID0gW107XFxcXG4gICAgdHJ5IHtcXFxcbiAgICAgICAgZGF0YS5hdWRpby5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICAgICAgYXVkaW9MaXN0LnB1c2goaXRlbS5iYXNlVXJsKTtcXFxcbiAgICAgICAgICAgIGhlYWRlcnMucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFBDX1VBXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIGRhdGEudmlkZW8uZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgIGlmIChpdGVtLmNvZGVjaWQgPT0gNykge1xcXFxuICAgICAgICAgICAgICAgIHZpZGVvTGlzdC5wdXNoKGl0ZW0uYmFzZVVybCArIFxcXFxcXFwiI2lzVmlkZW89dHJ1ZSNcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0uaWQgPT0gMTI2KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0LnB1c2goJ+adnOavlOinhueVjCcpO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5pZCA9PSAxMjUpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbmFtZUxpc3QucHVzaCgnSERSIOecn+W9qeiJsicpO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5pZCA9PSAxMjApIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbmFtZUxpc3QucHVzaCgnNEvotoXmuIUnKTtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWQgPT0gMTE2KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0LnB1c2goJzEwODBQNjDpq5jluKfnjocnKTtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWQgPT0gMTEyKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0LnB1c2goJzEwODBQK+mrmOeggeeOhycpO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5pZCA9PSA4MCkge1xcXFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKCcxMDgwUOmrmOa4hScpO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5pZCA9PSA3NCkge1xcXFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKCc3MjBQNjDpq5jluKfnjocnKTtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWQgPT0gNjQpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgbmFtZUxpc3QucHVzaCgnNzIwUOmrmOa4hScpO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS5pZCA9PSAzMikge1xcXFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKCc0ODBQ5riF5pmwJyk7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLmlkID09IDE2KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIG5hbWVMaXN0LnB1c2goJzM2MFDmtYHnlYUnKTtcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0uaWQgPT0gNikge1xcXFxuICAgICAgICAgICAgICAgICAgICBuYW1lTGlzdC5wdXNoKCcyNDBQ5p6B6YCfJyk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgLy8g5L+d5oyB6ZW/5bqm5LiA6Ie0XFxcXG4gICAgICAgIHdoaWxlIChhdWRpb0xpc3QubGVuZ3RoIDwgdmlkZW9MaXN0Lmxlbmd0aCkge1xcXFxuICAgICAgICAgICAgLy8g5aSN5Yi2IGF1ZGlvTGlzdCDkuK3mnIDlkI7kuIDkuKrlhYPntKDlubbov73liqDliLDmlbDnu4TmnKvlsL5cXFxcbiAgICAgICAgICAgIGF1ZGlvTGlzdC5wdXNoKGF1ZGlvTGlzdFthdWRpb0xpc3QubGVuZ3RoIC0gMV0pO1xcXFxuICAgICAgICAgICAgLy8g5aSN5Yi2IGhlYWRlcnMg5Lit5pyA5ZCO5LiA5Liq5YWD57Sg5bm26L+95Yqg5Yiw5pWw57uE5pyr5bC+XFxcXG4gICAgICAgICAgICBoZWFkZXJzLnB1c2goaGVhZGVyc1toZWFkZXJzLmxlbmd0aCAtIDFdKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgdXJsczogdmlkZW9MaXN0LFxcXFxuICAgICAgICAgICAgYXVkaW9VcmxzOiBhdWRpb0xpc3QsXFxcXG4gICAgICAgICAgICBoZWFkZXJzOiBoZWFkZXJzLFxcXFxuICAgICAgICAgICAgbmFtZXM6IG5hbWVMaXN0LFxcXFxuICAgICAgICAgICAgZGFubXU6IGRtXFxcXG4gICAgICAgIH0pXFxcXG4gICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICBsb2coXFxcXFxcXCLmraPluLjop6Pph4rlpLHotKXvvIzov5vooYzmnIDlkI7lsJ3or5U6XFxcXFxcXCIpO1xcXFxuICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgdXJsczogW2RhdGEuZHVybFswXS51cmwgKyBcXFxcXFxcIiNpc1ZpZGVvPXRydWUjXFxcXFxcXCJdLFxcXFxuICAgICAgICAgICAgbmFtZXM6IFtkYXRhLnF1YWxpdHkgKyBcXFxcXFxcIlxcXFxcXFwiXSxcXFxcbiAgICAgICAgICAgIGRhbm11OiBkbSxcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IFt7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFBDX1VBXFxcXG4gICAgICAgICAgICB9XVxcXFxuICAgICAgICB9KVxcXFxuICAgIH1cXFxcbn1cXFxcbi8vIOeojeWQjuWcqOeci+KAlOKAlOaAu+aTjeS9nOWIpOaWrVxcXFxuJC5leHBvcnRzLmp1ZGdlVG92aWV3ID0gZnVuY3Rpb24gKGFpZCkge1xcXFxuICAgIHNlbGVjdGlvbiA9IFsn5re75YqgJywgJ+enu+mZpCddO1xcXFxuICAgIHJldHVybiAkKHNlbGVjdGlvbiwgMSkuc2VsZWN0KChhaWQpID0+IHtcXFxcbiAgICAgICAgaWYgKGlucHV0ID09ICfmt7vliqAnKSB7XFxcXG4gICAgICAgICAgICByZXMgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmFkZFRvdmlldyhhaWQpO1xcXFxuICAgICAgICAgICAgaWYgKHJlcyA9PSAwKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/mt7vliqDmiJDlip9cXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gLTEwMSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v6LSm5Y+35pyq55m75b2VXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IC0xMTEpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL2NzcmbmoKHpqozlpLHotKVcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gLTQwMCkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v6K+35rGC6ZSZ6K+vXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IDkwMDAxKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/liJfooajlt7Lmu6FcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gOTAwMDMpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+eov+S7tuW3sue7j+iiq+WIoOmZpFxcXFxcXFwiXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5pyq55+l6ZSZ6K+vXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHJlcyA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuZGVsVG92aWV3KGFpZCk7XFxcXG4gICAgICAgICAgICBpZiAocmVzID09IDApIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+enu+mZpOaIkOWKn1xcXFxcXFwiXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAtMTAxKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/otKblj7fmnKrnmbvlvZVcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gLTExMSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8vY3NyZuagoemqjOWksei0pVxcXFxcXFwiXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAtNDAwKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/or7fmsYLplJnor69cXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+acquefpemUmeivr1xcXFxcXFwiXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LCBhaWQpXFxcXG59XFxcXG4vLyDmk43kvZznlKjmiLflhbPns7tcXFxcbiQuZXhwb3J0cy5jaGFuZ2VVc2VyUmVsYXRpb24gPSBmdW5jdGlvbiAobWlkLCByZV9zcmMpIHtcXFxcbiAgICBzZWxlY3Rpb24gPSBbJ+WFs+azqCcsICflj5blhbMnLCAn5oKE5oKE5YWz5rOoJywgJ+WPlua2iOaChOaChOWFs+azqCcsICfmi4npu5EnLCAn5Y+W5raI5ouJ6buRJywgJ+i4ouWHuueyieS4nScsICfnp7vliqjliIbnu4QnXTtcXFxcbiAgICByZXR1cm4gJChzZWxlY3Rpb24sIDIpLnNlbGVjdCgobWlkLCByZV9zcmMpID0+IHtcXFxcbiAgICAgICAgaWYgKGlucHV0ID09ICfnp7vliqjliIbnu4QnKSB7XFxcXG4gICAgICAgICAgICBiZWZvcmVUYWdpZHMgPSBbXTtcXFxcbiAgICAgICAgICAgIGdyb3VwcyA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuZ2V0VXNlckdyb3VwKG1pZCk7XFxcXG4gICAgICAgICAgICBpZiAoSlNPTi5zdHJpbmdpZnkoZ3JvdXBzKSA9PSAne30nKSB7XFxcXG4gICAgICAgICAgICAgICAgYmVmb3JlVGFnaWRzLnB1c2goMCk7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIGZvciAodmFyIHByb3AgaW4gZ3JvdXBzKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGJlZm9yZVRhZ2lkcy5wdXNoKHBhcnNlSW50KHByb3ApKTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAvLyDojrflj5bmiJHnmoTliIbnu4RcXFxcbiAgICAgICAgICAgIGZvY3VzR3JvdXBMaXN0ID0gW107XFxcXG4gICAgICAgICAgICAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmdldE15QXR0ZW50aW9uR3JvdXBMaXN0KCkuZm9yRWFjaChsaXN0ID0+IHtcXFxcbiAgICAgICAgICAgICAgICBmb2N1c0dyb3VwTGlzdC5wdXNoKGxpc3QubmFtZSArICcgJyArIGxpc3QudGFnaWQpO1xcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJChmb2N1c0dyb3VwTGlzdCwgMSkuc2VsZWN0KChiZWZvcmVUYWdpZHMsIG1pZCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIGFmdGVyVGFnaWRzID0gW107XFxcXG4gICAgICAgICAgICAgICAgYWZ0ZXJUYWdpZHMucHVzaChwYXJzZUludChpbnB1dC5zcGxpdCgnICcpWzFdKSk7XFxcXG4gICAgICAgICAgICAgICAgZmlkcyA9IFtdO1xcXFxuICAgICAgICAgICAgICAgIGZpZHMucHVzaChOdW1iZXIobWlkKSk7XFxcXG4gICAgICAgICAgICAgICAgcmVzID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5tb3ZlVXNlcnMoYmVmb3JlVGFnaWRzLCBhZnRlclRhZ2lkcywgZmlkcyk7XFxcXG4gICAgICAgICAgICAgICAgaWYgKHJlcyA9PSAwKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v56e75Yqo55So5oi35YiwXFxcXFxcXCIgKyBpbnB1dC5zcGxpdCgnICcpWzBdICsgXFxcXFxcXCLliIbnu4TmiJDlip9cXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IC0xMDEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/otKblj7fmnKrnmbvlvZVcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IC0xMTEpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly9jc3Jm5qCh6aqM5aSx6LSlXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAtNDAwKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v6K+35rGC6ZSZ6K+vXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAyMjEwNCkge1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+aXoOadg+mZkFxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gMjIxMDUpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/mnKrlhbPms6hcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5pyq55+l6ZSZ6K+vXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9LCBiZWZvcmVUYWdpZHMsIG1pZCk7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBpZiAoaW5wdXQgPT0gJ+WFs+azqCcpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgYWN0ID0gMTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT0gJ+WPluWFsycpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgYWN0ID0gMjtcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT0gJ+aChOaChOWFs+azqCcpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgYWN0ID0gMztcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT0gJ+WPlua2iOaChOaChOWFs+azqCcpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgYWN0ID0gNDtcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT0gJ+aLiem7kScpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgYWN0ID0gNTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT0gJ+WPlua2iOaLiem7kScpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgYWN0ID0gNjtcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT0gJ+i4ouWHuueyieS4nScpIHtcXFxcbiAgICAgICAgICAgICAgICB2YXIgYWN0ID0gNztcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHJlcyA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuYWRkQXR0ZW50aW9uKG1pZCwgYWN0LCByZV9zcmMpO1xcXFxuICAgICAgICAgICAgcmVsYXRpb24gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLnVzZXJNYXBwaW5nKG1pZCk7XFxcXG4gICAgICAgICAgICB1cGRhdGVJdGVtKCdyZWxhdGlvbicsIHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogcmVsYXRpb24sXFxcXG4gICAgICAgICAgICAgICAgaW1nOiByZWxhdGlvbiA9PSAn5pyq5YWz5rOoJyA/IHN0b3JhZ2UwLmdldE15VmFyKCflm77moIcnKS7mt7vliqDlhbPms6ggOiBzdG9yYWdlMC5nZXRNeVZhcign5Zu+5qCHJyku5bey5YWz5rOoXFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIGlmIChyZXMgPT0gMCkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8vXFxcXFxcXCIgKyBpbnB1dCArIFxcXFxcXFwi5oiQ5YqfXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IC0xMDEpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+i0puWPt+acqueZu+W9lVxcXFxcXFwiXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAtMTExKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly9jc3Jm5qCh6aqM5aSx6LSlXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IC00MDApIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+ivt+axgumUmeivr1xcXFxcXFwiXFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHJlcyA9PSAyMjAwMSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5LiN6IO95a+56Ieq5bex6L+b6KGM5q2k5pON5L2cXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzID09IDIyMDAzKSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/nlKjmiLfkvY3kuo7pu5HlkI3ljZVcXFxcXFxcIlxcXFxuICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+acquefpemUmeivr1xcXFxcXFwiXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LCBtaWQsIHJlX3NyYylcXFxcbn1cXFxcbi8vIOaYoOWwhOeUqOaIt+WFs+ezu1xcXFxuJC5leHBvcnRzLnVzZXJNYXBwaW5nID0gZnVuY3Rpb24gKG1pZCkge1xcXFxuICAgIHJlbGF0aW9uUmVzID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5nZXRSZWxhdGlvbihtaWQpO1xcXFxuICAgIGlmIChyZWxhdGlvblJlcy5yZWxhdGlvbi5hdHRyaWJ1dGUgPT0gMCkge1xcXFxuICAgICAgICByZWxhdGlvbiA9ICfmnKrlhbPms6gnXFxcXG4gICAgfSBlbHNlIGlmIChyZWxhdGlvblJlcy5yZWxhdGlvbi5hdHRyaWJ1dGUgPT0gMSkge1xcXFxuICAgICAgICByZWxhdGlvbiA9ICfmgoTmgoTlhbPms6gnXFxcXG4gICAgfSBlbHNlIGlmIChyZWxhdGlvblJlcy5yZWxhdGlvbi5hdHRyaWJ1dGUgPT0gMikge1xcXFxuICAgICAgICByZWxhdGlvbiA9ICflt7LlhbPms6gnXFxcXG4gICAgfSBlbHNlIGlmIChyZWxhdGlvblJlcy5yZWxhdGlvbi5hdHRyaWJ1dGUgPT0gNikge1xcXFxuICAgICAgICByZWxhdGlvbiA9ICflt7LkupLnsoknXFxcXG4gICAgfSBlbHNlIGlmIChyZWxhdGlvblJlcy5yZWxhdGlvbi5hdHRyaWJ1dGUgPT0gMTI4KSB7XFxcXG4gICAgICAgIHJlbGF0aW9uID0gJ+W3suaLiem7kSdcXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIHJlbGF0aW9uO1xcXFxufVxcXFxuLy8g54K56LWe5pON5L2c6YC76L6RXFxcXG4kLmV4cG9ydHMubGlrZUxvZ2ljID0gZnVuY3Rpb24gKGFpZCkge1xcXFxuICAgIGhhc0xpa2UgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmhhc0xpa2UoYWlkKTtcXFxcbiAgICBpZiAoaGFzTGlrZSA9PSAwKSB7XFxcXG4gICAgICAgIHJlcyA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuc2V0TGlrZShhaWQsIDEpO1xcXFxuICAgICAgICBpZiAocmVzID09IDApIHtcXFxcbiAgICAgICAgICAgIGxpa2UgPSBKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS92aWV3P2FpZD1cXFxcXFxcIiArIGFpZCkpLmRhdGEuc3RhdC5saWtlO1xcXFxuICAgICAgICAgICAgdXBkYXRlSXRlbSgnc2V0TGlrZScsIHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogKGxpa2UgKyAxKSArICcnLFxcXFxuICAgICAgICAgICAgICAgIGltZzogc3RvcmFnZTAuZ2V0TXlWYXIoJ+WbvuaghycpLuW3sueCuei1nlxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+eCuei1nuaIkOWKn1xcXFxcXFwiO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/ngrnotZ7lh7rplJnkuoZ+XFxcXFxcXCI7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICByZXMgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLnNldExpa2UoYWlkLCAyKTtcXFxcbiAgICAgICAgaWYgKHJlcyA9PSAwKSB7XFxcXG4gICAgICAgICAgICBsaWtlID0gSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2Uvdmlldz9haWQ9XFxcXFxcXCIgKyBhaWQpKS5kYXRhLnN0YXQubGlrZTtcXFxcbiAgICAgICAgICAgIHVwZGF0ZUl0ZW0oJ3NldExpa2UnLCB7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IChsaWtlIC0gMSkgKyAnJyxcXFxcbiAgICAgICAgICAgICAgICBpbWc6IHN0b3JhZ2UwLmdldE15VmFyKCflm77moIcnKS7mnKrngrnotZ5cXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/lj5bmtojngrnotZ7miJDlip9cXFxcXFxcIjtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5Y+W5raI54K56LWe5Ye66ZSZ5LqGflxcXFxcXFwiO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxufVxcXFxuLy8g5pS26JeP5pON5L2c6YC76L6RXFxcXG4kLmV4cG9ydHMuZmF2b3VyTG9naWMgPSBmdW5jdGlvbiAoYWlkLCBtaWQpIHtcXFxcbiAgICBoYXNGYXZvdXIgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmhhc0Zhdm91cihhaWQpO1xcXFxuICAgIGlmIChoYXNGYXZvdXIpIHtcXFxcbiAgICAgICAgLy8g56e75Ye65pS26JePXFxcXG4gICAgICAgIGZhdm91cklkTGlzdCA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuZ2V0RmF2b3VySWRMaXN0KGFpZCwgbWlkKTtcXFxcbiAgICAgICAgcmVzID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5zZXRGYXZvdXIoYWlkLCAnJywgZmF2b3VySWRMaXN0KTtcXFxcbiAgICAgICAgaWYgKHJlcyA9PSAwKSB7XFxcXG4gICAgICAgICAgICBsaWtlID0gSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2Uvdmlldz9haWQ9XFxcXFxcXCIgKyBhaWQpKS5kYXRhLnN0YXQuZmF2b3JpdGU7XFxcXG4gICAgICAgICAgICB1cGRhdGVJdGVtKCdzZXRGYXZvdXInLCB7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IChsaWtlIC0gMSkgKyAnJyxcXFxcbiAgICAgICAgICAgICAgICBpbWc6IHN0b3JhZ2UwLmdldE15VmFyKCflm77moIcnKS7mnKrmlLbol49cXFxcbiAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/lj5bmtojmlLbol4/miJDlip9cXFxcXFxcIjtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5Y+W5raI5pS26JeP5Ye66ZSZ5LqGflxcXFxcXFwiO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSBlbHNlIHtcXFxcbiAgICAgICAgLy8g6YCJ5oup5pS26JePXFxcXG4gICAgICAgIHJlcyA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuZ2V0Q29sbGVjdGlvbkdyb3VwTGlzdCgpWzBdLm1lZGlhTGlzdFJlc3BvbnNlLmxpc3Q7XFxcXG4gICAgICAgIEdyb3VwTGlzdCA9IFtdO1xcXFxuICAgICAgICByZXMuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgIEdyb3VwTGlzdC5wdXNoKGl0ZW0udGl0bGUgKyAnICcgKyBpdGVtLmlkKTtcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIHJldHVybiAkKEdyb3VwTGlzdCwgMSkuc2VsZWN0KChhaWQpID0+IHtcXFxcbiAgICAgICAgICAgIHNlbGVjdElkID0gcGFyc2VJbnQoaW5wdXQuc3BsaXQoJyAnKVsxXSlcXFxcbiAgICAgICAgICAgIHJlcyA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuc2V0RmF2b3VyKGFpZCwgc2VsZWN0SWQsICcnKTtcXFxcbiAgICAgICAgICAgIGlmIChyZXMgPT0gMCkge1xcXFxuICAgICAgICAgICAgICAgIGxpa2UgPSBKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS92aWV3P2FpZD1cXFxcXFxcIiArIGFpZCkpLmRhdGEuc3RhdC5mYXZvcml0ZTtcXFxcbiAgICAgICAgICAgICAgICB1cGRhdGVJdGVtKCdzZXRGYXZvdXInLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAobGlrZSArIDEpICsgJycsXFxcXG4gICAgICAgICAgICAgICAgICAgIGltZzogc3RvcmFnZTAuZ2V0TXlWYXIoJ+WbvuaghycpLuW3suaUtuiXj1xcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5pS26JeP5oiQ5YqfXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5pS26JeP5Ye66ZSZ5LqGflxcXFxcXFwiO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LCBhaWQpO1xcXFxuICAgIH1cXFxcbn1cXFxcblxcXFxuLy8gcGFydDI65pWj6KOFQVBJLS0tLS0tLS0tLS0tLS0tLVxcXFxuLy8g6I635Y+W5pCc57Si57uT5p6cXFxcXG4kLmV4cG9ydHMuZ2V0U2VhcmNoUmVzID0gZnVuY3Rpb24gKHNlYXJjaF90eXBlLCBzZWF3b3JkLCBwYWdlLCBwYWdlU2l6ZSkge1xcXFxuICAgIHF1ZXJ5SnNvbiA9IHtcXFxcbiAgICAgICAgX19yZWZyZXNoX186IHRydWUsXFxcXG4gICAgICAgIF9leHRyYTogJycsXFxcXG4gICAgICAgIGNvbnRleHQ6ICcnLFxcXFxuICAgICAgICBwYWdlOiBwYWdlLFxcXFxuICAgICAgICBwYWdlX3NpemU6IHBhZ2VTaXplLFxcXFxuICAgICAgICBvcmRlcjogJycsXFxcXG4gICAgICAgIGR1cmF0aW9uOiAnJyxcXFxcbiAgICAgICAgZnJvbV9zb3VyY2U6ICcnLFxcXFxuICAgICAgICBmcm9tX3NwbWlkOiAzMzMuMzM3LFxcXFxuICAgICAgICBwbGF0Zm9ybTogJ3BjJyxcXFxcbiAgICAgICAgaGlnaGxpZ2h0OiAxLFxcXFxuICAgICAgICBzaW5nbGVfY29sdW1uOiAwLFxcXFxuICAgICAgICBrZXl3b3JkOiBzZWF3b3JkLFxcXFxuICAgICAgICBzZWFyY2hfdHlwZTogc2VhcmNoX3R5cGUsXFxcXG4gICAgICAgIHByZWxvYWQ6IHRydWUsXFxcXG4gICAgICAgIGNvbTJjbzogdHJ1ZVxcXFxuICAgIH1cXFxcbiAgICBwYXJtcyA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuZ2V0V2JpRW5jKHF1ZXJ5SnNvbik7XFxcXG4gICAgZGF0YUxpbmsgPSAnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS93Ymkvc2VhcmNoL3R5cGU/JyArIHBhcm1zO1xcXFxuICAgIGNvb2tpZSA9IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZTtcXFxcbiAgICByZXMgPSBKU09OLnBhcnNlKGZldGNoKGRhdGFMaW5rLCB7XFxcXG4gICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiVXNlci1BZ2VudFxcXFxcXFwiOiBQQ19VQSxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IGNvb2tpZVxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICBtZXRob2Q6IFxcXFxcXFwiR0VUXFxcXFxcXCJcXFxcbiAgICB9KSkuZGF0YTtcXFxcbiAgICByZXR1cm4gcmVzO1xcXFxufVxcXFxuLy8g6KeG6aKR5o6o6I2QXFxcXG4kLmV4cG9ydHMuZ2V0RmVlZCA9IGZ1bmN0aW9uICgpIHtcXFxcbiAgICBsZXQgdSA9IFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9pbmRleC90b3AvZmVlZC9yY21kXFxcXFxcXCI7XFxcXG4gICAgdmFyIHJlcyA9IEpTT04ucGFyc2UoZmV0Y2godSwge1xcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pKTtcXFxcbiAgICByZXR1cm4gcmVzLmRhdGEuaXRlbVxcXFxufVxcXFxuLy8g6I635Y+W5pKt5pS+5Zyw5Z2AXFxcXG4kLmV4cG9ydHMuZ2V0VXJsID0gZnVuY3Rpb24gKGF2aWQsIGNpZCwgcW4pIHtcXFxcbiAgICB2YXIgc2V0dGluZyA9IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpO1xcXFxuICAgIHZhciBDb29raWUgPSBzZXR0aW5nLmJmS2V5ICE9ICcnID8gYmFzZTY0RGVjb2RlKGJhc2U2NERlY29kZShzZXR0aW5nLmJmS2V5KSkgOiBzZXR0aW5nLnVzZXJMaXN0WzBdLmNvb2tpZTtcXFxcbiAgICB0cnkge1xcXFxuICAgICAgICBsZXQgdSA9IHJlcXVlc3QoYnVpbGRVcmwoXFxcXFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3BsYXllci9wbGF5dXJsXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiYXZpZFxcXFxcXFwiOiBhdmlkLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJjaWRcXFxcXFxcIjogY2lkLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJxblxcXFxcXFwiOiBxbixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiZm52ZXJcXFxcXFxcIjogMCxcXFxcbiAgICAgICAgICAgIC8vIFxcXFxcXFwiZm52YWxcXFxcXFxcIjogNDA0OCxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiZm52YWxcXFxcXFxcIjogMTYsXFxcXG4gICAgICAgICAgICBcXFxcXFxcImZvdXJrXFxcXFxcXCI6IDFcXFxcbiAgICAgICAgfSksIHtcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICBDb29raWU6IENvb2tpZVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICByZXMgPSBKU09OLnBhcnNlKHUpO1xcXFxuICAgICAgICBpZiAocmVzLmRhdGEuZGFzaCkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIHJlcy5kYXRhLmRhc2g7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICBsb2coXFxcXFxcXCLmsqHmnInmib7liLBkYXNo5a2X5q61XFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgaWYgKHJlcy5kYXRhLnN1cHBvcnRfZm9ybWF0cykge1xcXFxuICAgICAgICAgICAgICAgIGlmICh1LmluY2x1ZGVzKFxcXFxcXFwi6K+V55yLXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIG1zZyA9IFxcXFxcXFwi5oKo5Yia5omN6KeC55yL55qE6KeG6aKR5piv6K+V55yL6KeG6aKR77yM6KeC55yL5a6M5pW054mH5q616K+35YmN5b6A5a6Y572R6LSt5Lmw77yBXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxvZyhtc2cpO1xcXFxuICAgICAgICAgICAgICAgICAgICBjb25maXJtKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAn5rip6aao5o+Q56S6JywgY29udGVudDogbXNnLCBjb25maXJtOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLCBjYW5jZWw6ICQudG9TdHJpbmcoKCkgPT4ge30pXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuIHJlcy5kYXRhO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgLy8g5LiA5Lq65LmL5LiL56ys5LiA5a2j55qE56ysMe+8jDLpm4bigJTigJTlj6/ku6Xojrflj5blpKfkvJrlkZjliafpm4bnmoTliY0zbWluXFxcXG4gICAgICAgICAgICBsb2coJ+WwneivleabtOaUueivt+axguaOpeWPoy4uLjonICsgZSk7XFxcXG4gICAgICAgICAgICBsZXQgdSA9IHJlcXVlc3QoYnVpbGRVcmwoXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3BsYXllci93ZWIvcGxheXVybFxcXFxcXFwiLCB7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJhdmlkXFxcXFxcXCI6IGF2aWQsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJjaWRcXFxcXFxcIjogY2lkLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwicW5cXFxcXFxcIjogcW4sXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJmbnZlclxcXFxcXFwiOiAwLFxcXFxuICAgICAgICAgICAgICAgIC8vIFxcXFxcXFwiZm52YWxcXFxcXFxcIjogNDA0OCxcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcImZudmFsXFxcXFxcXCI6IDE2LFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiZm91cmtcXFxcXFxcIjogMVxcXFxuICAgICAgICAgICAgfSksIHtcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIENvb2tpZTogQ29va2llXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIC8vIOS7meeOi+eahOaXpeW4uOesrOS4ieWto+esrDEw6ZuG77yM5rKh5pyJZGFzaO+8jOacjeS6hlxcXFxuICAgICAgICAgICAgaWYgKEpTT04ucGFyc2UodSkucmVzdWx0LmRhc2gpIHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5wYXJzZSh1KS5yZXN1bHQuZGFzaDtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgbG9nKCflsJ3or5XotbDljZXnur/ot6/nlLvotKh+Jyk7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIEpTT04ucGFyc2UodSkucmVzdWx0O1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9IGNhdGNoIChlcnJvcikge1xcXFxuICAgICAgICAgICAgbG9nKCdjb29raWXmnInmsqHmnInlj6/og73lpLHmlYjkuoblkaJ+Jyk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG59XFxcXG4vLyDmj5DkuqTmkq3mlL7orrDlvZVcXFxcbiQuZXhwb3J0cy5yZXBvcnRQcm9jZXNzID0gZnVuY3Rpb24gKGF2aWQsIGNpZCkge1xcXFxuICAgIGxldCBjc3JmID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKSA9PT0gbnVsbCA/IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5zcGxpdCgnYmlsaV9qY3Q9JylbMV0gOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pWzFdO1xcXFxuICAgIGxldCByZXMgPSBwb3N0KFxcXFxcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC92Mi9oaXN0b3J5L3JlcG9ydFxcXFxcXFwiLCB7XFxcXG4gICAgICAgIGJvZHk6IHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiYWlkXFxcXFxcXCI6IGF2aWQsXFxcXG4gICAgICAgICAgICBcXFxcXFxcImNpZFxcXFxcXFwiOiBjaWQsXFxcXG4gICAgICAgICAgICBcXFxcXFxcImNzcmZcXFxcXFxcIjogY3NyZixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwicHJvZ3Jlc3NcXFxcXFxcIjogMFxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBDb29raWU6IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZVxcXFxuICAgICAgICB9XFxcXG4gICAgfSlcXFxcbn1cXFxcblxcXFxuLy8g6I635Y+W6K+E6K66XFxcXG4kLmV4cG9ydHMuZ2V0Q29tbWVudHMgPSBmdW5jdGlvbiAoaWQsIHR5cGUsIHBhZ2UpIHtcXFxcbiAgICBsZXQgdSA9IGJ1aWxkVXJsKFxcXFxcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC92Mi9yZXBseVxcXFxcXFwiLCB7XFxcXG4gICAgICAgIFxcXFxcXFwidHlwZVxcXFxcXFwiOiB0eXBlLFxcXFxuICAgICAgICBcXFxcXFxcIm9pZFxcXFxcXFwiOiBpZCxcXFxcbiAgICAgICAgXFxcXFxcXCJwblxcXFxcXFwiOiBwYWdlXFxcXG4gICAgfSk7XFxcXG4gICAgbGV0IHJlcyA9IHJlcXVlc3QodSwge1xcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBDb29raWU6IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZVxcXFxuICAgICAgICB9XFxcXG4gICAgfSlcXFxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXMpLmRhdGEucmVwbGllc1xcXFxufVxcXFxuLy8g5re75Yqg56iN5ZCO5Zyo55yL4oCU4oCU55yf55qE6bq75LqG77yM5Li65LuA5LmIZmV0Y2jlsLHplJnlkaJ+XFxcXG4kLmV4cG9ydHMuYWRkVG92aWV3ID0gZnVuY3Rpb24gKGFpZCkge1xcXFxuICAgIGxldCBjc3JmID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKSA9PT0gbnVsbCA/IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5zcGxpdCgnYmlsaV9qY3Q9JylbMV0gOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pWzFdO1xcXFxuICAgIGxldCB1ID0gXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC92Mi9oaXN0b3J5L3Rvdmlldy9hZGRcXFxcXFxcIjtcXFxcbiAgICBsZXQgcmVzID0gcmVxdWVzdChidWlsZFVybCh1LCB7XFxcXG4gICAgICAgIFxcXFxcXFwiYWlkXFxcXFxcXCI6IGFpZCxcXFxcbiAgICAgICAgXFxcXFxcXCJjc3JmXFxcXFxcXCI6IGNzcmYsXFxcXG4gICAgfSksIHtcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIG1ldGhvZDogXFxcXFxcXCJQT1NUXFxcXFxcXCJcXFxcbiAgICB9KVxcXFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcykuY29kZTtcXFxcbn1cXFxcbi8vIOWIoOmZpOeojeWQjuWcqOeci1xcXFxuJC5leHBvcnRzLmRlbFRvdmlldyA9IGZ1bmN0aW9uIChhaWQpIHtcXFxcbiAgICBsZXQgY3NyZiA9IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LykgPT09IG51bGwgPyBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUuc3BsaXQoJ2JpbGlfamN0PScpWzFdIDogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKVsxXTtcXFxcbiAgICBsZXQgdSA9IFxcXFxcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC92Mi9oaXN0b3J5L3Rvdmlldy9kZWxcXFxcXFxcIjtcXFxcbiAgICBsZXQgcmVzID0gcmVxdWVzdChidWlsZFVybCh1LCB7XFxcXG4gICAgICAgIFxcXFxcXFwiYWlkXFxcXFxcXCI6IGFpZCxcXFxcbiAgICAgICAgXFxcXFxcXCJjc3JmXFxcXFxcXCI6IGNzcmYsXFxcXG4gICAgfSksIHtcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIG1ldGhvZDogXFxcXFxcXCJQT1NUXFxcXFxcXCJcXFxcbiAgICB9KVxcXFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcykuY29kZTtcXFxcbn1cXFxcbi8vIOiuoumYheW9seinhijov73nlarjgIHov73liacpXFxcXG4kLmV4cG9ydHMuc3Vic2NyaWJlRmlsbSA9IGZ1bmN0aW9uIChzZWFzb25faWQpIHtcXFxcbiAgICBsZXQgY3NyZiA9IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LykgPT09IG51bGwgPyBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUuc3BsaXQoJ2JpbGlfamN0PScpWzFdIDogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKVsxXTtcXFxcbiAgICBsZXQgdSA9IFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3BnYy93ZWIvZm9sbG93L2FkZFxcXFxcXFwiO1xcXFxuICAgIGxldCByZXMgPSByZXF1ZXN0KGJ1aWxkVXJsKHUsIHtcXFxcbiAgICAgICAgXFxcXFxcXCJzZWFzb25faWRcXFxcXFxcIjogc2Vhc29uX2lkLFxcXFxuICAgICAgICBcXFxcXFxcImNzcmZcXFxcXFxcIjogY3NyZixcXFxcbiAgICB9KSwge1xcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAgbWV0aG9kOiBcXFxcXFxcIlBPU1RcXFxcXFxcIlxcXFxuICAgIH0pXFxcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKS5yZXN1bHQudG9hc3Q7XFxcXG59XFxcXG4vLyDlj5bmtojorqLpmIVcXFxcbiQuZXhwb3J0cy5jYW5jZWxTdWJzY3JpYmVGaWxtID0gZnVuY3Rpb24gKHNlYXNvbl9pZCkge1xcXFxuICAgIGxldCBjc3JmID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKSA9PT0gbnVsbCA/IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5zcGxpdCgnYmlsaV9qY3Q9JylbMV0gOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pWzFdO1xcXFxuICAgIGxldCB1ID0gXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3dlYi9mb2xsb3cvZGVsXFxcXFxcXCI7XFxcXG4gICAgbGV0IHJlcyA9IHJlcXVlc3QoYnVpbGRVcmwodSwge1xcXFxuICAgICAgICBcXFxcXFxcInNlYXNvbl9pZFxcXFxcXFwiOiBzZWFzb25faWQsXFxcXG4gICAgICAgIFxcXFxcXFwiY3NyZlxcXFxcXFwiOiBjc3JmLFxcXFxuICAgIH0pLCB7XFxcXG4gICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZVxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICBtZXRob2Q6IFxcXFxcXFwiUE9TVFxcXFxcXFwiXFxcXG4gICAgfSlcXFxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXMpLnJlc3VsdC50b2FzdDtcXFxcbn1cXFxcbi8q5pON5L2c55So5oi35YWz57O7XFxcXG5maWQ655So5oi3bWlkXFxcXG5hY3Q65pON5L2c5Luj56CBXFxcXG5yZV9zcmPvvJrlhbPms6jmnaXmupBcXFxcbiovXFxcXG4kLmV4cG9ydHMuYWRkQXR0ZW50aW9uID0gZnVuY3Rpb24gKG1pZCwgYWN0LCByZV9zcmMpIHtcXFxcbiAgICBsZXQgY3NyZiA9IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LykgPT09IG51bGwgPyBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUuc3BsaXQoJ2JpbGlfamN0PScpWzFdIDogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKVsxXTtcXFxcbiAgICBsZXQgdSA9IFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcmVsYXRpb24vbW9kaWZ5XFxcXFxcXCI7XFxcXG4gICAgbGV0IHJlcyA9IHJlcXVlc3QoYnVpbGRVcmwodSwge1xcXFxuICAgICAgICBcXFxcXFxcImZpZFxcXFxcXFwiOiBtaWQsXFxcXG4gICAgICAgIFxcXFxcXFwiYWN0XFxcXFxcXCI6IGFjdCxcXFxcbiAgICAgICAgXFxcXFxcXCJyZV9zcmNcXFxcXFxcIjogcmVfc3JjLFxcXFxuICAgICAgICBcXFxcXFxcImNzcmZcXFxcXFxcIjogY3NyZlxcXFxuICAgIH0pLCB7XFxcXG4gICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZVxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICBtZXRob2Q6IFxcXFxcXFwiUE9TVFxcXFxcXFwiXFxcXG4gICAgfSlcXFxcbiAgICByZXR1cm4gSlNPTi5wYXJzZShyZXMpLmNvZGU7XFxcXG59XFxcXG4vLyDnp7vliqjlhbPms6jnlKjmiLfliIbnu4RcXFxcbiQuZXhwb3J0cy5tb3ZlVXNlcnMgPSBmdW5jdGlvbiAoYmVmb3JlVGFnaWRzLCBhZnRlclRhZ2lkcywgZmlkcykge1xcXFxuICAgIGxldCBjc3JmID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKSA9PT0gbnVsbCA/IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5zcGxpdCgnYmlsaV9qY3Q9JylbMV0gOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pWzFdO1xcXFxuICAgIGxldCB1ID0gXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9yZWxhdGlvbi90YWdzL21vdmVVc2Vyc1xcXFxcXFwiO1xcXFxuICAgIGxldCByZXMgPSByZXF1ZXN0KGJ1aWxkVXJsKHUsIHtcXFxcbiAgICAgICAgXFxcXFxcXCJiZWZvcmVUYWdpZHNcXFxcXFxcIjogYmVmb3JlVGFnaWRzLnRvU3RyaW5nKCksXFxcXG4gICAgICAgIFxcXFxcXFwiYWZ0ZXJUYWdpZHNcXFxcXFxcIjogYWZ0ZXJUYWdpZHMudG9TdHJpbmcoKSxcXFxcbiAgICAgICAgXFxcXFxcXCJmaWRzXFxcXFxcXCI6IGZpZHMudG9TdHJpbmcoKSxcXFxcbiAgICAgICAgXFxcXFxcXCJjc3JmXFxcXFxcXCI6IGNzcmZcXFxcbiAgICB9KSwge1xcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXFxcbiAgICAgICAgfSxcXFxcbiAgICAgICAgbWV0aG9kOiBcXFxcXFxcIlBPU1RcXFxcXFxcIlxcXFxuICAgIH0pXFxcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKS5jb2RlO1xcXFxufVxcXFxuLy8g6I635Y+W55So5oi35YWz57O7XFxcXG4kLmV4cG9ydHMuZ2V0UmVsYXRpb24gPSBmdW5jdGlvbiAobWlkKSB7XFxcXG4gICAgLy8gaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc3BhY2UvYWNjL3JlbGF0aW9uP21pZD0s5pen5o6l5Y+jXFxcXG4gICAgcGFybXMgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmdldFdiaUVuYyh7IG1pZDogbWlkIH0pO1xcXFxuICAgIGluZm9MaW5rID0gJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3NwYWNlL3diaS9hY2MvcmVsYXRpb24/JyArIHBhcm1zO1xcXFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcXVlc3QoaW5mb0xpbmssIHtcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFBDX1VBLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KSkuZGF0YVxcXFxufVxcXFxuLy8g5p+l6K+i55uu5qCH55So5oi35omA5Zyo55qE5YiG57uEXFxcXG4kLmV4cG9ydHMuZ2V0VXNlckdyb3VwID0gZnVuY3Rpb24gKG1pZCkge1xcXFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9yZWxhdGlvbi90YWcvdXNlcj9maWQ9XFxcXFxcXCIgKyBtaWQsIHtcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KSkuZGF0YVxcXFxufVxcXFxuLy8g6I635Y+W5YWz5rOo5YiG57uEXFxcXG4kLmV4cG9ydHMuZ2V0TXlBdHRlbnRpb25Hcm91cExpc3QgPSBmdW5jdGlvbiAoKSB7XFxcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9yZWxhdGlvbi90YWdzP2pzb25wPWpzb25wXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFBDX1VBLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tL1xcXFxcXFwiXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KSkuZGF0YTtcXFxcbn1cXFxcbi8vIOaYr+WQpueCuei1nlxcXFxuJC5leHBvcnRzLmhhc0xpa2UgPSBmdW5jdGlvbiAoYWlkKSB7XFxcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVxdWVzdChidWlsZFVybChcXFxcXFxcImh0dHA6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9hcmNoaXZlL2hhcy9saWtlXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgXFxcXFxcXCJhaWRcXFxcXFxcIjogYWlkXFxcXG4gICAgfSksIHtcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KSkuZGF0YVxcXFxufVxcXFxuLy8g5piv5ZCm5pS26JePXFxcXG4kLmV4cG9ydHMuaGFzRmF2b3VyID0gZnVuY3Rpb24gKGFpZCkge1xcXFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcXVlc3QoYnVpbGRVcmwoXFxcXFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3YyL2Zhdi92aWRlby9mYXZvdXJlZFxcXFxcXFwiLCB7XFxcXG4gICAgICAgIFxcXFxcXFwiYWlkXFxcXFxcXCI6IGFpZFxcXFxuICAgIH0pLCB7XFxcXG4gICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZVxcXFxuICAgICAgICB9XFxcXG4gICAgfSkpLmRhdGEuZmF2b3VyZWRcXFxcbn1cXFxcbi8vIOinhumikeeCuei1nlxcXFxuJC5leHBvcnRzLnNldExpa2UgPSBmdW5jdGlvbiAoYWlkLCBkZWFsV2F5KSB7XFxcXG4gICAgbGV0IGNzcmYgPSBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pID09PSBudWxsID8gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llLnNwbGl0KCdiaWxpX2pjdD0nKVsxXSA6IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV07XFxcXG4gICAgbGV0IHJlcyA9IHBvc3QoXFxcXFxcXCJodHRwOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2UvYXJjaGl2ZS9saWtlXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgYm9keToge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJhaWRcXFxcXFxcIjogYWlkLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJsaWtlXFxcXFxcXCI6IGRlYWxXYXksXFxcXG4gICAgICAgICAgICBcXFxcXFxcImNzcmZcXFxcXFxcIjogY3NyZlxcXFxuICAgICAgICB9LFxcXFxuICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWVcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pXFxcXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzKS5jb2RlO1xcXFxufVxcXFxuLy8g6I635Y+W5pS26JeP5YiX6KGoXFxcXG4kLmV4cG9ydHMuZ2V0Q29sbGVjdGlvbkdyb3VwTGlzdCA9IGZ1bmN0aW9uICgpIHtcXFxcbiAgICByZXR1cm4gY29sbGVjdGlvbnMgPSBKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvdjMvZmF2L2ZvbGRlci9saXN0NG5hdmlnYXRlXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llLFxcXFxuICAgICAgICB9XFxcXG4gICAgfSkpLmRhdGE7XFxcXG59XFxcXG4vLyDmlLbol48v5Y+W5raI6KeG6aKRQVBJXFxcXG4kLmV4cG9ydHMuc2V0RmF2b3VyID0gZnVuY3Rpb24gKGFpZCwgYWRkX21lZGlhX2lkcywgZGVsX21lZGlhX2lkcykge1xcXFxuICAgIGxldCBjc3JmID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llLm1hdGNoKC9iaWxpX2pjdD0oLio/KTsvKSA9PT0gbnVsbCA/IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZS5zcGxpdCgnYmlsaV9qY3Q9JylbMV0gOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUubWF0Y2goL2JpbGlfamN0PSguKj8pOy8pWzFdO1xcXFxuICAgIGxldCByZXMgPSBwb3N0KFxcXFxcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20vbWVkaWFsaXN0L2dhdGV3YXkvY29sbC9yZXNvdXJjZS9kZWFsXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgYm9keToge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJyaWRcXFxcXFxcIjogYWlkLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJ0eXBlXFxcXFxcXCI6IDIsXFxcXG4gICAgICAgICAgICBcXFxcXFxcImFkZF9tZWRpYV9pZHNcXFxcXFxcIjogYWRkX21lZGlhX2lkcy50b1N0cmluZygpLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJkZWxfbWVkaWFfaWRzXFxcXFxcXCI6IGRlbF9tZWRpYV9pZHMudG9TdHJpbmcoKSxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiY3NyZlxcXFxcXFwiOiBjc3JmXFxcXG4gICAgICAgIH0sXFxcXG4gICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZSxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbVxcXFxcXFwiXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KVxcXFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcykuY29kZTtcXFxcbn1cXFxcbi8vIOiOt+WPluinhumikeaJgOWcqOaUtuiXj+WkuVxcXFxuJC5leHBvcnRzLmdldEZhdm91cklkTGlzdCA9IGZ1bmN0aW9uIChhaWQsIHVzZXJNaWQpIHtcXFxcbiAgICBsZXQgdSA9IFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvdjMvZmF2L2ZvbGRlci9jcmVhdGVkL2xpc3QtYWxsXFxcXFxcXCI7XFxcXG4gICAgbGV0IHJlcyA9IHJlcXVlc3QoYnVpbGRVcmwodSwge1xcXFxuICAgICAgICBcXFxcXFxcInR5cGVcXFxcXFxcIjogMixcXFxcbiAgICAgICAgXFxcXFxcXCJyaWRcXFxcXFxcIjogYWlkLFxcXFxuICAgICAgICBcXFxcXFxcInVwX21pZFxcXFxcXFwiOiB1c2VyTWlkLFxcXFxuICAgIH0pLCB7XFxcXG4gICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJMaXN0WzBdLmNvb2tpZSxcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbVxcXFxcXFwiXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcbiAgICBmYXZvdXJJZExpc3QgPSBbXTtcXFxcbiAgICBKU09OLnBhcnNlKHJlcykuZGF0YS5saXN0LmZvckVhY2goKGl0ZW0pID0+IHtcXFxcbiAgICAgICAgaWYgKGl0ZW0uZmF2X3N0YXRlID09IDEpIHtcXFxcbiAgICAgICAgICAgIGZhdm91cklkTGlzdC5wdXNoKGl0ZW0uaWQpO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSlcXFxcbiAgICByZXR1cm4gZmF2b3VySWRMaXN0O1xcXFxufVxcXFxuLy8g54Ot5pig5Ymn6ZuG5pe26Ze06L20XFxcXG4kLmV4cG9ydHMuZ2V0TW92aWVzID0gZnVuY3Rpb24gKHR5cGUsIGJlZm9yZSwgYWZ0ZXIpIHtcXFxcbiAgICBsZXQgdSA9IGJ1aWxkVXJsKFxcXFxcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3dlYi90aW1lbGluZVxcXFxcXFwiLCB7XFxcXG4gICAgICAgIFxcXFxcXFwidHlwZXNcXFxcXFxcIjogdHlwZSxcXFxcbiAgICAgICAgXFxcXFxcXCJiZWZvcmVcXFxcXFxcIjogYmVmb3JlLFxcXFxuICAgICAgICBcXFxcXFxcImFmdGVyXFxcXFxcXCI6IGFmdGVyXFxcXG4gICAgfSlcXFxcbiAgICBsZXQgcmVzID0gSlNPTi5wYXJzZShyZXF1ZXN0KHUsIHtcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KSlcXFxcbiAgICByZXR1cm4gcmVzLnJlc3VsdFxcXFxufVxcXFxuLy8g6I635Y+W5LiT5qCP5paH56ugXFxcXG4kLmV4cG9ydHMuZ2V0VXNlckFydGljbGUgPSBmdW5jdGlvbiAodXBNaWQsIHBhZ2UpIHtcXFxcbiAgICBsZXQgdSA9IFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvc3BhY2UvYXJ0aWNsZVxcXFxcXFwiO1xcXFxuICAgIGxldCByZXMgPSByZXF1ZXN0KGJ1aWxkVXJsKHUsIHtcXFxcbiAgICAgICAgXFxcXFxcXCJtaWRcXFxcXFxcIjogdXBNaWQsXFxcXG4gICAgICAgIFxcXFxcXFwicG5cXFxcXFxcIjogcGFnZSxcXFxcbiAgICAgICAgXFxcXFxcXCJwc1xcXFxcXFwiOiAxMixcXFxcbiAgICAgICAgXFxcXFxcXCJzb3J0XFxcXFxcXCI6ICdwdWJsaXNoX3RpbWUnXFxcXG4gICAgfSksIHtcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llLFxcXFxuICAgICAgICAgICAgXFxcXFxcXCJSZWZlcmVyXFxcXFxcXCI6IFxcXFxcXFwiaHR0cHM6Ly93d3cuYmlsaWJpbGkuY29tXFxcXFxcXCJcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pO1xcXFxuICAgIHJldHVybiBKU09OLnBhcnNlKHJlcykuZGF0YTtcXFxcbn1cXFxcbi8vIOiOt+WPluWKqOaAgeaVsOaNrlxcXFxuJC5leHBvcnRzLmdldER5bmFtaWNEYXRhID0gZnVuY3Rpb24gKGZyb20sIHVwTWlkKSB7XFxcXG4gICAgdmFyIG5leHRJbmZvID0ge307XFxcXG4gICAgaWYgKE1ZX1BBR0UgPT0gMSkge1xcXFxuICAgICAgICBpZiAoZnJvbSA9PSAndXBTcGFjZScpIHtcXFxcbiAgICAgICAgICAgIHZhciB1ID0gXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9wb2x5bWVyL3dlYi1keW5hbWljL3YxL2ZlZWQvc3BhY2U/b2Zmc2V0PSZob3N0X21pZD1cXFxcXFxcIiArIHVwTWlkICsgXFxcXFxcXCImdGltZXpvbmVfb2Zmc2V0PS00ODBcXFxcXFxcIjtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHZhciB1ID0gXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC9wb2x5bWVyL3dlYi1keW5hbWljL3YxL2ZlZWQvYWxsP3RpbWV6b25lX29mZnNldD0tNDgwJnR5cGU9YWxsXFxcXFxcXCI7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbGF0ZW5ld3MgPSBKU09OLnBhcnNlKGZldGNoKHUsIHtcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBKU09OLnBhcnNlKHJlcXVlc3QoXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L2JpbGkudHh0XFxcXFxcXCIpKS51c2VyTGlzdFswXS5jb29raWUsXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJVc2VyLUFnZW50XFxcXFxcXCI6IFBDX1VBLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiUmVmZXJlclxcXFxcXFwiOiBcXFxcXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9cXFxcXFxcIlxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KSkuZGF0YTtcXFxcbiAgICAgICAgbmV4dEluZm8ub2Zmc2V0ID0gbGF0ZW5ld3Mub2Zmc2V0O1xcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIGlmIChmcm9tID09ICd1cFNwYWNlJykge1xcXFxuICAgICAgICAgICAgdmFyIHUgPSBcXFxcXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3BvbHltZXIvd2ViLWR5bmFtaWMvdjEvZmVlZC9zcGFjZT9vZmZzZXQ9XFxcXFxcXCIgKyBzdG9yYWdlMC5nZXRNeVZhcihKU09OLnN0cmluZ2lmeShNWV9QQUdFKSkub2Zmc2V0ICsgXFxcXFxcXCImaG9zdF9taWQ9XFxcXFxcXCIgKyB1cE1pZCArIFxcXFxcXFwiJnRpbWV6b25lX29mZnNldD0tNDgwXFxcXFxcXCI7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICB2YXIgdSA9IFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvcG9seW1lci93ZWItZHluYW1pYy92MS9mZWVkL2FsbD90aW1lem9uZV9vZmZzZXQ9LTQ4MCZ0eXBlPWFsbCZvZmZzZXQ9XFxcXFxcXCIgKyBzdG9yYWdlMC5nZXRNeVZhcihKU09OLnN0cmluZ2lmeShNWV9QQUdFKSkub2Zmc2V0O1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxhdGVuZXdzID0gSlNPTi5wYXJzZShmZXRjaCh1LCB7XFxcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlckxpc3RbMF0uY29va2llXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pKS5kYXRhO1xcXFxuICAgICAgICBuZXh0SW5mby5vZmZzZXQgPSBsYXRlbmV3cy5vZmZzZXQ7XFxcXG4gICAgfVxcXFxuICAgIHN0b3JhZ2UwLnB1dE15VmFyKEpTT04uc3RyaW5naWZ5KE1ZX1BBR0UgKyAxKSwgbmV4dEluZm8pO1xcXFxuICAgIHJldHVybiBsYXRlbmV3cztcXFxcbn1cXFxcblxcXFxuLy8g4oCU4oCU54m55Yir55qE6KGM5Li644CB5bel5YW35Ye95pWw4oCU4oCUXFxcXG4vLyDlsZXnpLrliqjmgIHmlbDmja4o6L+U5Zue5Ye95pWw5pa55rOV55qE5Y+v5omn6KGM5a2X56ym5LiyKVxcXFxuJC5leHBvcnRzLnNob3dEeW5hbWljRGF0YSA9IGZ1bmN0aW9uICgpIHtcXFxcbiAgICByZXR1cm4gJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgIGltZ0xpbmsgPSBzdG9yYWdlMC5nZXRNeVZhcign5Zu+5qCHJyk7XFxcXG4gICAgICAgIGxhdGVuZXdzLml0ZW1zLmZvckVhY2gobGlzdCA9PiB7XFxcXG4gICAgICAgICAgICBpZiAobGlzdC50eXBlID09ICdEWU5BTUlDX1RZUEVfQVYnKSB7XFxcXG4gICAgICAgICAgICAgICAgLy8g5oqV56i/6KeG6aKR77yI5b2T5YmN5Y+R5biD77yJ4oiaXFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6ICc8c21hbGw+PHNtYWxsPjxmb250IGNvbG9yPVxcXFxcXFwiZ3JleVxcXFxcXFwiPicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5wdWJfdGltZSArICctJyArIGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLnB1Yl9hY3Rpb24gKyAnPC9mb250Pjwvc21hbGw+PC9zbWFsbD4nLFxcXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLmZhY2UgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvdXBIb21lJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbWlkOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5taWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IubmFtZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhY2U6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLmZhY2VcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcXFxuICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgLy8g5LiN5LiA5a6a5pyJ5paH5a2X5ZWKXFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAobGlzdC5tb2R1bGVzLm1vZHVsZV9keW5hbWljLmRlc2MgPT09IG51bGwgPyAnPGZvbnQgY29sb3I9XFxcXFxcXCJncmV5XFxcXFxcXCI+dXDlpKrmh5LkuobvvIzov57mlofmoYjpg73kuI3mg7PphY0uLi48L2ZvbnQ+JyA6IGxpc3QubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5kZXNjLnRleHQpLnJlcGxhY2UoL1xcXFxcXFxcbi9nLCAnPGJyPicpICsgJzxicj48YSBocmVmPVxcXFxcXFwiaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlXFxcXFxcXCI+5p+l55yL6K+E6K66PC9hPicsXFxcXG4gICAgICAgICAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZScsXFxcXG4gICAgICAgICAgICAgICAgICAgIC8vIOi/meS4quS4jeiDveeUqGxvbmdfdGV4dFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZDogbGlzdC5iYXNpYy5jb21tZW50X2lkX3N0cixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IDFcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5tYWpvci5hcmNoaXZlLnRpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5tYWpvci5hcmNoaXZlLmNvdmVyICsgXFxcXFxcXCJAUmVmZXJlcj1cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS92aWRlb1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2R5bmFtaWMubWFqb3IuYXJjaGl2ZS5kZXNjLFxcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYWlkOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2R5bmFtaWMubWFqb3IuYXJjaGl2ZS5haWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsaW5lVmlzaWJsZTogZmFsc2VcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogJzxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9XFxcXFxcXCJncmV5XFxcXFxcXCI+55WZ6KiAOicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX3N0YXQuY29tbWVudC5jb3VudCArICdcXFxcXFxcXHRcXFxcXFxcXHTliIbkuqs6JyArIGxpc3QubW9kdWxlcy5tb2R1bGVfc3RhdC5mb3J3YXJkLmNvdW50ICsgJ1xcXFxcXFxcdFxcXFxcXFxcdOWWnOasojonICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9zdGF0Lmxpa2UuY291bnQgKyAnPC9mb250Pjwvc21hbGw+PC9zbWFsbD4nLFxcXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGltZ0xpbmsu5Yqo5oCB6Laz6L+5LFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInXFxcXG4gICAgICAgICAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGxpc3QudHlwZSA9PSAnRFlOQU1JQ19UWVBFX0ZPUldBUkQnKSB7XFxcXG4gICAgICAgICAgICAgICAgLy8g5byV55So77yM5aSa5Ye65LqGb3JpZ+aMh+WQkeS4gOS4qijov4fljrsp5bey5Y+R5biD55qE6KeG6aKRLOWHhuehrueahOivtOaYr+W8leeUqOS5i+WJjeeahOW4luWtkOS4jeS4gOWumuaYr+inhumikeKImlxcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5uYW1lLFxcXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLmZhY2UgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiAnPHNtYWxsPjxzbWFsbD48Zm9udCBjb2xvcj1cXFxcXFxcImdyZXlcXFxcXFxcIj4nICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IucHViX3RpbWUgKyAnPC9mb250Pjwvc21hbGw+PC9zbWFsbD4nLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvdXBIb21lJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbWlkOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5taWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IubmFtZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhY2U6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLmZhY2VcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcXFxuICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IChsaXN0Lm1vZHVsZXMubW9kdWxlX2R5bmFtaWMuZGVzYyA9PT0gbnVsbCA/ICc8Zm9udCBjb2xvcj1cXFxcXFxcImdyZXlcXFxcXFxcIj51cOWkquaHkuS6hu+8jOi/nuaWh+ahiOmDveS4jeaDs+mFjS4uLjwvZm9udD4nIDogbGlzdC5tb2R1bGVzLm1vZHVsZV9keW5hbWljLmRlc2MudGV4dCkucmVwbGFjZSgvXFxcXFxcXFxuL2csICc8YnI+JykgKyAnPGJyPjxhIGhyZWY9XFxcXFxcXCJoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2VcXFxcXFxcIj7mn6XnnIvor4Torro8L2E+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGxpc3QuYmFzaWMuY29tbWVudF9pZF9zdHIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDkuZ/mmK/nuq/mloflrZfvvIzlm6DkuLrlj6rmmK/mloflrZcr5byV55So5pep5bey5oqV56i/55qE6KeG6aKRXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAxN1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgLy8g5byV55So55qE5YaF5a654oCU4oCU5oiq5pat77yI5qC55o2u5LiN5ZCM55qE5byV55So57G75Z6L6L+b6KGM5aSE55CG77yJXFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICc8c21hbGw+PHNtYWxsPuS4i+mdouWGheWuueadpeiHquW8leeUqOeahOW4luWtkCx1cOaYrzo8YSBocmVmPVxcXFxcXFwiaGlrZXI6Ly9wYWdlL3VwSG9tZVxcXFxcXFwiPicgKyBsaXN0Lm9yaWcubW9kdWxlcy5tb2R1bGVfYXV0aG9yLm5hbWUgKyAnPC9hPjwvc21hbGw+PC9zbWFsbD4nLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJyaWNoX3RleHRcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIG1pZDogbGlzdC5vcmlnLm1vZHVsZXMubW9kdWxlX2F1dGhvci5taWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5vcmlnLm1vZHVsZXMubW9kdWxlX2F1dGhvci5uYW1lLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZmFjZTogbGlzdC5vcmlnLm1vZHVsZXMubW9kdWxlX2F1dGhvci5mYWNlXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImxpbmVcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIGlmIChsaXN0Lm9yaWcudHlwZSA9PSAnRFlOQU1JQ19UWVBFX0FWJykge1xcXFxuICAgICAgICAgICAgICAgICAgICAvLyDlvJXnlKjop4bpopHor7Tor7RcXFxcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0Lm9yaWcubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5tYWpvci5hcmNoaXZlLnRpdGxlLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBsaXN0Lm9yaWcubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5tYWpvci5hcmNoaXZlLmNvdmVyICsgXFxcXFxcXCJAUmVmZXJlcj1cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnbW92aWVfMV9sZWZ0X3BpYycsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3ZpZGVvXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBsaXN0Lm9yaWcubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5tYWpvci5hcmNoaXZlLmRlc2MsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFpZDogbGlzdC5vcmlnLm1vZHVsZXMubW9kdWxlX2R5bmFtaWMubWFqb3IuYXJjaGl2ZS5haWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbGluZVZpc2libGU6IGZhbHNlXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAobGlzdC5vcmlnLnR5cGUgPT0gJ0RZTkFNSUNfVFlQRV9XT1JEJykge1xcXFxuICAgICAgICAgICAgICAgICAgICAvLyDlvJXnlKjmloflrZfor7Tor7RcXFxcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiAobGlzdC5vcmlnLm1vZHVsZXMubW9kdWxlX2R5bmFtaWMuZGVzYy50ZXh0ID09PSBudWxsID8gJzxmb250IGNvbG9yPVxcXFxcXFwiZ3JleVxcXFxcXFwiPnVw5aSq5oeS5LqG77yM6L+e5paH5qGI6YO95LiN5oOz6YWNLi4uPC9mb250PicgOiBsaXN0Lm9yaWcubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5kZXNjLnRleHQpLnJlcGxhY2UoL1xcXFxcXFxcbi9nLCAnPGJyPicpICsgJzxicj48YSBocmVmPVxcXFxcXFwiaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlXFxcXFxcXCI+5p+l55yL6K+E6K66PC9hPicsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2UnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyDor4TorrppZOadpea6kOmDveS4jeS4gOagt1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBsaXN0Lm9yaWcuaWRfc3RyLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIOe6r+aWh+Wtl1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IDE3XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuXFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIGlmIChsaXN0Lm9yaWcudHlwZSA9PSAnRFlOQU1JQ19UWVBFX0RSQVcnKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIC8vIOW8leeUqOWbvueJh+ivtOivtFxcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IChsaXN0Lm9yaWcubW9kdWxlcy5tb2R1bGVfZHluYW1pYy5kZXNjLnRleHQgPT09IG51bGwgPyAnPGZvbnQgY29sb3I9XFxcXFxcXCJncmV5XFxcXFxcXCI+dXDlpKrmh5LkuobvvIzov57mlofmoYjpg73kuI3mg7PphY0uLi48L2ZvbnQ+JyA6IGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9keW5hbWljLmRlc2MudGV4dCkucmVwbGFjZSgvXFxcXFxcXFxuL2csICc8YnI+JykgKyAnPGJyPjxhIGhyZWY9XFxcXFxcXCJoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2VcXFxcXFxcIj7mn6XnnIvor4Torro8L2E+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAncmljaF90ZXh0JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2VcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9keW5hbWljLm1ham9yLmRyYXcuaWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogMTFcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxpc3Qub3JpZy5tb2R1bGVzLm1vZHVsZV9keW5hbWljLm1ham9yLmRyYXcuaXRlbXMuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBpdGVtLnNyYyArIFxcXFxcXFwiQFJlZmVyZXI9XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdwaWNfM19zcXVhcmUnLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogaXRlbS5zcmMgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxvZygn5Y+v6IO96L+Y5pyJ5pyq6YCC6YWN55qE6K+06K+057G75Z6LJyk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIC8vIOWIhuWJslxcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6ICc8c21hbGw+PHNtYWxsPjxmb250IGNvbG9yPVxcXFxcXFwiZ3JleVxcXFxcXFwiPueVmeiogDonICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9zdGF0LmNvbW1lbnQuY291bnQgKyAnXFxcXFxcXFx0XFxcXFxcXFx05YiG5LqrOicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX3N0YXQuZm9yd2FyZC5jb3VudCArICdcXFxcXFxcXHRcXFxcXFxcXHTllpzmrKI6JyArIGxpc3QubW9kdWxlcy5tb2R1bGVfc3RhdC5saWtlLmNvdW50ICsgJzwvZm9udD48L3NtYWxsPjwvc21hbGw+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWdMaW5rLuWKqOaAgei2s+i/uSxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJ1xcXFxuICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChsaXN0LnR5cGUgPT0gJ0RZTkFNSUNfVFlQRV9XT1JEJykge1xcXFxuICAgICAgICAgICAgICAgIC8vIOe6r+aWh+Wtl1xcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5uYW1lLFxcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiAnPHNtYWxsPjxzbWFsbD48Zm9udCBjb2xvcj1cXFxcXFxcImdyZXlcXFxcXFxcIj4nICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IucHViX3RpbWUgKyAnPC9mb250Pjwvc21hbGw+PC9zbWFsbD4nLFxcXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLmZhY2UgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvdXBIb21lJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbWlkOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5taWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IubmFtZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhY2U6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLmZhY2VcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcXFxuICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IChsaXN0Lm1vZHVsZXMubW9kdWxlX2R5bmFtaWMuZGVzYyA9PT0gbnVsbCA/ICc8Zm9udCBjb2xvcj1cXFxcXFxcImdyZXlcXFxcXFxcIj51cOWkquaHkuS6hu+8jOi/nuaWh+ahiOmDveS4jeaDs+mFjS4uLjwvZm9udD4nIDogbGlzdC5tb2R1bGVzLm1vZHVsZV9keW5hbWljLmRlc2MudGV4dCkucmVwbGFjZSgvXFxcXFxcXFxuL2csICc8YnI+JykgKyAnPGJyPjxhIGhyZWY9XFxcXFxcXCJoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2VcXFxcXFxcIj7mn6XnnIvor4Torro8L2E+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGxpc3QuYmFzaWMuY29tbWVudF9pZF9zdHIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDnuq/mloflrZdcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IDE3XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6ICc8c21hbGw+PHNtYWxsPjxmb250IGNvbG9yPVxcXFxcXFwiZ3JleVxcXFxcXFwiPueVmeiogDonICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9zdGF0LmNvbW1lbnQuY291bnQgKyAnXFxcXFxcXFx0XFxcXFxcXFx05YiG5LqrOicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX3N0YXQuZm9yd2FyZC5jb3VudCArICdcXFxcXFxcXHRcXFxcXFxcXHTllpzmrKI6JyArIGxpc3QubW9kdWxlcy5tb2R1bGVfc3RhdC5saWtlLmNvdW50ICsgJzwvZm9udD48L3NtYWxsPjwvc21hbGw+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgaW1nOiBpbWdMaW5rLuWKqOaAgei2s+i/uSxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnYXZhdGFyJ1xcXFxuICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfSBlbHNlIGlmIChsaXN0LnR5cGUgPT0gJ0RZTkFNSUNfVFlQRV9EUkFXJykge1xcXFxuICAgICAgICAgICAgICAgIC8vIOWbvueJh+ivtOivtFxcXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5uYW1lLFxcXFxuICAgICAgICAgICAgICAgICAgICBkZXNjOiAnPHNtYWxsPjxzbWFsbD48Zm9udCBjb2xvcj1cXFxcXFxcImdyZXlcXFxcXFxcIj4nICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IucHViX3RpbWUgKyAnPC9mb250Pjwvc21hbGw+PC9zbWFsbD4nLFxcXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLmZhY2UgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvdXBIb21lJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInLFxcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgbWlkOiBsaXN0Lm1vZHVsZXMubW9kdWxlX2F1dGhvci5taWQsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC5tb2R1bGVzLm1vZHVsZV9hdXRob3IubmFtZSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGZhY2U6IGxpc3QubW9kdWxlcy5tb2R1bGVfYXV0aG9yLmZhY2VcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcXFxuICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IChsaXN0Lm1vZHVsZXMubW9kdWxlX2R5bmFtaWMuZGVzYyA9PT0gbnVsbCA/ICc8Zm9udCBjb2xvcj1cXFxcXFxcImdyZXlcXFxcXFxcIj51cOWkquaHkuS6hu+8jOi/nuaWh+ahiOmDveS4jeaDs+mFjS4uLjwvZm9udD4nIDogbGlzdC5tb2R1bGVzLm1vZHVsZV9keW5hbWljLmRlc2MudGV4dCkucmVwbGFjZSgvXFxcXFxcXFxuL2csICc8YnI+JykgKyAnPGJyPjxhIGhyZWY9XFxcXFxcXCJoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2VcXFxcXFxcIj7mn6XnnIvor4Torro8L2E+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiAnaGlrZXI6Ly9wYWdlL0NvbW1lbnRzP3A9ZnlwYWdlJyxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdyaWNoX3RleHQnLFxcXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWQ6IGxpc3QuYmFzaWMuY29tbWVudF9pZF9zdHIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyDnm7jnsL/vvIjlm77niYfliqjmgIHvvIlcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IDExXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgICAgICBsaXN0Lm1vZHVsZXMubW9kdWxlX2R5bmFtaWMubWFqb3IuZHJhdy5pdGVtcy5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaW1nOiBpdGVtLnNyYyArIFxcXFxcXFwiQFJlZmVyZXI9XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3BpY18zX3NxdWFyZScsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGl0ZW0uc3JjICsgXFxcXFxcXCJAUmVmZXJlcj1cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogJzxzbWFsbD48c21hbGw+PGZvbnQgY29sb3I9XFxcXFxcXCJncmV5XFxcXFxcXCI+55WZ6KiAOicgKyBsaXN0Lm1vZHVsZXMubW9kdWxlX3N0YXQuY29tbWVudC5jb3VudCArICdcXFxcXFxcXHRcXFxcXFxcXHTliIbkuqs6JyArIGxpc3QubW9kdWxlcy5tb2R1bGVfc3RhdC5mb3J3YXJkLmNvdW50ICsgJ1xcXFxcXFxcdFxcXFxcXFxcdOWWnOasojonICsgbGlzdC5tb2R1bGVzLm1vZHVsZV9zdGF0Lmxpa2UuY291bnQgKyAnPC9mb250Pjwvc21hbGw+PC9zbWFsbD4nLFxcXFxuICAgICAgICAgICAgICAgICAgICBpbWc6IGltZ0xpbmsu5Yqo5oCB6Laz6L+5LFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6ICdhdmF0YXInXFxcXG4gICAgICAgICAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ2xpbmVfYmxhbmsnXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH0pXFxcXG59XFxcXG4vLyDml7bpl7Tml6XmnJ/ovazmjaLlh73mlbBcXFxcbiQuZXhwb3J0cy50aW1lQ29udmVydCA9IGZ1bmN0aW9uICh0aW1lKSB7XFxcXG4gICAgZnVuY3Rpb24gZm9ybWF0RGF0ZShlLCB0KSB7XFxcXG4gICAgICAgIGUgPSBuZXcgRGF0ZShlICogMTAwMCk7IC8v5pe26Ze05oiz5Li6MTDkvY3pnIAqMTAwMO+8jOaXtumXtOaIs+S4ujEz5L2N55qE6K+d5LiN6ZyA5LmYMTAwMFxcXFxuICAgICAgICByZXR1cm4gdC5yZXBsYWNlKC95eXl5fFlZWVkvLCBlLmdldEZ1bGxZZWFyKCkpXFxcXG4gICAgICAgICAgICAucmVwbGFjZSgveXl8WVkvLCByKGUuZ2V0RnVsbFllYXIoKSAlIDEwMCwgMikpXFxcXG4gICAgICAgICAgICAucmVwbGFjZSgvbW18TU0vLCByKGUuZ2V0TW9udGgoKSArIDEsIDIpKVxcXFxuICAgICAgICAgICAgLnJlcGxhY2UoL218TS9nLCBlLmdldE1vbnRoKCkgKyAxKVxcXFxuICAgICAgICAgICAgLnJlcGxhY2UoL2RkfERELywgcihlLmdldERhdGUoKSwgMikpXFxcXG4gICAgICAgICAgICAucmVwbGFjZSgvZHxEL2csIGUuZ2V0RGF0ZSgpKVxcXFxuICAgICAgICAgICAgLnJlcGxhY2UoL2hofEhILywgcihlLmdldEhvdXJzKCksIDIpKVxcXFxuICAgICAgICAgICAgLnJlcGxhY2UoL2h8SC9nLCBlLmdldEhvdXJzKCkpXFxcXG4gICAgICAgICAgICAucmVwbGFjZSgvaWl8SUkvLCByKGUuZ2V0TWludXRlcygpLCAyKSlcXFxcbiAgICAgICAgICAgIC5yZXBsYWNlKC9pfEkvZywgZS5nZXRNaW51dGVzKCkpXFxcXG4gICAgICAgICAgICAucmVwbGFjZSgvc3N8U1MvLCByKGUuZ2V0U2Vjb25kcygpLCAyKSlcXFxcbiAgICAgICAgICAgIC5yZXBsYWNlKC9zfFMvZywgZS5nZXRTZWNvbmRzKCkpXFxcXG4gICAgICAgICAgICAucmVwbGFjZSgvdy9nLCBlLmdldERheSgpKVxcXFxuICAgICAgICAgICAgLnJlcGxhY2UoL1cvZywgW1xcXFxcXFwi5pelXFxcXFxcXCIsIFxcXFxcXFwi5LiAXFxcXFxcXCIsIFxcXFxcXFwi5LqMXFxcXFxcXCIsIFxcXFxcXFwi5LiJXFxcXFxcXCIsIFxcXFxcXFwi5ZubXFxcXFxcXCIsIFxcXFxcXFwi5LqUXFxcXFxcXCIsIFxcXFxcXFwi5YWtXFxcXFxcXCJdW2UuZ2V0RGF5KCldKVxcXFxuICAgIH1cXFxcblxcXFxuICAgIGZ1bmN0aW9uIHIoZSwgdCkge1xcXFxuICAgICAgICBmb3IgKHZhciByID0gMCwgbiA9IHQgLSAoZSArIFxcXFxcXFwiXFxcXFxcXCIpLmxlbmd0aDsgciA8IG47IHIrKykgZSA9IFxcXFxcXFwiMFxcXFxcXFwiICsgZTtcXFxcbiAgICAgICAgcmV0dXJuIGUgKyBcXFxcXFxcIlxcXFxcXFwiXFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBmb3JtYXREYXRlKHRpbWUsICdZWVlZLU1NLUREIGhoOmlpOnNzJyk7XFxcXG4gICAgLy8gY29uc29sZS5sb2coZm9ybWF0RGF0ZSgxNjY0MDg5NTMyLCAnWVlZWS1NTS1ERCBoaDppaTpzcycpKTtcXFxcbn1cXFxcbi8vIOenkuaVsOWIhumSn+ihqOi+vui9rOaNouWHveaVsFxcXFxuJC5leHBvcnRzLmZvcm1hdFNlY29uZHMgPSBmdW5jdGlvbiAoc2Vjb25kcykge1xcXFxuICAgIGxldCBtaW51dGVzID0gTWF0aC5mbG9vcihzZWNvbmRzIC8gNjApOyAvLyDorqHnrpfliIbpkp/mlbBcXFxcbiAgICBsZXQgcmVtYWluaW5nU2Vjb25kcyA9IHNlY29uZHMgJSA2MDsgLy8g6K6h566X5Ymp5L2Z55qE56eS5pWwXFxcXG4gICAgbGV0IGZvcm1hdHRlZFRpbWUgPSBgJHttaW51dGVzfToke1N0cmluZyhyZW1haW5pbmdTZWNvbmRzKS5wYWRTdGFydCgyLCAnMCcpfWA7XFxcXG4gICAgcmV0dXJuIGZvcm1hdHRlZFRpbWU7XFxcXG59XFxcXG5cXFxcbi8vIELnq5lXYmnnrb7lkI3nrpfms5UoQWZ0ZXIgMjAyMy0zLGdldCByZXF1ZXN0IHdpdGggd2JpLilcXFxcbiQuZXhwb3J0cy5nZXRXYmlFbmMgPSBmdW5jdGlvbiAocXVlcnlKc29uKSB7XFxcXG4gICAgY29uc3QgbWl4aW5LZXlFbmNUYWIgPSBbXFxcXG4gICAgICAgIDQ2LCA0NywgMTgsIDIsIDUzLCA4LCAyMywgMzIsIDE1LCA1MCwgMTAsIDMxLCA1OCwgMywgNDUsIDM1LCAyNywgNDMsIDUsIDQ5LFxcXFxuICAgICAgICAzMywgOSwgNDIsIDE5LCAyOSwgMjgsIDE0LCAzOSwgMTIsIDM4LCA0MSwgMTMsIDM3LCA0OCwgNywgMTYsIDI0LCA1NSwgNDAsXFxcXG4gICAgICAgIDYxLCAyNiwgMTcsIDAsIDEsIDYwLCA1MSwgMzAsIDQsIDIyLCAyNSwgNTQsIDIxLCA1NiwgNTksIDYsIDYzLCA1NywgNjIsIDExLFxcXFxuICAgICAgICAzNiwgMjAsIDM0LCA0NCwgNTJcXFxcbiAgICBdO1xcXFxuXFxcXG4gICAgLy8g5a+5IGltZ0tleSDlkowgc3ViS2V5IOi/m+ihjOWtl+espumhuuW6j+aJk+S5see8lueggVxcXFxuICAgIGZ1bmN0aW9uIGdldE1peGluS2V5KG9yaWcpIHtcXFxcbiAgICAgICAgbGV0IHRlbXAgPSAnJztcXFxcbiAgICAgICAgbWl4aW5LZXlFbmNUYWIuZm9yRWFjaCgobikgPT4ge1xcXFxuICAgICAgICAgICAgdGVtcCArPSBvcmlnW25dXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICByZXR1cm4gdGVtcC5zbGljZSgwLCAzMik7XFxcXG4gICAgfVxcXFxuXFxcXG4gICAgLy8g5Li66K+35rGC5Y+C5pWw6L+b6KGMIHdiaSDnrb7lkI1cXFxcbiAgICBmdW5jdGlvbiBlbmNXYmkocGFyYW1zLCBpbWdfa2V5LCBzdWJfa2V5KSB7XFxcXG4gICAgICAgIGNvbnN0IG1peGluX2tleSA9IGdldE1peGluS2V5KGltZ19rZXkgKyBzdWJfa2V5KSxcXFxcbiAgICAgICAgICAgIGN1cnJfdGltZSA9IE1hdGgucm91bmQoRGF0ZS5ub3coKSAvIDEwMDApLFxcXFxuICAgICAgICAgICAgY2hyX2ZpbHRlciA9IC9bISdcXFxcXFxcXChcXFxcXFxcXCkqXS9nXFxcXG4gICAgICAgIGxldCBxdWVyeSA9IFtdO1xcXFxuICAgICAgICBwYXJhbXMgPSBPYmplY3QuYXNzaWduKHBhcmFtcywgeyB3dHM6IGN1cnJfdGltZSB9KTsgICAgLy8g5re75YqgIHd0cyDlrZfmrrVcXFxcbiAgICAgICAgLy8g5oyJ54WnIGtleSDph43mjpLlj4LmlbBcXFxcbiAgICAgICAgT2JqZWN0LmtleXMocGFyYW1zKS5zb3J0KCkuZm9yRWFjaCgoa2V5KSA9PiB7XFxcXG4gICAgICAgICAgICBxdWVyeS5wdXNoKFxcXFxuICAgICAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudChrZXkpICtcXFxcbiAgICAgICAgICAgICAgICAnPScgK1xcXFxuICAgICAgICAgICAgICAgIC8vIOi/h+a7pCB2YWx1ZSDkuK3nmoQgXFxcXFxcXCIhJygpKlxcXFxcXFwiIOWtl+esplxcXFxuICAgICAgICAgICAgICAgIGVuY29kZVVSSUNvbXBvbmVudCgoJycgKyBwYXJhbXNba2V5XSkucmVwbGFjZShjaHJfZmlsdGVyLCAnJykpXFxcXG4gICAgICAgICAgICApXFxcXG4gICAgICAgIH0pXFxcXG4gICAgICAgIHF1ZXJ5ID0gcXVlcnkuam9pbignJicpO1xcXFxuICAgICAgICBjb25zdCB3Ymlfc2lnbiA9IG1kNShxdWVyeSArIG1peGluX2tleSk7IC8vIOiuoeeulyB3X3JpZFxcXFxuICAgICAgICByZXR1cm4gcXVlcnkgKyAnJndfcmlkPScgKyB3Ymlfc2lnbjtcXFxcbiAgICB9XFxcXG5cXFxcbiAgICAvLyDojrflj5bmnIDmlrDnmoQgaW1nX2tleSDlkowgc3ViX2tleVxcXFxuICAgIGZ1bmN0aW9uIGdldFdiaUtleXMoKSB7XFxcXG4gICAgICAgIGNvbnN0IGpzb25fY29udGVudCA9IEpTT04ucGFyc2UoZmV0Y2goJ2h0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2UvbmF2Jywge1xcXFxuICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiVXNlci1BZ2VudFxcXFxcXFwiOiBQQ19VQSxcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogXFxcXFxcXCJodHRwczovL3d3dy5iaWxpYmlsaS5jb20vXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICBtZXRob2Q6ICdHRVQnXFxcXG4gICAgICAgIH0pKS5kYXRhO1xcXFxuICAgICAgICBpbWdfdXJsID0ganNvbl9jb250ZW50LndiaV9pbWcuaW1nX3VybDtcXFxcbiAgICAgICAgc3ViX3VybCA9IGpzb25fY29udGVudC53YmlfaW1nLnN1Yl91cmw7XFxcXG4gICAgICAgIHJldHVybiB7XFxcXG4gICAgICAgICAgICBpbWdfa2V5OiBpbWdfdXJsLnN1YnN0cmluZyhpbWdfdXJsLmxhc3RJbmRleE9mKCcvJykgKyAxLCBpbWdfdXJsLmxlbmd0aCkuc3BsaXQoJy4nKVswXSxcXFxcbiAgICAgICAgICAgIHN1Yl9rZXk6IHN1Yl91cmwuc3Vic3RyaW5nKHN1Yl91cmwubGFzdEluZGV4T2YoJy8nKSArIDEsIHN1Yl91cmwubGVuZ3RoKS5zcGxpdCgnLicpWzBdXFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG5cXFxcbiAgICBjb25zdCB3Ymlfa2V5cyA9IGdldFdiaUtleXMoKTtcXFxcblxcXFxuICAgIGNvbnN0IHF1ZXJ5ID0gZW5jV2JpKFxcXFxuICAgICAgICBxdWVyeUpzb24sXFxcXG4gICAgICAgIHdiaV9rZXlzLmltZ19rZXksXFxcXG4gICAgICAgIHdiaV9rZXlzLnN1Yl9rZXlcXFxcbiAgICApO1xcXFxuICAgIHJldHVybiBxdWVyeTtcXFxcbn1cXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcInZpZGVvUGFnZVxcXCIsXFxcInBhdGhcXFwiOlxcXCJ2aWRlb1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG4vLyDpooTlpITnkIZcXFxcbnB1dE15VmFyKCflip/og73mipjlj6AnLCAn5YWzJyk7XFxcXG5pbWdMaW5rID0gc3RvcmFnZTAuZ2V0TXlWYXIoJ+WbvuaghycpO1xcXFxuYWlkID0gTVlfUEFSQU1TLmFpZCArIFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4vLyBidmlkID0gTVlfUEFSQU1TLmJ2aWQgKyBcXFxcXFxcIlxcXFxcXFwiO1xcXFxubWlkID0gTVlfUEFSQU1TLm1pZCArIFxcXFxcXFwiXFxcXFxcXCI7XFxcXG52YXIge2Zvcm1hdFNlY29uZHN9PSQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIik7XFxcXG50cnkge1xcXFxuICAgIC8v6I635Y+W6KeG6aKR5YiGUOS/oeaBr1xcXFxuICAgIHZhciBwID0gSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2Uvdmlldz9haWQ9XFxcXFxcXCIgKyBhaWQpKS5kYXRhO1xcXFxuICAgIGhhc0xpa2UgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmhhc0xpa2UoYWlkKTtcXFxcbiAgICBoYXNGYXZvdXIgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmhhc0Zhdm91cihhaWQpO1xcXFxuICAgIHNldFBhZ2VUaXRsZShwLnRpdGxlKTtcXFxcbiAgICBzZXRQYWdlUGljVXJsKHAucGljICsgJ0BSZWZlcmVyPScpO1xcXFxuICAgIC8vIOWPquaciTFQ55qE5oOF5Ya1XFxcXG4gICAgaWYgKHAucGFnZXMubGVuZ3RoID09IDEpIHtcXFxcbiAgICAgICAgY2lkID0gcC5wYWdlc1swXS5jaWQ7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogcC50aXRsZSxcXFxcbiAgICAgICAgICAgIGltZzogcC5waWMgKyAnQFJlZmVyZXI9JyxcXFxcbiAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChhaWQsIGNpZCwgcW4pID0+IHtcXFxcbiAgICAgICAgICAgICAgICAvLyDnnJ/nprvkuobkuKrlpKfosLHvvIzmmI7mmI7mm7/mjaLmjonkuobvvIx1YeWtl+espuS4suWPiOWPmOWbnuadpeS6hu+8jOWPiOimgeWkhOeQhuS4gOasoVxcXFxuICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmJpbGlMYXp5KGFpZCwgY2lkLCBxbikucmVwbGFjZSgvOy9nLCBcXFxcXFxcIu+8m++8m1xcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIH0sIGFpZCArIFxcXFxcXFwiXFxcXFxcXCIsIGNpZCArIFxcXFxcXFwiXFxcXFxcXCIsICcxMTInKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInBpY18xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBkZXNjOifmkq3mlL7ph486JytwLnN0YXQudmlldysnXFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx05by55bmV5pWwOicrcC5zdGF0LmRhbm1ha3UrJ1xcXFxcXFxcbuWPkeW4g+aXpeacnzonKyQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikudGltZUNvbnZlcnQocC5jdGltZSksXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgIGlkOidhaWQtJythaWQrJ3xjaWQtJytjaWQsXFxcXG4gICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ2Rt55uS5a2QJywganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2Uvc2V0dGluZyNub0hpc3RvcnkjP3J1bGU9ZG3nm5LlrZAnO1xcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICflvLnluZXmjqfliLYnLCBqczogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZ2V0SXRlbSgnaXNPdmVycmlkZVNhdmUnLCAnZmFsc2UnKSA9PSAndHJ1ZScpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICdmYWxzZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lvLnluZXlsIbkuI3lj5dkbeebkuWtkOWPguaVsOaOp+WItic7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ2lzT3ZlcnJpZGVTYXZlJywgJ3RydWUnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5by55bmV5bCG5Y+X5YiwZG3nm5LlrZDlj4LmlbDmjqfliLYnO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgICAgIH1dXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6ICc8Zm9udCBjb2xvcj1cXFxcXFxcImJsdWVcXFxcXFxcIj4nICsgcC5vd25lci5uYW1lICsgJzwvZm9udD4nLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS91cEhvbWVcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGltZzogcC5vd25lci5mYWNlICsgXFxcXFxcXCJAUmVmZXJlcj1cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImF2YXRhclxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICBtaWQ6IHAub3duZXIubWlkLFxcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwLm93bmVyLm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgZmFjZTogcC5vd25lci5mYWNlXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICAvLyDomb3nhLblj6rmnIkxUCzkvYblj6/og73lpITkuo7lkIjpm4bop4bpopHkuK3vvIzlvoDlvoDlnKh1cOS4iuS8oOS4reWxnuS6juS4gOWll+W9seeJh1xcXFxuICAgICAgICBpZiAocC51Z2Nfc2Vhc29uKSB7XFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiAn8J+TgeaJgOWxnuWQiOmbhu+8mjxhIGhyZWY9XFxcXFxcXCJoaWtlcjovL3BhZ2UvY29sbGVjdGlvblZpZWRvXFxcXFxcXCI+JytwLnVnY19zZWFzb24udGl0bGUrJzwvYT4nLFxcXFxuICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvY29sbGVjdGlvblZpZWRvI25vSGlzdG9yeSNcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ3JpY2hfdGV4dCcsXFxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHsgXFxcXFxcXCJ0ZXh0U2l6ZVxcXFxcXFwiOiAxMiwgYWlkOiBhaWQgfVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcXFxuICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICB0aXRsZTogcC5zdGF0Lmxpa2UsXFxcXG4gICAgICAgICAgICBpbWc6IGhhc0xpa2UgPT0gMSA/IGltZ0xpbmsu5bey54K56LWeIDogaW1nTGluay7mnKrngrnotZ4sXFxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoYWlkKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikubGlrZUxvZ2ljKGFpZClcXFxcbiAgICAgICAgICAgIH0sIGFpZCksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpY29uX3NtYWxsXzRcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgaWQ6ICdzZXRMaWtlJ1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICB0aXRsZTogcC5zdGF0LmZhdm9yaXRlLFxcXFxuICAgICAgICAgICAgaW1nOiBoYXNGYXZvdXIgPyBpbWdMaW5rLuW3suaUtuiXjyA6IGltZ0xpbmsu5pyq5pS26JePLFxcXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKGFpZCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHVwTWlkID0gSlNPTi5wYXJzZShyZXF1ZXN0KFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9jeS9iaWxpLnR4dFxcXFxcXFwiKSkudXNlck1pZDtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5mYXZvdXJMb2dpYyhhaWQsIHVwTWlkKVxcXFxuICAgICAgICAgICAgfSwgYWlkKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImljb25fc21hbGxfNFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICBpZDogJ3NldEZhdm91cidcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgdGl0bGU6ICfnqI3lkI7lho3nnIsnLFxcXFxuICAgICAgICAgICAgaW1nOiBpbWdMaW5rLueojeWQjuWGjeeciyxcXFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChhaWQpID0+IHtcXFxcbiAgICAgICAgICAgICAgICByZXR1cm4gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5qdWRnZVRvdmlldyhhaWQpXFxcXG4gICAgICAgICAgICB9LCBhaWQpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaWNvbl9zbWFsbF80XFxcXFxcXCIsXFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn5p+l55yL6K+E6K66JyxcXFxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9Db21tZW50cz9wPWZ5cGFnZScsXFxcXG4gICAgICAgICAgICBpbWc6IGltZ0xpbmsu5p+l55yL6K+E6K66LFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaWNvbl9zbWFsbF80XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwiaWRcXFxcXFxcIjogYWlkLFxcXFxuICAgICAgICAgICAgICAgIFxcXFxcXFwidHlwZVxcXFxcXFwiOiAxXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZV9ibGFuaydcXFxcbiAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgdGl0bGU6IHAuZGVzYyxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImxvbmdfdGV4dFxcXFxcXFwiLFxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9IGVsc2Uge1xcXFxuICAgICAgICAvLyDlrZjlnKjlpJrpm4bliIZQXFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogcC50aXRsZSxcXFxcbiAgICAgICAgICAgIGltZzogcC5waWMgKyAnQFJlZmVyZXI9JyxcXFxcbiAgICAgICAgICAgIGRlc2M6J+aSreaUvumHjzonK3Auc3RhdC52aWV3KydcXFxcXFxcXHRcXFxcXFxcXHRcXFxcXFxcXHTlvLnluZXmlbA6JytwLnN0YXQuZGFubWFrdSsnXFxcXFxcXFxu5Y+R5biD5pel5pyfOicrJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS50aW1lQ29udmVydChwLmN0aW1lKSxcXFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChwKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQoJ2hpa2VyOi8vZW1wdHk/ZnlwYWdlJykucnVsZSgocCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICBkID0gW107XFxcXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogcC5kZXNjLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwibG9uZ190ZXh0XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgIHNldFJlc3VsdChkKTtcXFxcbiAgICAgICAgICAgICAgICB9LCBwKVxcXFxuICAgICAgICAgICAgfSwgcCksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJwaWNfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiAnZG3nm5LlrZAnLCBqczogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vcGFnZS9zZXR0aW5nI25vSGlzdG9yeSM/cnVsZT1kbeebkuWtkCc7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+W8ueW5leaOp+WIticsIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICdmYWxzZScpID09ICd0cnVlJykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldEl0ZW0oJ2lzT3ZlcnJpZGVTYXZlJywgJ2ZhbHNlJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W8ueW5leWwhuS4jeWPl2Rt55uS5a2Q5Y+C5pWw5o6n5Yi2JztcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnaXNPdmVycmlkZVNhdmUnLCAndHJ1ZScpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lvLnluZXlsIblj5fliLBkbeebkuWtkOWPguaVsOaOp+WItic7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgfV1cXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgdGl0bGU6ICc8Zm9udCBjb2xvcj1cXFxcXFxcImJsdWVcXFxcXFxcIj4nICsgcC5vd25lci5uYW1lICsgJzwvZm9udD4nLFxcXFxuICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS91cEhvbWVcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGltZzogcC5vd25lci5mYWNlICsgXFxcXFxcXCJAUmVmZXJlcj1cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImF2YXRhclxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICBtaWQ6IHAub3duZXIubWlkLFxcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBwLm93bmVyLm5hbWUsXFxcXG4gICAgICAgICAgICAgICAgZmFjZTogcC5vd25lci5mYWNlXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXFxcbiAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgdGl0bGU6IHAuc3RhdC5saWtlLFxcXFxuICAgICAgICAgICAgaW1nOiBoYXNMaWtlID09IDEgPyBpbWdMaW5rLuW3sueCuei1niA6IGltZ0xpbmsu5pyq54K56LWeLFxcXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKGFpZCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmxpa2VMb2dpYyhhaWQpXFxcXG4gICAgICAgICAgICB9LCBhaWQpLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaWNvbl9zbWFsbF80XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgIGlkOiAnc2V0TGlrZSdcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgdGl0bGU6IHAuc3RhdC5mYXZvcml0ZSxcXFxcbiAgICAgICAgICAgIGltZzogaGFzRmF2b3VyID8gaW1nTGluay7lt7LmlLbol48gOiBpbWdMaW5rLuacquaUtuiXjyxcXFxcbiAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChhaWQpID0+IHtcXFxcbiAgICAgICAgICAgICAgICB1cE1pZCA9IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLnVzZXJNaWQ7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuZmF2b3VyTG9naWMoYWlkLCB1cE1pZClcXFxcbiAgICAgICAgICAgIH0sIGFpZCksXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJpY29uX3NtYWxsXzRcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgaWQ6ICdzZXRGYXZvdXInXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiAn56iN5ZCO5YaN55yLJyxcXFxcbiAgICAgICAgICAgIGltZzogaW1nTGluay7nqI3lkI7lho3nnIssXFxcXG4gICAgICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoYWlkKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuanVkZ2VUb3ZpZXcoYWlkKVxcXFxuICAgICAgICAgICAgfSwgYWlkKSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImljb25fc21hbGxfNFxcXFxcXFwiLFxcXFxuICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICB0aXRsZTogJ+afpeeci+ivhOiuuicsXFxcXG4gICAgICAgICAgICB1cmw6ICdoaWtlcjovL3BhZ2UvQ29tbWVudHM/cD1meXBhZ2UnLFxcXFxuICAgICAgICAgICAgaW1nOiBpbWdMaW5rLuafpeeci+ivhOiuuixcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImljb25fc21hbGxfNFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcImlkXFxcXFxcXCI6IGFpZCxcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcInR5cGVcXFxcXFxcIjogMVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KVxcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcXFxuICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICB0aXRsZTogJ+mAiembhuWIl+ihqCcsXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZGVzYzonPHNtYWxsPjxzbWFsbD7lhbEnICsgcC52aWRlb3MgKyAn5p2h6KeG6aKRPC9zbWFsbD48L3NtYWxsPicsXFxcXG4gICAgICAgICAgICBpbWc6IGltZ0xpbmsu5YiX6KGoLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiYXZhdGFyXFxcXFxcXCIsXFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAnbGluZSdcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIHAucGFnZXMuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgIGNpZCA9IGl0ZW0uY2lkO1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogaXRlbS5wYXJ0LFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6Zm9ybWF0U2Vjb25kcyhpdGVtLmR1cmF0aW9uKSxcXFxcbiAgICAgICAgICAgICAgICAvLyBpbWc6aW1nTGluay7liIZQ5YiX6KGo6aG5LFxcXFxuICAgICAgICAgICAgICAgIGltZzppdGVtLmZpcnN0X2ZyYW1lKydAUmVmZXJlcj0nLFxcXFxuICAgICAgICAgICAgICAgIHVybDogJCgpLmxhenlSdWxlKChhaWQsIGNpZCwgcW4pID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuYmlsaUxhenkoYWlkLCBjaWQsIHFuKS5yZXBsYWNlKC87L2csIFxcXFxcXFwi77yb77ybXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgIH0sIGFpZCArIFxcXFxcXFwiXFxcXFxcXCIsIGNpZCArIFxcXFxcXFwiXFxcXFxcXCIsICcxMTYnKSxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJhdmF0YXJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBleHRyYTp7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlkOidhaWQtJythaWQrJ3xjaWQtJytjaWQsXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9XFxcXG59IGNhdGNoIChlKSB7XFxcXG4gICAgbG9nKGUpO1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiAn6aG16Z2i6LWw5Lii5LqGLi4uJyxcXFxcbiAgICAgICAgaW1nOiAnaHR0cHM6Ly9pMC5oZHNsYi5jb20vYmZzL2dlbmVyYWwvZjdiNjY3MDExYTQ2NjE1NzMyYzcwMWY0YmIxZDA3Zjc5M2Y4ZDFkZi5wbmdAUmVmZXJlcj0nLFxcXFxuICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXFxcbiAgICAgICAgZGVzYzogJ+Wkp+amgueOh+inhumikeiiq+Wwgeemge+8jOaIluiAhXVw5bey6LeR6LevficsXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInBpY18xXFxcXFxcXCJcXFxcbiAgICB9KTtcXFxcbn1cXFxcbnNldFJlc3VsdChkKTtcXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJsb25nX3RleHRcXFwiLFxcXCJuYW1lXFxcIjpcXFwi6K+E6K66XFxcIixcXFwicGF0aFxcXCI6XFxcIkNvbW1lbnRzXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxudmFyIGQgPSBbXTtcXFxcbnZhciBpZCA9IE1ZX1BBUkFNUy5pZDtcXFxcbnZhciB0eXBlID0gTVlfUEFSQU1TLnR5cGU7XFxcXG5sb2coaWQpO1xcXFxuaWYgKE1ZX1BBR0UgPT0gMSkge1xcXFxuICAgIC8vIOiyjOS8vOaaguaXtuWPquiDveaWh+WtlyvmlbDlrZdcXFxcbiAgICBkLnVuc2hpZnQoe1xcXFxuICAgICAgICB0aXRsZTogXFxcXFxcXCLlj5HmnaHor4TorrrlkKdcXFxcXFxcIixcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaW5wdXRcXFxcXFxcIixcXFxcbiAgICAgICAgdXJsOiAkLnRvU3RyaW5nKChpZCx0eXBlKSA9PiB7XFxcXG4gICAgICAgICAgICBsZXQgY3NyZiA9IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLmNvb2tpZS5tYXRjaCgvYmlsaV9qY3Q9KC4qPyk7LylbMV07XFxcXG4gICAgICAgICAgICBwb3N0KFxcXFxcXFwiaHR0cDovL2FwaS5iaWxpYmlsaS5jb20veC92Mi9yZXBseS9hZGRcXFxcXFxcIiwge1xcXFxuICAgICAgICAgICAgICAgIGJvZHk6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJ0eXBlXFxcXFxcXCI6IHR5cGUsXFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwib2lkXFxcXFxcXCI6IGlkLFxcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcImNzcmZcXFxcXFxcIjogY3NyZixcXFxcbiAgICAgICAgICAgICAgICAgICAgXFxcXFxcXCJtZXNzYWdlXFxcXFxcXCI6IGlucHV0XFxcXG4gICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLmNvb2tpZVxcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxcXG4gICAgICAgIH0sIGlkLHR5cGUpXFxcXG4gICAgfSlcXFxcbn1cXFxcbmxldCBkYXRhID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5nZXRDb21tZW50cyhpZCx0eXBlLE1ZX1BBR0UpO1xcXFxuLy8gbG9nKGRhdGEpO1xcXFxuaWYoZGF0YSl7XFxcXG4gICAgZGF0YS5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IGl0ZW0ubWVtYmVyLnVuYW1lLFxcXFxuICAgICAgICAgICAgaW1nOiBpdGVtLm1lbWJlci5hdmF0YXIrJ0BSZWZlcmVyPScsXFxcXG4gICAgICAgICAgICB1cmw6J2hpa2VyOi8vcGFnZS91cEhvbWUnLFxcXFxuICAgICAgICAgICAgZGVzYzonPHNtYWxsPjxzbWFsbD48Zm9udCBjb2xvcj1cXFxcXFxcImdyZXlcXFxcXFxcIj4nK2l0ZW0ucmVwbHlfY29udHJvbC5sb2NhdGlvbiArIFxcXFxcXFwiIFxcXFxcXFwiICsgaXRlbS5yZXBseV9jb250cm9sLnRpbWVfZGVzYysnPC9mb250Pjwvc21hbGw+PC9zbWFsbD4nLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiYXZhdGFyXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgIG1pZDogaXRlbS5tZW1iZXIubWlkLFxcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBpdGVtLm1lbWJlci51bmFtZSxcXFxcbiAgICAgICAgICAgICAgICBmYWNlOiBpdGVtLm1lbWJlci5hdmF0YXJcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSlcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBpdGVtLmNvbnRlbnQubWVzc2FnZSxcXFxcbiAgICAgICAgfSlcXFxcbiAgICB9KVxcXFxufWVsc2V7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6ICflpb3lg4/msqHmnInor4TorrrkuobllabvvIzvvIEnLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgfSlcXFxcbn1cXFxcbnNldFJlc3VsdChkKTtcXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuiuoumYheWIl+ihqFxcXCIsXFxcInBhdGhcXFwiOlxcXCJzdWJzY3JpcHRpb25cXFwiLFxcXCJydWxlXFxcIjpcXFwiaWYgKGdldEl0ZW0oJ+iuoumYheexu+WeiycsICcxJykgPT0gJzEnKSB7XFxcXG5cXFxcbsKgIMKgIHR5cGVyTmFtZSA9ICfov73nlaonO1xcXFxuXFxcXG59IGVsc2Uge1xcXFxuXFxcXG7CoCDCoCB0eXBlck5hbWUgPSAn6L+95YmnJztcXFxcblxcXFxufVxcXFxuXFxcXG5kLnB1c2goe1xcXFxuXFxcXG7CoCDCoCB0aXRsZTogJ+i/veeVqicgPT0gdHlwZXJOYW1lID8gJ+KAmOKAmOKAmeKAmTxmb250IGNvbG9yPVxcXFxcXFwicmVkXFxcXFxcXCI+6L+955WqPC9mb250PicgOiAn6L+955WqJyxcXFxcblxcXFxuwqAgwqAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKCkgPT4ge1xcXFxuXFxcXG7CoCDCoCDCoCDCoCBzZXRJdGVtKCforqLpmIXnsbvlnosnLCAnMScpXFxcXG5cXFxcbsKgIMKgIMKgIMKgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuXFxcXG7CoCDCoCDCoCDCoCByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCI7XFxcXG5cXFxcbsKgIMKgIH0pLFxcXFxuXFxcXG7CoCDCoCBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG5cXFxcbn0se1xcXFxuXFxcXG7CoCDCoCB0aXRsZTogJ+i/veWJpycgPT0gdHlwZXJOYW1lID8gJ+KAmOKAmOKAmeKAmTxmb250IGNvbG9yPVxcXFxcXFwicmVkXFxcXFxcXCI+6L+95YmnPC9mb250PicgOiAn6L+95YmnJyxcXFxcblxcXFxuwqAgwqAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKCkgPT4ge1xcXFxuXFxcXG7CoCDCoCDCoCDCoCBzZXRJdGVtKCforqLpmIXnsbvlnosnLCAnMicpXFxcXG5cXFxcbsKgIMKgIMKgIMKgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxuXFxcXG7CoCDCoCDCoCDCoCByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCI7XFxcXG5cXFxcbsKgIMKgIH0pLFxcXFxuXFxcXG7CoCDCoCBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxcXG5cXFxcbn0pO1xcXFxuXFxcXG5zdWJzY3JpcHRpb25zID0gSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3NwYWNlL2Jhbmd1bWkvZm9sbG93L2xpc3Q/dHlwZT1cXFxcXFxcIiArIGdldEl0ZW0oJ+iuoumYheexu+WeiycsICcxJykgKyBcXFxcXFxcIiZmb2xsb3dfc3RhdHVzPTAmcG49XFxcXFxcXCIgKyBwYWdlICsgXFxcXFxcXCImcHM9MTUmdm1pZD1cXFxcXFxcIiArIG1pZCwge1xcXFxuXFxcXG7CoCDCoCBoZWFkZXJzOiB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IGNvb2tpZVxcXFxuXFxcXG7CoCDCoCB9XFxcXG5cXFxcbn0pKS5kYXRhO1xcXFxuXFxcXG5pZiAocGFnZSA9PSAxKSB7XFxcXG5cXFxcbsKgIMKgIGQucHVzaCh7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIHRpdGxlOiBcXFxcXFxcIuW9k+WJjVxcXFxcXFwiICsgdHlwZXJOYW1lICsgXFxcXFxcXCLmlbDph486XFxcXFxcXCIgKyBzdWJzY3JpcHRpb25zLnRvdGFsLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCJcXFxcblxcXFxuwqAgwqAgfSlcXFxcblxcXFxufVxcXFxuXFxcXG5zdWJzY3JpcHRpb25zLmxpc3QuZm9yRWFjaChsaXN0ID0+IHtcXFxcblxcXFxuwqAgwqAgZC5wdXNoKHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgdGl0bGU6IGxpc3QudGl0bGUsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIGltZzogbGlzdC5jb3ZlciArIFxcXFxcXFwiQFJlZmVyZXI9XFxcXFxcXCIsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIHVybDogXFxcXFxcXCJoaWtlcjovL3BhZ2UvZmlsbWVyamkjaW1tZXJzaXZlVGhlbWUjXFxcXFxcXCIsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIGRlc2M6IGxpc3QuZXZhbHVhdGUuc3Vic3RyaW5nKDAsIDEyKSArICfigJjigJjigJnigJnigKY8Zm9udCBjb2xvcj1cXFxcXFxcIiMxQzFDMUNcXFxcXFxcIj7or6bmg4U8L2ZvbnQ+JyArICdcXFxcXFxcXG4nICsgbGlzdC5zZWFzb25fdHlwZV9uYW1lICsgJ3wnICsgKGxpc3QuYXJlYXM9PT11bmRlZmluZWQ/Jyc6bGlzdC5hcmVhc1swXS5uYW1lICsgJ1xcXFxcXFxcbicpICsgKGxpc3QucHJvZ3Jlc3MgPT0gJycgPyAn5bCa5pyq6KeC55yLJyA6IGxpc3QucHJvZ3Jlc3MpICsgKGxpc3QubmV3X2VwLmluZGV4X3Nob3c9PT11bmRlZmluZWQ/Jyc6J3wnKyhsaXN0Lm5ld19lcC5pbmRleF9zaG93Lm1hdGNoKC/mm7TmlrB85Y2z5bCGLykgPyAn4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9XFxcXFxcXCJyZWRcXFxcXFxcIj4nICsgbGlzdC5uZXdfZXAuaW5kZXhfc2hvdyArICc8L2ZvbnQ+JzogbGlzdC5uZXdfZXAuaW5kZXhfc2hvdykpLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCBjb2xfdHlwZTogJ21vdmllXzFfdmVydGljYWxfcGljJyxcXFxcblxcXFxuwqAgwqAgwqAgwqAgZXh0cmE6IHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgc2Vhc29uX2lkOiBsaXN0LnNlYXNvbl9pZFxcXFxuXFxcXG7CoCDCoCDCoCDCoCB9XFxcXG5cXFxcbsKgIMKgIH0pO1xcXFxuXFxcXG59KTtcXFxcblxcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5YWz5rOo5YiX6KGoXFxcIixcXFwicGF0aFxcXCI6XFxcImF0dGVudGlvblxcXCIsXFxcInJ1bGVcXFwiOlxcXCJpZiAoTVlfUEFHRSA9PSAxKSB7XFxcXG5cXFxcbsKgIMKgIGZvY3VzR3JvdXBzPSQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikuZ2V0TXlBdHRlbnRpb25Hcm91cExpc3QoKTtcXFxcblxcXFxuwqAgwqAgcHV0TXlWYXIoJ3RlbXBJZCcsIEpTT04uc3RyaW5naWZ5KGZvY3VzR3JvdXBzWzFdLnRhZ2lkKSk7XFxcXG5cXFxcbsKgIMKgIGZvY3VzR3JvdXBzLmZvckVhY2gobGlzdCA9PiB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIGQucHVzaCh7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiBsaXN0LnRhZ2lkID09IGdldEl0ZW0oJ+WFs+azqOWIhue7hCcsIEpTT04uc3RyaW5naWZ5KGZvY3VzR3JvdXBzWzFdLmlkKSkgPyBcXFxcXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSdyZWQnPlxcXFxcXFwiICsgbGlzdC5uYW1lICsgbGlzdC5jb3VudCArIFxcXFxcXFwiPC9mb250PlxcXFxcXFwiIDogbGlzdC5uYW1lICsgbGlzdC5jb3VudCxcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKGxpc3QpID0+IHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgc2V0SXRlbSgn5YWz5rOo5YiG57uEJywgSlNPTi5zdHJpbmdpZnkobGlzdC50YWdpZCkpO1xcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCByZWZyZXNoUGFnZSh0cnVlKTtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/liIfmjaLlhbPms6jliIbnu4TkuLo6XFxcXFxcXCIgKyBsaXN0Lm5hbWU7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIH0sIGxpc3QpLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCB9KTtcXFxcblxcXFxuwqAgwqAgfSk7XFxcXG5cXFxcbsKgIMKgIC8vIOacq+WwvuihpeWFheaChOaChOWFs+azqOWIhue7hFxcXFxuXFxcXG7CoCDCoCBkLnB1c2goe1xcXFxuXFxcXG7CoCDCoCDCoCDCoCB0aXRsZTogJ+aChOaChOWFs+azqCcgPT0gZ2V0SXRlbSgn5YWz5rOo5YiG57uEJywgSlNPTi5zdHJpbmdpZnkoZm9jdXNHcm91cHNbMF0uaWQpKSA/IFxcXFxcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9J3JlZCc+5oKE5oKE5YWz5rOoPC9mb250PlxcXFxcXFwiIDogXFxcXFxcXCLmgoTmgoTlhbPms6hcXFxcXFxcIixcXFxcblxcXFxuwqAgwqAgwqAgwqAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKCkgPT4ge1xcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBzZXRJdGVtKCflhbPms6jliIbnu4QnLCBcXFxcXFxcIuaChOaChOWFs+azqFxcXFxcXFwiKTtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgcmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5YiH5o2i5YWz5rOo5YiG57uE5Li6OlxcXFxcXFwiICsgXFxcXFxcXCLmgoTmgoTlhbPms6hcXFxcXFxcIjtcXFxcblxcXFxuwqAgwqAgwqAgwqAgfSksXFxcXG5cXFxcbsKgIMKgIMKgIMKgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbicsXFxcXG5cXFxcbsKgIMKgIH0se1xcXFxuXFxcXG7CoCDCoCDCoCDCoCBjb2xfdHlwZTogJ2xpbmUnXFxcXG5cXFxcbsKgIMKgIH0pO1xcXFxuXFxcXG59XFxcXG5cXFxcbmlmIChnZXRJdGVtKCflhbPms6jliIbnu4QnKT09J+aChOaChOWFs+azqCcpIHtcXFxcblxcXFxuwqAgwqAgZ3JvdXBDb250ZW50ID0gSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3JlbGF0aW9uL3doaXNwZXJzP3BuPVxcXFxcXFwiK3BhZ2UrXFxcXFxcXCImcHM9MjAmanNvbnA9anNvbnBcXFxcXFxcIiwge1xcXFxuXFxcXG7CoCDCoCDCoCDCoCBoZWFkZXJzOiB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIFxcXFxcXFwiQ29va2llXFxcXFxcXCI6IGNvb2tpZVxcXFxuXFxcXG7CoCDCoCDCoCDCoCB9XFxcXG5cXFxcbsKgIMKgIH0pKS5kYXRhLmxpc3Q7XFxcXG5cXFxcbsKgIMKgIGdyb3VwQ29udGVudC5mb3JFYWNoKGxpc3QgPT4ge1xcXFxuXFxcXG7CoCDCoCDCoCDCoCBkLnB1c2goe1xcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogXFxcXFxcXCI8YmlnPjxmb250IGNvbG9yPSdibHVlJz5cXFxcXFxcIiArIGxpc3QudW5hbWUgKyBcXFxcXFxcIjwvZm9udD48L2JpZz48c21hbGw+XFxcXFxcXCIgKyBsaXN0LnNpZ24gKyBcXFxcXFxcIjwvc21hbGw+XFxcXFxcXCIsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIGltZzogbGlzdC5mYWNlICsgXFxcXFxcXCJAUmVmZXJlcj1cXFxcXFxcIixcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgY29sX3R5cGU6ICdhdmF0YXInLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3VwSG9tZVxcXFxcXFwiLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBleHRyYToge1xcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBtaWQ6IGxpc3QubWlkLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogbGlzdC51bmFtZSxcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZmFjZTogbGlzdC5mYWNlXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIH1cXFxcblxcXFxuwqAgwqAgwqAgwqAgfSk7XFxcXG5cXFxcbsKgIMKgIH0pO1xcXFxuXFxcXG59ZWxzZXtcXFxcblxcXFxuwqAgwqAgZ3JvdXBDb250ZW50ID0gSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3JlbGF0aW9uL3RhZz9taWQ9XFxcXFxcXCIgKyBtaWQgKyBcXFxcXFxcIiZ0YWdpZD1cXFxcXFxcIiArIGdldEl0ZW0oJ+WFs+azqOWIhue7hCcsIGdldE15VmFyKCd0ZW1wSWQnKSkgKyBcXFxcXFxcIiZwbj1cXFxcXFxcIiArIHBhZ2UgKyBcXFxcXFxcIiZwcz0yMCZqc29ucD1qc29ucFxcXFxcXFwiLCB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIGhlYWRlcnM6IHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogY29va2llXFxcXG5cXFxcbsKgIMKgIMKgIMKgIH1cXFxcblxcXFxuwqAgwqAgfSkpLmRhdGE7XFxcXG5cXFxcbsKgIMKgIGdyb3VwQ29udGVudC5mb3JFYWNoKGxpc3QgPT4ge1xcXFxuXFxcXG7CoCDCoCDCoCDCoCBkLnB1c2goe1xcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogXFxcXFxcXCI8YmlnPjxmb250IGNvbG9yPSdibHVlJz5cXFxcXFxcIiArIGxpc3QudW5hbWUgKyBcXFxcXFxcIjwvZm9udD48L2JpZz48c21hbGw+XFxcXFxcXCIgKyBsaXN0LnNpZ24gKyBcXFxcXFxcIjwvc21hbGw+XFxcXFxcXCIsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIGltZzogbGlzdC5mYWNlICsgXFxcXFxcXCJAUmVmZXJlcj1cXFxcXFxcIixcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgY29sX3R5cGU6ICdhdmF0YXInLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3VwSG9tZVxcXFxcXFwiLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBleHRyYToge1xcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBtaWQ6IGxpc3QubWlkLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogbGlzdC51bmFtZSxcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZmFjZTogbGlzdC5mYWNlXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIH1cXFxcblxcXFxuwqAgwqAgwqAgwqAgfSk7XFxcXG5cXFxcbsKgIMKgIH0pO1xcXFxuXFxcXG59XFxcXG5cXFxcblxcXFxuXFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5pS26JeP5YiX6KGoXFxcIixcXFwicGF0aFxcXCI6XFxcImNvbGVjdGlvblxcXCIsXFxcInJ1bGVcXFwiOlxcXCJpZiAocGFnZSA9PSAxKSB7XFxcXHJcXFxcbiAgICBkLnB1c2goe1xcXFxyXFxcXG4gICAgICAgIHRpdGxlOiAn5oiR5Yib5bu655qE5pS26JeP5aS5JyA9PSBnZXRJdGVtKCfmlLbol4/nsbvlnosnLCAn5oiR5Yib5bu655qE5pS26JeP5aS5JykgPyAn4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9XFxcXFxcXCJyZWRcXFxcXFxcIj7miJHliJvlu7rnmoTmlLbol4/lpLk8L2ZvbnQ+JyA6ICfmiJHliJvlu7rnmoTmlLbol4/lpLknLFxcXFxyXFxcXG4gICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKCgpID0+IHtcXFxcclxcXFxuICAgICAgICAgICAgc2V0SXRlbSgn5pS26JeP57G75Z6LJywgJ+aIkeWIm+W7uueahOaUtuiXj+WkuScpXFxcXHJcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxyXFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCI7XFxcXHJcXFxcbiAgICAgICAgfSksXFxcXHJcXFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcXFxyXFxcXG4gICAgfSwge1xcXFxyXFxcXG4gICAgICAgIHRpdGxlOiAn56iN5ZCO5Zyo55yLJyA9PSBnZXRJdGVtKCfmlLbol4/nsbvlnosnLCAn5oiR5Yib5bu655qE5pS26JeP5aS5JykgPyAn4oCY4oCY4oCZ4oCZPGZvbnQgY29sb3I9XFxcXFxcXCJyZWRcXFxcXFxcIj7nqI3lkI7lnKjnnIs8L2ZvbnQ+JyA6ICfnqI3lkI7lnKjnnIsnLFxcXFxyXFxcXG4gICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKCgpID0+IHtcXFxcclxcXFxuICAgICAgICAgICAgc2V0SXRlbSgn5pS26JeP57G75Z6LJywgJ+eojeWQjuWcqOeciycpXFxcXHJcXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxyXFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCI7XFxcXHJcXFxcbiAgICAgICAgfSksXFxcXHJcXFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcXFxyXFxcXG4gICAgfSk7XFxcXHJcXFxcbn1cXFxcclxcXFxuaWYgKGdldEl0ZW0oJ+aUtuiXj+exu+WeiycsICfmiJHliJvlu7rnmoTmlLbol4/lpLknKSA9PSAn5oiR5Yib5bu655qE5pS26JeP5aS5Jykge1xcXFxyXFxcXG4gICAgdHJ5IHtcXFxcclxcXFxuICAgICAgICBpZiAocGFnZSA9PSAxKSB7XFxcXHJcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICAvLyBjb2xfdHlwZTogJ2JsYW5rX2Jsb2NrJ1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcXFxyXFxcXG4gICAgICAgICAgICB9LCApO1xcXFxyXFxcXG4gICAgICAgIH1cXFxcclxcXFxuICAgICAgICBjb2xsZWN0aW9ucyA9IEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC92My9mYXYvZm9sZGVyL2xpc3Q0bmF2aWdhdGVcXFxcXFxcIiwge1xcXFxyXFxcXG4gICAgICAgICAgICBoZWFkZXJzOiB7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBjb29raWVcXFxcclxcXFxuICAgICAgICAgICAgfVxcXFxyXFxcXG4gICAgICAgIH0pKS5kYXRhO1xcXFxyXFxcXG4gICAgICAgIGdyb3VwcyA9IGNvbGxlY3Rpb25zWzBdLm1lZGlhTGlzdFJlc3BvbnNlLmxpc3Q7XFxcXHJcXFxcbiAgICAgICAgcHV0TXlWYXIoJ3RlbXBJZCcsIEpTT04uc3RyaW5naWZ5KGdyb3Vwc1swXS5pZCkpO1xcXFxyXFxcXG4gICAgICAgIGdyb3Vwcy5mb3JFYWNoKGxpc3QgPT4ge1xcXFxyXFxcXG4gICAgICAgICAgICBkLnB1c2goe1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGxpc3QuaWQgPT0gZ2V0SXRlbSgn5pS26JeP5aS5JywgSlNPTi5zdHJpbmdpZnkoZ3JvdXBzWzBdLmlkKSkgPyBcXFxcXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSdyZWQnPlxcXFxcXFwiICsgbGlzdC50aXRsZSArIFxcXFxcXFwiPC9mb250PlxcXFxcXFwiIDogbGlzdC50aXRsZSxcXFxcclxcXFxuICAgICAgICAgICAgICAgIHVybDogJCgnI25vTG9hZGluZyMjbm9IaXN0b3J5IycpLmxhenlSdWxlKChsaXN0KSA9PiB7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgn5pS26JeP5aS5JywgSlNPTi5zdHJpbmdpZnkobGlzdC5pZCkpO1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKHRydWUpO1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8v5YiH5o2i5pS26JeP5aS55Li6OlxcXFxcXFwiICsgbGlzdC50aXRsZTtcXFxcclxcXFxuICAgICAgICAgICAgICAgIH0sIGxpc3QpLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJyxcXFxcclxcXFxuICAgICAgICAgICAgfSk7XFxcXHJcXFxcbiAgICAgICAgfSk7XFxcXHJcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcclxcXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lJ1xcXFxyXFxcXG4gICAgICAgIH0pO1xcXFxyXFxcXG4gICAgICAgIGdyb3VwQ29udGVudCA9IEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC92My9mYXYvcmVzb3VyY2UvbGlzdD9tZWRpYV9pZD1cXFxcXFxcIiArIGdldEl0ZW0oJ+aUtuiXj+WkuScsIGdldE15VmFyKCd0ZW1wSWQnKSkgKyBcXFxcXFxcIiZwbj1cXFxcXFxcIiArIHBhZ2UgKyBcXFxcXFxcIiZwcz0yMCZrZXl3b3JkPSZvcmRlcj1tdGltZSZ0eXBlPTAmdGlkPTAmcGxhdGZvcm09d2ViJmpzb25wPWpzb25wXFxcXFxcXCIsIHtcXFxcclxcXFxuICAgICAgICAgICAgaGVhZGVyczoge1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogY29va2llXFxcXHJcXFxcbiAgICAgICAgICAgIH1cXFxcclxcXFxuICAgICAgICB9KSkuZGF0YS5tZWRpYXM7XFxcXHJcXFxcbiAgICAgICAgZ3JvdXBDb250ZW50LmZvckVhY2gobGlzdCA9PiB7XFxcXHJcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogbGlzdC50aXRsZSxcXFxcclxcXFxuICAgICAgICAgICAgICAgIGltZzogbGlzdC5jb3ZlciArIFxcXFxcXFwiQFJlZmVyZXI9XFxcXFxcXCIsXFxcXHJcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS92aWRlb1xcXFxcXFwiLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgZGVzYzogJ1VQOicgKyBsaXN0LnVwcGVyLm5hbWUgKyAnXFxcXFxcXFxuJyArIGxpc3QuaW50cm8sXFxcXHJcXFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcXFxyXFxcXG4gICAgICAgICAgICAgICAgICAgIGFpZDogbGlzdC5pZCxcXFxcclxcXFxuICAgICAgICAgICAgICAgICAgICBtaWQ6IGxpc3QudXBwZXIubWlkXFxcXHJcXFxcbiAgICAgICAgICAgICAgICB9XFxcXHJcXFxcbiAgICAgICAgICAgIH0pO1xcXFxyXFxcXG4gICAgICAgIH0pO1xcXFxyXFxcXG4gICAgfSBjYXRjaCAoZSkge1xcXFxyXFxcXG4gICAgICAgIHNob3dMb2FkaW5nKCflhYTlvJ/vvIzkvaDnoa7orqTkvaDmnInmlLbol4/lkJfvvIzlv6vljrvmlLbol4/kuIDkuKrop4bpopF+Jyk7XFxcXHJcXFxcbiAgICB9XFxcXHJcXFxcbn0gZWxzZSB7XFxcXHJcXFxcbiAgICBsYXRlclZpZXdzID0gSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3YyL2hpc3RvcnkvdG92aWV3L3dlYj9qc29ucD1qc29ucFxcXFxcXFwiLCB7XFxcXHJcXFxcbiAgICAgICAgaGVhZGVyczoge1xcXFxyXFxcXG4gICAgICAgICAgICBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBjb29raWVcXFxcclxcXFxuICAgICAgICB9XFxcXHJcXFxcbiAgICB9KSkuZGF0YTtcXFxcclxcXFxuICAgIGNvdW50ID0gbGF0ZXJWaWV3cy5jb3VudDtcXFxcclxcXFxuICAgIGQucHVzaCh7XFxcXHJcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi5YWx5pyJXFxcXFxcXCIgKyBjb3VudCArIFxcXFxcXFwi5p2h5b6F55yL6KeG6aKR6K6w5b2VXFxcXFxcXCIsXFxcXHJcXFxcbiAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIixcXFxcclxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCJcXFxcclxcXFxuICAgIH0pO1xcXFxyXFxcXG4gICAgbGF0ZXJWaWV3cy5saXN0LmZvckVhY2gobGlzdCA9PiB7XFxcXHJcXFxcbiAgICAgICAgZC5wdXNoKHtcXFxcclxcXFxuICAgICAgICAgICAgdGl0bGU6IGxpc3QudGl0bGUsXFxcXHJcXFxcbiAgICAgICAgICAgIGltZzogbGlzdC5waWMgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxyXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcXFxyXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3ZpZGVvXFxcXFxcXCIsXFxcXHJcXFxcbiAgICAgICAgICAgIGRlc2M6ICdVUDonICsgbGlzdC5vd25lci5uYW1lICsgJ1xcXFxcXFxcbicgKyBsaXN0LmRlc2MsXFxcXHJcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxcXHJcXFxcbiAgICAgICAgICAgICAgICBhaWQ6IGxpc3QuYWlkLFxcXFxyXFxcXG4gICAgICAgICAgICAgICAgbWlkOiBsaXN0Lm93bmVyLm1pZFxcXFxyXFxcXG4gICAgICAgICAgICB9XFxcXHJcXFxcbiAgICAgICAgfSk7XFxcXHJcXFxcbiAgICB9KTtcXFxcclxcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIui2s+i/uVxcXCIsXFxcInBhdGhcXFwiOlxcXCJ0cmFja1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJ2YXIgbmV4dEluZm8gPSB7fTtcXFxcblxcXFxuaWYgKHBhZ2UgPT0gMSkge1xcXFxuXFxcXG7CoCDCoCBoaXN0b3JpZXMgPSBKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3gvd2ViLWludGVyZmFjZS9oaXN0b3J5L2N1cnNvcj9tYXg9MCZ2aWV3X2F0PTAmYnVzaW5lc3M9XFxcXFxcXCIsIHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgaGVhZGVyczoge1xcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBcXFxcXFxcIkNvb2tpZVxcXFxcXFwiOiBjb29raWVcXFxcblxcXFxuwqAgwqAgwqAgwqAgfVxcXFxuXFxcXG7CoCDCoCB9KSkuZGF0YTtcXFxcblxcXFxuwqAgwqAgbmV4dEluZm8ubWF4ID0gaGlzdG9yaWVzLmN1cnNvci5tYXg7XFxcXG5cXFxcbsKgIMKgIG5leHRJbmZvLnZpZXdfYXQgPSBoaXN0b3JpZXMuY3Vyc29yLnZpZXdfYXQ7XFxcXG5cXFxcbsKgIMKgIG5leHRJbmZvLmJ1c2luZXNzID0gaGlzdG9yaWVzLmN1cnNvci5idXNpbmVzcztcXFxcblxcXFxufSBlbHNlIHtcXFxcblxcXFxuwqAgwqAgaGlzdG9yaWVzID0gSlNPTi5wYXJzZShmZXRjaChcXFxcXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2UvaGlzdG9yeS9jdXJzb3I/bWF4PVxcXFxcXFwiICsgc3RvcmFnZTAuZ2V0TXlWYXIoSlNPTi5zdHJpbmdpZnkocGFnZSkpLm1heCArIFxcXFxcXFwiJnZpZXdfYXQ9XFxcXFxcXCIgKyBzdG9yYWdlMC5nZXRNeVZhcihKU09OLnN0cmluZ2lmeShwYWdlKSkudmlld19hdCArIFxcXFxcXFwiJmJ1c2luZXNzPVxcXFxcXFwiICsgc3RvcmFnZTAuZ2V0TXlWYXIoSlNPTi5zdHJpbmdpZnkocGFnZSkpLmJ1c2luZXNzLCB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIGhlYWRlcnM6IHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgXFxcXFxcXCJDb29raWVcXFxcXFxcIjogY29va2llXFxcXG5cXFxcbsKgIMKgIMKgIMKgIH1cXFxcblxcXFxuwqAgwqAgfSkpLmRhdGE7XFxcXG5cXFxcbsKgIMKgIG5leHRJbmZvLm1heCA9IGhpc3Rvcmllcy5jdXJzb3IubWF4O1xcXFxuXFxcXG7CoCDCoCBuZXh0SW5mby52aWV3X2F0ID0gaGlzdG9yaWVzLmN1cnNvci52aWV3X2F0O1xcXFxuXFxcXG7CoCDCoCBuZXh0SW5mby5idXNpbmVzcyA9IGhpc3Rvcmllcy5jdXJzb3IuYnVzaW5lc3M7XFxcXG5cXFxcbn1cXFxcblxcXFxuc3RvcmFnZTAucHV0TXlWYXIoSlNPTi5zdHJpbmdpZnkocGFnZSArIDEpLCBuZXh0SW5mbyk7XFxcXG5cXFxcbmhpc3Rvcmllcy5saXN0LmZvckVhY2gobGlzdCA9PiB7XFxcXG5cXFxcbsKgIMKgIHZpZXdUaW1lPXBidGltZSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9hcGlcXFxcXFxcIikudGltZUNvbnZlcnQobGlzdC52aWV3X2F0KTtcXFxcblxcXFxuwqAgwqAgaWYgKGxpc3QuaGlzdG9yeS5idXNpbmVzcyA9PSAnYXJ0aWNsZScpIHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgLy8g5LiT5qCP5paH56ugXFxcXG5cXFxcbsKgIMKgIMKgIMKgIGQucHVzaCh7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiBsaXN0LnNob3dfdGl0bGU9PScnP2xpc3QudGl0bGU6bGlzdC5zaG93X3RpdGxlLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBpbWc6IGxpc3QuY292ZXJzWzBdICsgXFxcXFxcXCJAUmVmZXJlcj1cXFxcXFxcIixcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9hcnRpY2xlRGV0YWlsXFxcXFxcXCIsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIGRlc2M6IChsaXN0LmF1dGhvcl9uYW1lPT0nJz92aWV3VGltZTonVVA6JyArIGxpc3QuYXV0aG9yX25hbWUrJ1xcXFxcXFxcbicgKSsgdmlld1RpbWUsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIGV4dHJhOiB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGlkOiBsaXN0Lmhpc3Rvcnkub2lkLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCB9XFxcXG5cXFxcbsKgIMKgIMKgIMKgIH0pO1xcXFxuXFxcXG7CoCDCoCB9IGVsc2UgaWYobGlzdC5oaXN0b3J5LmJ1c2luZXNzID09ICdhcnRpY2xlLWxpc3QnKXtcXFxcblxcXFxuwqAgwqAgwqAgwqAgLy8g5paH56ug5YiX6KGo77yf77yI5Y+N5q2jaWTlrZjmlL7kvY3nva7kuI3kuIDmoLfvvIlcXFxcblxcXFxuwqAgwqAgwqAgwqAgZC5wdXNoKHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgdGl0bGU6IGxpc3Quc2hvd190aXRsZT09Jyc/bGlzdC50aXRsZTpsaXN0LnNob3dfdGl0bGUsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIGltZzogbGlzdC5jb3ZlcnNbMF0gKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FydGljbGVEZXRhaWxcXFxcXFxcIixcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgZGVzYzogKGxpc3QuYXV0aG9yX25hbWU9PScnP3ZpZXdUaW1lOidVUDonICsgbGlzdC5hdXRob3JfbmFtZSsnXFxcXFxcXFxuJyApKyB2aWV3VGltZSxcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgZXh0cmE6IHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWQ6IGxpc3QuaGlzdG9yeS5jaWQsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIH1cXFxcblxcXFxuwqAgwqAgwqAgwqAgfSk7XFxcXG5cXFxcbsKgIMKgIH1lbHNlIGlmKGxpc3QuaGlzdG9yeS5idXNpbmVzcyA9PSAncGdjJyl7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIC8vIOezu+WIl+WJp+mbhu+8iOWNlembhu+8iVxcXFxuXFxcXG7CoCDCoCDCoCDCoCBkLnB1c2goe1xcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogbGlzdC5zaG93X3RpdGxlPT0nJz9saXN0LnRpdGxlOmxpc3Quc2hvd190aXRsZSxcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgaW1nOiBsaXN0LmNvdmVyICsgXFxcXFxcXCJAUmVmZXJlcj1cXFxcXFxcIixcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgY29sX3R5cGU6ICdtb3ZpZV8xX2xlZnRfcGljJyxcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9maWxtZXJqaSNpbW1lcnNpdmVUaGVtZSNcXFxcXFxcIixcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgZGVzYzogKGxpc3QuYXV0aG9yX25hbWU9PScnP2xpc3QudGFnX25hbWUrJ1xcXFxcXFxcdFxcXFxcXFxcdCcrbGlzdC5uZXdfZGVzYysnXFxcXFxcXFxuJyt2aWV3VGltZTonVVA6JyArIGxpc3QuYXV0aG9yX25hbWUrJ1xcXFxcXFxcbicrdmlld1RpbWUpLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBleHRyYToge1xcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBlcF9pZDpsaXN0Lmhpc3RvcnkuZXBpZFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCB9XFxcXG5cXFxcbsKgIMKgIMKgIMKgIH0pO1xcXFxuXFxcXG7CoCDCoCB9ZWxzZSB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIC8vIOaZrumAmnZpZGVvXFxcXG5cXFxcbsKgIMKgIMKgIMKgIGQucHVzaCh7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIHRpdGxlOiBsaXN0LnNob3dfdGl0bGU9PScnP2xpc3QudGl0bGU6bGlzdC5zaG93X3RpdGxlLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBpbWc6IGxpc3QuY292ZXIgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3ZpZGVvXFxcXFxcXCIsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIGRlc2M6IChsaXN0LmF1dGhvcl9uYW1lPT0nJz9saXN0LnRhZ19uYW1lKydcXFxcXFxcXHRcXFxcXFxcXHQnK2xpc3QubmV3X2Rlc2MrJ1xcXFxcXFxcbicrdmlld1RpbWU6J1VQOicgKyBsaXN0LmF1dGhvcl9uYW1lKydcXFxcXFxcXG4nK3ZpZXdUaW1lKSxcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgZXh0cmE6IHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgYWlkOiBsaXN0Lmhpc3Rvcnkub2lkLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCB9XFxcXG5cXFxcbsKgIMKgIMKgIMKgIH0pO1xcXFxuXFxcXG7CoCDCoCB9XFxcXG5cXFxcbn0pO1xcXFxuXFxcXG5cXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuWKqOaAgVxcXCIsXFxcInBhdGhcXFwiOlxcXCJsYXRldE5ld3NcXFwiLFxcXCJydWxlXFxcIjpcXFwiZC5wdXNoKHtcXFxcblxcXFxuwqAgwqAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcXFxuXFxcXG59KTtcXFxcblxcXFxubGF0ZW5ld3M9JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5nZXREeW5hbWljRGF0YSgnbXlIb21lJyk7XFxcXG5cXFxcbmV2YWwoJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5zaG93RHluYW1pY0RhdGEoKSk7XFxcXG5cXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuS4k+agj+WIl+ihqFxcXCIsXFxcInBhdGhcXFwiOlxcXCJhY3RpY2xlTGlzdFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcblxcXFxudmFyIGQ9W107XFxcXG5cXFxcbnBhZ2U9TVlfUEFHRTtcXFxcblxcXFxudXBNaWQgPSBNWV9QQVJBTVMubWlkICsgXFxcXFxcXCJcXFxcXFxcIjtcXFxcblxcXFxuYXJ0aWNsZUxpc3Q9JC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FwaVxcXFxcXFwiKS5nZXRVc2VyQXJ0aWNsZSh1cE1pZCxwYWdlKTtcXFxcblxcXFxuYXJ0aWNsZU51bT1hcnRpY2xlTGlzdC5jb3VudDtcXFxcblxcXFxuaWYgKGFydGljbGVOdW09PXVuZGVmaW5lZCkge1xcXFxuXFxcXG7CoCDCoCBkLnB1c2goe1xcXFxuXFxcXG7CoCDCoCDCoCDCoCB0aXRsZTogJ+i/mXVw5rKh5pyJ5LiT5qCP5paH56ugJyxcXFxcblxcXFxuwqAgwqAgwqAgwqAgdXJsOiBcXFxcXFxcImhpa2VyOi8vZW1wdHlcXFxcXFxcIixcXFxcblxcXFxuwqAgwqAgwqAgwqAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiLFxcXFxuXFxcXG7CoCDCoCB9KTtcXFxcblxcXFxufWVsc2V7XFxcXG5cXFxcbsKgIMKgIG1heFBhZ2UgPSBNYXRoLmNlaWwoYXJ0aWNsZU51bSAvIGFydGljbGVMaXN0LnBzKTtcXFxcblxcXFxuwqAgwqAgaWYgKHBhZ2UgPD0gbWF4UGFnZSkge1xcXFxuXFxcXG7CoCDCoCDCoCDCoCBkLnB1c2goe1xcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCB0aXRsZTogJ+W9k+WJjTrnrKwnICsgYXJ0aWNsZUxpc3QucG4gKyAn6aG1XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx05YWx5pyJJyArIG1heFBhZ2UgKyAn6aG1LCcgKyBhcnRpY2xlTnVtICsgJ+adoeaVsOaNricsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIHVybDogXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCIsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIixcXFxcblxcXFxuwqAgwqAgwqAgwqAgfSk7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIGFydGljbGVMaXN0LmFydGljbGVzLmZvckVhY2gobGlzdCA9PiB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIHBidGltZT0kLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLnRpbWVDb252ZXJ0KGxpc3QucHVibGlzaF90aW1lKTtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgZC5wdXNoKHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgdGl0bGU6IGxpc3QudGl0bGUsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIMKgIMKgIGltZzogbGlzdC5iYW5uZXJfdXJsPT0nJz8gKGxpc3QuaW1hZ2VfdXJscysgJ0BSZWZlcmVyPScpOihsaXN0LmJhbm5lcl91cmwrICdAUmVmZXJlcj0nKSxcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZGVzYzogJ+KAmOKAmOKAmeKAmTxzbWFsbD4nK2xpc3Quc3RhdHMudmlldysn55yL6L+HXFxcXFxcXFx0XFxcXFxcXFx0JytsaXN0LnN0YXRzLmxpa2UrJ+WWnOasolxcXFxcXFxcdFxcXFxcXFxcdCcrbGlzdC5zdGF0cy5mYXZvcml0ZSsn5pS26JePXFxcXFxcXFxuJyArIHBidGltZSsnPC9zbWFsbD4nLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCBjb2xfdHlwZTogJ21vdmllXzFfbGVmdF9waWMnLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCDCoCDCoCB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2FydGljbGVEZXRhaWxcXFxcXFxcIixcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgZXh0cmE6IHtcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgLy8g5LiT5qCP5paH56ugaWRcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgaWQ6IGxpc3QuaWRcXFxcblxcXFxuwqAgwqAgwqAgwqAgwqAgwqAgwqAgwqAgfVxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCB9KTtcXFxcblxcXFxuwqAgwqAgwqAgwqAgfSk7XFxcXG5cXFxcbsKgIMKgIH1cXFxcblxcXFxufVxcXFxuXFxcXG5zZXRSZXN1bHQoZCk7XFxcXG5cXFxcblxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuS4k+agj+aWh+eroFg1XFxcIixcXFwicGF0aFxcXCI6XFxcImFydGljbGVEZXRhaWxcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG5cXFxcbnZhciBkID0gW107XFxcXG5cXFxcbnBhZ2UgPSBNWV9QQUdFO1xcXFxuXFxcXG5jdmlkID0gTVlfUEFSQU1TLmlkICsgXFxcXFxcXCJcXFxcXFxcIjtcXFxcblxcXFxuZC5wdXNoKHtcXFxcblxcXFxuwqAgwqAgdXJsOiBcXFxcXFxcImh0dHBzOi8vd3d3LmJpbGliaWxpLmNvbS9yZWFkL2N2XFxcXFxcXCIrY3ZpZCxcXFxcblxcXFxuwqAgwqAgY29sX3R5cGU6IFxcXFxcXFwieDVfd2Vidmlld19zaW5nbGVcXFxcXFxcIixcXFxcblxcXFxuwqAgwqAgZGVzYzogXFxcXFxcXCIxMDAlJiZmbG9hdFxcXFxcXFwiLFxcXFxuXFxcXG7CoCDCoCBleHRyYToge1xcXFxuXFxcXG7CoCDCoCDCoCDCoCBjYW5CYWNrOiB0cnVlXFxcXG5cXFxcbsKgIMKgIH1cXFxcblxcXFxufSlcXFxcblxcXFxuc2V0UmVzdWx0KGQpO1xcXFxuXFxcXG5cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLnu7zlkIjng63pl6hcXFwiLFxcXCJwYXRoXFxcIjpcXFwiaG90VmlkZW9cXFwiLFxcXCJydWxlXFxcIjpcXFwibGV0IHJlcyA9IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImh0dHBzOi8vYXBpLmJpbGliaWxpLmNvbS94L3dlYi1pbnRlcmZhY2UvcG9wdWxhcj9wbj1cXFxcXFxcIiArIE1ZX1BBR0UsIHtcXFxcblxcXFxuwqAgwqAgaGVhZGVyczoge1xcXFxuXFxcXG7CoCDCoCDCoCDCoCBDb29raWU6IEpTT04ucGFyc2UocmVxdWVzdChcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaS50eHRcXFxcXFxcIikpLmNvb2tpZVxcXFxuXFxcXG7CoCDCoCB9XFxcXG5cXFxcbn0pKS5kYXRhXFxcXG5cXFxcbnJlcy5saXN0LmZvckVhY2goaXRlbSA9PiB7XFxcXG5cXFxcbsKgIMKgIGQucHVzaCh7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIHRpdGxlOiBpdGVtLnRpdGxlLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCBpbWc6IGl0ZW0ucGljKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3ZpZGVvXFxcXFxcXCIsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIGRlc2M6IGl0ZW0ucHViX2xvY2F0aW9uLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCBjb2xfdHlwZTogXFxcXFxcXCJtb3ZpZV8yXFxcXFxcXCIsXFxcXG5cXFxcbsKgIMKgIMKgIMKgIGV4dHJhOiB7XFxcXG5cXFxcbsKgIMKgIMKgIMKgIMKgIMKgIFxcXFxcXFwiYWlkXFxcXFxcXCI6IGl0ZW0uYWlkLFxcXFxuXFxcXG7CoCDCoCDCoCDCoCDCoCDCoCBcXFxcXFxcImNpZFxcXFxcXFwiOiBpdGVtLmNpZCxcXFxcblxcXFxuwqAgwqAgwqAgwqAgfVxcXFxuXFxcXG7CoCDCoCB9KVxcXFxuXFxcXG59KVxcXFxuXFxcXG5cXFxcblxcXCJ9LHtcXFwibmFtZVxcXCI6XFxcIuWTlOWTqeacgOaWsOeroOiKglxcXCIsXFxcInBhdGhcXFwiOlxcXCJnZXRVcGRhdGVcXFwiLFxcXCJydWxlXFxcIjpcXFwiaWYgKE1ZX1BBUkFNUy5zZWFzb25faWQpIHtcXFxcbiAgICBzZWFzb25faWQgPSBNWV9QQVJBTVMuc2Vhc29uX2lkICsgXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICBEYXRhID0gSlNPTi5wYXJzZShmZXRjaCgnaHR0cHM6Ly9hcGkuYmlsaWJpbGkuY29tL3BnYy92aWV3L3dlYi9zZWFzb24/c2Vhc29uX2lkPScgKyBzZWFzb25faWQpKS5yZXN1bHQ7XFxcXG59IGVsc2Uge1xcXFxuICAgIERhdGEgPSBKU09OLnBhcnNlKGZldGNoKCdodHRwczovL2FwaS5iaWxpYmlsaS5jb20vcGdjL3ZpZXcvd2ViL3NlYXNvbj9lcF9pZD0nICsgTVlfUEFSQU1TLmVwX2lkKSkucmVzdWx0O1xcXFxufVxcXFxu6L+95Ymn5pel5Y6GID0gRGF0YS5uZXdfZXAuZGVzYztcXFxcbuabtOaWsOi/m+W6piA9IERhdGEubmV3X2VwLnRpdGxlO1xcXFxu5pu05paw54q25oCBID0g6L+95Ymn5pel5Y6GLm1hdGNoKC/lroznu5N85pyf5b6FLykgPyDov73liafml6XljoYgOiAn5pu05paw6IezJyArICjmm7TmlrDov5vluqYubWF0Y2goL1tcXFxcXFxcXHU0ZTAwLVxcXFxcXFxcdTlmYTVdLykgPyDmm7TmlrDov5vluqYgOiAoJ+esrCcgKyAo5pu05paw6L+b5bqmID09ICcnID8gMCA6IOabtOaWsOi/m+W6pikpICsgJ+ivnScpXFxcXG5zZXRSZXN1bHQo5pu05paw54q25oCBKTtcXFwifSx7XFxcIm5hbWVcXFwiOlxcXCJ1cOWQiOmbhuinhumikVxcXCIsXFxcInBhdGhcXFwiOlxcXCJjb2xsZWN0aW9uVmllZG9cXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxuLy8g6aKE5aSE55CGXFxcXG5wdXRNeVZhcign5Yqf6IO95oqY5Y+gJywgJ+WFsycpO1xcXFxuaW1nTGluayA9IHN0b3JhZ2UwLmdldE15VmFyKCflm77moIcnKTtcXFxcbmFpZCA9IE1ZX1BBUkFNUy5haWQgKyBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuLy8gYnZpZCA9IE1ZX1BBUkFNUy5idmlkICsgXFxcXFxcXCJcXFxcXFxcIjtcXFxcbi8vIG1pZCA9IE1ZX1BBUkFNUy5taWQgKyBcXFxcXFxcIlxcXFxcXFwiO1xcXFxudHJ5IHtcXFxcbiAgICAvL+iOt+WPluinhumikeWIhlDkv6Hmga9cXFxcbiAgICB2YXIgcCA9IEpTT04ucGFyc2UoZmV0Y2goXFxcXFxcXCJodHRwczovL2FwaS5iaWxpYmlsaS5jb20veC93ZWItaW50ZXJmYWNlL3ZpZXc/YWlkPVxcXFxcXFwiICsgYWlkKSkuZGF0YTtcXFxcbiAgICAvLyDlkIjpm4bkv6Hmga9cXFxcbiAgICB2YXIgdmlkZW9EYXRhID0gcC51Z2Nfc2Vhc29uO1xcXFxuICAgIHNldFBhZ2VUaXRsZSh2aWRlb0RhdGEudGl0bGUpO1xcXFxuICAgIHNldFBhZ2VQaWNVcmwodmlkZW9EYXRhLmNvdmVyICsgJ0BSZWZlcmVyPScpO1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiB2aWRlb0RhdGEudGl0bGUsXFxcXG4gICAgICAgIGRlc2M6dmlkZW9EYXRhLmludHJvLFxcXFxuICAgICAgICBpbWc6IHZpZGVvRGF0YS5jb3ZlciArICdAUmVmZXJlcj0nLFxcXFxuICAgICAgICB1cmw6ICQoJyNub0xvYWRpbmcjI25vSGlzdG9yeSMnKS5sYXp5UnVsZSgoaW50cm8pID0+IHtcXFxcbiAgICAgICAgICAgIHJldHVybiAkKCdoaWtlcjovL2VtcHR5P2Z5cGFnZScpLnJ1bGUoKGludHJvKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBbXTtcXFxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogaW50cm8sXFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImxvbmdfdGV4dFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgc2V0UmVzdWx0KGQpO1xcXFxuICAgICAgICAgICAgfSwgaW50cm8pXFxcXG4gICAgICAgIH0sIHZpZGVvRGF0YS5pbnRybyksXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInBpY18xXFxcXFxcXCIsXFxcXG4gICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICBsb25nQ2xpY2s6IFt7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICdkbeebkuWtkCcsIGpzOiAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL3BhZ2Uvc2V0dGluZyNub0hpc3RvcnkjP3J1bGU9ZG3nm5LlrZAnO1xcXFxuICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6ICflvLnluZXmjqfliLYnLCBqczogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmIChnZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICdmYWxzZScpID09ICd0cnVlJykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgc2V0SXRlbSgnaXNPdmVycmlkZVNhdmUnLCAnZmFsc2UnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lvLnluZXlsIbkuI3lj5dkbeebkuWtkOWPguaVsOaOp+WItic7XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRJdGVtKCdpc092ZXJyaWRlU2F2ZScsICd0cnVlJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5by55bmV5bCG5Y+X5YiwZG3nm5LlrZDlj4LmlbDmjqfliLYnO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgIH1dXFxcXG4gICAgICAgIH1cXFxcbiAgICB9LCB7XFxcXG4gICAgICAgIHRpdGxlOiAnPGZvbnQgY29sb3I9XFxcXFxcXCJibHVlXFxcXFxcXCI+JyArIHAub3duZXIubmFtZSArICc8L2ZvbnQ+JyxcXFxcbiAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS91cEhvbWVcXFxcXFxcIixcXFxcbiAgICAgICAgaW1nOiBwLm93bmVyLmZhY2UgKyBcXFxcXFxcIkBSZWZlcmVyPVxcXFxcXFwiLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJhdmF0YXJcXFxcXFxcIixcXFxcbiAgICAgICAgZGVzYzogJzxzbWFsbD48c21hbGw+5YWx5pyJJyArIHZpZGVvRGF0YS5lcF9jb3VudCArICfmnaHop4bpopHmlbDmja48L3NtYWxsPjwvc21hbGw+JyxcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIG1pZDogcC5vd25lci5taWQsXFxcXG4gICAgICAgICAgICB0aXRsZTogcC5vd25lci5uYW1lLFxcXFxuICAgICAgICAgICAgZmFjZTogcC5vd25lci5mYWNlXFxcXG4gICAgICAgIH1cXFxcbiAgICB9LCB7XFxcXG4gICAgICAgIGNvbF90eXBlOiAnbGluZSdcXFxcbiAgICB9KTtcXFxcbiAgICB2YXIgaW5kZXggPSAxO1xcXFxuICAgIHN0b3JhZ2UwLnB1dFZhcigndmlkZW9TZWN0aW9ucycsIHZpZGVvRGF0YS5zZWN0aW9ucyk7XFxcXG4gICAgdmlkZW9EYXRhLnNlY3Rpb25zLmZvckVhY2goZWwgPT4ge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6ICfwn5OBJyArIGVsLnRpdGxlLFxcXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIyNub0hpc3RvcnkjJykubGF6eVJ1bGUoKGluZGV4KSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgaWYgKGdldE15VmFyKCdpc0ZvbGRfJytpbmRleCwgJ3knKSA9PSAneScpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2lzRm9sZF8nK2luZGV4LCAnbicpO1xcXFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtQnlDbHMoJ3NlY3Rpb24nICsgaW5kZXggKyAnLXBhcnQnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suaKmOWPoCc7XFxcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ2lzRm9sZF8nK2luZGV4LCAneScpO1xcXFxuICAgICAgICAgICAgICAgICAgICB2aWRlb1NlY3Rpb25zID0gc3RvcmFnZTAuZ2V0VmFyKCd2aWRlb1NlY3Rpb25zJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHNlY3Rpb25QYXJ0TGlzdCA9IFtdO1xcXFxuICAgICAgICAgICAgICAgICAgICB2aWRlb1NlY3Rpb25zW2luZGV4IC0gMV0uZXBpc29kZXMuZm9yRWFjaChpdGVtID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFpZCA9IGl0ZW0uYWlkO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2lkID0gaXRlbS5jaWQ7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBzdGF0ID0gaXRlbS5hcmMuc3RhdDtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNlY3Rpb25QYXJ0TGlzdC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnVxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdDxzbWFsbD48L2ZvbnQ+4pa277iOJyArIGl0ZW0udGl0bGUgKyAnXFxcXFxcXFxuXFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0PC9mb250Pjwvc21hbGw+PHNtYWxsPjxzbWFsbD48Zm9udCBjb2xvcj1ncmF5PuaSreaUvumHj++8micgKyBzdGF0LnZpZXcgKyAnXFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx05by55bmV77yaJyArIHN0YXQuZGFubWFrdSArICdcXFxcXFxcXHRcXFxcXFxcXHRcXFxcXFxcXHTllpzmrKLvvJonICsgc3RhdC5saWtlICsgJzwvZm9udD48L3NtYWxsPjwvc21hbGw+JyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoYWlkLCBjaWQsIHFuKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmJpbGlMYXp5KGFpZCwgY2lkLCBxbikucmVwbGFjZSgvOy9nLCBcXFxcXFxcIu+8m++8m1xcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBhaWQgKyBcXFxcXFxcIlxcXFxcXFwiLCBjaWQgKyBcXFxcXFxcIlxcXFxcXFwiLCAnMTE2JyksXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHsgbGluZVZpc2libGU6IGZhbHNlLCBjbHM6ICdzZWN0aW9uJyArIGluZGV4ICsgJy1wYXJ0JyxpZDonYWlkLScrYWlkKyd8Y2lkLScrY2lkIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgICAgICBhZGRJdGVtQWZ0ZXIoJ1NlY3Rpb24nICsgaW5kZXgsIHNlY3Rpb25QYXJ0TGlzdCk7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LlsZXlvIAnO1xcXFxuICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIH0sIGluZGV4KSxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiAndGV4dF8xJyxcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7IGlkOiAnU2VjdGlvbicgKyBpbmRleCB9XFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBlbC5lcGlzb2Rlcy5mb3JFYWNoKGl0ZW0gPT4ge1xcXFxuICAgICAgICAgICAgYWlkID0gaXRlbS5haWQ7XFxcXG4gICAgICAgICAgICBjaWQgPSBpdGVtLmNpZDtcXFxcbiAgICAgICAgICAgIHN0YXQgPSBpdGVtLmFyYy5zdGF0O1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnVxcXFxcXFxcdFxcXFxcXFxcdFxcXFxcXFxcdDxzbWFsbD48L2ZvbnQ+4pa277iOJyArIGl0ZW0udGl0bGUgKyAnXFxcXFxcXFxuXFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx0PC9mb250Pjwvc21hbGw+PHNtYWxsPjxzbWFsbD48Zm9udCBjb2xvcj1ncmF5PuaSreaUvumHj++8micgKyBzdGF0LnZpZXcgKyAnXFxcXFxcXFx0XFxcXFxcXFx0XFxcXFxcXFx05by55bmV77yaJyArIHN0YXQuZGFubWFrdSArICdcXFxcXFxcXHRcXFxcXFxcXHRcXFxcXFxcXHTllpzmrKLvvJonICsgc3RhdC5saWtlICsgJzwvZm9udD48L3NtYWxsPjwvc21hbGw+JyxcXFxcbiAgICAgICAgICAgICAgICB1cmw6ICQoKS5sYXp5UnVsZSgoYWlkLCBjaWQsIHFuKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvYXBpXFxcXFxcXCIpLmJpbGlMYXp5KGFpZCwgY2lkLCBxbikucmVwbGFjZSgvOy9nLCBcXFxcXFxcIu+8m++8m1xcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICB9LCBhaWQgKyBcXFxcXFxcIlxcXFxcXFwiLCBjaWQgKyBcXFxcXFxcIlxcXFxcXFwiLCAnMTE2JyksXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHsgbGluZVZpc2libGU6IGZhbHNlLCBjbHM6ICdzZWN0aW9uJyArIGluZGV4ICsgJy1wYXJ0JyxpZDonYWlkLScrYWlkKyd8Y2lkLScrY2lkIH1cXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICBpbmRleCsrO1xcXFxuICAgIH0pXFxcXG59IGNhdGNoIChlKSB7XFxcXG4gICAgbG9nKGUpO1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiAn6aG16Z2i6LWw5Lii5LqGLi4uJyxcXFxcbiAgICAgICAgaW1nOiAnaHR0cHM6Ly9pMC5oZHNsYi5jb20vYmZzL2dlbmVyYWwvZjdiNjY3MDExYTQ2NjE1NzMyYzcwMWY0YmIxZDA3Zjc5M2Y4ZDFkZi5wbmdAUmVmZXJlcj0nLFxcXFxuICAgICAgICB1cmw6ICdoaWtlcjovL2VtcHR5JyxcXFxcbiAgICAgICAgZGVzYzogJ+Wkp+amgueOh+inhumikeiiq+Wwgeemge+8jOaIluiAhXVw5bey6LeR6LevficsXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInBpY18xXFxcXFxcXCJcXFxcbiAgICB9KTtcXFxcbn1cXFxcbnNldFJlc3VsdChkKTtcXFxcblxcXCJ9LHtcXFwibmFtZVxcXCI6XFxcIuWbvuagh+S4i+i9vVxcXCIsXFxcInBhdGhcXFwiOlxcXCJzYXZlTG9jYWxcXFwiLFxcXCJydWxlXFxcIjpcXFwiJC5leHBvcnRzLnNhdmVMb2NhbCA9ICgpID0+IHtcXFxcbiAgICBjb25zdCBiYXNlNjRUb0hleCA9IChiYXNlNjRTdHIpID0+IHtcXFxcbiAgICAgICAgLy8g5Yig6Zmk5YmN57yA5bm26Kej56CBQmFzZTY05a2X56ym5LiyXFxcXG4gICAgICAgIHZhciBiaW5hcnlTdHIgPSB3aW5kb3cwLmF0b2IoYmFzZTY0U3RyLnNwbGl0KCcsJylbMV0pO1xcXFxuXFxcXG4gICAgICAgIC8vIOi9rOaNouS4ujE26L+b5Yi25a2X56ym5LiyXFxcXG4gICAgICAgIHZhciBoZXhTdHIgPSAnJztcXFxcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBiaW5hcnlTdHIubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgIHZhciBoZXggPSBiaW5hcnlTdHIuY2hhckNvZGVBdChpKS50b1N0cmluZygxNik7XFxcXG4gICAgICAgICAgICBoZXhTdHIgKz0gKGhleC5sZW5ndGggPT09IDIgPyBoZXggOiAnMCcgKyBoZXgpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHJldHVybiBoZXhTdHI7XFxcXG4gICAgfTtcXFxcbiAgICBzaG93TG9hZGluZyhcXFxcXFxcIuWbvuagh+WIneWni+WMluS4rS4uLlxcXFxcXFwiKTtcXFxcbiAgICB2YXIgdHViaWFvID0ge307XFxcXG4gICAgdHJ5IHtcXFxcbiAgICAgICAgLy8g5Ymq6LS05p2/57q/6LevXFxcXG4gICAgICAgIGh0bWwgPSByZXF1ZXN0KCdodHRwczovL25ldGN1dC5jbi9wL2ExZmNmMGQzYjBhMjdmMTMnKTtcXFxcbiAgICAgICAgZGF0YSA9IGh0bWwubWF0Y2goL3suKm5vdGVfY29udGVudC4qdXBkYXRlZF9hdC4qfS8pWzBdO1xcXFxuICAgICAgICBldmFsKCd0dWJpYW8gPScgKyBKU09OLnBhcnNlKGRhdGEpLm5vdGVfY29udGVudCk7XFxcXG4gICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICBsb2coJ+WJqui0tOadv+WHuumUmSzliIfmjaLmiZjnrqHnur/ot68nKTtcXFxcbiAgICAgICAgcm91dGUgPSBbXFxcXG4gICAgICAgICAgICAnaHR0cHM6Ly9naXRjb2RlLm5ldC9xcV8yMzg0NzgxOS9oaWtlci8tL3Jhdy9tYXN0ZXIvdHViaWFvLmpzb24nLFxcXFxuICAgICAgICAgICAgJ2h0dHBzOi8vZ2l0ZWEuY29tL2N5L2hpa2VyL3Jhdy9jb21taXQvYmUyMTYwYzZhMDFkYjg3M2Q5Zjk2ODFiYTdlODZlZWJmYTExOGQ4Ni90dWJpYW8uanNvbicsXFxcXG4gICAgICAgICAgICAnaHR0cHM6Ly9yYXcuY29kZWh1Yi5jbi9wL2hpa2VyL2QvdHViaWFvL2dpdC9yYXcvbWFzdGVyL3R1Ymlhby5qc29uP3Rva2VuPUdHZGxJdVZHcVkzYjNMeWRJb3dya3NiVUJDZk15eDJmRjMxV1VaZW80bScsXFxcXG4gICAgICAgICAgICAnaHR0cHM6Ly9naXRlZS5jb20vbXh4bC1jeS9oaWtlci9yYXcvbWFzdGVyL3R1Ymlhby5qc29uJ1xcXFxuICAgICAgICBdO1xcXFxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvdXRlLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgIGV2YWwoJ3R1YmlhbyA9JyArIHJlcXVlc3Qocm91dGVbaV0pKTtcXFxcbiAgICAgICAgICAgICAgICBpZiAodHViaWFvW1xcXFxcXFwi5LqU5aSnXFxcXFxcXCJdICYmIHR1Ymlhb1tcXFxcXFxcIuWTlOWTqVxcXFxcXFwiXSkge1xcXFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICBsb2coJ+e6v+i3r++8micgKyB0dWJpYW9baV0gKyAn6KKr5aKZ5LqGLi4uJyk7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgICAgIGxvZygn57q/6Lev77yaJyArIHR1Ymlhb1tpXSArICflh7rplJnkuoYuLi4nKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbiAgICB0cnkge1xcXFxuICAgICAgICB2YXIgd3VkYSA9IHR1Ymlhb1tcXFxcXFxcIuS6lOWkp1xcXFxcXFwiXTtcXFxcbiAgICAgICAgdmFyIGJpbGkgPSB0dWJpYW9bXFxcXFxcXCLlk5Tlk6lcXFxcXFxcIl07XFxcXG4gICAgICAgIHZhciBpbmRleCA9IDA7XFxcXG4gICAgICAgIGZvciAobGV0IGl0ZW0gaW4gd3VkYSkge1xcXFxuICAgICAgICAgICAgd3JpdGVIZXhGaWxlKGBoaWtlcjovL2ZpbGVzL3J1bGVzL2N5L3R1Ymlhby8ke2l0ZW19LnN2Z2AsIGJhc2U2NFRvSGV4KHd1ZGFbaXRlbV0pKTtcXFxcbiAgICAgICAgICAgIGxvZyhg5Yid5aeL5YyW56ysJHtpbmRleCsrfeS4quWbvuaghzoke2l0ZW19Li4uYCk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgZm9yIChsZXQgaXRlbSBpbiBiaWxpKSB7XFxcXG4gICAgICAgICAgICB3cml0ZUhleEZpbGUoYGhpa2VyOi8vZmlsZXMvcnVsZXMvY3kvYmlsaV9waWMvJHtpdGVtfS5wbmdgLCBiYXNlNjRUb0hleChiaWxpW2l0ZW1dKSk7XFxcXG4gICAgICAgICAgICBsb2coYOWIneWni+WMluesrCR7aW5kZXgrK33kuKrlm77moIc6JHtpdGVtfS4uLmApO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHNob3dMb2FkaW5nKCflm77moIfliJ3lp4vljJblrozmiJDvvJrlhbHorqEnICsgaW5kZXggKyAn5Liq5Zu+5qCHJyk7XFxcXG4gICAgICAgIGhpZGVMb2FkaW5nKCk7XFxcXG4gICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICBzaG93TG9hZGluZygn5Zu+5qCH5Yid5aeL5YyW5aSx6LSlJyk7XFxcXG4gICAgICAgIGxvZygn5Zu+5qCH5Yid5aeL5YyW5aSx6LSlOicgKyBlKTtcXFxcbiAgICAgICAgaGlkZUxvYWRpbmcoKTtcXFxcbiAgICB9XFxcXG5cXFxcbn07XFxcXG5cXFwifV1cIn0iLCJwaWNVcmwiOiJodHRwOi8vaTIuaGRzbGIuY29tL2Jmcy9hcmNoaXZlLzE0MmZiNWZkZWU1MjM3OTEyNTU1YmI3ZmVhODFlMjU1YjUwYWQyZDcuanBnQFJlZmVyZXI9IiwidGl0bGUiOiLkuIDlj6PmsJTnnIvlrozjgJDljJfmtL7nm5flopPnrJTorrDjgJHmm7TmlrDmnIDlhajniYjmnKzvvIznnJ/lrp7mlYXkuovmlLnnvJbvvIEifQ==
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement