Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥土拨鼠电影@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImdtdE1vZGlmaWVkXCI6MCxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuS6jOe6p+ino+aekFwiLFwicGF0aFwiOlwicFwiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5sZXQgdXJsID0gYmFzZTY0RGVjb2RlKGdldFBhcmFtKFxcXCJ1XFxcIikpO1xcbmxldCBodG1sID0gcmVxdWVzdCh1cmwpO1xcbmxldCBhbGlzdCA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJmFcXFwiKTtcXG5sZXQgYXJyID0gYWxpc3QubWFwKGl0ID0+IHtcXG4gICAgcmV0dXJuIHtcXG4gICAgICAgIC8vaHRtbDogaXQsXFxuICAgICAgICB0ZXh0OiBwZGZoKGl0LCBcXFwiYSYmVGV4dFxcXCIpLFxcbiAgICAgICAgdGl0bGU6IHBkZmgoaXQsIFxcXCJhJiZ0aXRsZVxcXCIpLFxcbiAgICAgICAgaHJlZjogcGQoaXQsIFxcXCJhJiZocmVmXFxcIiwgdXJsKVxcbiAgICB9XFxufSk7XFxuLy9sb2coYXJyKTtcXG5sZXQgZGVidWcgPSBmYWxzZTtcXG5cXG5mdW5jdGlvbiBjbGVhclRleHQoaXQpIHtcXG4gICAgcmV0dXJuIGl0LnJlcGxhY2UoL+esrHzpm4Z856ugL2csIFxcXCJcXFwiKTtcXG59XFxuXFxuZnVuY3Rpb24gaXNNb3ZpZShpdCkge1xcbiAgICBpZiAoaXQgPT0gbnVsbCB8fCBpdC50ZXh0ID09IG51bGwpIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgICBsZXQgdGl0ID0gaXQudGl0bGUgfHwgXFxcIlxcXCI7XFxuICAgIGl0ID0gaXQudGV4dCB8fCBcXFwiXFxcIjtcXG4gICAgaWYgKGl0ID09IFxcXCJcXFwiIHx8IGl0Lmxlbmd0aCA+IDgpIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgICAvL+aOkumZpFxcbiAgICBsZXQgcmVnID0gL1xcXFwufOmrmOa4heebtOaSrXzlhpnnnJ/mjqjojZB85b2x6ZmifOW9seinhnzok53lhYnnlLXlvbF86auY5riF55S15b2xfOesrOS4gOWto3znrKzkuozlraN856ys5LiJ5a2jfOesrOWbm+Wto3znrKzkupTlraMvO1xcbiAgICBpZiAodGl0ICE9IFxcXCJcXFwiICYmICF0aXQuaW5jbHVkZXMoaXQpIHx8IHJlZy50ZXN0KGl0KSkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICB9XFxuICAgIHJldHVybiBpdC5tYXRjaCgv5Y6f55S7fOWkh+eUqHzok53lhYl86LaF5riFfOmrmOa4hXzmraPniYd86Z+p54mIfDRLfDRrfDEwODBQfDcyMFB8VEN8SER8QkQvKVxcbn1cXG5cXG5mdW5jdGlvbiBub3RDaGFwdGVyKGl0KSB7XFxuICAgIGlmIChpdCA9PSBudWxsIHx8IGl0LnRleHQgPT0gbnVsbCkge1xcbiAgICAgICAgcmV0dXJuIHRydWU7XFxuICAgIH1cXG4gICAgcmV0dXJuIGl0LnRleHQubWF0Y2goL1swLTldXFxcXC5bMC05XeWIhi8pO1xcbn1cXG5cXG5mdW5jdGlvbiBpc0NoYXB0ZXIoaXQsIHByZSwgbmV4dCkge1xcbiAgICBpZiAobm90Q2hhcHRlcihpdCkpIHtcXG4gICAgICAgIC8v5LyY5YWI5o6S6ZmkXFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxuICAgIH1cXG4gICAgLy/liKTmlq3mmK/kuI3mmK/nlLXlvbFcXG4gICAgaWYgKGlzTW92aWUoaXQpKSB7XFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXG4gICAgfVxcbiAgICByZXR1cm4gaXNDaGFwdGVyMChpdCwgcHJlKSB8fCBpc0NoYXB0ZXIwKGl0LCBuZXh0KTtcXG59XFxuXFxuZnVuY3Rpb24gZ2V0Q2hhcHRlck51bShpdCkge1xcbiAgICBpZiAoaXQgPT0gbnVsbCB8fCBpdC50ZXh0ID09IG51bGwpIHtcXG4gICAgICAgIHJldHVybiAtMTtcXG4gICAgfVxcbiAgICBpdCA9IGl0LnRleHQgfHwgXFxcIlxcXCI7XFxuICAgIGlmIChpdCA9PSBcXFwiXFxcIikge1xcbiAgICAgICAgcmV0dXJuIC0xO1xcbiAgICB9XFxuICAgIGl0ID0gY2xlYXJUZXh0KGl0KTtcXG4gICAgbGV0IHJlZyA9IC9eWzAtOV0qJC87XFxuICAgIGlmICghcmVnLnRlc3QoaXQpKSB7XFxuICAgICAgICByZXR1cm4gLTE7XFxuICAgIH1cXG4gICAgaXQgPSBwYXJzZUludChpdCk7XFxuICAgIGlmIChpc05hTihpdCkpIHtcXG4gICAgICAgIHJldHVybiAtMTtcXG4gICAgfVxcbiAgICBpZiAoaXQgPiAxOTAwICYmIGl0IDwgMjEwMCkge1xcbiAgICAgICAgcmV0dXJuIC0xO1xcbiAgICB9XFxuICAgIHJldHVybiBpdDtcXG59XFxuXFxuZnVuY3Rpb24gaXNDaGFwdGVyMChpdCwgYnJvdGhlcikge1xcbiAgICAvKmlmIChkZWJ1Zykge1xcbiAgICAgICAgbG9nKHtcXG4gICAgICAgICAgICBpdDogaXQsXFxuICAgICAgICAgICAgYnJvdGhlcjogYnJvdGhlclxcbiAgICAgICAgfSk7XFxuICAgIH0qL1xcbiAgICBpdCA9IGdldENoYXB0ZXJOdW0oaXQpO1xcbiAgICAvL2lmIChkZWJ1ZykgbG9nKGl0KTtcXG4gICAgaWYgKGl0IDwgMCkge1xcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcbiAgICB9XFxuICAgIGJyb3RoZXIgPSBnZXRDaGFwdGVyTnVtKGJyb3RoZXIpO1xcbiAgICAvL2lmIChkZWJ1ZykgbG9nKGJyb3RoZXIpO1xcbiAgICBpZiAoYnJvdGhlciA8IDApIHtcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXG4gICAgfVxcbiAgICByZXR1cm4gaXQgLSBicm90aGVyIDwgMiAmJiBpdCAtIGJyb3RoZXIgPiAtMjtcXG59XFxuXFxubGV0IF93ZWIgPSAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgbGV0IHVybHMgPSBfZ2V0VXJscygpO1xcbiAgICBsZXQgcmVnID0gL1xcXFwuaHRtbHxcXFxcLmNzc3xcXFxcLmpzLztcXG4gICAgZm9yIChsZXQgayBpbiB1cmxzKSB7XFxuICAgICAgICBpZiAoIXJlZy50ZXN0KHVybHNba10pICYmIHVybHNba10ubWF0Y2goL1xcXFwubXA0fFxcXFwubTN1OC8pKSB7XFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5sb2codXJsc1trXSk7XFxuICAgICAgICAgICAgcmV0dXJuIGZ5X2JyaWRnZV9hcHAuZ2V0SGVhZGVyVXJsKHVybHNba10ucmVwbGFjZSgvLio/dXJsPS8sIFxcXCJcXFwiKSkgKyBcXFwiI2lnbm9yZUltZz10cnVlI1xcXCI7XFxuICAgICAgICB9XFxuICAgIH1cXG59KTtcXG5cXG5sZXQgd2ViID0gZ2V0SXRlbSgnd2ViJywgJzAnKSA9PSBcXFwiMVxcXCI7XFxuXFxuZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgbGV0IGl0ID0gYXJyW2ldO1xcbiAgICBsZXQgdCA9IGl0LnRleHQ7XFxuICAgIGlmICghaXQuaHJlZiB8fCBpdC5ocmVmID09IFxcXCJcXFwiKSB7XFxuICAgICAgICBjb250aW51ZTtcXG4gICAgfVxcbiAgICBsZXQgcHJlID0gaSA9PSAwID8gbnVsbCA6IGFycltpIC0gMV07XFxuICAgIGxldCBuZXh0ID0gaSA9PSAoYXJyLmxlbmd0aCAtIDEpID8gbnVsbCA6IGFycltpICsgMV07XFxuICAgIGlmIChpc0NoYXB0ZXIoaXQsIHByZSwgbmV4dCkpIHtcXG4gICAgICAgIGlmICh3ZWIpIHtcXG4gICAgICAgICAgICB2YXIgdXJseCA9IFxcXCJ3ZWJSdWxlOi8vXFxcIiArIGl0LmhyZWYgKyBcXFwiQFxcXCIgKyBfd2ViO1xcbiAgICAgICAgICAgIHZhciBleHRyYXggPSB7XFxuICAgICAgICAgICAgICAgIGpzTG9hZGluZ0luamVjdDogdHJ1ZSxcXG4gICAgICAgICAgICAgICAgaWQ6IGl0LmhyZWYsXFxuICAgICAgICAgICAgICAgIGJsb2NrUnVsZXM6IFsnLm00YScsICcubXAzJywgJy5mbHYnLCAnLmF2aScsICcuM2dwJywgJy5tcGVnJywgJy53bXYnLCAnLm1vdicsICcucm12YicsICcuZ2lmJywgJy5qcGVnJywgJy5wbmcnLCAnLmljbycsICcuc3ZnJ11cXG4gICAgICAgICAgICB9O1xcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICB2YXIgdXJseCA9IFxcXCJ2aWRlbzovL1xcXCIgKyBpdC5ocmVmO1xcbiAgICAgICAgICAgIHZhciBleHRyYXggPSB7XFxuICAgICAgICAgICAgICAgIGlkOiBpdC5ocmVmXFxuICAgICAgICAgICAgfTtcXG4gICAgICAgIH1cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IHQsXFxuICAgICAgICAgICAgdXJsOiB1cmx4LFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8zXFxcIixcXG4gICAgICAgICAgICBleHRyYTogZXh0cmF4XFxuICAgICAgICB9KTtcXG4gICAgfVxcbn1cXG5pZiAoZC5sZW5ndGggPT0gMCkge1xcbiAgICAvL+WMuemFjeWksei0pVxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCJcXFwiLFxcbiAgICAgICAgdXJsOiB1cmwsXFxuICAgICAgICBjb2xfdHlwZTogXFxcIng1X3dlYnZpZXdfc2luZ2xlXFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCJmbG9hdCYmMTAwJVxcXCIsXFxuICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgY2FuQmFjazogdHJ1ZSxcXG4gICAgICAgICAgICBibG9ja1J1bGVzOiBbXFxcIi5naWZcXFwiLCBcXFwiL2FkL1xcXCIsIFxcXCJnb29nbGVcXFwiLCBcXFwiL3NoL3RvL1xcXCIsIFxcXCIuR0lGXFxcIl1cXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIHRvYXN0KFxcXCJBSeWMuemFjeWksei0pe+8jOW3suS9v+eUqFg15Yqg6L29XFxcIik7XFxuICAgIHNldFJlc3VsdChkKTtcXG59IGVsc2Uge1xcbiAgICAvL+S4uue6v+i3r+WKoOWIhuWJsue6v1xcbiAgICBsZXQgZDIgPSBbXTtcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkLmxlbmd0aDsgaSsrKSB7XFxuICAgICAgICBkMi5wdXNoKGRbaV0pO1xcbiAgICAgICAgaWYgKGkgPCBkLmxlbmd0aCAtIDEpIHtcXG4gICAgICAgICAgICBsZXQgaXQgPSBkW2ldO1xcbiAgICAgICAgICAgIGxldCB0MSA9IHBhcnNlSW50KGNsZWFyVGV4dChpdC50aXRsZSkpO1xcbiAgICAgICAgICAgIGxldCBuZXh0ID0gZFtpICsgMV07XFxuICAgICAgICAgICAgbGV0IHQyID0gcGFyc2VJbnQoY2xlYXJUZXh0KG5leHQudGl0bGUpKTtcXG4gICAgICAgICAgICBpZiAodDIgLSB0MSA+IDEgfHwgdDEgLSB0MiA+IDEpIHtcXG4gICAgICAgICAgICAgICAgZDIucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImJpZ19ibGFua19ibG9ja1xcXCJcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIGQyLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJsaW5lX2JsYW5rXFxcIlxcbiAgICAgICAgICAgICAgICB9KTtcXG4gICAgICAgICAgICAgICAgZDIucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcImJpZ19ibGFua19ibG9ja1xcXCJcXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHNldFJlc3VsdChkMik7XFxufVwifSx7XCJjb2xfdHlwZVwiOlwidGV4dF8xXCIsXCJuYW1lXCI6XCLmkJzntKLmtYvor5VcIixcInBhdGhcIjpcInNcIixcInJ1bGVcIjpcImpzOlxcbmxldCB1cmwgPSBiYXNlNjREZWNvZGUoZ2V0UGFyYW0oXFxcInVcXFwiKSk7XFxubG9nKHVybCk7XFxubGV0IGtleSA9IGdldFBhcmFtKFxcXCJrZXlcXFwiKTtcXG5sZXQgc3AgPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9zcFxcXCIpO1xcbnNldFJlc3VsdChzcCh1cmwsIGtleSwgXFxcIuaQnOe0oua1i+ivlVxcXCIpKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuiBmuWQiOaQnOe0olwiLFwicGF0aFwiOlwicHJvXCIsXCJydWxlXCI6XCJ2YXIgZCA9IFtdO1xcbmlmIChNWV9QQUdFID09IDEpIHtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi5pCc57SiXFxcIixcXG4gICAgICAgIHVybDogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgICAgIGRlc2M6IFxcXCLor7fovpPlhaXlhbPplK7or43vvIzlsL3ph4/lsJHlrZfkuI3opoHlpJrlrZdcXFwiLFxcbiAgICAgICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcInNvdVxcXCIsIFxcXCJcXFwiKSxcXG4gICAgICAgICAgICBvbkNoYW5nZTogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJzb3VcXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgfSlcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuICAgIGFkZExpc3RlbmVyKFxcXCJvbkNsb3NlXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICBjbGVhck15VmFyKFxcXCJzb3VcXFwiKTtcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcInNvXFxcIik7XFxuICAgIH0pKTtcXG59XFxuXFxubGV0IHMgPSBnZXRNeVZhcihcXFwic291XFxcIiwgXFxcIlxcXCIpO1xcbmxldCByID0gXFxcIlxcXCI7XFxuaWYgKHMgIT0gXFxcIlxcXCIpIHtcXG4gICAgbGV0IHAgPSBNWV9QQUdFO1xcbiAgICBsZXQge1xcbiAgICAgICAgbG9hZFxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXCIpO1xcbiAgICBsZXQge1xcbiAgICAgICAgd3JhcFxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvdG9vbFxcXCIpO1xcbiAgICBsZXQgZGF0YSA9IGxvYWQocCwgciAhPSBcXFwiXFxcIiA/IHIgOiBudWxsKTtcXG5cXG4gICAgbGV0IHBhZ2VpZCA9IE1ZX1JVTEUudGl0bGUgKyBcXFwiLXBhZ2VcXFwiICsgcDtcXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuWKoOi9veesrFxcXCIgKyBwICsgXFxcIumhteS4re+8jOi/m+W6pu+8mjEvXFxcIiArIGRhdGEubGVuZ3RoLFxcbiAgICAgICAgICAgIHVybDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0X2NlbnRlcl8xXFxcIixcXG4gICAgICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICBpZDogcGFnZWlkXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgIH1cXG4gICAgc2V0UmVzdWx0KGQpO1xcbiAgICBsb2coZGF0YS5sZW5ndGgpO1xcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxuICAgICAgICAvL+Wkmue6v+eoi+WKoOi9vSAgICAgICAgXFxuICAgICAgICBsZXQgcmVhbFBhZ2UgPSBcXFwiXFxcIiA9PSByID8gMSA6IHA7XFxuICAgICAgICBsZXQgdGFza3MgPSBkYXRhLm1hcChpdCA9PiB7XFxuICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgICAgZnVuYzogZnVuY3Rpb24ocnVsZSkge1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGUuZmluZChzLCByZWFsUGFnZSk7XFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIHBhcmFtOiBpdCxcXG4gICAgICAgICAgICAgICAgaWQ6IFxcXCJydWxlQFxcXCIgKyBpdC5uYW1lXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuXFxuICAgICAgICBiYXRjaEV4ZWN1dGUodGFza3MsIHtcXG4gICAgICAgICAgICBmdW5jOiBmdW5jdGlvbihwYXJhbSwgaWQsIGVycm9yLCByZXN1bHQpIHtcXG4gICAgICAgICAgICAgICAgLy9sb2coXFxcImxpc3RlbmVyOiBcXFwiICsgKHJlc3VsdCB8fCBbXSkubGVuZ3RoKVxcbiAgICAgICAgICAgICAgICBwYXJhbS5pID0gcGFyYW0uaSArIDE7XFxuICAgICAgICAgICAgICAgIGlmIChyZXN1bHQpIHtcXG4gICAgICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaXQgb2YgcmVzdWx0KSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmFtLmogPSBwYXJhbS5qICsgMTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYWRkSXRlbUJlZm9yZShwYWdlaWQsIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB3cmFwKGl0LnRpdGxlLCBzKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGl0LmRlc2MsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGl0LnVybCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGl0LnBpY191cmwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogaXQucGljX3VybCA/ICdtb3ZpZV8xX3ZlcnRpY2FsX3BpYycgOiBcXFwidGV4dF8xXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiBpdC5leHRyYVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxuXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtLmkgPj0gcGFyYW0uYWxsKSB7XFxuICAgICAgICAgICAgICAgICAgICBkZWxldGVJdGVtKHBhZ2VpZClcXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5Yqg6L2956ysXFxcIiArIE1ZX1BBR0UgKyBcXFwi6aG15Lit77yM6L+b5bqm77yaXFxcIiArIChwYXJhbS5pICsgMSkgKyBcXFwiL1xcXCIgKyBwYXJhbS5hbGwsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfY2VudGVyXzFcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOiBwYWdlaWRcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICBwYXJhbToge1xcbiAgICAgICAgICAgICAgICBhbGw6IGRhdGEubGVuZ3RoLFxcbiAgICAgICAgICAgICAgICBpOiAwLFxcbiAgICAgICAgICAgICAgICBqOiAtMVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH1cXG59IGVsc2Uge1xcbiAgICBsZXQge1xcbiAgICAgICAgbG9hZFxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXCIpO1xcbiAgICBsZXQgZGF0YSA9IGxvYWQoLTEsIG51bGwpO1xcbiAgICBpZiAoZGF0YS5sZW5ndGggPiAwKSB7XFxuICAgICAgICAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS9tYW5hZ2VcXFwiKShkLCBkYXRhLm1hcChpdCA9PiBpdC5uYW1lKSk7XFxuICAgICAgICBmb3IgKGxldCBpdCBvZiBkYXRhKSB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGl0Lm5hbWUsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcInNlbGVjdDovL1xcXCIgKyBKU09OLnN0cmluZ2lmeSh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIuivt+mAieaLqeaTjeS9nFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBjb2w6IDEsXFxuICAgICAgICAgICAgICAgICAgICBvcHRpb25zOiBbXFxcIuiuv+mXrummlumhtVxcXCIsIFxcXCLmkJzntKLmraTnq5lcXFwiXSxcXG4gICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCh1cmwpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT0gXFxcIuiuv+mXrummlumhtVxcXCIpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgTVlfVVJMID0gdXJsO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS94NT91PVxcXCIgKyBiYXNlNjRFbmNvZGUoZ2V0SG9tZSh1cmwpKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3NpbmdsZXNcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSwgaXQudXJsKVxcbiAgICAgICAgICAgICAgICB9KSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCIsXFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIFJVTEU6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdC5uYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogaXQudXJsXFxuICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi56aB55SoXFxcIiArIGl0Lm5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKG5hbWUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybSh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIua4qemmqOaPkOekulxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiBcXFwi56Gu6K6k5Yig6Zmk56aB55SoXFxcIiArIG5hbWUgKyBcXFwi5ZCX77yfXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm06ICQudG9TdHJpbmcoKG5hbWUsIHJ1bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVSdWxlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGE/cnVsZT1cXFwiICsgcnVsZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUnVsZShuYW1lKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly9PS1xcXCI7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LCBuYW1lLCBNWV9SVUxFLnRpdGxlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vZW1wdHlcXFwiO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIH0sIGl0Lm5hbWUpXFxuICAgICAgICAgICAgICAgICAgICB9LCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXCLorr/pl67pppbpobVcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzOiBcXFwiJ2hpa2VyOi8vcGFnZS94NT91PVxcXCIgKyBiYXNlNjRFbmNvZGUoZ2V0SG9tZShpdC51cmwpKSArIFxcXCInXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfSwge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5pCc57Si5q2k5rqQXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBqczogXFxcIidoaWtlcjovL3BhZ2Uvc2luZ2xlcydcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9XVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pWw5o2uXCIsXCJwYXRoXCI6XCJkYXRhXCIsXCJydWxlXCI6XCIvL+W5tuWPkeinhOWImeaVsFxcbmxldCBzaXplMCA9IDEwO1xcbmxldCBydWxlc1RleHQwID0gYOeogOmlrUBodHRwczovL3d3dy54aWZhbnlzLmNvbS95aW5ncGlhbnNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXG7ovr7pvp9AaHR0cHM6Ly93d3cuZGFkYWd1aS5tZS92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqJnN1Ym1pdD1cXG7ln47luIJAaHR0cHM6Ly93d3cuY2l0eWR5LmNvbS9zZWFyY2guaHRtbD93ZD0qKlxcbmxpYnZpb0BodHRwczovL3d3dy5saWJ2aW8ubWUvc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKiZzdWJtaXQ9XFxu5paw6KeGQGh0dHBzOi8vd3d3LjYwODBkeTEuY29tL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXG7nnIvnnIt5QGh0dHBzOi8vd3d3LmtrZHkubGl2ZS92b2Qtc2VhcmNoLmh0bWw/d2Q9Kiomc3VibWl0PVxcbumlreWbokBodHRwczovL3d3dy5mYW50dWFuaGQuY29tL3NlYXJjaC5odG1sP3dkPSoqJnN1Ym1pdD1cXG7lhY3nmoRAaHR0cHM6Ly93d3cuZnJlZW9rLnZpcC92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXFxu54mb6amsQGh0dHBzOi8vd3d3Lm5pdW1hdHYuY2Mvdm9kc2VhcmNoLmh0bWw/d2Q9Kiomc3VibWl0PVxcbuWFjei0uUBodHRwczovL3d3dy50aGVmcmVlLnZpcC92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXFxu6I6r5omO5YWUQGh0dHBzOi8vd3d3Lm1vemhhdHUuY29tL2luZGV4LnBocC92b2Qvc2VhcmNoLmh0bWw/d2Q9KipcXG7pnLnpm7NAaHR0cHM6Ly9wbHlpbmdzaGkuY29tL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXG7ljoLplb9AaHR0cHM6Ly93d3cuY3pzcHAuY29tL3hzc2VhcmNoP3E9KipcXG5WT0ZAaHR0cHM6Ly93d3cudm9mbGl4LmNvbS9zZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXFxu55S15b2xQGh0dHBzOi8vd3d3LmFwcG1vdmllLmNjL2luZGV4LnBocC92b2Qvc2VhcmNoLmh0bWw/d2Q9Kiomc3VibWl0PVxcbui/veWJp0BodHRwOi8vempkci52aXAvdm9kL3NlYXJjaC93ZC8qKi5odG1sXFxu55av54uXQGh0dHBzOi8vbS5mZW5nZ291ZHkzLmNvbS9pbmRleC5waHA/cz12b2Qtc2VhcmNoLW5hbWUmd2Q9KipcXG7lnKjnur9AaHR0cHM6Ly93d3cuenh6ai5vcmcvdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKiZzdWJtaXQ9XFxu5LiD5LiDQGh0dHA6Ly9hYWFzb2ZhLmNvbS9zZWFyY2gucGhwXFxu5YyX5bedQGh0dHBzOi8vd3d3LmJjd3pnLmNvbS92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS8/d2Q9KipcXG5FRkBodHRwczovL3d3dy5waWxpNS5jbi92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqJnN1Ym1pdD1cXG7lvbHlrrZAaHR0cDovL3lzemp2aXAuY29tL2luZGV4LnBocC92b2Qvc2VhcmNoLmh0bWw/d2Q9KipcXG7kupTkupRAaHR0cHM6Ly81NTVkeS5jYy92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXFxu5rij5ryrQGh0dHBzOi8vd3d3LmRtMjAyMi5jb20vdm9kc2VhcmNoLmh0bWw/d2Q9KipcXG7lnKjlrrZAaHR0cHM6Ly96eHpqLnZpcC92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqJnN1Ym1pdD1cXG5waWHlupNAaHR0cHM6Ly9tLnBpYWt1LmNjL3MvLS0tLS0tLS0tLS0tLS8/d2Q9KipcXG7mnoHlk4FAaHR0cHM6Ly93d3cuanB5cy5tZS92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXFxu6Im+6L+qQGh0dHBzOi8vYWlkaS50di92c2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKiZzdWJtaXQ9XFxu5Lmd5beeQGh0dHA6Ly93d3cuaml1emhvdTkxMS5jb20vc2VhcmNoLnBocD9zZWFyY2h3b3JkPSoqXFxu5Y2B5Y2DQGh0dHA6Ly93d3cucWlhbnNoaWhvdXNlLmNvbS9zcmgvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXFxu6bqm54mHQGh0dHA6Ly9tLmx5MzY4LmNvbS9pbmRleC5waHA/cz12b2QtbV9zLW5hbWUmd2Q9KipcXG7np4HkurpAaHR0cHM6Ly9zb3Vtay5jb20vdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxcbuaYn+i+sEBodHRwOi8vd3d3LnFoZGRqLmNvbS5jbi94Y3l5c2VhcmNoLyoqLS0tLS0tLS0tLS0tLS5odG1sXFxuQ29rZXZZQGh0dHBzOi8vY29rZW12Lm1lL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXG7niLHnnIt5QGh0dHBzOi8vaWthbjYudmlwL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLz93ZD0qKiZzdWJtaXQ9XFxu5bmy6aWtcHlAaHR0cHM6Ly93d3cuZ2Z5c3lzMS5jb20vdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxcbuWkqeepunlAaHR0cDovL3Rrem5wLmNvbS92b2RzZWFyY2guaHRtbD93ZD0qKlxcbuiTneWFiUBodHRwczovL3d3dy5sZ3l5LmNjL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXG7kvY7nq69AaHR0cHM6Ly9kZHlzLnR2Lz9zPSoqJnBvc3RfdHlwZT1wb3N0XFxu5Yqq5YqqQGh0dHBzOi8vd3d3Lm51bnV5eTMub3JnL3NvLyoqLSoqLS0uaHRtbGA7XFxubGV0IHJ1bGVzVGV4dCA9IGdldEl0ZW0oXFxcInJ1bGVzXFxcIiwgcnVsZXNUZXh0MCk7XFxubGV0IHNwID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2Uvc3BcXFwiKTtcXG5ydWxlcyA9IHJ1bGVzVGV4dC5zcGxpdChcXFwiXFxcXG5cXFwiKVxcbiAgICAuZmlsdGVyKGl0ID0+IGl0LmluY2x1ZGVzKFxcXCJAXFxcIikpXFxuICAgIC5tYXAocnVsZSA9PiB7XFxuICAgICAgICBsZXQgcyA9IHJ1bGUuc3BsaXQoXFxcIkBcXFwiKTtcXG4gICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgbmFtZTogc1swXSxcXG4gICAgICAgICAgICBmaW5kOiBmdW5jdGlvbihrZXksIHBhZ2UpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHNwKHNbMV0sIGtleSwgc1swXSk7XFxuICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICB1cmw6IHNbMV1cXG4gICAgICAgIH07XFxuICAgIH0pO1xcblxcbmZ1bmN0aW9uIGxvYWQocGFnZSwgcnVsZSkge1xcbiAgICBsZXQgc2l6ZSA9IHBhZ2UgPD0gMCA/IHJ1bGVzLmxlbmd0aCA6IHNpemUwO1xcbiAgICBwYWdlID0gcGFnZSA8PSAwID8gMSA6IHBhZ2U7XFxuICAgIGlmICghcGFnZSAmJiAhcnVsZSkge1xcbiAgICAgICAgcmV0dXJuIHJ1bGVzLm1hcChpdCA9PiBpdC5uYW1lKTtcXG4gICAgfVxcbiAgICBpZiAocnVsZSAhPSBudWxsKSB7XFxuICAgICAgICBpZiAocGFnZSAhPSBudWxsICYmIHBhZ2UgPiAxKSB7XFxuICAgICAgICAgICAgcmV0dXJuIHJ1bGVzLmZpbHRlcihpID0+IGkubmFtZSA9PSBydWxlICYmIGkucGFnZSk7XFxuICAgICAgICB9XFxuICAgICAgICByZXR1cm4gcnVsZXMuZmlsdGVyKGkgPT4gaS5uYW1lID09IHJ1bGUpO1xcbiAgICB9XFxuICAgIGxldCBzdGFydCA9IChwYWdlIC0gMSkgKiBzaXplO1xcbiAgICBpZiAocnVsZXMubGVuZ3RoIDwgc3RhcnQgKyAxKSB7XFxuICAgICAgICByZXR1cm4gW107XFxuICAgIH1cXG4gICAgbGV0IGxlbiA9IHNpemU7XFxuICAgIGlmIChydWxlcy5sZW5ndGggPCBwYWdlICogc2l6ZSkge1xcbiAgICAgICAgbGVuID0gcnVsZXMubGVuZ3RoIC0gc3RhcnRcXG4gICAgfVxcbiAgICByZXR1cm4gcnVsZXMuc2xpY2Uoc3RhcnQsIHN0YXJ0ICsgbGVuKTtcXG59XFxuXFxuZnVuY3Rpb24gYWRkUnVsZShuYW1lLCBzdXJsKSB7XFxuICAgIHNldEl0ZW0oXFxcInJ1bGVzXFxcIiwgcnVsZXNUZXh0ICsgXFxcIlxcXFxuXFxcIiArIG5hbWUgKyBcXFwiQFxcXCIgKyBzdXJsKTtcXG59XFxuXFxuZnVuY3Rpb24gYWRkQWxsKGlucHV0KSB7XFxuICAgIGlmIChpbnB1dCA9PSBudWxsIHx8IGlucHV0ID09IFxcXCJcXFwiKSB7XFxuICAgICAgICByZXR1cm4gMDtcXG4gICAgfVxcbiAgICBsZXQgYXJyID0gaW5wdXQuc3BsaXQoXFxcIlxcXFxuXFxcIilcXG4gICAgICAgIC5maWx0ZXIoaXQgPT4gaXQuaW5jbHVkZXMoXFxcIkBcXFwiKSlcXG4gICAgICAgIC5tYXAocnVsZSA9PiB7XFxuICAgICAgICAgICAgbGV0IHMgPSBydWxlLnNwbGl0KFxcXCJAXFxcIik7XFxuICAgICAgICAgICAgcmV0dXJuIHtcXG4gICAgICAgICAgICAgICAgbmFtZTogc1swXSxcXG4gICAgICAgICAgICAgICAgdXJsOiBzWzFdXFxuICAgICAgICAgICAgfTtcXG4gICAgICAgIH0pO1xcbiAgICBsZXQgZXhpc3QgPSBydWxlcy5tYXAoaXQgPT4gaXQudXJsKTtcXG4gICAgbGV0IGMgPSAwO1xcbiAgICBmb3IgKGxldCBpdCBvZiBhcnIpIHtcXG4gICAgICAgIGlmICghZXhpc3QuaW5jbHVkZXMoaXQudXJsKSkge1xcbiAgICAgICAgICAgIHJ1bGVzVGV4dCA9IHJ1bGVzVGV4dCArIFxcXCJcXFxcblxcXCIgKyBpdC5uYW1lICsgXFxcIkBcXFwiICsgaXQudXJsO1xcbiAgICAgICAgICAgIGMrKztcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBzZXRJdGVtKFxcXCJydWxlc1xcXCIsIHJ1bGVzVGV4dCk7XFxuICAgIHJldHVybiBjO1xcbn1cXG5cXG5mdW5jdGlvbiByZW1vdmVSdWxlKG5hbWUpIHtcXG4gICAgbGV0IG5ld1QgPSBydWxlc1RleHQuc3BsaXQoXFxcIlxcXFxuXFxcIilcXG4gICAgICAgIC5maWx0ZXIoaXQgPT4gaXQuaW5kZXhPZihuYW1lICsgXFxcIkBcXFwiKSA8IDApXFxuICAgICAgICAuam9pbihcXFwiXFxcXG5cXFwiKTtcXG4gICAgc2V0SXRlbShcXFwicnVsZXNcXFwiLCBuZXdUKTtcXG59XFxuXFxuJC5leHBvcnRzID0ge1xcbiAgICBsb2FkOiBsb2FkLFxcbiAgICBhZGRSdWxlOiBhZGRSdWxlLFxcbiAgICByZW1vdmVSdWxlOiByZW1vdmVSdWxlLFxcbiAgICBhZGRBbGw6IGFkZEFsbFxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuaQnOe0ouino+aekFwiLFwicGF0aFwiOlwic3BcIixcInJ1bGVcIjpcImZ1bmN0aW9uIHNlYXJjaCh1cmwsIGtleSwgcnVsZSkge1xcbiAgICBsZXQgZCA9IFtdO1xcbiAgICBsZXQgaHRtbCA9IFxcXCJcXFwiO1xcbiAgICBpZiAodXJsLmluY2x1ZGVzKFxcXCIqKlxcXCIpKSB7XFxuICAgICAgICAvL2dldOivt+axglxcbiAgICAgICAgbGV0IG9sZCA9IHVybDtcXG4gICAgICAgIHVybCA9IHVybC5yZXBsYWNlKFxcXCIqKlxcXCIsIGtleSk7XFxuICAgICAgICBodG1sID0gcmVxdWVzdCh1cmwpO1xcbiAgICAgICAgLy/oh6rliqjov4fpqozor4HnoIHlkozpopHnuYHorr/pl67pmZDliLZcXG4gICAgICAgIGxldCB7XFxuICAgICAgICAgICAgY2hlY2ssIHRlc3RcXG4gICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS95em1cXFwiKTtcXG4gICAgICAgIGlmIChjaGVjayh1cmwsIGh0bWwsIGQpKSB7XFxuICAgICAgICAgICAgbG9nKFxcXCLph43or5XkuoZcXFwiKTtcXG4gICAgICAgICAgICBodG1sID0gcmVxdWVzdCh1cmwsIHtcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiB1cmxcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pOyAgICAgICAgICAgXFxuICAgICAgICB9ICAgICAgICAgXFxuICAgICAgICB0ZXN0KHVybCwgaHRtbCwgZCwgb2xkLCBrZXksIHJ1bGUpO1xcbiAgICB9IGVsc2Uge1xcbiAgICAgICAgLy/oh6rliqjor4bliKtwb3N06K+35rGCXFxuICAgICAgICBodG1sID0gcmVxdWVzdCh1cmwpO1xcbiAgICAgICAgbGV0IGZvcm0gPSBwZGZoKGh0bWwsIFxcXCJib2R5JiZmb3JtJiZIdG1sXFxcIik7XFxuICAgICAgICBsZXQgYWN0aW9uID0gcGQoaHRtbCwgXFxcImZvcm0mJmFjdGlvblxcXCIsIHVybCk7XFxuICAgICAgICBsZXQgaW5wdXRzID0gcGRmYShodG1sLCBcXFwiYm9keSYmZm9ybSYmaW5wdXRcXFwiKTtcXG4gICAgICAgIGxldCBib2R5ID0ge307XFxuICAgICAgICBmb3IgKGxldCBpdCBvZiBpbnB1dHMpIHtcXG4gICAgICAgICAgICBsZXQgbmFtZSA9IHBkZmgoaXQsIFxcXCJpbnB1dCYmbmFtZVxcXCIpO1xcbiAgICAgICAgICAgIGlmIChuYW1lICYmIG5hbWUgIT0gXFxcIlxcXCIpIHtcXG4gICAgICAgICAgICAgICAgbGV0IHZhbHVlID0gcGRmaChpdCwgXFxcImlucHV0JiZ2YWx1ZVxcXCIpO1xcbiAgICAgICAgICAgICAgICBib2R5W25hbWVdID0gdmFsdWUgfHwga2V5O1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgICAgIGh0bWwgPSBwb3N0KGFjdGlvbiwge1xcbiAgICAgICAgICAgIGJvZHk6IGJvZHlcXG4gICAgICAgIH0pO1xcbiAgICB9XFxuXFxuICAgIGxldCBhbGlzdCA9IHBkZmEoaHRtbCwgXFxcImJvZHkmJmFcXFwiKTtcXG4gICAgbGV0IGFyciA9IGFsaXN0Lm1hcChpdCA9PiB7XFxuICAgICAgICBsZXQgdCA9IHBkZmgoaXQsIFxcXCJhJiZUZXh0XFxcIik7XFxuICAgICAgICBsZXQgdDIgPSBwZGZoKGl0LCBcXFwiYSYmdGl0bGVcXFwiKTtcXG4gICAgICAgIHJldHVybiB7XFxuICAgICAgICAgICAgLy9odG1sOiBpdCxcXG4gICAgICAgICAgICB0ZXh0OiB0MiAmJiB0Mi5pbmNsdWRlcyhrZXkpID8gdDIgOiB0LFxcbiAgICAgICAgICAgIGhyZWY6IHBkKGl0LCBcXFwiYSYmaHJlZlxcXCIsIHVybClcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuXFxuICAgIGZ1bmN0aW9uIGlzUmVzdWx0KGl0KSB7XFxuICAgICAgICBpdCA9IGl0LnRleHQgfHwgXFxcIlxcXCI7XFxuICAgICAgICBpZiAoaXQgPT0gXFxcIlxcXCIgfHwgaXQubWF0Y2goL+aQnOe0onznu5PmnpwvKSkge1xcbiAgICAgICAgICAgIHJldHVybiBmYWxzZVxcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIGl0LmluY2x1ZGVzKGtleSk7XFxuICAgIH1cXG5cXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGxldCBpdCA9IGFycltpXTtcXG4gICAgICAgIGxldCB0ID0gaXQudGV4dDtcXG4gICAgICAgIGlmICghaXQuaHJlZiB8fCBpdC5ocmVmID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgY29udGludWU7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAoaXNSZXN1bHQoaXQpKSB7XFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHQsXFxuICAgICAgICAgICAgICAgIHVybDogXFxcImhpa2VyOi8vcGFnZS9wP3U9XFxcIiArIGJhc2U2NEVuY29kZShpdC5ocmVmKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+XFxcIiArIHJ1bGUgKyBcXFwiPC9mb250PlxcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICByZXR1cm4gZDtcXG59XFxuJC5leHBvcnRzID0gc2VhcmNoO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5aKe5YigXCIsXCJwYXRoXCI6XCJtYW5hZ2VcIixcInJ1bGVcIjpcIiQuZXhwb3J0cyA9IGZ1bmN0aW9uKGQsIG5hbWVzKSB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIkFJ5oqA5pyvXFxcIixcXG4gICAgICAgIHVybDogXFxcImNvbmZpcm06Ly/ln7rkuo5BSeivhueJh+iHquWKqOWIhuaekOa6kOeggeaKgOacr++8jOS7o+eggeWujOWFqOW8gOa6kO+8jOaVsOaNruadpea6kOS6juWOn+e9keerme+8jOi9r+S7tuWSjOinhOWImeS4jeaPkOS+m+S7u+S9leWGheWuuS5qczonJ1xcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcImZsZXhfYnV0dG9uXFxcIlxcbiAgICB9LCB7XFxuICAgICAgICB0aXRsZTogZ2V0SXRlbSgnd2ViJywgJzAnKSA9PSBcXFwiMFxcXCIgPyBcXFwi6KeG6aKR5ZeF5o6iXFxcIiA6IFxcXCJXZWLpgJrlhY1cXFwiLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKCgpID0+IHtcXG4gICAgICAgICAgICBpZiAoZ2V0SXRlbSgnd2ViJywgJzAnKSA9PSBcXFwiMFxcXCIpIHtcXG4gICAgICAgICAgICAgICAgc2V0SXRlbSgnd2ViJywgJzEnKVxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oJ3dlYicsICcwJylcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiZmxleF9idXR0b25cXFwiXFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCIgKyBcXFwiLFxcbiAgICAgICAgdXJsOiAkKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChycikgPT4ge1xcbiAgICAgICAgICAgIGRlbGV0ZUl0ZW1CeUNscyhcXFwiYWlhZGRcXFwiKTtcXG4gICAgICAgICAgICBhZGRJdGVtQWZ0ZXIocnIgKyBcXFwiYWlzZGVsXFxcIiwgW3tcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLor7fovpPlhaXnvZHnq5nlkI3np7BcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IFxcXCJwdXRNeVZhcignbmFtZScsIGlucHV0KVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBcXFwiYWlhZGRcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXCLor7fovpPlhaXnvZHnq5nmkJzntKLlnLDlnYBcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgb25DaGFuZ2U6IFxcXCJwdXRNeVZhcignc3VybCcsIGlucHV0KVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBcXFwiYWlhZGRcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5o+Q5Lqk5L+d5a2YXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF9jZW50ZXJfMVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoXFxcIiNub0xvYWRpbmcjXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBzdXJsID0gZ2V0TXlWYXIoXFxcInN1cmxcXFwiLCBcXFwiXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5hbWUgPSBnZXRNeVZhcihcXFwibmFtZVxcXCIsIFxcXCJcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3VybCA9PSBcXFwiXFxcIiB8fCBuYW1lID09IFxcXCJcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/or7fovpPlhaXlrozmlbTlhoXlrrlcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCByID0gZGVjb2RlVVJJQ29tcG9uZW50KHN1cmwpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHIgPSByLnJlcGxhY2UobmV3IFJlZ0V4cChcXFwiW1xcXFx1NGUwMC1cXFxcdTlmYTVdK1xcXCIsIFxcXCJnXFxcIiksIFxcXCIqKlxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJ1bGVcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJ1bGUobmFtZSwgcik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5bey5L+d5a2YXFxcIjtcXG4gICAgICAgICAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbHM6IFxcXCJhaWFkZFxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIF0pO1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9lbXB0eVxcXCJcXG4gICAgICAgIH0sIE1ZX1JVTEUudGl0bGUpLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJmbGV4X2J1dHRvblxcXCIsXFxuICAgIH0pO1xcbiAgICBkLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IFxcXCIgLSBcXFwiLFxcbiAgICAgICAgdXJsOiBcXFwic2VsZWN0Oi8vXFxcIiArIEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBvcHRpb25zOiBuYW1lcyxcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuivt+mAieaLqeimgeWIoOmZpOeahOermeeCuVxcXCIsXFxuICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQge1xcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUnVsZVxcbiAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXCIpO1xcbiAgICAgICAgICAgICAgICByZW1vdmVSdWxlKGlucHV0KTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL09LXFxcIjtcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcImZsZXhfYnV0dG9uXFxcIlxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBcXFwi4oaX77iPXFxcIixcXG4gICAgICAgIHVybDogJChcXFwiI25vTG9hZGluZyNcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxuICAgICAgICAgICAgY29uZmlybSh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5rip6aao5o+Q56S6XFxcIixcXG4gICAgICAgICAgICAgICAgY29udGVudDogXFxcIuehruWumuWvvOWHuuaJgOacieaVsOaNruWQl++8n++8iOWvvOWHuuWQjuWPr+S7peeCueWHu+aXgei+ueeahOWvvOWFpeaMiemSruaJuemHj+WvvOWFpe+8iVxcXCIsXFxuICAgICAgICAgICAgICAgIGNvbmZpcm06ICQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkXFxuICAgICAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBsb2FkKC0xKTtcXG4gICAgICAgICAgICAgICAgICAgIGxldCBzID0gZGF0YS5tYXAoaXQgPT4gaXQubmFtZSArIFxcXCJAXFxcIiArIGl0LnVybCkuam9pbihcXFwiXFxcXG5cXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiY29weTovL1xcXCIgKyBzXFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgfSksXFxuICAgICAgICBjb2xfdHlwZTogXFxcImZsZXhfYnV0dG9uXFxcIixcXG4gICAgfSk7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogXFxcIuKGmO+4j1xcXCIsXFxuICAgICAgICB1cmw6ICQoXFxcIlxcXCIsIFxcXCLor7fovpPlhaXopoHmibnph4/lr7zlhaXnmoTmlbDmja5cXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgbGV0IHtcXG4gICAgICAgICAgICAgICAgYWRkQWxsXFxuICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFwiKTtcXG4gICAgICAgICAgICBsZXQgY291bnQgPSBhZGRBbGwoaW5wdXQpO1xcbiAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL1xcXCIgKyAoY291bnQgPiAwID8gXFxcIuaIkOWKn+WvvOWFpVxcXCIgKyBjb3VudCArIFxcXCLmnaHmlbDmja5cXFwiIDogXFxcIuS4gOadoeS5n+ayoeWvvOWFpVxcXCIpXFxuICAgICAgICB9KSxcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiZmxleF9idXR0b25cXFwiLFxcbiAgICB9KTtcXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIGNvbF90eXBlOiBcXFwiYmxhbmtfYmxvY2tcXFwiLFxcbiAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICBpZDogTVlfUlVMRS50aXRsZSArIFxcXCJhaXNkZWxcXFwiXFxuICAgICAgICB9XFxuICAgIH0pO1xcblxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIumqjOivgeeggVwiLFwicGF0aFwiOlwieXptXCIsXCJydWxlXCI6XCJmdW5jdGlvbiBjaGVjayh1cmwsIGh0bWwsIGQpIHtcXG4gICAgbGV0IHJlbG9hZCA9IGZhbHNlO1xcbiAgICBpZiAoL+mqjOivgeeggXzns7vnu5/lronlhajpqozor4EvLnRlc3QoaHRtbCkpIHtcXG4gICAgICAgIGxldCBoZWFkZXJzID0ge1xcbiAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogTU9CSUxFX1VBLFxcbiAgICAgICAgICAgIFxcXCJSZWZlcmVyXFxcIjogdXJsXFxuICAgICAgICB9O1xcbiAgICAgICAgTVlfSE9NRSA9IGdldEhvbWUodXJsKTtcXG4gICAgICAgIGxldCBzc3l6ID0gJ1Rsb0dubmlrVGhyZnMvNWZETmxrNUNTc2JhR3RBSDdXL3VNWmp1WW9JdXBCNmJDb285Q290TFFIZlBJZEdnYmtieW5LcUwyYVVFMlh5NTU4WDJReEhZdFRVMDl2RCs0b2FDREl1U1pPN254RGJMZlJHZldqN3pxbCt5TWJ2RithSm9EL202UHNmdy9QeVlPQXAvWlZHZHJQemFDQnlmZDBITDVERlZTdytZRjJPQzQwVjhTUDlSeGRGS0tkckJ1UHhDV2R4VUNGckorMWxSeS9UVTNMQzg0QzR4eEVCaGd1ZDdSdEJwMHpaQXJxQkUwNitaM0p0RFAwZUZDei9ENVgwNDA5cVBISzNlMXkvTHVVZ2NjdXhwSG5qWUxFMUdqbFA4d1lBMmhRV2U3eVBuZ2dnUUJIdzMzL2d2YjN0dUNjeEVLVFdnbWFoL1IzMkFIOVpGOGpGN1dlbVQyNmxVaXpWWGUvc3BDZGhEZ0hSL3pVaE9ERDRQTzZnbEk4SlBoZHUrVndmUHlSTEcyRDdDVW8xTDZTSUYrMGZZZjBvVE9XTjEzVVBJVG81K3VaZC9XblFRTFU4Tll4L1dGQ1RoRW5rYnpsbjlZR3Q2MGZSeHNIKzh1TURGZ2FCaUMrejJTcGN4QjlnWjZHWHlwTFNYV2FqK3FFVWJHSktFeCtqSy92NWZucmtJaENkd05ia3A5ZFJrczZkbWxZbEJpZnpvV0Y4Umt1QzNycVB0b1NjQmtNT01adTdHaVZ0b0hFZEhVb3ptblVJZHJVMUxHSXFxOVduRzdYMmEzeUg4czY1bWpMdUxuZDNxMFU4ditMTVBuSEwyL0dqUXVUUUtWaCtSS0VQcUsvSmRyQ2hHTE5yamNIdkxIRGJIRXNockdadVFPZEVwaGJ4L1BraGt2YVl5NEsxTU84NFIxN2d1UnNLcy9WNm5pVVBhTCtYYlE3YzNmcUpTNFZISndsdWRKVERlMDJldWZmR0NtMFBKSVBsQU9nTEhuWDBpekpoQTZxNzM4UjJVd1FjV0JRakp0NzlhRitreXFTZHl0MVFQVlFWamFDM0lwUmY3UGdzRGhFSjdiaTluU2NseUl6Z0o5RENKNFQrOGRHMXhIaEt5WmFzVDdML3g5TGZyMU1nczhuQlpFUjJXOWF4N2lUa05LK1g1QUNVLy9wL1lvUC91QWFuRHRiM0QwaUtVVXVYRkgrSmJiMHgxUDMyMlMydzZCSjQ2bnVOSEJNSFRwVnVXd2haZVp6cmlHaDdxb095d0xXaUV4Qk1LeXhUR0xubUtoN3IwMy95WEtZV0lKbnBCTjJNTXljVkhSWko3UnVtSFY0Q0lzVnJxN2lSUDQ4ODIzUkpWdDlPdHlQN3V1YzN3QkJWM2tjWlV6YmJhWWRXQngxK0F1K09kMnU3bFI2am9PTDgxMG1jSm0vZjdKNVR2R1FQNkhHcGgxWUhIWDRDNzQ1M2E3dVZIcU9neWpqaDVFQmQ3MjBNRUJZMjNjK1RLcS96OVVwV0RET2c0OFpGbndTSWhGcWl0V2RpWmlxc2FZdU4wL1NYd2lLOEVHOWVRMjl1MlhESm9EVzRtbHd0Y1JPN3ZhWDVYY0ZzZ2Y0L21MVTA3bWknO1xcbiAgICAgICAgZXZhbFByaXZhdGVKUyhzc3l6KTtcXG5cXG4gICAgICAgIGxldCB2Y29kZSA9IGdldFZDb2RlMihNWV9IT01FICsgJy9pbmRleC5waHAvdmVyaWZ5L2luZGV4Lmh0bWw/JywgSlNPTi5zdHJpbmdpZnkoaGVhZGVycyksICdudW0nKTtcXG4gICAgICAgIGZldGNoKE1ZX0hPTUUgKyBodG1sLm1hdGNoKC9cXFxcL2luZGV4LnBocC4qP3ZlcmlmeT0vKVswXSArIEpTT04ucGFyc2UodmNvZGUpLnJldCwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IGhlYWRlcnMsXFxuICAgICAgICAgICAgbWV0aG9kOiAnUE9TVCdcXG4gICAgICAgIH0pO1xcbiAgICAgICAgcmVsb2FkID0gdHJ1ZTtcXG4gICAgfVxcbiAgICByZXR1cm4gcmVsb2FkO1xcbn1cXG5cXG5mdW5jdGlvbiB0ZXN0KHVybCwgaHRtbCwgZCwgb2xkLCBrZXksIHJ1bGUpIHtcXG4gICAgaWYgKC8156eSfOmikee5gS8udGVzdChodG1sKSkge1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+aQnOe0oumcgOmXtOmalDXnp5LvvIzngrnlh7vph43mlrDliqDovb0nLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIixcXG4gICAgICAgICAgICBkZXNjOiBcXFwi4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9I2YxM2I2NmE+XFxcIiArIHJ1bGUgKyBcXFwiPC9mb250PlxcXCIsXFxuICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKHVybCwgb2xkLCBrZXksIHJ1bGUpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHNwID0gJC5yZXF1aXJlKFxcXCJoaWtlcjovL3BhZ2Uvc3BcXFwiKTtcXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBzcChvbGQsIGtleSwgcnVsZSk7XFxuICAgICAgICAgICAgICAgIGxldCB7XFxuICAgICAgICAgICAgICAgICAgICB3cmFwXFxuICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcImhpa2VyOi8vcGFnZS90b29sXFxcIik7XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGl0IG9mIGQpIHtcXG4gICAgICAgICAgICAgICAgICAgIGl0LnRpdGxlID0gd3JhcChpdC50aXRsZSwga2V5KTtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICBhZGRJdGVtQWZ0ZXIodXJsLCBkKTtcXG4gICAgICAgICAgICAgICAgZGVsZXRlSXRlbSh1cmwpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vT0tcXFwiO1xcbiAgICAgICAgICAgIH0sIHVybCwgb2xkLCBrZXksIHJ1bGUpLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIGlkOiB1cmxcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KTtcXG4gICAgfVxcbn1cXG5cXG4kLmV4cG9ydHMgPSB7XFxuICAgIGNoZWNrOiBjaGVjayxcXG4gICAgdGVzdDogdGVzdFxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuW3peWFt1wiLFwicGF0aFwiOlwidG9vbFwiLFwicnVsZVwiOlwiZnVuY3Rpb24gd3JhcCh0ZXh0LCBzKSB7XFxuICAgIHJldHVybiB0ZXh0LmluY2x1ZGVzKFxcXCLigJzigJzigJ3igJ1cXFwiKSA/IHRleHQgOiBcXFwi4oCc4oCc4oCd4oCdXFxcIiArIHRleHQucmVwbGFjZShuZXcgUmVnRXhwKFxcXCI8ZW0+fDwvZW0+XFxcIiwgXFxcImdcXFwiKSwgXFxcIlxcXCIpLnJlcGxhY2UobmV3IFJlZ0V4cChzLCBcXFwiZ1xcXCIpLCBcXFwiPHN0cm9uZz48c3BhbiBzdHlsZT1cXFxcXFxcImNvbG9yOiAjMUU5MEZGXFxcXFxcXCI+XFxcIiArIHMgKyBcXFwiPC9zcGFuPjwvc3Ryb25nPlxcXCIpXFxufVxcbiQuZXhwb3J0cyA9IHtcXG4gICAgd3JhcDogd3JhcFxcbn1cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWNleaQnFwiLFwicGF0aFwiOlwic2luZ2xlc1wiLFwicnVsZVwiOlwianM6XFxudmFyIGQgPSBbXTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIuaQnOe0olxcXCIsXFxuICAgIHVybDogJC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICBwdXRNeVZhcihcXFwic29cXFwiLCBpbnB1dCk7XFxuICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICB9KSxcXG4gICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgIGRlc2M6IFxcXCLor7fovpPlhaXlhbPplK7or43vvIzlsL3ph4/lsJHlrZfkuI3opoHlpJrlrZdcXFwiLFxcbiAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcInNvXFxcIiwgXFxcIlxcXCIpXFxuICAgIH1cXG59KTtcXG5sZXQgcyA9IGdldE15VmFyKFxcXCJzb1xcXCIsIFxcXCJcXFwiKTtcXG5sZXQgciA9IFxcXCJcXFwiO1xcbmlmIChzICE9IFxcXCJcXFwiKSB7XFxuICAgIGxldCBwID0gTVlfUEFHRTtcXG4gICAgbGV0IHtcXG4gICAgICAgIGxvYWRcXG4gICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGFcXFwiKTtcXG4gICAgbGV0IHtcXG4gICAgICAgIHdyYXBcXG4gICAgfSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL3Rvb2xcXFwiKTtcXG4gICAgbGV0IGRhdGEgPSBsb2FkKHAsIE1ZX1BBUkFNUy5SVUxFLm5hbWUpO1xcbiAgICBsZXQgYXJyID0gZGF0YVswXS5maW5kKHMsIHApO1xcbiAgICBmb3IgKGxldCBpdCBvZiBhcnIpIHtcXG4gICAgICAgIGl0LnRpdGxlID0gd3JhcChpdC50aXRsZSwgcylcXG4gICAgICAgIGQucHVzaChpdCk7XFxuICAgIH1cXG59XFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pCc57Si6aG16Z2iXCIsXCJwYXRoXCI6XCJzb3VwXCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmlmIChNWV9QQVJBTVMua2V5ICYmIGdldE15VmFyKFxcXCJ1c2VcXFwiLCBcXFwiXFxcIikgPT0gXFxcIlxcXCIpIHtcXG4gICAgcHV0TXlWYXIoXFxcInNvdVxcXCIsIE1ZX1BBUkFNUy5rZXkpO1xcbiAgICBwdXRNeVZhcihcXFwidXNlXFxcIiwgXFxcIjFcXFwiKTtcXG4gICAgYWRkTGlzdGVuZXIoXFxcIm9uQ2xvc2VcXFwiLCAkLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcInVzZVxcXCIpO1xcbiAgICB9KSk7XFxufVxcbiQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL3BybycpXCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJYNVwiLFwicGF0aFwiOlwieDVcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxubGV0IHVybCA9IGJhc2U2NERlY29kZShnZXRQYXJhbShcXFwidVxcXCIpKTtcXG5kLnB1c2goe1xcbiAgICB0aXRsZTogXFxcIlxcXCIsXFxuICAgIHVybDogdXJsLFxcbiAgICBjb2xfdHlwZTogXFxcIng1X3dlYnZpZXdfc2luZ2xlXFxcIixcXG4gICAgZGVzYzogXFxcImZsb2F0JiYxMDAlXFxcIixcXG4gICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgIGV4dHJhOiB7XFxuICAgICAgICBmbG9hdFZpZGVvOiB0cnVlLFxcbiAgICAgICAgY2FuQmFjazogdHJ1ZSxcXG4gICAgICAgIGJsb2NrUnVsZXM6IFtcXFwiLmdpZlxcXCIsIFxcXCIvYWQvXFxcIiwgXFxcImdvb2dsZVxcXCIsIFxcXCIvc2gvdG8vXFxcIiwgXFxcIi5HSUZcXFwiXVxcbiAgICB9XFxufSk7XFxuc2V0UmVzdWx0KGQpO1wifV0sXCJwYXJhbXNcIjpcIntcXFwiUlVMRVxcXCI6e1xcXCJuYW1lXFxcIjpcXFwi5Zyf5ouo6byg55S15b2xXFxcIixcXFwidXJsXFxcIjpcXFwiaHR0cHM6Ly90YnNkeS5jb21cXFwifSxcXFwibG9uZ0NsaWNrXFxcIjpbe1xcXCJqc1xcXCI6XFxcIihcXFxcbihuYW1lKSA9PiB7XFxcXG4gICAgY29uZmlybSh7dGl0bGU6IFxcXFxcXFwiXFxcXFxcXFx1NmUyOVxcXFxcXFxcdTk5YThcXFxcXFxcXHU2M2QwXFxcXFxcXFx1NzkzYVxcXFxcXFwiLCBjb250ZW50OiBcXFxcXFxcIlxcXFxcXFxcdTc4NmVcXFxcXFxcXHU4YmE0XFxcXFxcXFx1NTIyMFxcXFxcXFxcdTk2NjRcXFxcXFxcXHU3OTgxXFxcXFxcXFx1NzUyOFxcXFxcXFwiICsgbmFtZSArIFxcXFxcXFwiXFxcXFxcXFx1NTQxN1xcXFxcXFxcdWZmMWZcXFxcXFxcIiwgY29uZmlybTogJC50b1N0cmluZygobmFtZSwgcnVsZSkgPT4ge1xcXFxuICAgICAgICBsZXQge3JlbW92ZVJ1bGV9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2RhdGE/cnVsZT1cXFxcXFxcIiArIHJ1bGUpO1xcXFxuICAgICAgICByZW1vdmVSdWxlKG5hbWUpO1xcXFxuICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL09LXFxcXFxcXCI7XFxcXG4gICAgfVxcXFxuICAgICwgbmFtZSwgTVlfUlVMRS50aXRsZSl9KTtcXFxcbiAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCI7XFxcXG59XFxcXG4pKFxcXFxcXFwi5Zyf5ouo6byg55S15b2xXFxcXFxcXCIpXFxcIixcXFwidGl0bGVcXFwiOlxcXCLnpoHnlKjlnJ/mi6jpvKDnlLXlvbFcXFwifSx7XFxcImpzXFxcIjpcXFwiJ2hpa2VyOi8vcGFnZS94NT91PWFIUjBjSE02THk5MFluTmtlUzVqYjIwPSdcXFwiLFxcXCJ0aXRsZVxcXCI6XFxcIuiuv+mXrummlumhtVxcXCJ9LHtcXFwianNcXFwiOlxcXCInaGlrZXI6Ly9wYWdlL3NpbmdsZXMnXFxcIixcXFwidGl0bGVcXFwiOlxcXCLmkJzntKLmraTmupBcXFwifV19XCIsXCJzYXZlZFwiOmZhbHNlLFwidGl0bGVcIjpcIkFJ5b2x5pCcXCIsXCJ2ZXJzaW9uXCI6MCxcInVybFwiOlwiaGlrZXI6Ly9wYWdlL3g1P3U9YUhSMGNITTZMeTkwWW5Oa2VTNWpiMjA9XCIsXCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwiZmluZF9ydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcbmxldCB1cmwgPSBiYXNlNjREZWNvZGUoZ2V0UGFyYW0oXFxcInVcXFwiKSk7XFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6IFxcXCJcXFwiLFxcbiAgICB1cmw6IHVybCxcXG4gICAgY29sX3R5cGU6IFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXCIsXFxuICAgIGRlc2M6IFxcXCJmbG9hdCYmMTAwJVxcXCIsXFxuICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgZmxvYXRWaWRlbzogdHJ1ZSxcXG4gICAgICAgIGNhbkJhY2s6IHRydWUsXFxuICAgICAgICBibG9ja1J1bGVzOiBbXFxcIi5naWZcXFwiLCBcXFwiL2FkL1xcXCIsIFxcXCJnb29nbGVcXFwiLCBcXFwiL3NoL3RvL1xcXCIsIFxcXCIuR0lGXFxcIl1cXG4gICAgfVxcbn0pO1xcbnNldFJlc3VsdChkKTtcIixcImdyb3VwXCI6XCLikaDovbvlkIjpm4ZcIixcInVhXCI6XCJtb2JpbGVcIixcInByZVJ1bGVcIjpcIlwiLFwicGFnZXNcIjpcIlt7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLkuoznuqfop6PmnpBcXFwiLFxcXCJwYXRoXFxcIjpcXFwicFxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG5sZXQgdXJsID0gYmFzZTY0RGVjb2RlKGdldFBhcmFtKFxcXFxcXFwidVxcXFxcXFwiKSk7XFxcXG5sZXQgaHRtbCA9IHJlcXVlc3QodXJsKTtcXFxcbmxldCBhbGlzdCA9IHBkZmEoaHRtbCwgXFxcXFxcXCJib2R5JiZhXFxcXFxcXCIpO1xcXFxubGV0IGFyciA9IGFsaXN0Lm1hcChpdCA9PiB7XFxcXG4gICAgcmV0dXJuIHtcXFxcbiAgICAgICAgLy9odG1sOiBpdCxcXFxcbiAgICAgICAgdGV4dDogcGRmaChpdCwgXFxcXFxcXCJhJiZUZXh0XFxcXFxcXCIpLFxcXFxuICAgICAgICB0aXRsZTogcGRmaChpdCwgXFxcXFxcXCJhJiZ0aXRsZVxcXFxcXFwiKSxcXFxcbiAgICAgICAgaHJlZjogcGQoaXQsIFxcXFxcXFwiYSYmaHJlZlxcXFxcXFwiLCB1cmwpXFxcXG4gICAgfVxcXFxufSk7XFxcXG4vL2xvZyhhcnIpO1xcXFxubGV0IGRlYnVnID0gZmFsc2U7XFxcXG5cXFxcbmZ1bmN0aW9uIGNsZWFyVGV4dChpdCkge1xcXFxuICAgIHJldHVybiBpdC5yZXBsYWNlKC/nrKx86ZuGfOeroC9nLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbn1cXFxcblxcXFxuZnVuY3Rpb24gaXNNb3ZpZShpdCkge1xcXFxuICAgIGlmIChpdCA9PSBudWxsIHx8IGl0LnRleHQgPT0gbnVsbCkge1xcXFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxcXG4gICAgfVxcXFxuICAgIGxldCB0aXQgPSBpdC50aXRsZSB8fCBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgIGl0ID0gaXQudGV4dCB8fCBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgIGlmIChpdCA9PSBcXFxcXFxcIlxcXFxcXFwiIHx8IGl0Lmxlbmd0aCA+IDgpIHtcXFxcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcXFxuICAgIH1cXFxcbiAgICAvL+aOkumZpFxcXFxuICAgIGxldCByZWcgPSAvXFxcXFxcXFwufOmrmOa4heebtOaSrXzlhpnnnJ/mjqjojZB85b2x6ZmifOW9seinhnzok53lhYnnlLXlvbF86auY5riF55S15b2xfOesrOS4gOWto3znrKzkuozlraN856ys5LiJ5a2jfOesrOWbm+Wto3znrKzkupTlraMvO1xcXFxuICAgIGlmICh0aXQgIT0gXFxcXFxcXCJcXFxcXFxcIiAmJiAhdGl0LmluY2x1ZGVzKGl0KSB8fCByZWcudGVzdChpdCkpIHtcXFxcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gaXQubWF0Y2goL+WOn+eUu3zlpIfnlKh86JOd5YWJfOi2hea4hXzpq5jmuIV85q2j54mHfOmfqeeJiHw0S3w0a3wxMDgwUHw3MjBQfFRDfEhEfEJELylcXFxcbn1cXFxcblxcXFxuZnVuY3Rpb24gbm90Q2hhcHRlcihpdCkge1xcXFxuICAgIGlmIChpdCA9PSBudWxsIHx8IGl0LnRleHQgPT0gbnVsbCkge1xcXFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIGl0LnRleHQubWF0Y2goL1swLTldXFxcXFxcXFwuWzAtOV3liIYvKTtcXFxcbn1cXFxcblxcXFxuZnVuY3Rpb24gaXNDaGFwdGVyKGl0LCBwcmUsIG5leHQpIHtcXFxcbiAgICBpZiAobm90Q2hhcHRlcihpdCkpIHtcXFxcbiAgICAgICAgLy/kvJjlhYjmjpLpmaRcXFxcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xcXFxuICAgIH1cXFxcbiAgICAvL+WIpOaWreaYr+S4jeaYr+eUteW9sVxcXFxuICAgIGlmIChpc01vdmllKGl0KSkge1xcXFxuICAgICAgICByZXR1cm4gdHJ1ZTtcXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIGlzQ2hhcHRlcjAoaXQsIHByZSkgfHwgaXNDaGFwdGVyMChpdCwgbmV4dCk7XFxcXG59XFxcXG5cXFxcbmZ1bmN0aW9uIGdldENoYXB0ZXJOdW0oaXQpIHtcXFxcbiAgICBpZiAoaXQgPT0gbnVsbCB8fCBpdC50ZXh0ID09IG51bGwpIHtcXFxcbiAgICAgICAgcmV0dXJuIC0xO1xcXFxuICAgIH1cXFxcbiAgICBpdCA9IGl0LnRleHQgfHwgXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICBpZiAoaXQgPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICByZXR1cm4gLTE7XFxcXG4gICAgfVxcXFxuICAgIGl0ID0gY2xlYXJUZXh0KGl0KTtcXFxcbiAgICBsZXQgcmVnID0gL15bMC05XSokLztcXFxcbiAgICBpZiAoIXJlZy50ZXN0KGl0KSkge1xcXFxuICAgICAgICByZXR1cm4gLTE7XFxcXG4gICAgfVxcXFxuICAgIGl0ID0gcGFyc2VJbnQoaXQpO1xcXFxuICAgIGlmIChpc05hTihpdCkpIHtcXFxcbiAgICAgICAgcmV0dXJuIC0xO1xcXFxuICAgIH1cXFxcbiAgICBpZiAoaXQgPiAxOTAwICYmIGl0IDwgMjEwMCkge1xcXFxuICAgICAgICByZXR1cm4gLTE7XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBpdDtcXFxcbn1cXFxcblxcXFxuZnVuY3Rpb24gaXNDaGFwdGVyMChpdCwgYnJvdGhlcikge1xcXFxuICAgIC8qaWYgKGRlYnVnKSB7XFxcXG4gICAgICAgIGxvZyh7XFxcXG4gICAgICAgICAgICBpdDogaXQsXFxcXG4gICAgICAgICAgICBicm90aGVyOiBicm90aGVyXFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH0qL1xcXFxuICAgIGl0ID0gZ2V0Q2hhcHRlck51bShpdCk7XFxcXG4gICAgLy9pZiAoZGVidWcpIGxvZyhpdCk7XFxcXG4gICAgaWYgKGl0IDwgMCkge1xcXFxuICAgICAgICByZXR1cm4gZmFsc2U7XFxcXG4gICAgfVxcXFxuICAgIGJyb3RoZXIgPSBnZXRDaGFwdGVyTnVtKGJyb3RoZXIpO1xcXFxuICAgIC8vaWYgKGRlYnVnKSBsb2coYnJvdGhlcik7XFxcXG4gICAgaWYgKGJyb3RoZXIgPCAwKSB7XFxcXG4gICAgICAgIHJldHVybiBmYWxzZTtcXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIGl0IC0gYnJvdGhlciA8IDIgJiYgaXQgLSBicm90aGVyID4gLTI7XFxcXG59XFxcXG5cXFxcbmxldCBfd2ViID0gJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgbGV0IHVybHMgPSBfZ2V0VXJscygpO1xcXFxuICAgIGxldCByZWcgPSAvXFxcXFxcXFwuaHRtbHxcXFxcXFxcXC5jc3N8XFxcXFxcXFwuanMvO1xcXFxuICAgIGZvciAobGV0IGsgaW4gdXJscykge1xcXFxuICAgICAgICBpZiAoIXJlZy50ZXN0KHVybHNba10pICYmIHVybHNba10ubWF0Y2goL1xcXFxcXFxcLm1wNHxcXFxcXFxcXC5tM3U4LykpIHtcXFxcbiAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAubG9nKHVybHNba10pO1xcXFxuICAgICAgICAgICAgcmV0dXJuIGZ5X2JyaWRnZV9hcHAuZ2V0SGVhZGVyVXJsKHVybHNba10ucmVwbGFjZSgvLio/dXJsPS8sIFxcXFxcXFwiXFxcXFxcXCIpKSArIFxcXFxcXFwiI2lnbm9yZUltZz10cnVlI1xcXFxcXFwiO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxufSk7XFxcXG5cXFxcbmxldCB3ZWIgPSBnZXRJdGVtKCd3ZWInLCAnMCcpID09IFxcXFxcXFwiMVxcXFxcXFwiO1xcXFxuXFxcXG5mb3IgKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xcXFxuICAgIGxldCBpdCA9IGFycltpXTtcXFxcbiAgICBsZXQgdCA9IGl0LnRleHQ7XFxcXG4gICAgaWYgKCFpdC5ocmVmIHx8IGl0LmhyZWYgPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgICAgICBjb250aW51ZTtcXFxcbiAgICB9XFxcXG4gICAgbGV0IHByZSA9IGkgPT0gMCA/IG51bGwgOiBhcnJbaSAtIDFdO1xcXFxuICAgIGxldCBuZXh0ID0gaSA9PSAoYXJyLmxlbmd0aCAtIDEpID8gbnVsbCA6IGFycltpICsgMV07XFxcXG4gICAgaWYgKGlzQ2hhcHRlcihpdCwgcHJlLCBuZXh0KSkge1xcXFxuICAgICAgICBpZiAod2ViKSB7XFxcXG4gICAgICAgICAgICB2YXIgdXJseCA9IFxcXFxcXFwid2ViUnVsZTovL1xcXFxcXFwiICsgaXQuaHJlZiArIFxcXFxcXFwiQFxcXFxcXFwiICsgX3dlYjtcXFxcbiAgICAgICAgICAgIHZhciBleHRyYXggPSB7XFxcXG4gICAgICAgICAgICAgICAganNMb2FkaW5nSW5qZWN0OiB0cnVlLFxcXFxuICAgICAgICAgICAgICAgIGlkOiBpdC5ocmVmLFxcXFxuICAgICAgICAgICAgICAgIGJsb2NrUnVsZXM6IFsnLm00YScsICcubXAzJywgJy5mbHYnLCAnLmF2aScsICcuM2dwJywgJy5tcGVnJywgJy53bXYnLCAnLm1vdicsICcucm12YicsICcuZ2lmJywgJy5qcGVnJywgJy5wbmcnLCAnLmljbycsICcuc3ZnJ11cXFxcbiAgICAgICAgICAgIH07XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICB2YXIgdXJseCA9IFxcXFxcXFwidmlkZW86Ly9cXFxcXFxcIiArIGl0LmhyZWY7XFxcXG4gICAgICAgICAgICB2YXIgZXh0cmF4ID0ge1xcXFxuICAgICAgICAgICAgICAgIGlkOiBpdC5ocmVmXFxcXG4gICAgICAgICAgICB9O1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogdCxcXFxcbiAgICAgICAgICAgIHVybDogdXJseCxcXFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfM1xcXFxcXFwiLFxcXFxuICAgICAgICAgICAgZXh0cmE6IGV4dHJheFxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG59XFxcXG5pZiAoZC5sZW5ndGggPT0gMCkge1xcXFxuICAgIC8v5Yy56YWN5aSx6LSlXFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogdXJsLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXFxcXFwiLFxcXFxuICAgICAgICBkZXNjOiBcXFxcXFxcImZsb2F0JiYxMDAlXFxcXFxcXCIsXFxcXG4gICAgICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICBjYW5CYWNrOiB0cnVlLFxcXFxuICAgICAgICAgICAgYmxvY2tSdWxlczogW1xcXFxcXFwiLmdpZlxcXFxcXFwiLCBcXFxcXFxcIi9hZC9cXFxcXFxcIiwgXFxcXFxcXCJnb29nbGVcXFxcXFxcIiwgXFxcXFxcXCIvc2gvdG8vXFxcXFxcXCIsIFxcXFxcXFwiLkdJRlxcXFxcXFwiXVxcXFxuICAgICAgICB9XFxcXG4gICAgfSk7XFxcXG4gICAgdG9hc3QoXFxcXFxcXCJBSeWMuemFjeWksei0pe+8jOW3suS9v+eUqFg15Yqg6L29XFxcXFxcXCIpO1xcXFxuICAgIHNldFJlc3VsdChkKTtcXFxcbn0gZWxzZSB7XFxcXG4gICAgLy/kuLrnur/ot6/liqDliIblibLnur9cXFxcbiAgICBsZXQgZDIgPSBbXTtcXFxcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGQubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgZDIucHVzaChkW2ldKTtcXFxcbiAgICAgICAgaWYgKGkgPCBkLmxlbmd0aCAtIDEpIHtcXFxcbiAgICAgICAgICAgIGxldCBpdCA9IGRbaV07XFxcXG4gICAgICAgICAgICBsZXQgdDEgPSBwYXJzZUludChjbGVhclRleHQoaXQudGl0bGUpKTtcXFxcbiAgICAgICAgICAgIGxldCBuZXh0ID0gZFtpICsgMV07XFxcXG4gICAgICAgICAgICBsZXQgdDIgPSBwYXJzZUludChjbGVhclRleHQobmV4dC50aXRsZSkpO1xcXFxuICAgICAgICAgICAgaWYgKHQyIC0gdDEgPiAxIHx8IHQxIC0gdDIgPiAxKSB7XFxcXG4gICAgICAgICAgICAgICAgZDIucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImJpZ19ibGFua19ibG9ja1xcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICAgICAgZDIucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImxpbmVfYmxhbmtcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgICAgIGQyLnB1c2goe1xcXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJiaWdfYmxhbmtfYmxvY2tcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgIH0pO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxuXFxcXG4gICAgc2V0UmVzdWx0KGQyKTtcXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwidGV4dF8xXFxcIixcXFwibmFtZVxcXCI6XFxcIuaQnOe0oua1i+ivlVxcXCIsXFxcInBhdGhcXFwiOlxcXCJzXFxcIixcXFwicnVsZVxcXCI6XFxcImpzOlxcXFxubGV0IHVybCA9IGJhc2U2NERlY29kZShnZXRQYXJhbShcXFxcXFxcInVcXFxcXFxcIikpO1xcXFxubG9nKHVybCk7XFxcXG5sZXQga2V5ID0gZ2V0UGFyYW0oXFxcXFxcXCJrZXlcXFxcXFxcIik7XFxcXG5sZXQgc3AgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2Uvc3BcXFxcXFxcIik7XFxcXG5zZXRSZXN1bHQoc3AodXJsLCBrZXksIFxcXFxcXFwi5pCc57Si5rWL6K+VXFxcXFxcXCIpKTtcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLogZrlkIjmkJzntKJcXFwiLFxcXCJwYXRoXFxcIjpcXFwicHJvXFxcIixcXFwicnVsZVxcXCI6XFxcInZhciBkID0gW107XFxcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi5pCc57SiXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9lbXB0eVxcXFxcXFwiO1xcXFxuICAgICAgICB9KSxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaW5wdXRcXFxcXFxcIixcXFxcbiAgICAgICAgZGVzYzogXFxcXFxcXCLor7fovpPlhaXlhbPplK7or43vvIzlsL3ph4/lsJHlrZfkuI3opoHlpJrlrZdcXFxcXFxcIixcXFxcbiAgICAgICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcXFxcXCJzb3VcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIiksXFxcXG4gICAgICAgICAgICBvbkNoYW5nZTogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcXFxcXCJzb3VcXFxcXFxcIiwgaW5wdXQpO1xcXFxuICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgfVxcXFxuICAgIH0pO1xcXFxuICAgIGFkZExpc3RlbmVyKFxcXFxcXFwib25DbG9zZVxcXFxcXFwiLCAkLnRvU3RyaW5nKCgpID0+IHtcXFxcbiAgICAgICAgY2xlYXJNeVZhcihcXFxcXFxcInNvdVxcXFxcXFwiKTtcXFxcbiAgICAgICAgY2xlYXJNeVZhcihcXFxcXFxcInNvXFxcXFxcXCIpO1xcXFxuICAgIH0pKTtcXFxcbn1cXFxcblxcXFxubGV0IHMgPSBnZXRNeVZhcihcXFxcXFxcInNvdVxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbmxldCByID0gXFxcXFxcXCJcXFxcXFxcIjtcXFxcbmlmIChzICE9IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICBsZXQgcCA9IE1ZX1BBR0U7XFxcXG4gICAgbGV0IHtcXFxcbiAgICAgICAgbG9hZFxcXFxuICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXFxcXFwiKTtcXFxcbiAgICBsZXQge1xcXFxuICAgICAgICB3cmFwXFxcXG4gICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS90b29sXFxcXFxcXCIpO1xcXFxuICAgIGxldCBkYXRhID0gbG9hZChwLCByICE9IFxcXFxcXFwiXFxcXFxcXCIgPyByIDogbnVsbCk7XFxcXG5cXFxcbiAgICBsZXQgcGFnZWlkID0gTVlfUlVMRS50aXRsZSArIFxcXFxcXFwiLXBhZ2VcXFxcXFxcIiArIHA7XFxcXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcXFxuICAgICAgICBkLnB1c2goe1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5Yqg6L2956ysXFxcXFxcXCIgKyBwICsgXFxcXFxcXCLpobXkuK3vvIzov5vluqbvvJoxL1xcXFxcXFwiICsgZGF0YS5sZW5ndGgsXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJ0ZXh0X2NlbnRlcl8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBkZXNjOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgaWQ6IHBhZ2VpZFxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG4gICAgc2V0UmVzdWx0KGQpO1xcXFxuICAgIGxvZyhkYXRhLmxlbmd0aCk7XFxcXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcXFxuICAgICAgICAvL+Wkmue6v+eoi+WKoOi9vSAgICAgICAgXFxcXG4gICAgICAgIGxldCByZWFsUGFnZSA9IFxcXFxcXFwiXFxcXFxcXCIgPT0gciA/IDEgOiBwO1xcXFxuICAgICAgICBsZXQgdGFza3MgPSBkYXRhLm1hcChpdCA9PiB7XFxcXG4gICAgICAgICAgICByZXR1cm4ge1xcXFxuICAgICAgICAgICAgICAgIGZ1bmM6IGZ1bmN0aW9uKHJ1bGUpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJ1bGUuZmluZChzLCByZWFsUGFnZSk7XFxcXG4gICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICBwYXJhbTogaXQsXFxcXG4gICAgICAgICAgICAgICAgaWQ6IFxcXFxcXFwicnVsZUBcXFxcXFxcIiArIGl0Lm5hbWVcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgfSk7XFxcXG5cXFxcbiAgICAgICAgYmF0Y2hFeGVjdXRlKHRhc2tzLCB7XFxcXG4gICAgICAgICAgICBmdW5jOiBmdW5jdGlvbihwYXJhbSwgaWQsIGVycm9yLCByZXN1bHQpIHtcXFxcbiAgICAgICAgICAgICAgICAvL2xvZyhcXFxcXFxcImxpc3RlbmVyOiBcXFxcXFxcIiArIChyZXN1bHQgfHwgW10pLmxlbmd0aClcXFxcbiAgICAgICAgICAgICAgICBwYXJhbS5pID0gcGFyYW0uaSArIDE7XFxcXG4gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkge1xcXFxuICAgICAgICAgICAgICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaXQgb2YgcmVzdWx0KSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW0uaiA9IHBhcmFtLmogKyAxO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZEl0ZW1CZWZvcmUocGFnZWlkLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB3cmFwKGl0LnRpdGxlLCBzKSxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogaXQuZGVzYyxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdC51cmwsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IGl0LnBpY191cmwsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBpdC5waWNfdXJsID8gJ21vdmllXzFfdmVydGljYWxfcGljJyA6IFxcXFxcXFwidGV4dF8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiBpdC5leHRyYVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHt9XFxcXG5cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgaWYgKHBhcmFtLmkgPj0gcGFyYW0uYWxsKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGRlbGV0ZUl0ZW0ocGFnZWlkKVxcXFxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHVwZGF0ZUl0ZW0oe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5Yqg6L2956ysXFxcXFxcXCIgKyBNWV9QQUdFICsgXFxcXFxcXCLpobXkuK3vvIzov5vluqbvvJpcXFxcXFxcIiArIChwYXJhbS5pICsgMSkgKyBcXFxcXFxcIi9cXFxcXFxcIiArIHBhcmFtLmFsbCxcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFxcXFxcInRleHRfY2VudGVyXzFcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDogcGFnZWlkXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgIHBhcmFtOiB7XFxcXG4gICAgICAgICAgICAgICAgYWxsOiBkYXRhLmxlbmd0aCxcXFxcbiAgICAgICAgICAgICAgICBpOiAwLFxcXFxuICAgICAgICAgICAgICAgIGo6IC0xXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pXFxcXG4gICAgfVxcXFxufSBlbHNlIHtcXFxcbiAgICBsZXQge1xcXFxuICAgICAgICBsb2FkXFxcXG4gICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcXFxcXCIpO1xcXFxuICAgIGxldCBkYXRhID0gbG9hZCgtMSwgbnVsbCk7XFxcXG4gICAgaWYgKGRhdGEubGVuZ3RoID4gMCkge1xcXFxuICAgICAgICAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvbWFuYWdlXFxcXFxcXCIpKGQsIGRhdGEubWFwKGl0ID0+IGl0Lm5hbWUpKTtcXFxcbiAgICAgICAgZm9yIChsZXQgaXQgb2YgZGF0YSkge1xcXFxuICAgICAgICAgICAgZC5wdXNoKHtcXFxcbiAgICAgICAgICAgICAgICB0aXRsZTogaXQubmFtZSxcXFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXFxcXFwic2VsZWN0Oi8vXFxcXFxcXCIgKyBKU09OLnN0cmluZ2lmeSh7XFxcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuivt+mAieaLqeaTjeS9nFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICBjb2w6IDEsXFxcXG4gICAgICAgICAgICAgICAgICAgIG9wdGlvbnM6IFtcXFxcXFxcIuiuv+mXrummlumhtVxcXFxcXFwiLCBcXFxcXFxcIuaQnOe0ouatpOermVxcXFxcXFwiXSxcXFxcbiAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKHVybCkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0ID09IFxcXFxcXFwi6K6/6Zeu6aaW6aG1XFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBNWV9VUkwgPSB1cmw7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3g1P3U9XFxcXFxcXCIgKyBiYXNlNjRFbmNvZGUoZ2V0SG9tZSh1cmwpKVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL3BhZ2Uvc2luZ2xlc1xcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0sIGl0LnVybClcXFxcbiAgICAgICAgICAgICAgICB9KSxcXFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJmbGV4X2J1dHRvblxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGRlc2M6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgcGljX3VybDogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICBSVUxFOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdC5uYW1lLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBpdC51cmxcXFxcbiAgICAgICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICAgICAgbG9uZ0NsaWNrOiBbe1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi56aB55SoXFxcXFxcXCIgKyBpdC5uYW1lLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAganM6ICQudG9TdHJpbmcoKG5hbWUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtKHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5rip6aao5o+Q56S6XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFxcXFxcXFwi56Gu6K6k5Yig6Zmk56aB55SoXFxcXFxcXCIgKyBuYW1lICsgXFxcXFxcXCLlkJfvvJ9cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybTogJC50b1N0cmluZygobmFtZSwgcnVsZSkgPT4ge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZW1vdmVSdWxlXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL2RhdGE/cnVsZT1cXFxcXFxcIiArIHJ1bGUpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUnVsZShuYW1lKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL09LXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIG5hbWUsIE1ZX1JVTEUudGl0bGUpXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBpdC5uYW1lKVxcXFxuICAgICAgICAgICAgICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLorr/pl67pppbpobVcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGpzOiBcXFxcXFxcIidoaWtlcjovL3BhZ2UveDU/dT1cXFxcXFxcIiArIGJhc2U2NEVuY29kZShnZXRIb21lKGl0LnVybCkpICsgXFxcXFxcXCInXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5pCc57Si5q2k5rqQXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBqczogXFxcXFxcXCInaGlrZXI6Ly9wYWdlL3NpbmdsZXMnXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgfV1cXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgfVxcXFxuICAgIH1cXFxcbn1cXFxcblxcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIuaVsOaNrlxcXCIsXFxcInBhdGhcXFwiOlxcXCJkYXRhXFxcIixcXFwicnVsZVxcXCI6XFxcIi8v5bm25Y+R6KeE5YiZ5pWwXFxcXG5sZXQgc2l6ZTAgPSAxMDtcXFxcbmxldCBydWxlc1RleHQwID0gYOeogOmlrUBodHRwczovL3d3dy54aWZhbnlzLmNvbS95aW5ncGlhbnNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXFxcbui+vum+n0BodHRwczovL3d3dy5kYWRhZ3VpLm1lL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9Kiomc3VibWl0PVxcXFxu5Z+O5biCQGh0dHBzOi8vd3d3LmNpdHlkeS5jb20vc2VhcmNoLmh0bWw/d2Q9KipcXFxcbmxpYnZpb0BodHRwczovL3d3dy5saWJ2aW8ubWUvc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKiZzdWJtaXQ9XFxcXG7mlrDop4ZAaHR0cHM6Ly93d3cuNjA4MGR5MS5jb20vdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxcXFxu55yL55yLeUBodHRwczovL3d3dy5ra2R5LmxpdmUvdm9kLXNlYXJjaC5odG1sP3dkPSoqJnN1Ym1pdD1cXFxcbumlreWbokBodHRwczovL3d3dy5mYW50dWFuaGQuY29tL3NlYXJjaC5odG1sP3dkPSoqJnN1Ym1pdD1cXFxcbuWFjeeahEBodHRwczovL3d3dy5mcmVlb2sudmlwL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXFxcbueJm+mprEBodHRwczovL3d3dy5uaXVtYXR2LmNjL3ZvZHNlYXJjaC5odG1sP3dkPSoqJnN1Ym1pdD1cXFxcbuWFjei0uUBodHRwczovL3d3dy50aGVmcmVlLnZpcC92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXFxcXG7ojqvmiY7lhZRAaHR0cHM6Ly93d3cubW96aGF0dS5jb20vaW5kZXgucGhwL3ZvZC9zZWFyY2guaHRtbD93ZD0qKlxcXFxu6Zy56ZuzQGh0dHBzOi8vcGx5aW5nc2hpLmNvbS92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXFxcXG7ljoLplb9AaHR0cHM6Ly93d3cuY3pzcHAuY29tL3hzc2VhcmNoP3E9KipcXFxcblZPRkBodHRwczovL3d3dy52b2ZsaXguY29tL3NlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXFxcbueUteW9sUBodHRwczovL3d3dy5hcHBtb3ZpZS5jYy9pbmRleC5waHAvdm9kL3NlYXJjaC5odG1sP3dkPSoqJnN1Ym1pdD1cXFxcbui/veWJp0BodHRwOi8vempkci52aXAvdm9kL3NlYXJjaC93ZC8qKi5odG1sXFxcXG7nlq/ni5dAaHR0cHM6Ly9tLmZlbmdnb3VkeTMuY29tL2luZGV4LnBocD9zPXZvZC1zZWFyY2gtbmFtZSZ3ZD0qKlxcXFxu5Zyo57q/QGh0dHBzOi8vd3d3Lnp4emoub3JnL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9Kiomc3VibWl0PVxcXFxu5LiD5LiDQGh0dHA6Ly9hYWFzb2ZhLmNvbS9zZWFyY2gucGhwXFxcXG7ljJflt51AaHR0cHM6Ly93d3cuYmN3emcuY29tL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLz93ZD0qKlxcXFxuRUZAaHR0cHM6Ly93d3cucGlsaTUuY24vdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKiZzdWJtaXQ9XFxcXG7lvbHlrrZAaHR0cDovL3lzemp2aXAuY29tL2luZGV4LnBocC92b2Qvc2VhcmNoLmh0bWw/d2Q9KipcXFxcbuS6lOS6lEBodHRwczovLzU1NWR5LmNjL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXFxcbua4o+a8q0BodHRwczovL3d3dy5kbTIwMjIuY29tL3ZvZHNlYXJjaC5odG1sP3dkPSoqXFxcXG7lnKjlrrZAaHR0cHM6Ly96eHpqLnZpcC92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqJnN1Ym1pdD1cXFxcbnBpYeW6k0BodHRwczovL20ucGlha3UuY2Mvcy8tLS0tLS0tLS0tLS0tLz93ZD0qKlxcXFxu5p6B5ZOBQGh0dHBzOi8vd3d3LmpweXMubWUvdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxcXFxu6Im+6L+qQGh0dHBzOi8vYWlkaS50di92c2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKiZzdWJtaXQ9XFxcXG7kuZ3lt55AaHR0cDovL3d3dy5qaXV6aG91OTExLmNvbS9zZWFyY2gucGhwP3NlYXJjaHdvcmQ9KipcXFxcbuWNgeWNg0BodHRwOi8vd3d3LnFpYW5zaGlob3VzZS5jb20vc3JoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxcXFxu6bqm54mHQGh0dHA6Ly9tLmx5MzY4LmNvbS9pbmRleC5waHA/cz12b2QtbV9zLW5hbWUmd2Q9KipcXFxcbuengeS6ukBodHRwczovL3NvdW1rLmNvbS92b2RzZWFyY2gvLS0tLS0tLS0tLS0tLS5odG1sP3dkPSoqXFxcXG7mmJ/ovrBAaHR0cDovL3d3dy5xaGRkai5jb20uY24veGN5eXNlYXJjaC8qKi0tLS0tLS0tLS0tLS0uaHRtbFxcXFxuQ29rZXZZQGh0dHBzOi8vY29rZW12Lm1lL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXFxcbueIseeci3lAaHR0cHM6Ly9pa2FuNi52aXAvdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0vP3dkPSoqJnN1Ym1pdD1cXFxcbuW5sumlrXB5QGh0dHBzOi8vd3d3LmdmeXN5czEuY29tL3ZvZHNlYXJjaC8tLS0tLS0tLS0tLS0tLmh0bWw/d2Q9KipcXFxcbuWkqeepunlAaHR0cDovL3Rrem5wLmNvbS92b2RzZWFyY2guaHRtbD93ZD0qKlxcXFxu6JOd5YWJQGh0dHBzOi8vd3d3LmxneXkuY2Mvdm9kc2VhcmNoLy0tLS0tLS0tLS0tLS0uaHRtbD93ZD0qKlxcXFxu5L2O56uvQGh0dHBzOi8vZGR5cy50di8/cz0qKiZwb3N0X3R5cGU9cG9zdFxcXFxu5Yqq5YqqQGh0dHBzOi8vd3d3Lm51bnV5eTMub3JnL3NvLyoqLSoqLS0uaHRtbGA7XFxcXG5sZXQgcnVsZXNUZXh0ID0gZ2V0SXRlbShcXFxcXFxcInJ1bGVzXFxcXFxcXCIsIHJ1bGVzVGV4dDApO1xcXFxubGV0IHNwID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3NwXFxcXFxcXCIpO1xcXFxucnVsZXMgPSBydWxlc1RleHQuc3BsaXQoXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIilcXFxcbiAgICAuZmlsdGVyKGl0ID0+IGl0LmluY2x1ZGVzKFxcXFxcXFwiQFxcXFxcXFwiKSlcXFxcbiAgICAubWFwKHJ1bGUgPT4ge1xcXFxuICAgICAgICBsZXQgcyA9IHJ1bGUuc3BsaXQoXFxcXFxcXCJAXFxcXFxcXCIpO1xcXFxuICAgICAgICByZXR1cm4ge1xcXFxuICAgICAgICAgICAgbmFtZTogc1swXSxcXFxcbiAgICAgICAgICAgIGZpbmQ6IGZ1bmN0aW9uKGtleSwgcGFnZSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBzcChzWzFdLCBrZXksIHNbMF0pO1xcXFxuICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgIHVybDogc1sxXVxcXFxuICAgICAgICB9O1xcXFxuICAgIH0pO1xcXFxuXFxcXG5mdW5jdGlvbiBsb2FkKHBhZ2UsIHJ1bGUpIHtcXFxcbiAgICBsZXQgc2l6ZSA9IHBhZ2UgPD0gMCA/IHJ1bGVzLmxlbmd0aCA6IHNpemUwO1xcXFxuICAgIHBhZ2UgPSBwYWdlIDw9IDAgPyAxIDogcGFnZTtcXFxcbiAgICBpZiAoIXBhZ2UgJiYgIXJ1bGUpIHtcXFxcbiAgICAgICAgcmV0dXJuIHJ1bGVzLm1hcChpdCA9PiBpdC5uYW1lKTtcXFxcbiAgICB9XFxcXG4gICAgaWYgKHJ1bGUgIT0gbnVsbCkge1xcXFxuICAgICAgICBpZiAocGFnZSAhPSBudWxsICYmIHBhZ2UgPiAxKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gcnVsZXMuZmlsdGVyKGkgPT4gaS5uYW1lID09IHJ1bGUgJiYgaS5wYWdlKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICByZXR1cm4gcnVsZXMuZmlsdGVyKGkgPT4gaS5uYW1lID09IHJ1bGUpO1xcXFxuICAgIH1cXFxcbiAgICBsZXQgc3RhcnQgPSAocGFnZSAtIDEpICogc2l6ZTtcXFxcbiAgICBpZiAocnVsZXMubGVuZ3RoIDwgc3RhcnQgKyAxKSB7XFxcXG4gICAgICAgIHJldHVybiBbXTtcXFxcbiAgICB9XFxcXG4gICAgbGV0IGxlbiA9IHNpemU7XFxcXG4gICAgaWYgKHJ1bGVzLmxlbmd0aCA8IHBhZ2UgKiBzaXplKSB7XFxcXG4gICAgICAgIGxlbiA9IHJ1bGVzLmxlbmd0aCAtIHN0YXJ0XFxcXG4gICAgfVxcXFxuICAgIHJldHVybiBydWxlcy5zbGljZShzdGFydCwgc3RhcnQgKyBsZW4pO1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiBhZGRSdWxlKG5hbWUsIHN1cmwpIHtcXFxcbiAgICBzZXRJdGVtKFxcXFxcXFwicnVsZXNcXFxcXFxcIiwgcnVsZXNUZXh0ICsgXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIiArIG5hbWUgKyBcXFxcXFxcIkBcXFxcXFxcIiArIHN1cmwpO1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiBhZGRBbGwoaW5wdXQpIHtcXFxcbiAgICBpZiAoaW5wdXQgPT0gbnVsbCB8fCBpbnB1dCA9PSBcXFxcXFxcIlxcXFxcXFwiKSB7XFxcXG4gICAgICAgIHJldHVybiAwO1xcXFxuICAgIH1cXFxcbiAgICBsZXQgYXJyID0gaW5wdXQuc3BsaXQoXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIilcXFxcbiAgICAgICAgLmZpbHRlcihpdCA9PiBpdC5pbmNsdWRlcyhcXFxcXFxcIkBcXFxcXFxcIikpXFxcXG4gICAgICAgIC5tYXAocnVsZSA9PiB7XFxcXG4gICAgICAgICAgICBsZXQgcyA9IHJ1bGUuc3BsaXQoXFxcXFxcXCJAXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgcmV0dXJuIHtcXFxcbiAgICAgICAgICAgICAgICBuYW1lOiBzWzBdLFxcXFxuICAgICAgICAgICAgICAgIHVybDogc1sxXVxcXFxuICAgICAgICAgICAgfTtcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgbGV0IGV4aXN0ID0gcnVsZXMubWFwKGl0ID0+IGl0LnVybCk7XFxcXG4gICAgbGV0IGMgPSAwO1xcXFxuICAgIGZvciAobGV0IGl0IG9mIGFycikge1xcXFxuICAgICAgICBpZiAoIWV4aXN0LmluY2x1ZGVzKGl0LnVybCkpIHtcXFxcbiAgICAgICAgICAgIHJ1bGVzVGV4dCA9IHJ1bGVzVGV4dCArIFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIgKyBpdC5uYW1lICsgXFxcXFxcXCJAXFxcXFxcXCIgKyBpdC51cmw7XFxcXG4gICAgICAgICAgICBjKys7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgc2V0SXRlbShcXFxcXFxcInJ1bGVzXFxcXFxcXCIsIHJ1bGVzVGV4dCk7XFxcXG4gICAgcmV0dXJuIGM7XFxcXG59XFxcXG5cXFxcbmZ1bmN0aW9uIHJlbW92ZVJ1bGUobmFtZSkge1xcXFxuICAgIGxldCBuZXdUID0gcnVsZXNUZXh0LnNwbGl0KFxcXFxcXFwiXFxcXFxcXFxuXFxcXFxcXCIpXFxcXG4gICAgICAgIC5maWx0ZXIoaXQgPT4gaXQuaW5kZXhPZihuYW1lICsgXFxcXFxcXCJAXFxcXFxcXCIpIDwgMClcXFxcbiAgICAgICAgLmpvaW4oXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIik7XFxcXG4gICAgc2V0SXRlbShcXFxcXFxcInJ1bGVzXFxcXFxcXCIsIG5ld1QpO1xcXFxufVxcXFxuXFxcXG4kLmV4cG9ydHMgPSB7XFxcXG4gICAgbG9hZDogbG9hZCxcXFxcbiAgICBhZGRSdWxlOiBhZGRSdWxlLFxcXFxuICAgIHJlbW92ZVJ1bGU6IHJlbW92ZVJ1bGUsXFxcXG4gICAgYWRkQWxsOiBhZGRBbGxcXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLmkJzntKLop6PmnpBcXFwiLFxcXCJwYXRoXFxcIjpcXFwic3BcXFwiLFxcXCJydWxlXFxcIjpcXFwiZnVuY3Rpb24gc2VhcmNoKHVybCwga2V5LCBydWxlKSB7XFxcXG4gICAgbGV0IGQgPSBbXTtcXFxcbiAgICBsZXQgaHRtbCA9IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgaWYgKHVybC5pbmNsdWRlcyhcXFxcXFxcIioqXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgIC8vZ2V06K+35rGCXFxcXG4gICAgICAgIGxldCBvbGQgPSB1cmw7XFxcXG4gICAgICAgIHVybCA9IHVybC5yZXBsYWNlKFxcXFxcXFwiKipcXFxcXFxcIiwga2V5KTtcXFxcbiAgICAgICAgaHRtbCA9IHJlcXVlc3QodXJsKTtcXFxcbiAgICAgICAgLy/oh6rliqjov4fpqozor4HnoIHlkozpopHnuYHorr/pl67pmZDliLZcXFxcbiAgICAgICAgbGV0IHtcXFxcbiAgICAgICAgICAgIGNoZWNrLCB0ZXN0XFxcXG4gICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UveXptXFxcXFxcXCIpO1xcXFxuICAgICAgICBpZiAoY2hlY2sodXJsLCBodG1sLCBkKSkge1xcXFxuICAgICAgICAgICAgbG9nKFxcXFxcXFwi6YeN6K+V5LqGXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgaHRtbCA9IHJlcXVlc3QodXJsLCB7XFxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogdXJsXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSk7ICAgICAgICAgICBcXFxcbiAgICAgICAgfSAgICAgICAgIFxcXFxuICAgICAgICB0ZXN0KHVybCwgaHRtbCwgZCwgb2xkLCBrZXksIHJ1bGUpO1xcXFxuICAgIH0gZWxzZSB7XFxcXG4gICAgICAgIC8v6Ieq5Yqo6K+G5YircG9zdOivt+axglxcXFxuICAgICAgICBodG1sID0gcmVxdWVzdCh1cmwpO1xcXFxuICAgICAgICBsZXQgZm9ybSA9IHBkZmgoaHRtbCwgXFxcXFxcXCJib2R5JiZmb3JtJiZIdG1sXFxcXFxcXCIpO1xcXFxuICAgICAgICBsZXQgYWN0aW9uID0gcGQoaHRtbCwgXFxcXFxcXCJmb3JtJiZhY3Rpb25cXFxcXFxcIiwgdXJsKTtcXFxcbiAgICAgICAgbGV0IGlucHV0cyA9IHBkZmEoaHRtbCwgXFxcXFxcXCJib2R5JiZmb3JtJiZpbnB1dFxcXFxcXFwiKTtcXFxcbiAgICAgICAgbGV0IGJvZHkgPSB7fTtcXFxcbiAgICAgICAgZm9yIChsZXQgaXQgb2YgaW5wdXRzKSB7XFxcXG4gICAgICAgICAgICBsZXQgbmFtZSA9IHBkZmgoaXQsIFxcXFxcXFwiaW5wdXQmJm5hbWVcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBpZiAobmFtZSAmJiBuYW1lICE9IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgdmFsdWUgPSBwZGZoKGl0LCBcXFxcXFxcImlucHV0JiZ2YWx1ZVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICBib2R5W25hbWVdID0gdmFsdWUgfHwga2V5O1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGh0bWwgPSBwb3N0KGFjdGlvbiwge1xcXFxuICAgICAgICAgICAgYm9keTogYm9keVxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9XFxcXG5cXFxcbiAgICBsZXQgYWxpc3QgPSBwZGZhKGh0bWwsIFxcXFxcXFwiYm9keSYmYVxcXFxcXFwiKTtcXFxcbiAgICBsZXQgYXJyID0gYWxpc3QubWFwKGl0ID0+IHtcXFxcbiAgICAgICAgbGV0IHQgPSBwZGZoKGl0LCBcXFxcXFxcImEmJlRleHRcXFxcXFxcIik7XFxcXG4gICAgICAgIGxldCB0MiA9IHBkZmgoaXQsIFxcXFxcXFwiYSYmdGl0bGVcXFxcXFxcIik7XFxcXG4gICAgICAgIHJldHVybiB7XFxcXG4gICAgICAgICAgICAvL2h0bWw6IGl0LFxcXFxuICAgICAgICAgICAgdGV4dDogdDIgJiYgdDIuaW5jbHVkZXMoa2V5KSA/IHQyIDogdCxcXFxcbiAgICAgICAgICAgIGhyZWY6IHBkKGl0LCBcXFxcXFxcImEmJmhyZWZcXFxcXFxcIiwgdXJsKVxcXFxuICAgICAgICB9XFxcXG4gICAgfSk7XFxcXG5cXFxcbiAgICBmdW5jdGlvbiBpc1Jlc3VsdChpdCkge1xcXFxuICAgICAgICBpdCA9IGl0LnRleHQgfHwgXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICAgICAgaWYgKGl0ID09IFxcXFxcXFwiXFxcXFxcXCIgfHwgaXQubWF0Y2goL+aQnOe0onznu5PmnpwvKSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlXFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIGl0LmluY2x1ZGVzKGtleSk7XFxcXG4gICAgfVxcXFxuXFxcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgbGV0IGl0ID0gYXJyW2ldO1xcXFxuICAgICAgICBsZXQgdCA9IGl0LnRleHQ7XFxcXG4gICAgICAgIGlmICghaXQuaHJlZiB8fCBpdC5ocmVmID09IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgIGNvbnRpbnVlO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmIChpc1Jlc3VsdChpdCkpIHtcXFxcbiAgICAgICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHQsXFxcXG4gICAgICAgICAgICAgICAgdXJsOiBcXFxcXFxcImhpa2VyOi8vcGFnZS9wP3U9XFxcXFxcXCIgKyBiYXNlNjRFbmNvZGUoaXQuaHJlZiksXFxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLigJzigJzigJ3igJ08Zm9udCBjb2xvcj0jZjEzYjY2YT5cXFxcXFxcIiArIHJ1bGUgKyBcXFxcXFxcIjwvZm9udD5cXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgICAgICAgICBpbmhlcml0VGl0bGU6IGZhbHNlXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgcmV0dXJuIGQ7XFxcXG59XFxcXG4kLmV4cG9ydHMgPSBzZWFyY2g7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5aKe5YigXFxcIixcXFwicGF0aFxcXCI6XFxcIm1hbmFnZVxcXCIsXFxcInJ1bGVcXFwiOlxcXCIkLmV4cG9ydHMgPSBmdW5jdGlvbihkLCBuYW1lcykge1xcXFxuICAgIGQucHVzaCh7XFxcXG4gICAgICAgIHRpdGxlOiBcXFxcXFxcIkFJ5oqA5pyvXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogXFxcXFxcXCJjb25maXJtOi8v5Z+65LqOQUnor4bniYfoh6rliqjliIbmnpDmupDnoIHmioDmnK/vvIzku6PnoIHlrozlhajlvIDmupDvvIzmlbDmja7mnaXmupDkuo7ljp/nvZHnq5nvvIzova/ku7blkozop4TliJnkuI3mj5Dkvpvku7vkvZXlhoXlrrkuanM6JydcXFxcXFxcIixcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiZmxleF9idXR0b25cXFxcXFxcIlxcXFxuICAgIH0sIHtcXFxcbiAgICAgICAgdGl0bGU6IGdldEl0ZW0oJ3dlYicsICcwJykgPT0gXFxcXFxcXCIwXFxcXFxcXCIgPyBcXFxcXFxcIuinhumikeWXheaOolxcXFxcXFwiIDogXFxcXFxcXCJXZWLpgJrlhY1cXFxcXFxcIixcXFxcbiAgICAgICAgdXJsOiAkKFxcXFxcXFwiI25vTG9hZGluZyNcXFxcXFxcIikubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgaWYgKGdldEl0ZW0oJ3dlYicsICcwJykgPT0gXFxcXFxcXCIwXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICBzZXRJdGVtKCd3ZWInLCAnMScpXFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHNldEl0ZW0oJ3dlYicsICcwJylcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJmbGV4X2J1dHRvblxcXFxcXFwiXFxcXG4gICAgfSk7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwiICsgXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogJChcXFxcXFxcIiNub0xvYWRpbmcjXFxcXFxcXCIpLmxhenlSdWxlKChycikgPT4ge1xcXFxuICAgICAgICAgICAgZGVsZXRlSXRlbUJ5Q2xzKFxcXFxcXFwiYWlhZGRcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICBhZGRJdGVtQWZ0ZXIocnIgKyBcXFxcXFxcImFpc2RlbFxcXFxcXFwiLCBbe1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLor7fovpPlhaXnvZHnq5nlkI3np7BcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaW5wdXRcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogXFxcXFxcXCJwdXRNeVZhcignbmFtZScsIGlucHV0KVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBcXFxcXFxcImFpYWRkXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAge1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCJcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcXFxcXCLor7fovpPlhaXnvZHnq5nmkJzntKLlnLDlnYBcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiaW5wdXRcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlVmlzaWJsZTogZmFsc2UsXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBvbkNoYW5nZTogXFxcXFxcXCJwdXRNeVZhcignc3VybCcsIGlucHV0KVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2xzOiBcXFxcXFxcImFpYWRkXFxcXFxcXCJcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICAgICAge1xcXFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLmj5DkuqTkv53lrZhcXFxcXFxcIixcXFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF9jZW50ZXJfMVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgICAgICB1cmw6ICQoXFxcXFxcXCIjbm9Mb2FkaW5nI1xcXFxcXFwiKS5sYXp5UnVsZSgoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgc3VybCA9IGdldE15VmFyKFxcXFxcXFwic3VybFxcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBuYW1lID0gZ2V0TXlWYXIoXFxcXFxcXCJuYW1lXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHN1cmwgPT0gXFxcXFxcXCJcXFxcXFxcIiB8fCBuYW1lID09IFxcXFxcXFwiXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL+ivt+i+k+WFpeWujOaVtOWGheWuuVxcXFxcXFwiXFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgciA9IGRlY29kZVVSSUNvbXBvbmVudChzdXJsKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHIgPSByLnJlcGxhY2UobmV3IFJlZ0V4cChcXFxcXFxcIltcXFxcXFxcXHU0ZTAwLVxcXFxcXFxcdTlmYTVdK1xcXFxcXFwiLCBcXFxcXFxcImdcXFxcXFxcIiksIFxcXFxcXFwiKipcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJ1bGVcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGFkZFJ1bGUobmFtZSwgcik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXFxcXFwidG9hc3Q6Ly/lt7Lkv53lrZhcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgICAgICAgICAgfSksXFxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbHM6IFxcXFxcXFwiYWlhZGRcXFxcXFxcIlxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgXSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgfSwgTVlfUlVMRS50aXRsZSksXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImZsZXhfYnV0dG9uXFxcXFxcXCIsXFxcXG4gICAgfSk7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwiIC0gXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogXFxcXFxcXCJzZWxlY3Q6Ly9cXFxcXFxcIiArIEpTT04uc3RyaW5naWZ5KHtcXFxcbiAgICAgICAgICAgIG9wdGlvbnM6IG5hbWVzLFxcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi6K+36YCJ5oup6KaB5Yig6Zmk55qE56uZ54K5XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBqczogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgcmVtb3ZlUnVsZVxcXFxuICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICByZW1vdmVSdWxlKGlucHV0KTtcXFxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8vT0tcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIH0pXFxcXG4gICAgICAgIH0pLFxcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJmbGV4X2J1dHRvblxcXFxcXFwiXFxcXG4gICAgfSk7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi4oaX77iPXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogJChcXFxcXFxcIiNub0xvYWRpbmcjXFxcXFxcXCIpLmxhenlSdWxlKCgpID0+IHtcXFxcbiAgICAgICAgICAgIGNvbmZpcm0oe1xcXFxuICAgICAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIua4qemmqOaPkOekulxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgICAgIGNvbnRlbnQ6IFxcXFxcXFwi56Gu5a6a5a+85Ye65omA5pyJ5pWw5o2u5ZCX77yf77yI5a+85Ye65ZCO5Y+v5Lul54K55Ye75peB6L6555qE5a+85YWl5oyJ6ZKu5om56YeP5a+85YWl77yJXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICAgICAgY29uZmlybTogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGxldCB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2FkXFxcXG4gICAgICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvZGF0YVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBsb2FkKC0xKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IHMgPSBkYXRhLm1hcChpdCA9PiBpdC5uYW1lICsgXFxcXFxcXCJAXFxcXFxcXCIgKyBpdC51cmwpLmpvaW4oXFxcXFxcXCJcXFxcXFxcXG5cXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImNvcHk6Ly9cXFxcXFxcIiArIHNcXFxcbiAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJoaWtlcjovL2VtcHR5XFxcXFxcXCJcXFxcbiAgICAgICAgfSksXFxcXG4gICAgICAgIGNvbF90eXBlOiBcXFxcXFxcImZsZXhfYnV0dG9uXFxcXFxcXCIsXFxcXG4gICAgfSk7XFxcXG4gICAgZC5wdXNoKHtcXFxcbiAgICAgICAgdGl0bGU6IFxcXFxcXFwi4oaY77iPXFxcXFxcXCIsXFxcXG4gICAgICAgIHVybDogJChcXFxcXFxcIlxcXFxcXFwiLCBcXFxcXFxcIuivt+i+k+WFpeimgeaJuemHj+WvvOWFpeeahOaVsOaNrlxcXFxcXFwiKS5pbnB1dCgoKSA9PiB7XFxcXG4gICAgICAgICAgICBsZXQge1xcXFxuICAgICAgICAgICAgICAgIGFkZEFsbFxcXFxuICAgICAgICAgICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcXFxcXCIpO1xcXFxuICAgICAgICAgICAgbGV0IGNvdW50ID0gYWRkQWxsKGlucHV0KTtcXFxcbiAgICAgICAgICAgIGlmIChjb3VudCA+IDApIHJlZnJlc2hQYWdlKCk7XFxcXG4gICAgICAgICAgICByZXR1cm4gXFxcXFxcXCJ0b2FzdDovL1xcXFxcXFwiICsgKGNvdW50ID4gMCA/IFxcXFxcXFwi5oiQ5Yqf5a+85YWlXFxcXFxcXCIgKyBjb3VudCArIFxcXFxcXFwi5p2h5pWw5o2uXFxcXFxcXCIgOiBcXFxcXFxcIuS4gOadoeS5n+ayoeWvvOWFpVxcXFxcXFwiKVxcXFxuICAgICAgICB9KSxcXFxcbiAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwiZmxleF9idXR0b25cXFxcXFxcIixcXFxcbiAgICB9KTtcXFxcbiAgICBkLnB1c2goe1xcXFxuICAgICAgICBjb2xfdHlwZTogXFxcXFxcXCJibGFua19ibG9ja1xcXFxcXFwiLFxcXFxuICAgICAgICBleHRyYToge1xcXFxuICAgICAgICAgICAgaWQ6IE1ZX1JVTEUudGl0bGUgKyBcXFxcXFxcImFpc2RlbFxcXFxcXFwiXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcblxcXFxufVxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIumqjOivgeeggVxcXCIsXFxcInBhdGhcXFwiOlxcXCJ5em1cXFwiLFxcXCJydWxlXFxcIjpcXFwiZnVuY3Rpb24gY2hlY2sodXJsLCBodG1sLCBkKSB7XFxcXG4gICAgbGV0IHJlbG9hZCA9IGZhbHNlO1xcXFxuICAgIGlmICgv6aqM6K+B56CBfOezu+e7n+WuieWFqOmqjOivgS8udGVzdChodG1sKSkge1xcXFxuICAgICAgICBsZXQgaGVhZGVycyA9IHtcXFxcbiAgICAgICAgICAgIFxcXFxcXFwiVXNlci1BZ2VudFxcXFxcXFwiOiBNT0JJTEVfVUEsXFxcXG4gICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogdXJsXFxcXG4gICAgICAgIH07XFxcXG4gICAgICAgIE1ZX0hPTUUgPSBnZXRIb21lKHVybCk7XFxcXG4gICAgICAgIGxldCBzc3l6ID0gJ1Rsb0dubmlrVGhyZnMvNWZETmxrNUNTc2JhR3RBSDdXL3VNWmp1WW9JdXBCNmJDb285Q290TFFIZlBJZEdnYmtieW5LcUwyYVVFMlh5NTU4WDJReEhZdFRVMDl2RCs0b2FDREl1U1pPN254RGJMZlJHZldqN3pxbCt5TWJ2RithSm9EL202UHNmdy9QeVlPQXAvWlZHZHJQemFDQnlmZDBITDVERlZTdytZRjJPQzQwVjhTUDlSeGRGS0tkckJ1UHhDV2R4VUNGckorMWxSeS9UVTNMQzg0QzR4eEVCaGd1ZDdSdEJwMHpaQXJxQkUwNitaM0p0RFAwZUZDei9ENVgwNDA5cVBISzNlMXkvTHVVZ2NjdXhwSG5qWUxFMUdqbFA4d1lBMmhRV2U3eVBuZ2dnUUJIdzMzL2d2YjN0dUNjeEVLVFdnbWFoL1IzMkFIOVpGOGpGN1dlbVQyNmxVaXpWWGUvc3BDZGhEZ0hSL3pVaE9ERDRQTzZnbEk4SlBoZHUrVndmUHlSTEcyRDdDVW8xTDZTSUYrMGZZZjBvVE9XTjEzVVBJVG81K3VaZC9XblFRTFU4Tll4L1dGQ1RoRW5rYnpsbjlZR3Q2MGZSeHNIKzh1TURGZ2FCaUMrejJTcGN4QjlnWjZHWHlwTFNYV2FqK3FFVWJHSktFeCtqSy92NWZucmtJaENkd05ia3A5ZFJrczZkbWxZbEJpZnpvV0Y4Umt1QzNycVB0b1NjQmtNT01adTdHaVZ0b0hFZEhVb3ptblVJZHJVMUxHSXFxOVduRzdYMmEzeUg4czY1bWpMdUxuZDNxMFU4ditMTVBuSEwyL0dqUXVUUUtWaCtSS0VQcUsvSmRyQ2hHTE5yamNIdkxIRGJIRXNockdadVFPZEVwaGJ4L1BraGt2YVl5NEsxTU84NFIxN2d1UnNLcy9WNm5pVVBhTCtYYlE3YzNmcUpTNFZISndsdWRKVERlMDJldWZmR0NtMFBKSVBsQU9nTEhuWDBpekpoQTZxNzM4UjJVd1FjV0JRakp0NzlhRitreXFTZHl0MVFQVlFWamFDM0lwUmY3UGdzRGhFSjdiaTluU2NseUl6Z0o5RENKNFQrOGRHMXhIaEt5WmFzVDdML3g5TGZyMU1nczhuQlpFUjJXOWF4N2lUa05LK1g1QUNVLy9wL1lvUC91QWFuRHRiM0QwaUtVVXVYRkgrSmJiMHgxUDMyMlMydzZCSjQ2bnVOSEJNSFRwVnVXd2haZVp6cmlHaDdxb095d0xXaUV4Qk1LeXhUR0xubUtoN3IwMy95WEtZV0lKbnBCTjJNTXljVkhSWko3UnVtSFY0Q0lzVnJxN2lSUDQ4ODIzUkpWdDlPdHlQN3V1YzN3QkJWM2tjWlV6YmJhWWRXQngxK0F1K09kMnU3bFI2am9PTDgxMG1jSm0vZjdKNVR2R1FQNkhHcGgxWUhIWDRDNzQ1M2E3dVZIcU9neWpqaDVFQmQ3MjBNRUJZMjNjK1RLcS96OVVwV0RET2c0OFpGbndTSWhGcWl0V2RpWmlxc2FZdU4wL1NYd2lLOEVHOWVRMjl1MlhESm9EVzRtbHd0Y1JPN3ZhWDVYY0ZzZ2Y0L21MVTA3bWknO1xcXFxuICAgICAgICBldmFsUHJpdmF0ZUpTKHNzeXopO1xcXFxuXFxcXG4gICAgICAgIGxldCB2Y29kZSA9IGdldFZDb2RlMihNWV9IT01FICsgJy9pbmRleC5waHAvdmVyaWZ5L2luZGV4Lmh0bWw/JywgSlNPTi5zdHJpbmdpZnkoaGVhZGVycyksICdudW0nKTtcXFxcbiAgICAgICAgZmV0Y2goTVlfSE9NRSArIGh0bWwubWF0Y2goL1xcXFxcXFxcL2luZGV4LnBocC4qP3ZlcmlmeT0vKVswXSArIEpTT04ucGFyc2UodmNvZGUpLnJldCwge1xcXFxuICAgICAgICAgICAgaGVhZGVyczogaGVhZGVycyxcXFxcbiAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnXFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICByZWxvYWQgPSB0cnVlO1xcXFxuICAgIH1cXFxcbiAgICByZXR1cm4gcmVsb2FkO1xcXFxufVxcXFxuXFxcXG5mdW5jdGlvbiB0ZXN0KHVybCwgaHRtbCwgZCwgb2xkLCBrZXksIHJ1bGUpIHtcXFxcbiAgICBpZiAoLzXnp5J86aKR57mBLy50ZXN0KGh0bWwpKSB7XFxcXG4gICAgICAgIGQucHVzaCh7XFxcXG4gICAgICAgICAgICB0aXRsZTogJ+aQnOe0oumcgOmXtOmalDXnp5LvvIzngrnlh7vph43mlrDliqDovb0nLFxcXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXFxcXFwidGV4dF8xXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBkZXNjOiBcXFxcXFxcIuKAnOKAnOKAneKAnTxmb250IGNvbG9yPSNmMTNiNjZhPlxcXFxcXFwiICsgcnVsZSArIFxcXFxcXFwiPC9mb250PlxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdXJsOiAkKCkubGF6eVJ1bGUoKHVybCwgb2xkLCBrZXksIHJ1bGUpID0+IHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgc3AgPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2Uvc3BcXFxcXFxcIik7XFxcXG4gICAgICAgICAgICAgICAgbGV0IGQgPSBzcChvbGQsIGtleSwgcnVsZSk7XFxcXG4gICAgICAgICAgICAgICAgbGV0IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgd3JhcFxcXFxuICAgICAgICAgICAgICAgIH0gPSAkLnJlcXVpcmUoXFxcXFxcXCJoaWtlcjovL3BhZ2UvdG9vbFxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpdCBvZiBkKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGl0LnRpdGxlID0gd3JhcChpdC50aXRsZSwga2V5KTtcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgYWRkSXRlbUFmdGVyKHVybCwgZCk7XFxcXG4gICAgICAgICAgICAgICAgZGVsZXRlSXRlbSh1cmwpO1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcInRvYXN0Oi8vT0tcXFxcXFxcIjtcXFxcbiAgICAgICAgICAgIH0sIHVybCwgb2xkLCBrZXksIHJ1bGUpLFxcXFxuICAgICAgICAgICAgZXh0cmE6IHtcXFxcbiAgICAgICAgICAgICAgICBpZDogdXJsXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pO1xcXFxuICAgIH1cXFxcbn1cXFxcblxcXFxuJC5leHBvcnRzID0ge1xcXFxuICAgIGNoZWNrOiBjaGVjayxcXFxcbiAgICB0ZXN0OiB0ZXN0XFxcXG59XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5bel5YW3XFxcIixcXFwicGF0aFxcXCI6XFxcInRvb2xcXFwiLFxcXCJydWxlXFxcIjpcXFwiZnVuY3Rpb24gd3JhcCh0ZXh0LCBzKSB7XFxcXG4gICAgcmV0dXJuIHRleHQuaW5jbHVkZXMoXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIikgPyB0ZXh0IDogXFxcXFxcXCLigJzigJzigJ3igJ1cXFxcXFxcIiArIHRleHQucmVwbGFjZShuZXcgUmVnRXhwKFxcXFxcXFwiPGVtPnw8L2VtPlxcXFxcXFwiLCBcXFxcXFxcImdcXFxcXFxcIiksIFxcXFxcXFwiXFxcXFxcXCIpLnJlcGxhY2UobmV3IFJlZ0V4cChzLCBcXFxcXFxcImdcXFxcXFxcIiksIFxcXFxcXFwiPHN0cm9uZz48c3BhbiBzdHlsZT1cXFxcXFxcXFxcXFxcXFwiY29sb3I6ICMxRTkwRkZcXFxcXFxcXFxcXFxcXFwiPlxcXFxcXFwiICsgcyArIFxcXFxcXFwiPC9zcGFuPjwvc3Ryb25nPlxcXFxcXFwiKVxcXFxufVxcXFxuJC5leHBvcnRzID0ge1xcXFxuICAgIHdyYXA6IHdyYXBcXFxcbn1cXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCLljZXmkJxcXFwiLFxcXCJwYXRoXFxcIjpcXFwic2luZ2xlc1xcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBcXFxcXFxcIuaQnOe0olxcXFxcXFwiLFxcXFxuICAgIHVybDogJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgIHB1dE15VmFyKFxcXFxcXFwic29cXFxcXFxcIiwgaW5wdXQpO1xcXFxuICAgICAgICByZWZyZXNoUGFnZSgpO1xcXFxuICAgIH0pLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcImlucHV0XFxcXFxcXCIsXFxcXG4gICAgZGVzYzogXFxcXFxcXCLor7fovpPlhaXlhbPplK7or43vvIzlsL3ph4/lsJHlrZfkuI3opoHlpJrlrZdcXFxcXFxcIixcXFxcbiAgICBwaWNfdXJsOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIGV4dHJhOiB7XFxcXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoXFxcXFxcXCJzb1xcXFxcXFwiLCBcXFxcXFxcIlxcXFxcXFwiKVxcXFxuICAgIH1cXFxcbn0pO1xcXFxubGV0IHMgPSBnZXRNeVZhcihcXFxcXFxcInNvXFxcXFxcXCIsIFxcXFxcXFwiXFxcXFxcXCIpO1xcXFxubGV0IHIgPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuaWYgKHMgIT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgIGxldCBwID0gTVlfUEFHRTtcXFxcbiAgICBsZXQge1xcXFxuICAgICAgICBsb2FkXFxcXG4gICAgfSA9ICQucmVxdWlyZShcXFxcXFxcImhpa2VyOi8vcGFnZS9kYXRhXFxcXFxcXCIpO1xcXFxuICAgIGxldCB7XFxcXG4gICAgICAgIHdyYXBcXFxcbiAgICB9ID0gJC5yZXF1aXJlKFxcXFxcXFwiaGlrZXI6Ly9wYWdlL3Rvb2xcXFxcXFxcIik7XFxcXG4gICAgbGV0IGRhdGEgPSBsb2FkKHAsIE1ZX1BBUkFNUy5SVUxFLm5hbWUpO1xcXFxuICAgIGxldCBhcnIgPSBkYXRhWzBdLmZpbmQocywgcCk7XFxcXG4gICAgZm9yIChsZXQgaXQgb2YgYXJyKSB7XFxcXG4gICAgICAgIGl0LnRpdGxlID0gd3JhcChpdC50aXRsZSwgcylcXFxcbiAgICAgICAgZC5wdXNoKGl0KTtcXFxcbiAgICB9XFxcXG59XFxcXG5zZXRSZXN1bHQoZCk7XFxcIn0se1xcXCJjb2xfdHlwZVxcXCI6XFxcIm1vdmllXzNcXFwiLFxcXCJuYW1lXFxcIjpcXFwi5pCc57Si6aG16Z2iXFxcIixcXFwicGF0aFxcXCI6XFxcInNvdXBcXFwiLFxcXCJydWxlXFxcIjpcXFwianM6XFxcXG52YXIgZCA9IFtdO1xcXFxuaWYgKE1ZX1BBUkFNUy5rZXkgJiYgZ2V0TXlWYXIoXFxcXFxcXCJ1c2VcXFxcXFxcIiwgXFxcXFxcXCJcXFxcXFxcIikgPT0gXFxcXFxcXCJcXFxcXFxcIikge1xcXFxuICAgIHB1dE15VmFyKFxcXFxcXFwic291XFxcXFxcXCIsIE1ZX1BBUkFNUy5rZXkpO1xcXFxuICAgIHB1dE15VmFyKFxcXFxcXFwidXNlXFxcXFxcXCIsIFxcXFxcXFwiMVxcXFxcXFwiKTtcXFxcbiAgICBhZGRMaXN0ZW5lcihcXFxcXFxcIm9uQ2xvc2VcXFxcXFxcIiwgJC50b1N0cmluZygoKSA9PiB7XFxcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcXFxcXCJ1c2VcXFxcXFxcIik7XFxcXG4gICAgfSkpO1xcXFxufVxcXFxuJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvcHJvJylcXFwifSx7XFxcImNvbF90eXBlXFxcIjpcXFwibW92aWVfM1xcXCIsXFxcIm5hbWVcXFwiOlxcXCJYNVxcXCIsXFxcInBhdGhcXFwiOlxcXCJ4NVxcXCIsXFxcInJ1bGVcXFwiOlxcXCJqczpcXFxcbnZhciBkID0gW107XFxcXG5sZXQgdXJsID0gYmFzZTY0RGVjb2RlKGdldFBhcmFtKFxcXFxcXFwidVxcXFxcXFwiKSk7XFxcXG5kLnB1c2goe1xcXFxuICAgIHRpdGxlOiBcXFxcXFxcIlxcXFxcXFwiLFxcXFxuICAgIHVybDogdXJsLFxcXFxuICAgIGNvbF90eXBlOiBcXFxcXFxcIng1X3dlYnZpZXdfc2luZ2xlXFxcXFxcXCIsXFxcXG4gICAgZGVzYzogXFxcXFxcXCJmbG9hdCYmMTAwJVxcXFxcXFwiLFxcXFxuICAgIHBpY191cmw6IFxcXFxcXFwiXFxcXFxcXCIsXFxcXG4gICAgZXh0cmE6IHtcXFxcbiAgICAgICAgZmxvYXRWaWRlbzogdHJ1ZSxcXFxcbiAgICAgICAgY2FuQmFjazogdHJ1ZSxcXFxcbiAgICAgICAgYmxvY2tSdWxlczogW1xcXFxcXFwiLmdpZlxcXFxcXFwiLCBcXFxcXFxcIi9hZC9cXFxcXFxcIiwgXFxcXFxcXCJnb29nbGVcXFxcXFxcIiwgXFxcXFxcXCIvc2gvdG8vXFxcXFxcXCIsIFxcXFxcXFwiLkdJRlxcXFxcXFwiXVxcXFxuICAgIH1cXFxcbn0pO1xcXFxuc2V0UmVzdWx0KGQpO1xcXCJ9XVwiLFwicHJveHlcIjpcIlwifSIsInRpdGxlIjoi5Zyf5ouo6byg55S15b2xIn0=
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement