xiaomianao666

小程序:小龙盘资源

Sep 26th, 2023
109
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@小龙盘资源@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi5bCP6b6Z55uY6LWE5rqQIiwiYXV0aG9yIjoiWG5keSIsInVybCI6Imhpa2VyOi8vZW1wdHkjIyIsInZlcnNpb24iOjEyLCJjb2xfdHlwZSI6Im1vdmllXzMiLCJjbGFzc19uYW1lIjoiIiwidHlwZSI6InRvb2wiLCJjbGFzc191cmwiOiIiLCJhcmVhX25hbWUiOiIiLCJhcmVhX3VybCI6IiIsInNvcnRfbmFtZSI6IiIsInllYXJfbmFtZSI6IiIsInNvcnRfdXJsIjoiIiwieWVhcl91cmwiOiIiLCJmaW5kX3J1bGUiOiJqczpcbiAgICB2YXIgZCA9IFtdO1xuXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2Z1bmN0aW9ucycpKS5ydWxlKVxuXG5zdG9yYWdlMC5zZXRJdGVtKFwic2F2ZVwiLFwiMFwiKVxuc3RvcmFnZTAuc2V0SXRlbShcImJhdGNoXCIsXCJmYWxzZVwiKVxuXG5wdXRWYXIoXCJ0b2tlblwiLHRva2VuKVxuXG5pZCA9IE1ZX1BBUkFNUy5pZFxuXG5sZXQgaW5kZXhQYWdlID0gTnVtYmVyKGdldE15VmFyKGlkK1wiaW5kZXhQYWdlXCIsXCIxXCIpKVxuXG5kLnB1c2goe1xuICAgIHRpdGxlOlwi55m75b2VXCIsXG4gICAgZGVzYzogXCJcIixcbiAgICBwaWNfdXJsOmxvZ2luX2ltYWdlLFxuICAgIHVybDpcImhpa2VyOi8vcGFnZS9sb2dpblwiLFxuICAgIGNvbF90eXBlOiBcImljb25fNFwiXG59KTtcblxuZC5wdXNoKHtcbiAgICB0aXRsZTpcIuaUvuadvuS4gOS4i1wiLFxuICAgIGRlc2M6IFwiXCIsXG4gICAgcGljX3VybDpyZXN0X2ltYWdlLFxuICAgIHVybDpcImhpa2VyOi8vcGFnZS9yZXN0XCIsXG4gICAgY29sX3R5cGU6IFwiaWNvbl80XCJcbn0pO1xuXG5sZXQgY2hlY2tfbG9naW4gPSBjaGVja1Rva2VuKClcblxuaWYoY2hlY2tfbG9naW4uY29kZSA9PT0gMjAwKXtcblxuICAgIGQucHVzaCh7XG4gICAgICAgIHRpdGxlOlwi5bCP6b6Z55uYXCIsXG4gICAgICAgIGRlc2M6IFwiXCIsXG4gICAgICAgIHBpY191cmw6cG5nMyxcbiAgICAgICAgdXJsOlwiaGlrZXI6Ly9wYWdlL3N0YXJ0XCIsXG4gICAgICAgIGNvbF90eXBlOiBcImljb25fNFwiXG4gICAgfSk7XG4gICAgZC5wdXNoKHtcbiAgICAgICAgdGl0bGU6XCLno4Hlipvlip/og71cIixcbiAgICAgICAgZGVzYzogXCJcIixcbiAgICAgICAgcGljX3VybDpwbmc0LFxuICAgICAgICB1cmw6XCJoaWtlcjovL3BhZ2UvYWRkbWFnZW50XCIsXG4gICAgICAgIGNvbF90eXBlOiBcImljb25fNFwiLFxuICAgICAgICBleHRyYTp7XG4gICAgICAgICAgICBsb25nQ2xpY2s6IFtcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOlwi56OB5Yqb6Kej5p6QXCIsXG4gICAgICAgICAgICAgICAgICAgIGpzOiAkLnRvU3RyaW5nKCgpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFwiQ2hlY2tNYWdlbnRUeXBlXCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcIkNoZWNrTWFnZW50TWFnZW50XCIsIFwiXCIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwiaGlrZXI6Ly9wYWdlL2NoZWNrTWFnZW50XCJcbiAgICAgICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBdXG4gICAgICAgIH1cbiAgICB9KTtcblxuICAgIGQucHVzaCh7XG4gICAgICAgIHRpdGxlOlwi5YiH5o2i5p+l6K+iXCIsXG4gICAgICAgIGRlc2M6IFwiXCIsXG4gICAgICAgIHVybDokKFtcIuino+aekOS4rVwiLFwi5LiK5Lyg5LitXCIsXCLkuIrkvKDlrozmiJBcIl0sIDIsJ+afpeivouS7gOS5iOaVsOaNru+8nycpLnNlbGVjdCgoKSA9PiB7XG5cbiAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gXCLop6PmnpDkuK1cIil7XG5cbiAgICAgICAgICAgICAgICBwdXRWYXIoJ2RhdGFUeXBlJywgJ3J1bm5pbmdcIixcImVycm9yJylcbiAgICAgICAgICAgICAgICBwdXRWYXIoJ2RhdGFOYW1lJywgJ+ino+aekOS4rScpXG5cbiAgICAgICAgICAgIH1lbHNlIGlmIChpbnB1dCA9PT0gXCLkuIrkvKDkuK1cIil7XG5cbiAgICAgICAgICAgICAgICBwdXRWYXIoJ2RhdGFUeXBlJywgJ291dGdpdmluZycpXG4gICAgICAgICAgICAgICAgcHV0VmFyKCdkYXRhTmFtZScsICfkuIrkvKDkuK0nKVxuXG4gICAgICAgICAgICB9ZWxzZSBpZiAoaW5wdXQgPT09IFwi5LiK5Lyg5a6M5oiQXCIpe1xuXG4gICAgICAgICAgICAgICAgcHV0VmFyKCdkYXRhVHlwZScsICdmaW5pc2hlZCcpXG4gICAgICAgICAgICAgICAgcHV0VmFyKCdkYXRhTmFtZScsICfkuIrkvKDlrozmiJAnKVxuXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xuICAgICAgICAgICAgcmV0dXJuIFwidG9hc3Q6Ly/lt7LmmL7npLpcIitpbnB1dFxuICAgICAgICB9KSxcbiAgICAgICAgY29sX3R5cGU6IFwidGV4dF8yXCJcbiAgICB9KTtcblxuICAgIGZpbGVJZCA9IFwiMTIzXCJcbiAgICBmaWxlTmFtZSA9IFwibmFtZVwiXG5cbiAgICBkLnB1c2goe1xuICAgICAgICB0aXRsZTpcIuexu+Wei++8mlwiK2dldFZhcignZGF0YU5hbWUnLCfop6PmnpDkuK0nKSxcbiAgICAgICAgZGVzYzogXCJcIixcbiAgICAgICAgLy91cmw6XCJoaWtlcjovL3BhZ2UvcmVhZEJhY2tcIixcbiAgICAgICAgLy8gdXJsOiAvL1wiaGlrZXI6Ly9wYWdlL2Nsb3VkP2lkPVwiK2ZpbGVJZCtcIiZmaWxlTmFtZT1cIitmaWxlTmFtZStcIiZ0eXBlPVwiLFxuICAgICAgICAvLyAgICAgJCgnJykubGF6eVJ1bGUoKCkgPT57XG4gICAgICAgIC8vICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9mdW5jdGlvbnMnKSkucnVsZSlcbiAgICAgICAgLy8gICAgICAgICByZXR1cm4gdGVzdCgpXG4gICAgICAgIC8vICAgICB9KSxcbiAgICAgICAgY29sX3R5cGU6IFwidGV4dF8yXCJcbiAgICAgICAgLy8gZXh0cmE6e1xuICAgICAgICAvLyAgICAgLy90eXBlOiBcImNsb3VkXCJcbiAgICAgICAgLy8gICAgIGlkOmZpbGVJZCxcbiAgICAgICAgLy8gICAgIG5hbWU6IGZpbGVOYW1lLFxuICAgICAgICAvLyAgICAgdHlwZTogJ2ZvbGRlcicsXG4gICAgICAgIC8vICAgICBuZXdXaW5kb3c6IHRydWUsXG4gICAgICAgIC8vICAgICB3aW5kb3dJZDogZmlsZUlkXG4gICAgICAgIC8vIH1cbiAgICB9KTtcblxuXG4gICAgZC5wdXNoKHtcbiAgICAgICAgY29sX3R5cGU6ICdiaWdfYmxhbmtfYmxvY2snXG4gICAgfSk7XG5cbiAgICB0cnkge1xuXG4gICAgICAgIGhlYWQ9e1xuICAgICAgICAgICAgXCJBdXRob3JpemF0aW9uXCI6IFwiQmVhcmVyIFwiK2dldFZhcihcInRva2VuXCIpLFxuICAgICAgICAgICAgXCJVc2VyLUFnZW50XCI6IFwiTW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMDsgV2luNjQ7IHg2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgbG9vbmdib3gtdS8xLjIuMyBDaHJvbWUvMTA4LjAuNTM1OS4xNzkgRWxlY3Ryb24vMjIuMS4wIFNhZmFyaS81MzcuMzZcIlxuICAgICAgICB9XG5cbiAgICAgICAgYm9keT1ge1widHlwZVwiOlwib2ZmbGluZVwiLFwicGFnZVwiOmAraW5kZXhQYWdlK2AsXCJwYWdlX3NpemVcIjoxMDAsXCJzdGF0dXNcIjpbXCJgK2dldFZhcignZGF0YVR5cGUnLCAncnVubmluZ1wiLFwiZXJyb3InKStgXCJdfWBcblxuICAgICAgICByZXN1bHQ9cG9zdChjaGVja19tYWdlbnQse2hlYWRlcnM6IGhlYWQsYm9keTpib2R5fSlcblxuXG4gICAgICAgIGRhdGE9SlNPTi5wYXJzZShyZXN1bHQpLmRhdGEudGFza3NcblxuICAgICAgICBwYWdlU2l6ZSA9IEpTT04ucGFyc2UocmVzdWx0KS5kYXRhLnRvdGFsXG5cbiAgICAgICAgcGFnZUNvdW50ID0gTnVtYmVyKHBhcnNlSW50KChwYWdlU2l6ZS8xMDApKzEpKS50b0ZpeGVkKDApXG4gICAgICAgIG1pblBhZ2UgPSBpbmRleFBhZ2UgPiAxID8gY2hhbmdlUGFnZUludChpbmRleFBhZ2UsXCItXCIpIDogMVxuICAgICAgICBtYXhQYWdlID0gaW5kZXhQYWdlID49IHBhZ2VDb3VudCA/IHBhZ2VDb3VudCA6IGNoYW5nZVBhZ2VJbnQoaW5kZXhQYWdlLFwiK1wiKVxuXG5cbiAgICAgICAgaWYgKHBhZ2VTaXplID4gMTAwKXtcbiAgICAgICAgICAgIC8v6K+35rGC6aG15pWwXG5cbiAgICAgICAgICAgIGQucHVzaCh7XG4gICAgICAgICAgICAgICAgdGl0bGU6XCLkuIrkuIDpobVcIixcbiAgICAgICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaWQsaW5kZXhQYWdlLG1pblBhZ2UpID0+IHtcblxuICAgICAgICAgICAgICAgICAgICBpZihpbmRleFBhZ2U+bWluUGFnZSlcbiAgICAgICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoaWQrXCJpbmRleFBhZ2VcIixtaW5QYWdlKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcInRvYXN0Oi8v5LiK5LiA6aG1XCJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7cmV0dXJuIFwidG9hc3Q6Ly/lt7Lnu4/mnIDliY1cIn1cblxuICAgICAgICAgICAgICAgIH0saWQsaW5kZXhQYWdlLG1pblBhZ2UpLFxuICAgICAgICAgICAgICAgIC8vcGljX3VybDpsYXN0X2ltYWdlLFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcInRleHRfM1wiLFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICAgICAgICAgIGNsczogXCJwbGF5bGlzdCDkuIrkuIDpobVcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkLnB1c2goe1xuICAgICAgICAgICAgICAgIHRpdGxlOmluZGV4UGFnZStcIi9cIitwYWdlQ291bnQsXG4gICAgICAgICAgICAgICAgdXJsOiQoJycsJ+ivt+i+k+WFpemhteeggScpLmlucHV0KChpZCxwYWdlQ291bnQpPT57XG5cbiAgICAgICAgICAgICAgICAgICAgaWYoaW5wdXQ+MCYmTnVtYmVyKGlucHV0KTw9cGFnZUNvdW50KXtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKGlkKydpbmRleFBhZ2UnLGlucHV0KVxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFwidG9hc3Q6Ly/lt7Lnu4/ot7PovazliLBcIitpbnB1dCtcIumhtVwiXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle3JldHVybiBcInRvYXN0Oi8v6aG15pWw6L6T5YWl6ZSZ6K+vXCJ9XG4gICAgICAgICAgICAgICAgfSxpZCxwYWdlQ291bnQpLFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcInRleHRfM1wiLFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICAgICAgICAgIGNsczogXCJwbGF5bGlzdCDmgLvpobXmlbBcIlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuXG4gICAgICAgICAgICBkLnB1c2goe1xuICAgICAgICAgICAgICAgIHRpdGxlOlwi5LiL5LiA6aG1XCIsXG4gICAgICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGlkLGluZGV4UGFnZSxtYXhQYWdlKSA9PiB7XG5cbiAgICAgICAgICAgICAgICAgICAgaWYoaW5kZXhQYWdlPG1heFBhZ2UpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKGlkK1wiaW5kZXhQYWdlXCIsbWF4UGFnZSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXCJ0b2FzdDovL+S4i+S4gOmhtVwiXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle3JldHVybiBcInRvYXN0Oi8v5bey57uP5pyA5ZCOXCJ9XG4gICAgICAgICAgICAgICAgfSxpZCxpbmRleFBhZ2UsbWF4UGFnZSksXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFwidGV4dF8zXCIsXG4gICAgICAgICAgICAgICAgLy9waWNfdXJsOm5leHRfaW1hZ2UsXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcbiAgICAgICAgICAgICAgICAgICAgY2xzOiBcInBsYXlsaXN0IOS4i+S4gOmhtVwiXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBkLnB1c2goe1xuICAgICAgICAgICAgdGl0bGU6XCLmgLvmnaHmlbBcIixcbiAgICAgICAgICAgIGRlc2M6IFwi5oC75pWw77yaIFwiK3BhZ2VTaXplLFxuICAgICAgICAgICAgdXJsOlwiXCIsXG4gICAgICAgICAgICBjb2xfdHlwZTogXCJ0ZXh0XzFcIlxuICAgICAgICB9KTtcblxuICAgICAgICBmb3IgKHZhciBpIGluIGRhdGEpIHtcblxuICAgICAgICAgICAgZmlsZVNpemU9ZGF0YVtpXS5maWxlX3NpemUvKDEwMjQqMTAyNCoxMDI0KVxuICAgICAgICAgICAgY3JUaW1lPWRhdGFbaV0uY3JlYXRlX3RpbWVcbiAgICAgICAgICAgIHVwVGltZT1kYXRhW2ldLnVwZGF0ZV90aW1lXG4gICAgICAgICAgICBtYWdlbnQ9ZGF0YVtpXS5maWxlX25hbWVcblxuICAgICAgICAgICAgaWYoZGF0YVtpXS5wcm9ncmVzcy5lcXVhbHMoXCJcIikpe1xuICAgICAgICAgICAgICAgIG1nVGltZT0n5pyq6Kej5p6QJ1xuICAgICAgICAgICAgfWVsc2UgaWYoZGF0YVtpXS5wcm9ncmVzcy5lcXVhbHMoXCIwXCIpKXtcbiAgICAgICAgICAgICAgICBtZ1RpbWU9J+acquino+aekCdcbiAgICAgICAgICAgIH1lbHNle1xuICAgICAgICAgICAgICAgIG1nVGltZT1kYXRhW2ldLnByb2dyZXNzKyclJ1xuICAgICAgICAgICAgfVxuXG5cbiAgICAgICAgICAgIGZpbGVOYW1lPWRhdGFbaV0ubmFtZS5yZXBsYWNlKC8o44COfOOAkHxcXFt844CWKVte44CP44CRXFxd44CXXSso44CPfOOAkXxcXF1844CXKS9nLFwiXCIpXG4gICAgICAgICAgICBmaWxlSWQgPSBkYXRhW2ldLmlkXG4gICAgICAgICAgICBmaWxlU3RhdHVzID0gZGF0YVtpXS5zdGF0dXNcblxuICAgICAgICAgICAgaWYoZmlsZVN0YXR1cy5lcXVhbHMoXCJydW5uaW5nXCIpKXtcbiAgICAgICAgICAgICAgICBzdGF0dXNzID0gXCLop6PmnpDkuK1cIlxuICAgICAgICAgICAgfWVsc2UgaWYoZmlsZVN0YXR1cy5lcXVhbHMoXCJxdWV1ZVwiKSl7XG4gICAgICAgICAgICAgICAgc3RhdHVzcyA9IFwi5o6S6Zif5LitXCJcbiAgICAgICAgICAgIH1lbHNlIGlmIChmaWxlU3RhdHVzLmVxdWFscyhcImZpbmlzaGVkXCIpKXtcbiAgICAgICAgICAgICAgICBzdGF0dXNzID0gXCLlt7LlrozmiJBcIlxuICAgICAgICAgICAgfWVsc2UgaWYoZmlsZVN0YXR1cy5lcXVhbHMoXCJvdXRnaXZpbmdcIikpe1xuICAgICAgICAgICAgICAgIHN0YXR1c3MgPSBcIuS4iuS8oOS4rVwiXG4gICAgICAgICAgICB9ZWxzZSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzcyA9IFwi6ZSZ6K+vXCJcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgZC5wdXNoKHtcbiAgICAgICAgICAgICAgICB0aXRsZTpmaWxlTmFtZSxcbiAgICAgICAgICAgICAgICBkZXNjOlwi5o+Q5Lqk5pe26Ze0OlwiK2NyVGltZStcIiAg54q25oCBOlwiK3N0YXR1c3MrXCJcXG7mlofku7blpKflsI86XCIrTnVtYmVyKGZpbGVTaXplKS50b0ZpeGVkKDIpK1wiRyAgICAgICAgICAgICAgIOino+aekOi/m+W6pjpcIittZ1RpbWUrXCIgXFxu56OB5Yqb6ZO+5o6lOlwiK21hZ2VudCxcbiAgICAgICAgICAgICAgICB1cmw6XCJjb3B5Oi8vbWFnbmV0Oj94dD11cm46YnRpaDpcIittYWdlbnQsXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFwidGV4dF8xXCIsXG4gICAgICAgICAgICAgICAgdGV4dEFsaWduOlwibGVmdFwiLFxuICAgICAgICAgICAgICAgIGV4dHJhOntcbiAgICAgICAgICAgICAgICAgICAgbG9uZ0NsaWNrOltcbiAgICAgICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXCIgICDliKDpmaQgICBcIixqczokLnRvU3RyaW5nKChmaWxlSWQpPT57XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZnVuY3Rpb25zJykpLnJ1bGUpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBkZWxldGVNYWdlbnQoZmlsZUlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sZmlsZUlkKVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBdXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG5cbiAgICAgICAgfVxuXG5cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIHRvYXN0KFwi5b2T5YmN6aG15pWw6L+H5aSn5oiW6ICF572R57uc5LiN5aW9XCIpXG4gICAgICAgIGxvZyhlLm1lc3NhZ2UpXG4gICAgfVxufWVsc2Uge1xuICAgIHRvYXN0KFwi5a+G6ZKl5pyJ6Zeu6aKY5oiW6ICF5pyq55m75b2VXCIpXG59XG5cblxuc2V0UmVzdWx0KGQpOyIsInNlYXJjaF91cmwiOiIiLCJncm91cCI6IkHluLjnlKgiLCJzZWFyY2hGaW5kIjoiIiwiZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsImRldGFpbF9maW5kX3J1bGUiOiIiLCJzZGV0YWlsX2NvbF90eXBlIjoibW92aWVfMSIsInNkZXRhaWxfZmluZF9ydWxlIjoiIiwidWEiOiJtb2JpbGUiLCJwcmVSdWxlIjoiIiwicGFnZXMiOiJbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWJquWIh+adv+aVsOaNrlwiLFwicGF0aFwiOlwi5Ymq6LS05p2/5pWw5o2uXCIsXCJydWxlXCI6XCJldmFsUHJpdmF0ZUpTKFxcXCI4N0pWRTNrQU5SUmNwZ29kOXZFMGtyKzQ2UEFKcjN2Mk9vNWozSGpVMmNTY3prY0hhcFh3QTIrRHVLME11OHZvbzNjZjE1VG9RTXplVEgwaXpIczVyVUh5K0x2eG13QnJlRnR3ZE40RmZUSW1lWmtXVzdJU2hhNVBzTnAyZFUycVFBcUpBdXdMWGlJYm9kWnp1bTlKelR2Ukx0RXpiZTRjSVgxa1ZrR2dNR1pWQVIrdDdkS3Iza1U5MGVRTUNqRXJMenRMelkwcE15T3lpenVwYkZuMkpDY0YzS2R2M0FFUmY4RkJCK3Q4SDZHM3c2UXc5VFBnMHcrTGpGMkxQTWFsQ2MvY0U2OHQ4Zi9ScGFkMVorVUFsN3JSOElqMWlnTnQvenM3dGwzY0I1az1cXFwiKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Ye95pWwXCIsXCJwYXRoXCI6XCJmdW5jdGlvbnNcIixcInJ1bGVcIjpcIlxcbmZvbGRlcl9pbWFnZSA9IFxcXCJodHRwczovL2ltZy5pY29uczguY29tL3N0aWNrZXJzLzEwMC9tYWlsLWZvbGRlci5wbmdcXFwiXFxuLy9maWxlX2ltYWdlID0gXFxcImh0dHBzOi8vaW1nLmljb25zOC5jb20vc3RpY2tlcnMvMTAwL2RvY3VtZW50LnBuZ1xcXCJcXG5maWxlX2ltYWdlID0gXFxcImh0dHBzOi8vaW1nLmljb25zOC5jb20vY2xvdWRzLzEwMC9jbG91ZC1maWxlLnBuZ1xcXCJcXG5wX2ltYWdlID0gXFxcImh0dHBzOi8vaW1nLmljb25zOC5jb20vY2xvdWRzLzEwMC9waWN0dXJlLnBuZ1xcXCJcXG52aWRlb19pbWFnZSA9IFxcXCJodHRwczovL2ltZy5pY29uczguY29tL2Nsb3Vkcy8xMDAvdmlkZW8tcGxheWxpc3QucG5nXFxcIlxcbmF1ZGlvX2ltYWdlID0gXFxcImh0dHBzOi8vaW1nLmljb25zOC5jb20vY2xvdWRzLzEwMC9tdXNpYy5wbmdcXFwiXFxubmV4dF9pbWFnZSA9IFxcXCJodHRwczovL2ltZy5pY29uczguY29tL2Nsb3Vkcy81MC9uZXh0LnBuZ1xcXCJcXG5sYXN0X2ltYWdlID0gXFxcImh0dHBzOi8vaW1nLmljb25zOC5jb20vY2xvdWRzLzUwLzAwMDAwMC9uZXh0LnBuZ1xcXCJcXG5waXRjaF9pbWFnZSA9IFxcXCJodHRwczovL2ltZy5pY29uczguY29tL2Nsb3Vkcy8xMDAvY2hlY2tlZC0tdjEucG5nXFxcIlxcblxcbnBuZzEgPSBcXFwiaHR0cHM6Ly9pbWcuaWNvbnM4LmNvbS9jbG91ZHMvMTAwL3NlbnQucG5nXFxcIlxcbnBuZzIgPSBcXFwiaHR0cHM6Ly9pbWcuaWNvbnM4LmNvbS9idWJibGVzLzEwMC90ZXN0LXBhc3NlZC5wbmdcXFwiXFxucG5nMyA9IFxcXCJodHRwczovL2ltZy5pY29uczguY29tL3N0aWNrZXJzLzEwMC9jbG91ZC1mb2xkZXIucG5nXFxcIlxcbnBuZzQgPSBcXFwiaHR0cHM6Ly9pbWcuaWNvbnM4LmNvbS9jb3R0b24vMTAwL21hZ25ldC5wbmdcXFwiXFxucmVzdF9pbWFnZSA9IFxcXCJodHRwczovL2ltZy5pY29uczguY29tL2Nsb3Vkcy8xMDAvYWlycGxhbmUtdGFrZS1vZmYucG5nXFxcIlxcbmxvZ2luX2ltYWdlID0gXFxcImh0dHBzOi8vaW1nLmljb25zOC5jb20vY2xvdWRzLzEwMC91bmxvY2sucG5nXFxcIlxcbnNlZWRzX2ltYWdlID0gXFxcImh0dHBzOi8vaW1nLmljb25zOC5jb20vY2xvdWRzLzEwMC9wb3dlci1wbGFudC5wbmdcXFwiXFxuYmFja19mb2xkZXJfaW1hZ2UgPSBcXFwiaHR0cHM6Ly9pbWcuaWNvbnM4LmNvbS9jbG91ZHMvMTAwL29wZW5lZC1mb2xkZXIucG5nXFxcIlxcbmJhY2tfZmlsZV9pbWFnZSA9IFxcXCJodHRwczovL2ltZy5pY29uczguY29tL2Nsb3Vkcy8xMDAvdmlldy1maWxlLnBuZ1xcXCJcXG5vcnRoZXJfaW1hZ2UgPSBcXFwiaHR0cHM6Ly9pbWcuaWNvbnM4LmNvbS9jbG91ZHMvMTAwL2hkZC5wbmdcXFwiXFxuXFxuY2hlY2tfdXNlcl9hY2NvdW50ID0gXFxcImh0dHBzOi8vdXNiYXBpLnN0YXJpdmVycGFuLmNvbS9hcGkvdjEvdXNlci9hY2NvdW50XFxcIlxcbmNoZWNrX21hZ2VudCA9IFxcXCJodHRwczovL3VzYmFwaS5zdGFyaXZlcnBhbi5jb20vYXBpL3YxL3Rhc2svbGlzdFxcXCJcXG5hZGRfbWFnZW50ID0gXFxcImh0dHBzOi8vdXNiYXBpLnN0YXJpdmVycGFuLmNvbS9hcGkvdjEvdGFzay9hZGRcXFwiXFxuZGVsZXRlX21hZ2VudCA9IFxcXCJodHRwczovL3VzYmFwaS5zdGFyaXZlcnBhbi5jb20vYXBpL3YxL3Rhc2svcmVtb3ZlXFxcIlxcblxcbmNoZWNrX3VybCA9IFxcXCJodHRwczovL3VzYmFwaS5zdGFyaXZlcnBhbi5jb20vYXBpL3YxL2ZpbGUvbGlzdFxcXCJcXG5hZGRfZm9sZGVyID0gXFxcImh0dHBzOi8vdXNiYXBpLnN0YXJpdmVycGFuLmNvbS9hcGkvdjEvZmlsZS9kaXIvY3JlYXRlXFxcIlxcbnVwZGF0ZV9mb2xkZXIgPSBcXFwiaHR0cHM6Ly91c2JhcGkuc3Rhcml2ZXJwYW4uY29tL2FwaS92MS9maWxlL3JlbmFtZVxcXCJcXG5kZWxldGVfZm9sZGVyID0gXFxcImh0dHBzOi8vdXNiYXBpLnN0YXJpdmVycGFuLmNvbS9hcGkvdjEvZmlsZS9kZWxldGVcXFwiXFxuc2VhcmNoX2ZpbGUgPSBcXFwiaHR0cHM6Ly91c2JhcGkuc3Rhcml2ZXJwYW4uY29tL2FwaS92MS9maWxlL3NlYXJjaFxcXCJcXG5cXG50cmFzaF9maWxlID0gXFxcImh0dHBzOi8vdXNiYXBpLnN0YXJpdmVycGFuLmNvbS9hcGkvdjEvcmVjeWNsZS1iaW4vZmlsZS9saXN0XFxcIlxcbnRyYXNoX2RlbGV0ZSA9IFxcXCJodHRwczovL3VzYmFwaS5zdGFyaXZlcnBhbi5jb20vYXBpL3YxL3JlY3ljbGUtYmluL2ZpbGUvY2xlYXJcXFwiXFxudHJhc2hfY2xlYW4gPSBcXFwiaHR0cHM6Ly91c2JhcGkuc3Rhcml2ZXJwYW4uY29tL2FwaS92MS9yZWN5Y2xlLWJpbi9lbXB0eVxcXCJcXG5maWxlX2RldGFpbCA9IFxcXCJodHRwczovL3VzYmFwaS5zdGFyaXZlcnBhbi5jb20vYXBpL3YxL2ZpbGUvZGV0YWlsXFxcIlxcbnRyYXNoX3JlY292ZXIgPSBcXFwiaHR0cHM6Ly91c2JhcGkuc3Rhcml2ZXJwYW4uY29tL2FwaS92MS9yZWN5Y2xlLWJpbi9maWxlL3JlY292ZXJcXFwiXFxuXFxuY2xvdWRfbG9naW4gPSBcXFwiaHR0cHM6Ly9wcm9kdWN0YXBpLnN0YXJpdmVycGFuLmNvbS9jbXNwcm92aWRlci92MS91c2VyL2xvZ2luXFxcIlxcbmNsb3VkX2ZsaWVzID0gXFxcImh0dHBzOi8vcHJvZHVjdGFwaS5zdGFyaXZlcnBhbi5jb20vY2xvdWRmaWxlL3YxL2FsbC1maWxlc1xcXCJcXG5jbG91ZF92aXAgPSBcXFwiaHR0cHM6Ly9wcm9kdWN0YXBpLnN0YXJpdmVycGFuLmNvbS9jbXNwcm92aWRlci92Mi41L3VzZXIvcXVlcnlcXFwiXFxuY2xvdWRfc2VlZHMgPSBcXFwiaHR0cHM6Ly9wcm9kdWN0YXBpLnN0YXJpdmVycGFuLmNvbS9jbG91ZC1yZXNvdXJjZS92MS9zZWVkc1xcXCJcXG5jbG91ZF9zZWVkc192aWRlbyA9IFxcXCJodHRwczovL3Byb2R1Y3RhcGkuc3Rhcml2ZXJwYW4uY29tL2Nsb3VkLXJlc291cmNlL3YxL3NlYXJjaC9yZWNvbW1lbmRzXFxcIlxcbi8vIGNsb3VkX3NlZWRzX3ZpZGVvID0gXFxcImh0dHBzOi8vcHJvZHVjdGFwaS5zdGFyaXZlcnBhbi5jb20vY2xvdWQtcmVzb3VyY2UvdjEvdmlkZW9zXFxcIlxcblxcbmNsb3VkX2FkZEZvbGRlciA9IFxcXCJodHRwczovL3Byb2R1Y3RhcGkuc3Rhcml2ZXJwYW4uY29tL2Ntc3Byb3ZpZGVyL3YxLjIvY2xvdWQvYWRkRm9sZGVyXFxcIlxcbmNsb3VkX2FkZEZpbGUgPSBcXFwiaHR0cHM6Ly9wcm9kdWN0YXBpLnN0YXJpdmVycGFuLmNvbS9jbXNwcm92aWRlci92Mi41L2Nsb3VkL2FkZC1maWxlXFxcIlxcblxcbmNsb3VkX2NoZWNrRm9sZGVyID0gXFxcImh0dHBzOi8vcHJvZHVjdGFwaS5zdGFyaXZlcnBhbi5jb20vY2xvdWRmaWxlL3YxL2ZvbGRlcnNcXFwiXFxuY2xvdWRfY2hlY2tGaWxlID0gXFxcImh0dHBzOi8vcHJvZHVjdGFwaS5zdGFyaXZlcnBhbi5jb20vY2xvdWRmaWxlL3YxL2ZpbGVzXFxcIlxcblxcbmltYWdlX3JlZ3VsYXIgPSAvKGpwZ3xnaWZ8cG5nfGpwZWd8d2VicHxpbWFnZXxzdmcpJC9pXFxudmlkZW9fcmVndWxhciA9IC8oYXZpfHRzfG1wNHxtb3Z8bTR2fDNncHxybXxybXZifHdtdnxhc2Z8YXN4YXZpfGRhdHxta3Z8Zmx2fHZvYikkL2lcXG5hdWRpb19yZWd1bGFyID0gLyh3YXZ8YXVkaW98bXAzfHdtYXxtNGF8ZmxhYykkL2lcXG5cXG50b2tlbiA9IGdldFRva2VuKFxcXCJzdGFydFxcXCIpO1xcbnRva2VuX25hbWUgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJuYW1lXFxcIixcXFwiXFxcIilcXG5jbG91ZF90b2tlbiA9IGdldFRva2VuKFxcXCJjbG91ZFxcXCIpO1xcbmNsb3VkX2xvZ2luX3Rva2VuID0gZ2V0Q2xvdWRMb2dpblRva2VuKCk7XFxuXFxubGV0IHRva2VuX2RhdGEgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCflsI/pvpnnm5jlr4bpkqUuanNvbicsIDApIHx8ICdbXScpO1xcblxcbmxldCBzdGFydFBhdGggPSBcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy/lsI/pvpnnm5jotYTmupAv5aSH5Lu95paH5Lu2L+Wwj+m+meebmOaWh+S7tuWkueWkh+S7vS8wLmpzb25cXFwiXFxuXFxubGV0IHN0YXJ0SW5kZXhQYXRoID0gXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMv5bCP6b6Z55uY6LWE5rqQL+Wkh+S7veaWh+S7ti/lsI/pvpnnm5jmlofku7blpLnlpIfku70vXFxcIlxcblxcbmxldCBjbG91ZFBhdGggPSBcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9JUEZT6LWE5rqQL+Wkh+S7veaWh+S7ti/lsI/pvpnkupHnm5jmlofku7blpLnlpIfku70vMC5qc29uXFxcIlxcblxcbmxldCBjbG91ZEluZGV4UGF0aCA9IFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL0lQRlPotYTmupAv5aSH5Lu95paH5Lu2L+Wwj+m+meS6keebmOaWh+S7tuWkueWkh+S7vS9cXFwiXFxuXFxubGV0IGxpbmUgPSBcXFwiaHR0cHM6Ly9pcGZzZ3cwMC5zdGFyaXZlcnBhbi5jb206OTA5NS9pcGZzL1xcXCJcXG5cXG4vL+aWueazlVxcblxcbmZ1bmN0aW9uIHRlc3QoKXtcXG5cXG59XFxuXFxuZnVuY3Rpb24gZ2V0UG9zdERhdGEodXJsLGJvZHkpe1xcblxcbiAgICBsZXQgaGVhZCA9IGdldEhlYWQoKVxcblxcbiAgICBsZXQgcmVzdWx0ID0gcG9zdCh1cmwsIHtoZWFkZXJzOiBoZWFkLCBib2R5OiBib2R5fSlcXG5cXG4gICAgcmV0dXJuIEpTT04ucGFyc2UocmVzdWx0KVxcbn1cXG5cXG5mdW5jdGlvbiBnZXRDbG91ZFBvc3REYXRhKHVybCxoZWFkLGJvZHkpe1xcblxcbiAgICB0cnkge1xcblxcbiAgICAgICAgbGV0IHJlc3VsdCA9IHBvc3QodXJsLCB7aGVhZGVyczogaGVhZCwgYm9keTogYm9keX0pXFxuXFxuXFxuICAgICAgICBsZXQgZGF0YSA9IEpTT04ucGFyc2UocmVzdWx0KVxcblxcbiAgICAgICAgcmV0dXJuIGRhdGFcXG5cXG4gICAgfWNhdGNoIChlKXtcXG4gICAgICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gZ2V0Q2xvdWRMb2dpblRva2VuKCl7XFxuXFxuICAgIGxldCByZXN1bHQgPSBjaGVja0Nsb3VkVHlwZShjbG91ZF90b2tlbilcXG5cXG4gICAgaWYgKHJlc3VsdC5jb2RlID09PSAyMDApe1xcblxcbiAgICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhLnRva2VuXFxuXFxuICAgIH1lbHNlIHtcXG5cXG4gICAgICAgIHJldHVybiBcXFwiXFxcIlxcblxcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIGdldExpbmVLZXkoY2xvdWRUb2tlbikge1xcblxcbiAgICBsZXQgdXJsID0gXFxcImh0dHBzOi8vcHJvZHVjdGFwaS5zdGFyaXZlcnBhbi5jb20vY21zcHJvdmlkZXIvdjEvdXNlci9lbmNyeXB0aW9uLWtleVxcXCJcXG5cXG4gICAgbGV0IGJvZHkgPSBge1xcXCJ0b2tlblxcXCI6XFxcImArY2xvdWRUb2tlbitgXFxcIn1gXFxuXFxuICAgIGxldCByZXN1bHQgPSBwb3N0KHVybCx7aGVhZGVyczoge30sYm9keTpib2R5fSlcXG5cXG4gICAgbGV0IGRhdGEgPSBKU09OLnBhcnNlKHJlc3VsdClcXG5cXG4gICAgaWYgKGRhdGEuY29kZSA9PT0gMjAwKXtcXG5cXG4gICAgICAgIHJldHVybiBkYXRhLmRhdGFcXG5cXG4gICAgfWVsc2Uge1xcblxcbiAgICAgICAgcmV0dXJuIFxcXCJcXFwiXFxuXFxuICAgIH1cXG5cXG59XFxuXFxuZnVuY3Rpb24gZ2V0VG9rZW4odHlwZSl7XFxuXFxuICAgIGlmICh0eXBlID09PSBcXFwic3RhcnRcXFwiKXtcXG5cXG4gICAgICAgIHJldHVybiBzdG9yYWdlMC5nZXRJdGVtKFxcXCJ0b2tlblxcXCIsXFxcIlxcXCIpXFxuXFxuICAgIH1lbHNlIGlmICh0eXBlID09PSBcXFwiY2xvdWRcXFwiKXtcXG5cXG4gICAgICAgIHJldHVybiBzdG9yYWdlMC5nZXRJdGVtKFxcXCJjbG91ZFxcXCIsXFxcIlxcXCIpXFxuXFxuICAgIH1lbHNlIHtcXG5cXG4gICAgICAgIGxvZyhcXFwidG9rZW4g6ZSZ6K+vXFxcIilcXG5cXG4gICAgICAgIHJldHVybiBcXFwiXFxcIlxcblxcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIGdldEhlYWQoKXtcXG5cXG4gICAgbGV0IGhlYWQ9e1xcbiAgICAgICAgXFxcIkF1dGhvcml6YXRpb25cXFwiOiBcXFwiQmVhcmVyIFxcXCIrZ2V0VG9rZW4oXFxcInN0YXJ0XFxcIiksXFxuICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFxcXCJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBsb29uZ2JveC11LzEuMi4zIENocm9tZS8xMDguMC41MzU5LjE3OSBFbGVjdHJvbi8yMi4xLjAgU2FmYXJpLzUzNy4zNlxcXCJcXG4gICAgfVxcbiAgICByZXR1cm4gaGVhZFxcbn1cXG5cXG5mdW5jdGlvbiBnZXRDbG91ZEhlYWQodG9rZW4pe1xcbiAgICBsZXQgaGVhZD17XFxuICAgICAgICBcXFwiQXV0aG9yaXphdGlvblxcXCI6IFxcXCJCZWFyZXIgXFxcIit0b2tlbixcXG4gICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS8xMDkuMC4wLjAgU2FmYXJpLzUzNy4zNiBFZGcvMTA5LjAuMTUxOC43MFxcXCJcXG4gICAgfVxcbiAgICByZXR1cm4gaGVhZFxcbn1cXG5cXG5mdW5jdGlvbiBjaGVja1Rva2VuKCkge1xcblxcbiAgICBsZXQgYm9keSA9IGB7XFxcInR5cGVcXFwiOlxcXCJvZmZsaW5lXFxcIixcXFwicGFnZVxcXCI6MSxcXFwicGFnZV9zaXplXFxcIjoxMDAsXFxcInN0YXR1c1xcXCI6W1xcXCJydW5uaW5nXFxcIixcXFwiZXJyb3JcXFwiXX1gXFxuXFxuICAgIGxldCBkYXRhID0gZ2V0UG9zdERhdGEoY2hlY2tfbWFnZW50LCBib2R5KVxcblxcbiAgICByZXR1cm4gZGF0YVxcbn1cXG5cXG5mdW5jdGlvbiBjaGVja1ZpcChpZCl7XFxuICAgIGxldCBib2R5ID0gYHtcXFwidXNlcklkXFxcIjogXFxcImAraWQrYFxcXCJ9YFxcblxcbiAgICB0cnkge1xcblxcbiAgICAgICAgbGV0IGRhdGEgPSBnZXRDbG91ZFBvc3REYXRhKGNsb3VkX3ZpcCxnZXRDbG91ZEhlYWQoc3RvcmFnZTAuZ2V0SXRlbShcXFwiY2xvdWRfdG9rZW5cXFwiKSksYm9keSkuZGF0YVxcblxcbiAgICAgICAgcmV0dXJuIGRhdGFcXG4gICAgfWNhdGNoIChlKXtcXG4gICAgICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gY2hlY2tDbG91ZFR5cGUodG9rZW4pe1xcblxcbiAgICBpZiAodG9rZW4udHJpbSgpLmxlbmd0aCA+IDApe1xcblxcbiAgICAgICAgbGV0IGJvZHk9YHtcXFwidG9rZW5cXFwiOlxcXCJgK3Rva2VuK2BcXFwifWBcXG5cXG4gICAgICAgIGxldCBkYXRhID0gZ2V0Q2xvdWRQb3N0RGF0YShjbG91ZF9sb2dpbixnZXRDbG91ZEhlYWQodG9rZW4pLGJvZHkpXFxuXFxuICAgICAgICBpZiAoZGF0YS5jb2RlID09PSAyMDApe1xcblxcbiAgICAgICAgICAgIHJldHVybiBkYXRhXFxuXFxuICAgICAgICB9ZWxzZXtcXG5cXG4gICAgICAgICAgICByZXR1cm4gXFxcIlxcXCJcXG5cXG4gICAgICAgIH1cXG5cXG4gICAgfWVsc2Uge1xcbiAgICAgICAgcmV0dXJuIFxcXCJcXFwiXFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gY2hlY2tVc2VyQWNjb3VudCgpe1xcblxcbiAgICBsZXQgYm9keT1ge31gXFxuXFxuICAgIHRyeSB7XFxuXFxuICAgICAgICBsZXQgZGF0YSA9IGdldFBvc3REYXRhKGNoZWNrX3VzZXJfYWNjb3VudCxib2R5KVxcblxcbiAgICAgICAgaWYgKGRhdGEuY29kZSA9PT0gMjAwKXtcXG4gICAgICAgICAgICBsZXQgYWxsU2l6ZSA9IGdldEZpbGVTaXplKGRhdGEuZGF0YS5zdGF0cy5zdG9yYWdlX3NpemVzKVxcbiAgICAgICAgICAgIGxldCBjb3VudCA9IGdldEZpbGVTaXplKGRhdGEuZGF0YS5saW1pdC5zdG9yYWdlX2xpbWl0KVxcbiAgICAgICAgICAgIHJldHVybiBcXFwi4oCY4oCY4oCZ4oCZPHN0cm9uZz48Zm9udCBjb2xvcj0nI0Y0NDc0Nyc+XFxcIithbGxTaXplK1xcXCI8L2ZvbnQ+PC9zdHJvbmc+XFxcIitcXFwiL1xcXCIrY291bnRcXG4gICAgICAgIH1lbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcIuacquefpVxcXCJcXG4gICAgICAgIH1cXG4gICAgfWNhdGNoIChlKXtcXG4gICAgICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgIH1cXG59XFxuXFxuXFxuXFxuXFxuZnVuY3Rpb24gc2F2ZVRva2VuKGFfbmFtZSxhX3VzZXIpe1xcblxcbiAgICBpZiAoIWFfbmFtZSB8fCAhYV91c2VyKSB7XFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L+h5oGv5LiN5a6M5pW0ISdcXG4gICAgfVxcblxcbiAgICBsZXQgdG9rZW5LZXkgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCflsI/pvpnnm5jlr4bpkqUuanNvbicsIDApIHx8ICdbXScpO1xcblxcbiAgICBsZXQgaWRleCA9IHRva2VuS2V5LmZpbmRJbmRleChpdCA9PiBpdC5uYW1lID09PSBhX25hbWUpO1xcblxcbiAgICBpZiAoaWRleCA+IC0xKSB7XFxuICAgICAgICBpZiAodG9rZW5LZXlbaWRleF0udXNlciAhPT0gYV91c2VyKSB7XFxuXFxuICAgICAgICAgICAgdG9rZW5LZXlbaWRleF0udXNlciA9IGFfdXNlcjtcXG4gICAgICAgICAgICByZXR1cm4gJCgn5qOA5rWL5Yiw5pys5Zyw5pyJ6YeN5aSN55qEJyArIGFfbmFtZSArICcs5piv5ZCm6KaG55uWPycpLmNvbmZpcm0oKHRva2VuS2V5KSA9PiB7XFxuICAgICAgICAgICAgICAgIHNhdmVGaWxlKCflsI/pvpnnm5jlr4bpkqUuanNvbicsIEpTT04uc3RyaW5naWZ5KHRva2VuS2V5KSwgMCk7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suS/neWtmCdcXG4gICAgICAgICAgICB9LCB0b2tlbktleSlcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+ayoeacieaTjeS9nCdcXG4gICAgICAgIH1cXG4gICAgfWVsc2Uge1xcbiAgICAgICAgdHJ5IHtcXG5cXG4gICAgICAgICAgICBsZXQgdXNlcl9kYXRhID0ge1xcbiAgICAgICAgICAgICAgICBuYW1lOiBhX25hbWUsXFxuICAgICAgICAgICAgICAgIHVzZXI6IGFfdXNlcixcXG4gICAgICAgICAgICAgICAgY2xvdWQ6JycsXFxuICAgICAgICAgICAgICAgIGFkZEZvbGRlcjogJycsXFxuICAgICAgICAgICAgICAgIGFkZEZvbGRlck5hbWU6ICcnXFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIHRva2VuS2V5LnB1c2godXNlcl9kYXRhKTtcXG5cXG4gICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJ1c2VyX2RhdGFcXFwiLHVzZXJfZGF0YSlcXG4gICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJ0b2tlblxcXCIsYV91c2VyKVxcbiAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcIm5hbWVcXFwiLGFfbmFtZSlcXG4gICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJjbG91ZFxcXCIsdXNlcl9kYXRhLmNsb3VkKVxcbiAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcImFkZEZvbGRlclxcXCIsdXNlcl9kYXRhLmFkZEZvbGRlcilcXG4gICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJhZGRGb2xkZXJOYW1lXFxcIix1c2VyX2RhdGEuYWRkRm9sZGVyTmFtZSlcXG4gICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJpZGV4XFxcIix0b2tlbktleS5maW5kSW5kZXgoaXQgPT4gaXQubmFtZSA9PT0gYV9uYW1lKSlcXG5cXG4gICAgICAgICAgICBzYXZlRmlsZSgn5bCP6b6Z55uY5a+G6ZKlLmpzb24nLCBKU09OLnN0cmluZ2lmeSh0b2tlbktleSksIDApO1xcblxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuXFxuICAgICAgICAgICAgYmFjaygpO1xcblxcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/kv53lrZjmiJDlip8gIFxcXFxu5qyi6L+O5L2gLScrYV9uYW1lXFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lh7rnjrDplJnor68nXFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gdXBkYXRlVG9rZW4odG9rZW5fZGF0YSx1c2VyLGlkZXgpe1xcblxcbiAgICBsZXQgbmV3VG9rZW4gPSB1c2VyLnRyaW0oKTtcXG5cXG4gICAgaWYgKG5ld1Rva2VuKSB7XFxuXFxuICAgICAgICB0b2tlbl9kYXRhW2lkZXhdLnVzZXIgPSBuZXdUb2tlbjtcXG5cXG4gICAgICAgIHNhdmVGaWxlKCflsI/pvpnnm5jlr4bpkqUuanNvbicsIEpTT04uc3RyaW5naWZ5KHRva2VuX2RhdGEpLCAwKTtcXG5cXG4gICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG5cXG4gICAgICAgIGNsZWFySXRlbShcXFwidG9rZW5cXFwiKVxcblxcbiAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwidG9rZW5cXFwiLG5ld1Rva2VuKVxcblxcbiAgICAgICAgYmFjaygpO1xcblxcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+S/ruaUueaIkOWKnydcXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/kv67mlLnlpLHotKUnXFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gZGVsZXRlVG9rZW4oaWRleCl7XFxuXFxuICAgIHRva2VuX2RhdGEuc3BsaWNlKGlkZXgsIDEpO1xcbiAgICBzYXZlRmlsZSgn5bCP6b6Z55uY5a+G6ZKlLmpzb24nLCBKU09OLnN0cmluZ2lmeSh0b2tlbl9kYXRhKSwgMCk7XFxuXFxuICAgIGlmICh0b2tlbl9kYXRhWzBdID09PSB1bmRlZmluZWQpIHtcXG5cXG4gICAgICAgIGNsZWFySXRlbShcXFwidG9rZW5cXFwiKVxcbiAgICAgICAgY2xlYXJJdGVtKFxcXCJuYW1lXFxcIilcXG4gICAgICAgIGNsZWFySXRlbShcXFwiY2xvdWRcXFwiKVxcbiAgICAgICAgY2xlYXJJdGVtKFxcXCJpZGV4XFxcIilcXG4gICAgICAgIGNsZWFySXRlbShcXFwiYWRkRm9sZGVyXFxcIilcXG4gICAgICAgIGNsZWFySXRlbShcXFwiYWRkRm9sZGVyTmFtZVxcXCIpXFxuXFxuICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJuYW1lXFxcIixcXFwiXFxcIilcXG4gICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcInRva2VuXFxcIixcXFwiXFxcIilcXG4gICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcImNsb3VkXFxcIixcXFwiXFxcIilcXG4gICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcImlkZXhcXFwiLFxcXCJcXFwiKVxcbiAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwiYWRkRm9sZGVyXFxcIixcXFwiXFxcIilcXG4gICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcImFkZEZvbGRlck5hbWVcXFwiLFxcXCJcXFwiKVxcblxcbiAgICAgICAgYmFjaygpO1xcblxcbiAgICAgICAgcmV0dXJuICAndG9hc3Q6Ly/or7fph43mlrDnmbvlvZUnXFxuICAgIH1lbHNlIHtcXG5cXG4gICAgICAgIHN3aXRjaGVkKHRva2VuX2RhdGFbMF0udXNlciwwKVxcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+WIoOmZpOaIkOWKnydcXG5cXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBzd2l0Y2hlZCh1c2VyLGlkZXgpe1xcblxcbiAgICBsZXQgbmV3VG9rZW4gPSB1c2VyLnRyaW0oKTtcXG5cXG4gICAgaWYgKG5ld1Rva2VuKSB7XFxuXFxuICAgICAgICBjbGVhckl0ZW0oXFxcInRva2VuXFxcIilcXG4gICAgICAgIGNsZWFySXRlbShcXFwibmFtZVxcXCIpXFxuICAgICAgICBjbGVhckl0ZW0oXFxcImNsb3VkXFxcIilcXG4gICAgICAgIGNsZWFySXRlbShcXFwiaWRleFxcXCIpXFxuICAgICAgICBjbGVhckl0ZW0oXFxcImFkZEZvbGRlclxcXCIpXFxuICAgICAgICBjbGVhckl0ZW0oXFxcImFkZEZvbGRlck5hbWVcXFwiKVxcblxcbiAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwibmFtZVxcXCIsdG9rZW5fZGF0YVtpZGV4XS5uYW1lKVxcbiAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwidG9rZW5cXFwiLG5ld1Rva2VuKVxcbiAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwiY2xvdWRcXFwiLHRva2VuX2RhdGFbaWRleF0uY2xvdWQpXFxuICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJpZGV4XFxcIixpZGV4KVxcbiAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwiYWRkRm9sZGVyXFxcIix0b2tlbl9kYXRhW2lkZXhdLmFkZEZvbGRlcilcXG4gICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcImFkZEZvbGRlck5hbWVcXFwiLHRva2VuX2RhdGFbaWRleF0uYWRkRm9sZGVyTmFtZSlcXG5cXG4gICAgICAgIGJhY2soKTtcXG5cXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly/liIfmjaLmiJDlip8g5qyi6L+OICcrc3RvcmFnZTAuZ2V0SXRlbShcXFwibmFtZVxcXCIpXFxuICAgIH0gZWxzZSB7XFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5YiH5o2i5aSx6LSlJ1xcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIHNldEFkZEZvbGRlcihmaWxlSWQsZm9sZGVyX25hbWUpe1xcblxcbiAgICBpZiAoIWZpbGVJZC50cmltKCkpIHtcXG4gICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/mlofku7blj4LmlbDplJnor69cXFwiXFxuICAgIH1lbHNlIHtcXG5cXG4gICAgICAgIHRva2VuX2RhdGFbc3RvcmFnZTAuZ2V0SXRlbShcXFwiaWRleFxcXCIpXS5hZGRGb2xkZXIgPSBmaWxlSWRcXG4gICAgICAgIHRva2VuX2RhdGFbc3RvcmFnZTAuZ2V0SXRlbShcXFwiaWRleFxcXCIpXS5hZGRGb2xkZXJOYW1lID0gZm9sZGVyX25hbWVcXG5cXG4gICAgICAgIHNhdmVGaWxlKCflsI/pvpnnm5jlr4bpkqUuanNvbicsIEpTT04uc3RyaW5naWZ5KHRva2VuX2RhdGEpLCAwKTtcXG5cXG4gICAgICAgIGlmICh0b2tlbl9kYXRhW3N0b3JhZ2UwLmdldEl0ZW0oXFxcImlkZXhcXFwiKV0uYWRkRm9sZGVyID09PSBmaWxlSWQpe1xcblxcbiAgICAgICAgICAgIGNsZWFySXRlbShcXFwiYWRkRm9sZGVyXFxcIilcXG4gICAgICAgICAgICBjbGVhckl0ZW0oXFxcImFkZEZvbGRlck5hbWVcXFwiKVxcbiAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcImFkZEZvbGRlclxcXCIsZmlsZUlkKVxcbiAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcImFkZEZvbGRlck5hbWVcXFwiLGZvbGRlcl9uYW1lKVxcblxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+iuvue9ruaIkOWKn1xcXCJcXG4gICAgICAgIH1lbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6K6+572u5aSx6LSlXFxcIlxcbiAgICAgICAgfVxcbiAgICB9XFxuXFxufVxcblxcbmZ1bmN0aW9uIHNldENsb3VkVG9rZW4oY2xvdWRfdG9rZW4saWRleCl7XFxuXFxuICAgIGlmICghY2xvdWRfdG9rZW4udHJpbSgpKSB7XFxuXFxuICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5paH5Lu25Y+C5pWw6ZSZ6K+vXFxcIlxcblxcbiAgICB9ZWxzZSB7XFxuXFxuICAgICAgICB0b2tlbl9kYXRhW2lkZXhdLmNsb3VkID0gY2xvdWRfdG9rZW5cXG5cXG4gICAgICAgIHNhdmVGaWxlKCflsI/pvpnnm5jlr4bpkqUuanNvbicsIEpTT04uc3RyaW5naWZ5KHRva2VuX2RhdGEpLCAwKTtcXG5cXG4gICAgICAgIGlmICh0b2tlbl9kYXRhW2lkZXhdLmNsb3VkID09PSBjbG91ZF90b2tlbil7XFxuXFxuICAgICAgICAgICAgbGV0IGRhdGEgPSBnZXRMaW5lS2V5KGNsb3VkX3Rva2VuKVxcblxcbiAgICAgICAgICAgIGNsZWFySXRlbShcXFwiY2xvdWRcXFwiKVxcbiAgICAgICAgICAgIGNsZWFySXRlbShcXFwiY2xvdWRLZXlcXFwiKVxcbiAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcImNsb3VkXFxcIixjbG91ZF90b2tlbilcXG4gICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJjbG91ZEtleVxcXCIsZGF0YS5LZXkpXFxuXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG5cXG4gICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6K6+572u5oiQ5YqfXFxcIlxcbiAgICAgICAgfWVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/orr7nva7lpLHotKVcXFwiXFxuICAgICAgICB9XFxuICAgIH1cXG59XFxuXFxuXFxuXFxuZnVuY3Rpb24gY2hhbmdlUGFnZUludChudW0xLG51bTIpe1xcbiAgICB2YXIgcmVzdWx0XFxuICAgIGlmKG51bTIuZXF1YWxzKFxcXCIrXFxcIikpe1xcbiAgICAgICAgcmVzdWx0ID0gcGFyc2VJbnQobnVtMSkrMVxcbiAgICB9ZWxzZXtcXG4gICAgICAgIHJlc3VsdCA9IHBhcnNlSW50KG51bTEpLTFcXG4gICAgfVxcbiAgICByZXR1cm4gTnVtYmVyKHJlc3VsdCkudG9GaXhlZCgwKVxcbn1cXG5cXG5mdW5jdGlvbiBnZXRNYXhQYWdlKHBhZ2VDb3VudCl7XFxuXFxuICAgIHJldHVybiAocGFnZUNvdW50ICUgMTAwKSA/IChwYXJzZUludChwYWdlQ291bnQvMTAwKSsxKSA6IChwYWdlQ291bnQvMTAwKVxcbn1cXG5cXG5mdW5jdGlvbiBnZXRGaWxlU2l6ZShmaWxlX3NpemUpe1xcbiAgICBsZXQgc2l6ZSA9IGZpbGVfc2l6ZVxcbiAgICBpZihzaXplIDwgMTAyNCoxMDI0KXtcXG4gICAgICAgIHNpemUgPSBzaXplIC8gMTAyNFxcbiAgICAgICAgcmV0dXJuIHNpemUudG9GaXhlZCgyKStcXFwiIEtcXFwiXFxuICAgIH1lbHNlIGlmKHNpemUgPCAxMDI0KjEwMjQqMTAyNCl7XFxuICAgICAgICBzaXplID0gc2l6ZSAvICgxMDI0KjEwMjQpXFxuICAgICAgICByZXR1cm4gc2l6ZS50b0ZpeGVkKDIpK1xcXCIgTVxcXCJcXG4gICAgfWVsc2UgaWYoc2l6ZSA8IDEwMjQqMTAyNCoxMDI0KjEwMjQpe1xcbiAgICAgICAgc2l6ZSA9IHNpemUgLyAoMTAyNCoxMDI0KjEwMjQpXFxuICAgICAgICByZXR1cm4gc2l6ZS50b0ZpeGVkKDIpK1xcXCIgR1xcXCJcXG4gICAgfWVsc2Uge1xcbiAgICAgICAgc2l6ZSA9IHNpemUgLyAoMTAyNCoxMDI0KjEwMjQqMTAyNClcXG4gICAgICAgIHJldHVybiBzaXplLnRvRml4ZWQoMikrXFxcIiBUXFxcIlxcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIHRpbWVzdGFtcFRvVGltZSh0aW1lc3RhbXApIHtcXG4gICAgdmFyIGRhdGUgPSBuZXcgRGF0ZSh0aW1lc3RhbXAgKiAxMDAwKVxcbiAgICB2YXIgWSA9IGRhdGUuZ2V0RnVsbFllYXIoKSArICctJ1xcbiAgICB2YXIgTSA9IChkYXRlLmdldE1vbnRoKCkgKyAxIDwgMTAgPyAnMCcgKyAoZGF0ZS5nZXRNb250aCgpICsgMSkgOiBkYXRlLmdldE1vbnRoKCkgKyAxKSArICctJ1xcbiAgICBjb25zdCBEID0gKGRhdGUuZ2V0RGF0ZSgpIDwgMTAgPyAnMCcgKyBkYXRlLmdldERhdGUoKSA6IGRhdGUuZ2V0RGF0ZSgpKSArICcgJ1xcbiAgICBjb25zdCBoID0gKGRhdGUuZ2V0SG91cnMoKSA8IDEwID8gJzAnICsgZGF0ZS5nZXRIb3VycygpIDogZGF0ZS5nZXRIb3VycygpKSArICc6J1xcbiAgICBjb25zdCBtID0gKGRhdGUuZ2V0TWludXRlcygpIDwgMTAgPyAnMCcgKyBkYXRlLmdldE1pbnV0ZXMoKSA6IGRhdGUuZ2V0TWludXRlcygpKSArICc6J1xcbiAgICBjb25zdCBzID0gKGRhdGUuZ2V0U2Vjb25kcygpIDwgMTAgPyAnMCcgKyBkYXRlLmdldFNlY29uZHMoKSA6IGRhdGUuZ2V0U2Vjb25kcygpKVxcbiAgICByZXR1cm4gWSArIE0gKyBEICsgaCArIG0gKyBzXFxufVxcblxcbmZ1bmN0aW9uIGdldFN0YXJ0TGluZVN1ZmZpeChjaWQpIHtcXG5cXG4gICAgbGV0IHQ9TnVtYmVyKERhdGUucGFyc2UoIG5ldyBEYXRlKCkgKS50b1N0cmluZygpLnN1YnN0cigwLDEwKSkrODY0MDAqNjtcXG5cXG4gICAgaWYgKHN0b3JhZ2UwLmdldEl0ZW0oXFxcImNsb3VkS2V5XFxcIikubGVuZ3RoID4gMCAmIGNsb3VkX3Rva2VuLnRyaW0oKS5sZW5ndGggPiAwKXtcXG5cXG4gICAgICAgIGxldCBkYXRhID0gY2hlY2tDbG91ZFR5cGUoY2xvdWRfdG9rZW4pLmRhdGFcXG5cXG4gICAgICAgIGxldCB1PWRhdGEuaWRcXG4gICAgICAgIGxldCBzPW1kNShzdG9yYWdlMC5nZXRJdGVtKFxcXCJjbG91ZEtleVxcXCIpK2NpZCt0KVxcbiAgICAgICAgbGV0IG1kNXM9bWQ1KHMpXFxuXFxuICAgICAgICByZXR1cm4gY2lkK1xcXCI/ZmlsZW5hbWU9MC5tcDQmdj0xJnQ9XFxcIit0K1xcXCImdT1cXFwiK3UrXFxcIiZzPVxcXCIrbWQ1cytcXFwiJmM9XFxcIitjaWRcXG4gICAgfWVsc2Uge1xcbiAgICAgICAgcmV0dXJuIGNpZCtcXFwiP2ZpbGVuYW1lPTAubXA0JnY9MSZ0PVxcXCIrdFxcbiAgICB9XFxufVxcblxcblxcblxcbmZ1bmN0aW9uIGdldEltYWdlTGlzdChkYXRhKXtcXG5cXG4gICAgdmFyIGltYWdlTGlzdCA9IFtdXFxuXFxuICAgIGZvcihsZXQgaSA9IDA7aSA8IGRhdGEubGVuZ3RoO2krKyl7XFxuICAgICAgICBsZXQgaXNfZm9sZGVyID0gZGF0YVtpXS5pc19mb2xkZXJcXG4gICAgICAgIGlmICghaXNfZm9sZGVyKXtcXG4gICAgICAgICAgICBsZXQgZmlsZV90eXBlID0gZGF0YVtpXS5maWxlX2V4dFxcbiAgICAgICAgICAgIGxldCBmaWxlX2NpZCA9IGRhdGFbaV0uZmlsZV9jaWRcXG5cXG5cXG4gICAgICAgICAgICBpZiAoaW1hZ2VfcmVndWxhci50ZXN0KGZpbGVfdHlwZSkpe1xcblxcbiAgICAgICAgICAgICAgICBsZXQgaW1hZ2UgPSBcXFwiaHR0cHM6Ly9pcGZzZ3cwMC5zdGFyaXZlcnBhbi5jb206OTA5NS9pcGZzL1xcXCIrZmlsZV9jaWQrXFxcIkBSZWZlcmVyPWh0dHBzOi8vd3guc3Rhcml2ZXJwYW4uY29tL1xcXCJcXG5cXG4gICAgICAgICAgICAgICAgaW1hZ2VMaXN0W2ldID0gaW1hZ2VcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgaWYoaW1hZ2VMaXN0Lmxlbmd0aDwxKXJldHVybiBcXFwidG9hc3Q6Ly/msqHor4bliKvliLDlm77niYdcXFwiXFxuXFxuICAgIGxvZyhpbWFnZUxpc3Quam9pbihcXFwiJiZcXFwiKSlcXG5cXG4gICAgcmV0dXJuIFxcXCJwaWNzOi8vXFxcIiAraW1hZ2VMaXN0LmpvaW4oXFxcIiYmXFxcIilcXG59XFxuXFxuZnVuY3Rpb24gaW1tZXJzaW9uSW5Db21pY3MoaWQpe1xcblxcbiAgICBsZXQgcmVzdWx0RGF0YSA9IFtdO1xcblxcbiAgICBzaG93TG9hZGluZygn5pW05ZCI5Zu+54mH5Lit77yBJyk7XFxuXFxuICAgIGxldCBjaGVja1BhZ2UgPSBkZXRhaWxGb3JGaWxlKGlkKS5kYXRhLnN0YXRzXFxuXFxuICAgIGxldCBwYWdlQ291bnQgPSBOdW1iZXIoY2hlY2tQYWdlLnN1YmRpcl9udW0gKyBjaGVja1BhZ2Uuc3ViZmlsZV9udW0pXFxuXFxuICAgIGlmKHBhZ2VDb3VudCA+IDEwMCl7XFxuXFxuICAgIH1lbHNlIHtcXG5cXG4gICAgICAgIGxldCBib2R5ID1ge1xcXCJwYWdlX251bVxcXCI6MSxcXFwicGFnZV9zaXplXFxcIjoxMDAsXFxcInBhcmVudF9pZFxcXCI6XFxcImAraWQrYFxcXCIsXFxcInNvcnRfZGlyZWN0aW9uXFxcIjpcXFwiYXNjXFxcIixcXFwic29ydF9maWVsZFxcXCI6XFxcIm5hbWVcXFwifWBcXG5cXG4gICAgICAgIHZhciByZXN1bHQgPSBnZXRQb3N0RGF0YShjaGVja191cmwsYm9keSlcXG5cXG4gICAgICAgIHZhciBkYXRhID0gcmVzdWx0LmRhdGEuZmlsZXNcXG5cXG4gICAgICAgIC8vIGRhdGEuc29ydChmdW5jdGlvbiAoYSxiKXtcXG4gICAgICAgIC8vICAgICB2YXIgbnVtQSA9IHBhcnNlSW50KGEuZmlsZV9uYW1lLm1hdGNoKC9cXFxcZCsvKVswXSk7XFxuICAgICAgICAvLyAgICAgdmFyIG51bUIgPSBwYXJzZUludChiLmZpbGVfbmFtZS5tYXRjaCgvXFxcXGQrLylbMF0pO1xcbiAgICAgICAgLy8gICAgIHJldHVybiBudW1BIC0gbnVtQjtcXG4gICAgICAgIC8vIH0pXFxuXFxuICAgICAgICBmb3IodmFyIGkgaW4gZGF0YSl7XFxuXFxuICAgICAgICAgICAgbGV0IGlkID0gZGF0YVtpXS5pZFxcblxcbiAgICAgICAgICAgIGxldCBpbWFnZUxpc3QgPSBnZXRJbWFnZURhdGEoaWQpXFxuXFxuICAgICAgICAgICAgcmVzdWx0RGF0YSA9IHJlc3VsdERhdGEuY29uY2F0KGltYWdlTGlzdCk7XFxuXFxuICAgICAgICB9XFxuXFxuICAgIH1cXG5cXG4gICAgaGlkZUxvYWRpbmcoKTtcXG5cXG4gICAgaWYgKHJlc3VsdERhdGEubGVuZ3RoID09PSBwYWdlQ291bnQpe1xcblxcbiAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+aciemdnuWbvueJh+aWh+S7tu+8jOS4jeimgeS5seS9v+eUqFxcXCJcXG5cXG4gICAgfWVsc2Uge1xcblxcbiAgICAgICAgcmV0dXJuIFxcXCJwaWNzOi8vXFxcIiArcmVzdWx0RGF0YS5qb2luKFxcXCImJlxcXCIpXFxuXFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gZ2V0SW1hZ2VEYXRhKGZpbGVJZCl7XFxuXFxuICAgIGxldCByZXN1bHRzID0gW107XFxuXFxuICAgIGxldCBsaW5lID0gXFxcImh0dHBzOi8vaXBmc2d3MDAuc3Rhcml2ZXJwYW4uY29tOjkwOTUvaXBmcy9cXFwiXFxuXFxuICAgIGxldCBzdWZmaXggPSBcXFwiQFJlZmVyZXI9aHR0cHM6Ly93eC5zdGFyaXZlcnBhbi5jb20vXFxcIlxcblxcbiAgICBsZXQgYm9keSA9YHtcXFwicGFnZV9udW1cXFwiOjEsXFxcInBhZ2Vfc2l6ZVxcXCI6MTAwLFxcXCJwYXJlbnRfaWRcXFwiOlxcXCJgK2ZpbGVJZCtgXFxcIixcXFwic29ydF9kaXJlY3Rpb25cXFwiOlxcXCJhc2NcXFwiLFxcXCJzb3J0X2ZpZWxkXFxcIjpcXFwibmFtZVxcXCJ9YFxcblxcbiAgICB2YXIgcmVzdWx0ID0gZ2V0UG9zdERhdGEoY2hlY2tfdXJsLGJvZHkpXFxuXFxuICAgIHZhciBkYXRhID0gcmVzdWx0LmRhdGEuZmlsZXNcXG5cXG4gICAgZm9yKHZhciBpIGluIGRhdGEpe1xcblxcbiAgICAgICAgbGV0IGZpbGVDaWQgPSBkYXRhW2ldLmZpbGVfY2lkXFxuXFxuICAgICAgICBsZXQgdHlwZSA9IGRhdGFbaV0uZmlsZV9leHRcXG5cXG4gICAgICAgIGxldCBuZXdVcmwgPSBsaW5lK2ZpbGVDaWQrc3VmZml4XFxuXFxuICAgICAgICBpZihpbWFnZV9yZWd1bGFyLnRlc3QodHlwZSkpe1xcblxcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChuZXdVcmwpO1xcblxcbiAgICAgICAgfVxcbiAgICB9XFxuXFxuICAgIHJlc3VsdHMucHVzaChsaW5lK1xcXCJiYWZrcmVpZGdhbWU1dGllejJ5cWdhdmJkYnMyaGJucWY2b3h1ZHB6cnN4b3RxNmhudGI2Ymlnb24zeVxcXCIrc3VmZml4KTtcXG5cXG4gICAgcmV0dXJuIHJlc3VsdHNcXG59XFxuXFxuZnVuY3Rpb24gYmFja0ZpbGVJbWFnZUxpc3QocGF0aCl7XFxuXFxuICAgIGxldCByZXN1bHREYXRhID0gW107XFxuXFxuICAgIHNob3dMb2FkaW5nKCfmlbTlkIjlm77niYfkuK3vvIEnKTtcXG5cXG4gICAgbGV0IGRhdGEgPSBKU09OLnBhcnNlKHJlYWRGaWxlKHBhdGgsIDApIHx8ICdbXScpLmRhdGE7XFxuXFxuICAgIGxldCBmb2xkZXJMaXN0ID0gZGF0YS7mlofku7blpLlcXG5cXG4gICAgZm9yKGxldCBpIGluIGZvbGRlckxpc3Qpe1xcblxcbiAgICAgICAgbGV0IGZvbGRlck5hbWUgPSBmb2xkZXJMaXN0W2ldXFxuXFxuICAgICAgICBsZXQgbmV3UGF0aCA9IHBhdGguc2xpY2UoMCwtNSkrXFxcIuK4nVxcXCIrZm9sZGVyTmFtZStcXFwiLmpzb25cXFwiXFxuXFxuICAgICAgICBsZXQgaW1hZ2VMaXN0ID0gZ2V0QmFja0ltYWdlRGF0YShuZXdQYXRoLGZvbGRlck5hbWUpO1xcblxcbiAgICAgICAgcmVzdWx0RGF0YSA9IHJlc3VsdERhdGEuY29uY2F0KGltYWdlTGlzdCk7XFxuICAgIH1cXG5cXG4gICAgaGlkZUxvYWRpbmcoKTtcXG5cXG4gICAgaWYgKHJlc3VsdERhdGEubGVuZ3RoID09PSBmb2xkZXJMaXN0Lmxlbmd0aCl7XFxuXFxuICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5pyJ6Z2e5Zu+54mH5paH5Lu277yM5LiN6KaB5Lmx5L2/55SoXFxcIlxcblxcbiAgICB9ZWxzZSB7XFxuXFxuICAgICAgICByZXR1cm4gXFxcInBpY3M6Ly9cXFwiICtyZXN1bHREYXRhLmpvaW4oXFxcIiYmXFxcIilcXG5cXG4gICAgfVxcblxcbn1cXG5cXG5mdW5jdGlvbiBnZXRCYWNrSW1hZ2VEYXRhKHBhdGgsZm9sZGVyTmFtZSl7XFxuXFxuICAgIGxldCByZXN1bHRzID0gW107XFxuXFxuICAgIGxldCBsaW5lID0gXFxcImh0dHBzOi8vaXBmc2d3MDAuc3Rhcml2ZXJwYW4uY29tOjkwOTUvaXBmcy9cXFwiXFxuXFxuICAgIGxldCBzdWZmaXggPSBcXFwiQFJlZmVyZXI9aHR0cHM6Ly93eC5zdGFyaXZlcnBhbi5jb20vXFxcIlxcblxcbiAgICBsZXQgZGF0YSA9IEpTT04ucGFyc2UocmVhZEZpbGUocGF0aCwgMCkgfHwgJ1tdJykuZGF0YTtcXG5cXG4gICAgbGV0IGZpbGVMaXN0ID0gZGF0YS7mlofku7ZcXG5cXG4gICAgcmVzdWx0cy5wdXNoKGZvbGRlck5hbWUpO1xcblxcbiAgICBmb3IgKGxldCBpIGluIGZpbGVMaXN0KXtcXG5cXG4gICAgICAgIGxldCBmaWxlVHlwZSA9IGZpbGVMaXN0W2ldLuaWh+S7tuagvOW8j1xcblxcbiAgICAgICAgbGV0IGNpZCA9IGZpbGVMaXN0W2ldLuaWh+S7tkNJRFxcblxcbiAgICAgICAgbGV0IG5ld1VybCA9IGxpbmUgKyBjaWQgKyBzdWZmaXhcXG5cXG4gICAgICAgIGlmKGZpbGVUeXBlID09PSAyKXtcXG5cXG4gICAgICAgICAgICByZXN1bHRzLnB1c2gobmV3VXJsKTtcXG5cXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICByZXN1bHRzLnB1c2gobGluZStcXFwiYmFma3JlaWRnYW1lNXRpZXoyeXFnYXZiZGJzMmhibnFmNm94dWRwenJzeG90cTZobnRiNmJpZ29uM3lcXFwiK3N1ZmZpeCk7XFxuXFxuICAgIHJldHVybiByZXN1bHRzXFxuXFxufVxcblxcbmZ1bmN0aW9uIGJhY2tGaWxlSW1hZ2VMaXN0Rm9yU3RhcnQocGF0aCl7XFxuXFxuICAgIGxldCByZXN1bHREYXRhID0gW107XFxuXFxuICAgIHNob3dMb2FkaW5nKCfmlbTlkIjlm77niYfkuK3vvIEnKTtcXG5cXG4gICAgbGV0IGRhdGEgPSBKU09OLnBhcnNlKHJlYWRGaWxlKHBhdGgsIDApIHx8ICdbXScpLmZpbGVEYXRhO1xcblxcbiAgICBsZXQgZmlsZUxpc3QgPSBkYXRhLmZpbGVzXFxuXFxuICAgIGZvcihsZXQgaSBpbiBmaWxlTGlzdCl7XFxuXFxuICAgICAgICBsZXQgdHlwZSA9IGZpbGVMaXN0W2ldLnR5cGVcXG5cXG4gICAgICAgIGxldCBmb2xkZXJOYW1lID0gZmlsZUxpc3RbaV0ubmFtZVxcblxcbiAgICAgICAgbGV0IGZvbGRlcklkID0gZmlsZUxpc3RbaV0uaWRcXG5cXG4gICAgICAgIGlmICh0eXBlID09PSAxKXtcXG5cXG4gICAgICAgICAgICBsZXQgbmV3UGF0aCA9IHN0YXJ0SW5kZXhQYXRoK2ZvbGRlcklkK2ZvbGRlck5hbWUrXFxcIi5qc29uXFxcIlxcblxcbiAgICAgICAgICAgIGxldCBpbWFnZUxpc3QgPSBnZXRCYWNrSW1hZ2VEYXRhRm9yU3RhcnQobmV3UGF0aCxmb2xkZXJOYW1lKTtcXG5cXG4gICAgICAgICAgICByZXN1bHREYXRhID0gcmVzdWx0RGF0YS5jb25jYXQoaW1hZ2VMaXN0KTtcXG5cXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICBoaWRlTG9hZGluZygpO1xcblxcbiAgICBpZiAocmVzdWx0RGF0YS5sZW5ndGggPT09IGZpbGVMaXN0Lmxlbmd0aCl7XFxuXFxuICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5pyJ6Z2e5Zu+54mH5paH5Lu277yM5LiN6KaB5Lmx5L2/55SoXFxcIlxcblxcbiAgICB9ZWxzZSB7XFxuXFxuICAgICAgICByZXR1cm4gXFxcInBpY3M6Ly9cXFwiICtyZXN1bHREYXRhLmpvaW4oXFxcIiYmXFxcIilcXG5cXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBnZXRCYWNrSW1hZ2VEYXRhRm9yU3RhcnQocGF0aCxmb2xkZXJOYW1lKXtcXG5cXG4gICAgbGV0IHJlc3VsdHMgPSBbXTtcXG5cXG4gICAgbGV0IGxpbmUgPSBcXFwiaHR0cHM6Ly9pcGZzZ3cwMC5zdGFyaXZlcnBhbi5jb206OTA5NS9pcGZzL1xcXCJcXG5cXG4gICAgbGV0IHN1ZmZpeCA9IFxcXCJAUmVmZXJlcj1odHRwczovL3d4LnN0YXJpdmVycGFuLmNvbS9cXFwiXFxuXFxuICAgIGxldCBkYXRhID0gSlNPTi5wYXJzZShyZWFkRmlsZShwYXRoLCAwKSB8fCAnW10nKS5maWxlRGF0YTtcXG5cXG4gICAgbGV0IGZpbGVMaXN0ID0gZGF0YS5maWxlc1xcblxcbiAgICByZXN1bHRzLnB1c2goZm9sZGVyTmFtZSk7XFxuXFxuICAgIGZvciAobGV0IGkgaW4gZmlsZUxpc3Qpe1xcblxcbiAgICAgICAgbGV0IHR5cGUgPSBmaWxlTGlzdFtpXS50eXBlXFxuXFxuICAgICAgICBsZXQgZmlsZVR5cGUgPSBmaWxlTGlzdFtpXS5zdWZmaXhcXG5cXG4gICAgICAgIGxldCBjaWQgPSBmaWxlTGlzdFtpXS5jaWRcXG5cXG4gICAgICAgIGxldCBuZXdVcmwgPSBsaW5lICsgY2lkICsgc3VmZml4XFxuXFxuICAgICAgICBpZiAodHlwZSA9PT0gMSl7XFxuXFxuICAgICAgICAgICAgaGlkZUxvYWRpbmcoKTtcXG5cXG4gICAgICAgICAgICB0b2FzdChcXFwi5pyJ5a2Q5paH5Lu25aS577yM6K+35LiN6KaB5Lmx5L2/55SoXFxcIilcXG5cXG4gICAgICAgICAgICByZXR1cm4gXFxcIlxcXCJcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGlmIChpbWFnZV9yZWd1bGFyLnRlc3QoZmlsZVR5cGUpKXtcXG5cXG4gICAgICAgICAgICByZXN1bHRzLnB1c2gobmV3VXJsKTtcXG4gICAgICAgIH1cXG4gICAgfVxcblxcbiAgICByZXN1bHRzLnB1c2gobGluZStcXFwiYmFma3JlaWRnYW1lNXRpZXoyeXFnYXZiZGJzMmhibnFmNm94dWRwenJzeG90cTZobnRiNmJpZ29uM3lcXFwiK3N1ZmZpeCk7XFxuXFxuICAgIHJldHVybiByZXN1bHRzXFxuXFxufVxcblxcblxcblxcblxcbnZhciBnZXRGaWxlVXJsTGluZSA9ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xcblxcbiAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2Z1bmN0aW9ucycpKS5ydWxlKVxcblxcbiAgICBsZXQgY2lkPWlucHV0LnNwbGl0KFxcXCImJlxcXCIpWzBdXFxuICAgIGxldCB0eXBlPWlucHV0LnNwbGl0KFxcXCImJlxcXCIpWzFdXFxuXFxuICAgIC8v57q/6LevXFxuICAgIGxldCBsaW5lMCA9IFxcXCJodHRwczovL2lwZnNndzAwLnN0YXJpdmVycGFuLmNvbTo5MDk1L2lwZnMvXFxcIlxcbiAgICBsZXQgbGluZTEgPSBcXFwiaHR0cHM6Ly9pcGZzZ3cwMS5zdGFyaXZlcnBhbi5jb206OTA5Ni9pcGZzL1xcXCJcXG4gICAgbGV0IGxpbmUyID0gXFxcImh0dHBzOi8vaXBmc2d3MDIuc3Rhcml2ZXJwYW4uY29tOjkwOTYvaXBmcy9cXFwiXFxuXFxuICAgIC8vbGluZTIgPSBcXFwiaHR0cDovL2NzZy5saW5kZW5zeXMuY24vcG9zcy92MS9teXNwYWNlL2lwZnMvXFxcIitjaWRcXG4gICAgLy8gbGluZTMgPSBcXFwiaHR0cHM6Ly90djQuaW52Ym8xLmNmZC9pcGZzL1xcXCIrY2lkK1xcXCI/c2l0ZT13d3cuaW52Ym8uaW5rXFxcIixcXG4gICAgLy8gbGluZTQgPSBcXFwiaHR0cHM6Ly90djIubW9lY24ubWwvaXBmcy9cXFwiK2NpZCtcXFwiP3NpdGU9d3d3LmludmJvLmlua1xcXCIsXFxuICAgIC8vIGxpbmU1ID0gXFxcImh0dHBzOi8vdHYyLmludmJvMi5jZmQvaXBmcy9cXFwiK2NpZCtcXFwiP3NpdGU9d3d3LmludmJvLmlua1xcXCIsXFxuICAgIGxldCBsaW5lMyA9IFxcXCJodHRwczovL2lwZnNndzA0LnN0YXJpdmVycGFuLmNvbTo5MDk2L2lwZnMvXFxcIlxcbiAgICBsZXQgbGluZTQgPSBcXFwiaHR0cHM6Ly9pcGZzZ3cwNS5zdGFyaXZlcnBhbi5jb206OTA5Ni9pcGZzL1xcXCJcXG4gICAgbGV0IGxpbmU1ID0gXFxcImh0dHBzOi8vaXBmc2d3MDYuc3Rhcml2ZXJwYW4uY29tOjkwOTYvaXBmcy9cXFwiXFxuXFxuICAgIGxldCBsaW5lNiA9IFxcXCJodHRwczovL2lwZnMuYml0YXJrLmluZm8vaXBmcy9cXFwiK2NpZFxcbiAgICBsZXQgbGluZTcgPSBcXFwiaHR0cHM6Ly9nbGlwZnMuY29tL2lwZnMvXFxcIitjaWRcXG4gICAgbGV0IGxpbmU4ID0gXFxcImh0dHBzOi8vaXBmcy1ndy5ubWVkaWEuc3BhY2UvaXBmcy9cXFwiK2NpZFxcbiAgICBsZXQgbGluZTkgPSBcXFwiaHR0cHM6Ly9pbWcua2VubmVsY2x1Yi5wcm8vaXBmcy9cXFwiK2NpZFxcblxcbiAgICBsZXQgbGluZTEwID0gXFxcImh0dHBzOi8vaXBmcy1ndy5ubWVkaWEuc3BhY2UvaXBmcy9cXFwiK2NpZFxcblxcblxcbiAgICB2YXIgb3J0aGVyTGluZXMgPSBbXFxuICAgICAgICAvL2xpbmUxPVxcXCJodHRwczovL2lwZnNndzAxLnN0YXJpdmVycGFuLmNvbTo5MDk2L2lwZnMvXFxcIlxcbiAgICAgICAgLy9saW5lMz1cXFwiaHR0cHM6Ly9pcGZzZ3cwMy5zdGFyaXZlcnBhbi5jb206OTA5Ni9pcGZzL1xcXCJcXG4gICAgICAgIC8vbGluZTQ9XFxcImh0dHBzOi8vaXBmc2d3MDQuc3Rhcml2ZXJwYW4uY29tOjkwOTYvaXBmcy9cXFwiXFxuICAgICAgICAvL2xpbmU1PVxcXCJodHRwczovL2lwZnNndzA1LnN0YXJpdmVycGFuLmNvbTo5MDk2L2lwZnMvXFxcIlxcbiAgICAgICAgLy9saW5lNj1cXFwiaHR0cHM6Ly9pcGZzLWd3Lm5tZWRpYS5zcGFjZS9pcGZzL1xcXCIrY2lkXFxuICAgICAgICAvL2xpbmU3PVxcXCJodHRwczovL2dsaXBmcy5jb20vaXBmcy9cXFwiK2NpZFxcblxcbiAgICAgICAgLy9hZGRyPWh0dHBzOi8vY3J1c3R3ZWJzaXRlcy5uZXRcXG4gICAgICAgIC8vYWRkcj1odHRwczovL2lwZnMtZ3cuZGVjbG91ZC5mb3VuZGF0aW9uXFxuICAgICAgICAvL2FkZHI9aHR0cHM6Ly9ndy5jcnVzdGFwcHMubmV0XFxuXFxuICAgICAgICAvL2h0dHBzOi8vaXBmc2d3MDQuc3Rhcml2ZXJwYW4uY29tOjkwOTYvaXBmcy9cXG4gICAgXVxcblxcbiAgICBsZXQgaGVhZCA9IHtcXG4gICAgICAgIFxcXCJSZWZlcmVyXFxcIjpcXFwiaHR0cHM6Ly91c2hhcmUuc3Rhcml2ZXJwYW4uY29tL3dlYi9zaGFyZS8/bGFuZz16aCZhbXA7c2hhcmVJZD1OalkyT0RNek1EQTNPVEV3TXpNd016WTRcXFwiLFxcbiAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOlxcXCJNb3ppbGxhLzUuMCAoaVBob25lOyBDUFUgaVBob25lIE9TIDE1XzFfMSBsaWtlIE1hYyBPUyBYKSBBcHBsZVdlYktpdC82MDUuMS4xNSAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vMTUuMSBNb2JpbGUvMTVFMTQ4IFNhZmFyaS82MDQuMVxcXCJcXG4gICAgfVxcbiAgICB2YXIgbGluZXMgPSBbbGluZTAsIGxpbmUxLCBsaW5lMiwgbGluZTMsIGxpbmU0LCBsaW5lNSxsaW5lNiwgbGluZTcsIGxpbmU4LCBsaW5lOV07XFxuICAgIHZhciBsaW5lc05hbWUgPSBbXTtcXG4gICAgdmFyIGhlYWRzID0gW107XFxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGluZXMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgIGlmIChpIDwgMyl7XFxuICAgICAgICAgICAgbGluZXNbaV0gPSBsaW5lc1tpXSArIGdldFN0YXJ0TGluZVN1ZmZpeChjaWQpK1xcXCIjaXNWaWRlbz10cnVlI1xcXCJcXG4gICAgICAgICAgICBoZWFkcy5wdXNoKGhlYWQpXFxuICAgICAgICB9XFxuICAgICAgICBsaW5lc05hbWUucHVzaChcXFwi57q/6LevIFxcXCIgKyBpKVxcbiAgICAgICAgLy8gaWYgKGkgPiAxICYmIGkgPCAzKXtcXG4gICAgICAgIC8vICAgICBoZWFkcy5wdXNoKHtcXG4gICAgICAgIC8vICAgICAgICAgXFxcIlVzZXItQWdlbnRcXFwiOiBcXFwiTW96aWxsYS81LjAgKGlQaG9uZTsgQ1BVIGlQaG9uZSBPUyAxNV8xXzEgbGlrZSBNYWMgT1MgWCkgQXBwbGVXZWJLaXQvNjA1LjEuMTUgKEtIVE1MLCBsaWtlIEdlY2tvKSBWZXJzaW9uLzE1LjEgTW9iaWxlLzE1RTE0OCBTYWZhcmkvNjA0LjFcXFwiXFxuICAgICAgICAvLyAgICAgfSlcXG4gICAgICAgIC8vIH1cXG4gICAgICAgIGlmIChpID4gMiAmJiBpIDwgNil7XFxuICAgICAgICAgICAgLy8gaGVhZHMucHVzaCh7XFxuICAgICAgICAgICAgLy8gICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcIk1vemlsbGEvNS4wIChMaW51eDsgQW5kcm9pZCAxMjsgMjIwMTEyMkMpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS85Ni4wLjQ2NjQuMTA0IE1vYmlsZSBTYWZhcmkvNTM3LjM2XFxcIixcXG4gICAgICAgICAgICAvLyAgICAgXFxcIlJlZmVyZXJcXFwiOiBcXFwid3d3LmludmJvLmlua1xcXCIsXFxuICAgICAgICAgICAgLy8gICAgIFxcXCJBY2NlcHRcXFwiOiBcXFwiKi8qXFxcIixcXG4gICAgICAgICAgICAvLyAgICAgXFxcIkFjY2VwdC1FbmNvZGluZ1xcXCI6IFxcXCJpZGVudGl0eVxcXCJcXG4gICAgICAgICAgICAvLyB9KVxcbiAgICAgICAgICAgIGxpbmVzW2ldID0gbGluZXNbaV0gKyBjaWQrXFxcIj92PTImdT02ODY2NTc0MzgyMjAyOTYxOTImdD1cXFwiK051bWJlcihEYXRlLnBhcnNlKCBuZXcgRGF0ZSgpICkudG9TdHJpbmcoKS5zdWJzdHIoMCwxMCkpKzg2NDAwKjZcXG4gICAgICAgICAgICBoZWFkcy5wdXNoKGhlYWQpXFxuICAgICAgICB9XFxuICAgICAgICBoZWFkcy5wdXNoKHtcXG4gICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFxcXCJNb3ppbGxhLzUuMCAoaVBob25lOyBDUFUgaVBob25lIE9TIDE1XzFfMSBsaWtlIE1hYyBPUyBYKSBBcHBsZVdlYktpdC82MDUuMS4xNSAoS0hUTUwsIGxpa2UgR2Vja28pIFZlcnNpb24vMTUuMSBNb2JpbGUvMTVFMTQ4IFNhZmFyaS82MDQuMVxcXCJcXG4gICAgICAgIH0pXFxuICAgIH1cXG5cXG4gICAgbGV0IGRhdGEgPSB7XFxuICAgICAgICBcXFwidXJsc1xcXCI6bGluZXMsXFxuICAgICAgICBcXFwiaGVhZGVyc1xcXCI6IGhlYWRzLFxcbiAgICAgICAgXFxcIm5hbWVzXFxcIjpsaW5lc05hbWVcXG4gICAgfVxcblxcbiAgICBzd2l0Y2ggKHRydWUpIHtcXG4gICAgICAgIGNhc2UgaW1hZ2VfcmVndWxhci50ZXN0KHR5cGUpOlxcblxcbiAgICAgICAgICAgIGxldCB1cmxfdHlwZSA9ICcjLmpwZ0BSZWZlcmVyPWh0dHBzOi8vd3guc3Rhcml2ZXJwYW4uY29tLydcXG4gICAgICAgICAgICBsZXQgdXJsX2JhY2sgPSBsaW5lMCtjaWQrdXJsX3R5cGVcXG4gICAgICAgICAgICByZXR1cm4gdXJsX2JhY2s7XFxuXFxuICAgICAgICBjYXNlIHZpZGVvX3JlZ3VsYXIudGVzdCh0eXBlKTpcXG5cXG4gICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoZGF0YSk7XFxuXFxuICAgICAgICBjYXNlIGF1ZGlvX3JlZ3VsYXIudGVzdCh0eXBlKTpcXG4gICAgICAgICAgICB1cmxfdHlwZSA9IFxcXCIjLm1wM0BSZWZlcmVyQGh0dHBzOi8vd3guc3Rhcml2ZXJwYW4uY29tL1xcXCJcXG4gICAgICAgICAgICB1cmxfYmFjayA9IGxpbmUwK2NpZCt1cmxfdHlwZVxcbiAgICAgICAgICAgIHJldHVybiB1cmxfYmFja1xcblxcbiAgICAgICAgZGVmYXVsdDpcXG5cXG4gICAgICAgICAgICBsZXQgZG93bl9saW5lID0gXFxcImRvd25sb2FkOi8vaHR0cHM6Ly9pcGZzZ3cwMC5zdGFyaXZlcnBhbi5jb206OTA5NS9pcGZzL1xcXCIrY2lkXFxuXFxuICAgICAgICAgICAgcmV0dXJuIGRvd25fbGluZTtcXG4gICAgfVxcbn0pXFxuXFxuXFxuXFxuXFxuXFxuZnVuY3Rpb24gYWRkTWFnZW50KGlkLHVybHMpe1xcblxcblxcbiAgICBsZXQgYm9keT1ge1xcXCJwYXJhbXNcXFwiOntcXFwid2l0aF90aHVtYm5haWxcXFwiOnRydWV9LFxcXCJwYXJlbnRfaWRcXFwiOlxcXCJgK2lkK2BcXFwiLFxcXCJ1cGxvYWRfdHlwZVxcXCI6XFxcInVybFxcXCIsXFxcInVybFxcXCI6XFxcImArdXJscytgXFxcIn1gXFxuXFxuXFxuICAgIHRyeSB7XFxuXFxuICAgICAgICBsZXQgZGF0YSA9IGdldFBvc3REYXRhKGFkZF9tYWdlbnQsYm9keSlcXG5cXG4gICAgICAgIGlmIChkYXRhLmNvZGUgPT09IDIwMCl7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5re75Yqg5oiQ5YqfJ1xcbiAgICAgICAgfWVsc2Uge1xcbiAgICAgICAgICAgIGxldCBtZXNzYWdlID0gZGF0YS5tZXNzYWdlID09PSBcXFwiVGFzayBhbHJlYWR5IGV4aXN0XFxcIiA/IFxcXCLno4Hlipvlt7LlnKjpmJ/liJfkuK1cXFwiIDogZGF0YS5tZXNzYWdlXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5re75Yqg5aSx6LSlJyttZXNzYWdlXFxuICAgICAgICB9XFxuICAgIH1jYXRjaCAoZSl7XFxuICAgICAgICBsb2coZS5tZXNzYWdlKVxcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIGRlbGV0ZU1hZ2VudChpZCl7XFxuXFxuICAgIGxldCBib2R5PWB7XFxcInRhc2tfaWRzXFxcIjpbXFxcImAraWQrYFxcXCJdLFxcXCJ0eXBlXFxcIjpcXFwib2ZmbGluZVxcXCJ9YFxcblxcbiAgICB0cnkge1xcblxcbiAgICAgICAgbGV0IGRhdGEgPSBnZXRQb3N0RGF0YShkZWxldGVfbWFnZW50LGJvZHkpXFxuXFxuICAgICAgICBpZiAoZGF0YS5jb2RlID09PSAyMDApe1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WIoOmZpOaIkOWKnydcXG4gICAgICAgIH1lbHNlIHtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/liKDpmaTlpLHotKUnK2RhdGEubWVzc2FnZVxcbiAgICAgICAgfVxcblxcbiAgICB9Y2F0Y2ggKGUpe1xcbiAgICAgICAgbG9nKGUubWVzc2FnZSlcXG4gICAgfVxcbn1cXG5cXG5cXG5cXG5cXG5mdW5jdGlvbiBjcmVhdGVGb2xkZXIoaWQsbmFtZSl7XFxuXFxuICAgIGxldCBib2R5ID0gYHtcXFwicGFyZW50X2lkXFxcIjogXFxcImAraWQrYFxcXCIsIFxcXCJuYW1lXFxcIjogXFxcImArbmFtZStgXFxcIn1gXFxuXFxuICAgIHRyeSB7XFxuXFxuICAgICAgICBsZXQgZGF0YSA9IGdldFBvc3REYXRhKGFkZF9mb2xkZXIsYm9keSlcXG5cXG4gICAgICAgIGlmIChkYXRhLmNvZGUgPT09IDIwMCl7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5paw5bu65oiQ5YqfJ1xcbiAgICAgICAgfWVsc2Uge1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aWsOW7uuWksei0pScrZGF0YS5tZXNzYWdlXFxuICAgICAgICB9XFxuXFxuICAgIH1jYXRjaCAoZSl7XFxuICAgICAgICBsb2coZS5tZXNzYWdlKVxcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIHVwZGF0ZUZpbGVOYW1lKGlkLG5hbWUpe1xcbiAgICBsZXQgYm9keSA9IGB7XFxcImlkXFxcIjogXFxcImAraWQrYFxcXCIsIFxcXCJuYW1lXFxcIjogXFxcImArbmFtZStgXFxcIn1gXFxuXFxuICAgIHRyeSB7XFxuXFxuICAgICAgICBsZXQgZGF0YSA9IGdldFBvc3REYXRhKHVwZGF0ZV9mb2xkZXIsYm9keSlcXG5cXG4gICAgICAgIGlmIChkYXRhLmNvZGUgPT09IDIwMCl7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5L+u5pS55oiQ5YqfJ1xcbiAgICAgICAgfWVsc2Uge1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+S/ruaUueWksei0pScrZGF0YS5tZXNzYWdlXFxuICAgICAgICB9XFxuXFxuICAgIH1jYXRjaCAoZSl7XFxuICAgICAgICBsb2coZS5tZXNzYWdlKVxcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIGRlbGV0ZVN0YXJ0RmlsZShpZCl7XFxuXFxuICAgIGxldCBib2R5ID0gYHtcXFwiaWRzXFxcIjogW1xcXCJgK2lkK2BcXFwiXX1gXFxuXFxuICAgIHRyeSB7XFxuXFxuICAgICAgICBsZXQgZGF0YSA9IGdldFBvc3REYXRhKGRlbGV0ZV9mb2xkZXIsYm9keSlcXG5cXG4gICAgICAgIGlmIChkYXRhLmNvZGUgPT09IDIwMCl7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5Yig6Zmk5oiQ5YqfJ1xcbiAgICAgICAgfWVsc2Uge1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+WIoOmZpOWksei0pScrZGF0YS5tZXNzYWdlXFxuICAgICAgICB9XFxuXFxuICAgIH1jYXRjaCAoZSl7XFxuICAgICAgICBsb2coZS5tZXNzYWdlKVxcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIGRldGFpbEZvckZpbGUoaWQpe1xcblxcblxcbiAgICBsZXQgYm9keSA9IGB7XFxcImlkXFxcIjogXFxcImAraWQrYFxcXCJ9YFxcblxcbiAgICB0cnkge1xcblxcbiAgICAgICAgbGV0IGRhdGEgPSBnZXRQb3N0RGF0YShmaWxlX2RldGFpbCxib2R5KVxcblxcbiAgICAgICAgaWYgKGRhdGEuY29kZSA9PT0gMjAwKXtcXG5cXG4gICAgICAgICAgICByZXR1cm4gZGF0YVxcbiAgICAgICAgfWVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/or7fmsYLlpLHotKUnK2RhdGEubWVzc2FnZVxcbiAgICAgICAgfVxcblxcbiAgICB9Y2F0Y2ggKGUpe1xcbiAgICAgICAgbG9nKGUubWVzc2FnZSlcXG4gICAgfVxcbn1cXG5cXG5cXG5cXG5cXG5mdW5jdGlvbiB0cmFzaEZpbGVzKHBhZ2UsdHlwZSxhc2Mpe1xcblxcbiAgICBsZXQgYm9keSA9IGB7XFxcInBhZ2VfbnVtXFxcIjogYCtwYWdlK2AsXFxcInBhZ2Vfc2l6ZVxcXCI6IDEwMCxcXFwiY291bnRcXFwiOiAwLFxcXCJzb3J0X2ZpZWxkXFxcIjogXFxcImArdHlwZStgXFxcIixcXFwic29ydF9kaXJlY3Rpb25cXFwiOiBcXFwiYCthc2MrYFxcXCJ9YFxcblxcbiAgICBsZXQgZGF0YSA9IGdldFBvc3REYXRhKHRyYXNoX2ZpbGUsYm9keSlcXG5cXG4gICAgaWYgKGRhdGEuY29kZSA9PT0gMjAwKXtcXG4gICAgICAgIHJldHVybiBkYXRhXFxuICAgIH1lbHNlIHtcXG4gICAgICAgIHJldHVybiAndG9hc3Q6Ly8nK2RhdGEubWVzc2FnZVxcbiAgICB9XFxuXFxufVxcblxcbmZ1bmN0aW9uIGRlbGV0ZUZpbGVzRm9yVHJhc2goaWQpe1xcblxcbiAgICBsZXQgYm9keSA9IGB7XFxcImlkc1xcXCI6W1xcXCJgK2lkK2BcXFwiXX1gXFxuXFxuICAgIHRyeSB7XFxuXFxuICAgICAgICBsZXQgZGF0YSA9IGdldFBvc3REYXRhKHRyYXNoX2RlbGV0ZSxib2R5KVxcblxcbiAgICAgICAgaWYgKGRhdGEuY29kZSA9PT0gMjAwKXtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/liKDpmaTmiJDlip8nXFxuICAgICAgICB9ZWxzZSB7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5Yig6Zmk5aSx6LSlJytkYXRhLm1lc3NhZ2VcXG4gICAgICAgIH1cXG5cXG4gICAgfWNhdGNoIChlKXtcXG4gICAgICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gY2xlYW5GaWxlc0ZvclRyYXNoKCl7XFxuICAgIGxldCBib2R5ID0gYHt9YFxcblxcbiAgICB0cnkge1xcblxcbiAgICAgICAgbGV0IGRhdGEgPSBnZXRQb3N0RGF0YSh0cmFzaF9jbGVhbixib2R5KVxcblxcbiAgICAgICAgaWYgKGRhdGEuY29kZSA9PT0gMjAwKXtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/muIXpmaTmiJDlip8nXFxuICAgICAgICB9ZWxzZSB7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5riF6Zmk5aSx6LSlJytkYXRhLm1lc3NhZ2VcXG4gICAgICAgIH1cXG5cXG4gICAgfWNhdGNoIChlKXtcXG4gICAgICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gcmVjb3ZlckZvclRyYXNoKGlkKXtcXG5cXG4gICAgbGV0IGJvZHkgPSBge1xcXCJpZHNcXFwiOltcXFwiYCtpZCtgXFxcIl19YFxcblxcbiAgICB0cnkge1xcblxcbiAgICAgICAgbGV0IGRhdGEgPSBnZXRQb3N0RGF0YSh0cmFzaF9yZWNvdmVyLGJvZHkpXFxuXFxuICAgICAgICBpZiAoZGF0YS5jb2RlID09PSAyMDApe1xcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aBouWkjeaIkOWKnydcXG4gICAgICAgIH1lbHNlIHtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mgaLlpI3lpLHotKUnK2RhdGEubWVzc2FnZVxcbiAgICAgICAgfVxcblxcbiAgICB9Y2F0Y2ggKGUpe1xcbiAgICAgICAgbG9nKGUubWVzc2FnZSlcXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBzZWFyY2hBbGxGaWxlcyhuYW1lKXtcXG5cXG59XFxuXFxuXFxuXFxuXFxuXFxuZnVuY3Rpb24gc2F2ZUZpbGVUb0NoYW5nZShvbGRJZCxvbGROYW1lLG5ld0lkLHR5cGUpe1xcblxcbiAgICB0cnkge1xcblxcbiAgICAgICAgc2hvd0xvYWRpbmcoJ+aTjeS9nOS4rei9rOWtmOS4re+8geS4jeimgeS5seeCueWHuycpO1xcblxcbiAgICAgICAgaWYgKHR5cGUgPT09IFxcXCJmb2xkZXJcXFwiKXtcXG5cXG4gICAgICAgICAgICBsb2coXFxcIi0tLS0tLS0tLS3mlofku7blpLnmk43kvZzkuK0tLS0tLS0tLS0tXFxcIilcXG5cXG4gICAgICAgICAgICBsZXQgY2hlY2tGb2xkZXIgPSBjaGVja1NhdmVGb2xkZXIobmV3SWQsb2xkTmFtZSlcXG5cXG4gICAgICAgICAgICBsb2coXFxcIuajgOafpeaWh+S7tuaYr+WQpui9rOWtmOi/h++8mlxcXCIrSlNPTi5zdHJpbmdpZnkoY2hlY2tGb2xkZXIpKVxcblxcbiAgICAgICAgICAgIGlmIChjaGVja0ZvbGRlcil7XFxuXFxuICAgICAgICAgICAgICAgIGxvZyhcXFwi6L2s5a2Y6L+H55qE5paH5Lu25aS5aWTvvJpcXFwiK2NoZWNrRm9sZGVyLmlkKVxcblxcbiAgICAgICAgICAgICAgICBzYXZlQ2xvdWRGaWxlKG9sZElkLGNoZWNrRm9sZGVyLmlkKVxcblxcbiAgICAgICAgICAgIH1lbHNlIHtcXG5cXG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBjcmVhdGVDbG91ZEZvbGRlcihuZXdJZCxvbGROYW1lKVxcblxcbiAgICAgICAgICAgICAgICBsb2coXFxcIuayoeaciei9rOWtmOi/hyDliJvlu7rmlofku7blpLlpZO+8mlxcXCIrZGF0YS5kYXRhKVxcblxcbiAgICAgICAgICAgICAgICBpZiAoZGF0YS5jb2RlID09PSAyMDApe1xcblxcbiAgICAgICAgICAgICAgICAgICAgc2F2ZUNsb3VkRmlsZShvbGRJZCxkYXRhLmRhdGEpXFxuXFxuICAgICAgICAgICAgICAgIH1lbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ovazlrZjlpLHotKUnXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICB9ZWxzZSBpZiAodHlwZSA9PT0gXFxcImZpbGVcXFwiKXtcXG5cXG4gICAgICAgICAgICBsb2coXFxcIi0tLS0tLS0tLS3mlofku7bmk43kvZzkuK0tLS0tLS0tLS0tXFxcIilcXG5cXG4gICAgICAgICAgICBsZXQgZGF0YSA9IGRldGFpbEZvckZpbGUob2xkSWQpLmRhdGEuZmlsZVxcblxcbiAgICAgICAgICAgIGxldCBmaWxlTmFtZSA9IGRhdGEuZmlsZV9uYW1lXFxuICAgICAgICAgICAgbGV0IGZpbGVTaXplID0gZGF0YS5maWxlX3NpemVcXG4gICAgICAgICAgICBsZXQgZmlsZUNpZCA9IGRhdGEuZmlsZV9jaWRcXG4gICAgICAgICAgICBsZXQgZmlsZVR5cGUgPSBkYXRhLmZpbGVfdHlwZVxcbiAgICAgICAgICAgIGxldCBwYXJlbnRJZCA9IG5ld0lkXFxuICAgICAgICAgICAgbGV0IHN1ZmZpeCA9IFxcXCIuXFxcIitkYXRhLmZpbGVfZXh0XFxuXFxuICAgICAgICAgICAgbGV0IGNoZWNrID0gY2hlY2tTYXZlRmlsZShuZXdJZCxmaWxlTmFtZSlcXG5cXG4gICAgICAgICAgICBsb2coXFxcIuajgOafpeaWh+S7tuaYr+WQpui9rOWtmOi/h++8mlxcXCIrSlNPTi5zdHJpbmdpZnkoY2hlY2spKVxcblxcbiAgICAgICAgICAgIGlmIChjaGVjayl7XFxuXFxuICAgICAgICAgICAgICAgIGlmIChjaGVjay5maWxlQ2lkID09PSBmaWxlQ2lkKSByZXR1cm4gXFxcInRvYXN0Oi8v5bey5L+d5a2Y6L+HXFxcIlxcblxcbiAgICAgICAgICAgIH1lbHNlIHtcXG5cXG4gICAgICAgICAgICAgICAgaWYgKHNhdmVPbmVDbG91ZEZpbGUoZmlsZU5hbWUsZmlsZVNpemUsZmlsZUNpZCxmaWxlVHlwZSxwYXJlbnRJZCxzdWZmaXgpKXtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/ovazlrZjmiJDlip9cXFwiXFxuICAgICAgICAgICAgICAgIH1lbHNlIHtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ovazlrZjlpLHotKUnXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuXFxuICAgICAgICB0b2FzdChcXFwi6L2s5a2Y5oiQ5Yqf77yBXFxcIilcXG5cXG4gICAgICAgIGhpZGVMb2FkaW5nKCk7XFxuXFxuICAgIH1jYXRjaCAoZSl7XFxuICAgICAgICBsb2coZS5tZXNzYWdlKVxcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIHNhdmVDbG91ZEZpbGUob2xkSWQsbmV3SWQpe1xcblxcbiAgICBsZXQgY2hlY2tQYWdlID0gZGV0YWlsRm9yRmlsZShvbGRJZCkuZGF0YS5zdGF0c1xcblxcbiAgICBsZXQgcGFnZUNvdW50ID0gTnVtYmVyKGNoZWNrUGFnZS5zdWJkaXJfbnVtICsgY2hlY2tQYWdlLnN1YmZpbGVfbnVtKVxcblxcbiAgICBsZXQgcGFnZSA9IHBhZ2VDb3VudCA+IDEwMCA/IE51bWJlcigocGFnZUNvdW50LzEwMCkrMSkudG9GaXhlZCgwKSA6IDFcXG5cXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gcGFnZTsgaSsrKSB7XFxuXFxuICAgICAgICBsZXQgYm9keSA9YHtcXFwicGFnZV9udW1cXFwiOmAraStgLFxcXCJwYWdlX3NpemVcXFwiOjEwMCxcXFwicGFyZW50X2lkXFxcIjpcXFwiYCtvbGRJZCtgXFxcIixcXFwic29ydF9kaXJlY3Rpb25cXFwiOlxcXCJhc2NcXFwiLFxcXCJzb3J0X2ZpZWxkXFxcIjpcXFwibmFtZVxcXCJ9YFxcblxcbiAgICAgICAgbG9nKFxcXCLmn6Xor6LpobXmlbDvvJpcXFwiK3BhZ2UpXFxuXFxuICAgICAgICB0cnl7XFxuXFxuICAgICAgICAgICAgbGV0IGRhdGEgPSBnZXRQb3N0RGF0YShjaGVja191cmwsYm9keSkuZGF0YS5maWxlc1xcblxcbiAgICAgICAgICAgIGZvciAodmFyIHggaW4gZGF0YSl7XFxuXFxuICAgICAgICAgICAgICAgIGxldCBmaWxlSWQgPSBkYXRhW3hdLmlkXFxuICAgICAgICAgICAgICAgIGxldCBmaWxlTmFtZSA9IGRhdGFbeF0uZmlsZV9uYW1lXFxuICAgICAgICAgICAgICAgIGxldCBpc0ZvbGRlciA9IGRhdGFbeF0uaXNfZm9sZGVyXFxuXFxuICAgICAgICAgICAgICAgIGlmIChpc0ZvbGRlciA+IDApe1xcblxcbiAgICAgICAgICAgICAgICAgICAgbG9nKFxcXCLmn6Xor6LnmoTmlofku7blpLnvvJpcXFwiK2ZpbGVOYW1lKVxcblxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNoZWNrRm9sZGVyID0gY2hlY2tTYXZlRm9sZGVyKG5ld0lkLGZpbGVOYW1lKVxcblxcbiAgICAgICAgICAgICAgICAgICAgbG9nKFxcXCLmn6Xor6Lmlofku7bmmK/lkKblt7LlrZjlnKjvvJpcXFwiK0pTT04uc3RyaW5naWZ5KGNoZWNrRm9sZGVyKSlcXG5cXG4gICAgICAgICAgICAgICAgICAgIGlmIChjaGVja0ZvbGRlcikge1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vdG9hc3QoZmlsZU5hbWUrXFxcIuaWh+S7tuW3suWtmOi/h+ato+WcqOi3s+i/h++8gVxcXCIpXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nKFxcXCLmlofku7blpLnlt7LovazlrZjov4fvvJpcXFwiK2NoZWNrRm9sZGVyLmlkKVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVDbG91ZEZpbGUoZmlsZUlkLCBjaGVja0ZvbGRlci5pZClcXG5cXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIHtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm9sZGVyID0gY3JlYXRlQ2xvdWRGb2xkZXIobmV3SWQsZmlsZU5hbWUpXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nKFxcXCLmlofku7blpLnmsqHmnInovazlrZjov4fvvJpcXFwiK0pTT04uc3RyaW5naWZ5KGZvbGRlcikpXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgbGV0IG5ld3NJZCA9IGZvbGRlci5kYXRhXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgbG9nKFxcXCLmlrDmlofku7blpLlpZO+8mlxcXCIrbmV3c0lkKVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNhdmVDbG91ZEZpbGUoZmlsZUlkLG5ld3NJZClcXG4gICAgICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgfWVsc2Uge1xcblxcbiAgICAgICAgICAgICAgICAgICAgbG9nKFxcXCLmn6Xor6LnmoTmlofku7ZcXFwiK2ZpbGVOYW1lKVxcblxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpbGVTaXplID0gZGF0YVt4XS5maWxlX3NpemVcXG4gICAgICAgICAgICAgICAgICAgIGxldCBmaWxlQ2lkID0gZGF0YVt4XS5maWxlX2NpZFxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpbGVUeXBlID0gZGF0YVt4XS5maWxlX3R5cGVcXG4gICAgICAgICAgICAgICAgICAgIGxldCBwYXJlbnRJZCA9IG5ld0lkXFxuICAgICAgICAgICAgICAgICAgICBsZXQgc3VmZml4ID0gXFxcIi5cXFwiK2RhdGFbeF0uZmlsZV9leHRcXG5cXG4gICAgICAgICAgICAgICAgICAgIGxldCBjaGVjayA9IGNoZWNrU2F2ZUZpbGUobmV3SWQsZmlsZU5hbWUpXFxuXFxuICAgICAgICAgICAgICAgICAgICBsb2coXFxcIuafpeivouaWh+S7tuaYr+WQpuW3suWtmOWcqO+8mlxcXCIrSlNPTi5zdHJpbmdpZnkoY2hlY2spKVxcblxcbiAgICAgICAgICAgICAgICAgICAgaWYgKGNoZWNrKXtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY2hlY2suZmlsZUNpZCA9PT0gZmlsZUNpZCl7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdG9hc3QoZmlsZU5hbWUrXFxcIuaWh+S7tuW3suWtmOi/h+ato+WcqOi3s+i/h++8gVxcXCIpXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2Uge1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghc2F2ZU9uZUNsb3VkRmlsZShmaWxlTmFtZSxmaWxlU2l6ZSxmaWxlQ2lkLGZpbGVUeXBlLHBhcmVudElkLHN1ZmZpeCkpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8vXFxcIitmaWxlTmFtZStcXFwi6L2s5a2Y5aSx6LSlXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIH1cXG5cXG4gICAgICAgIH1jYXRjaCAoZSkge1xcbiAgICAgICAgICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgICAgICB9XFxuICAgIH1cXG5cXG59XFxuXFxuXFxuZnVuY3Rpb24gY3JlYXRlQ2xvdWRGb2xkZXIobmV3SWQsb2xkTmFtZSl7XFxuXFxuICAgIHRyeSB7XFxuXFxuICAgICAgICBsZXQgYm9keSA9IGB7XFxcInBhcmVudElkXFxcIjogXFxcImArbmV3SWQrYFxcXCIsXFxcImZpbGVOYW1lXFxcIjogXFxcImArb2xkTmFtZStgXFxcIn1gXFxuXFxuICAgICAgICBsZXQgZGF0YSA9IGdldENsb3VkUG9zdERhdGEoY2xvdWRfYWRkRm9sZGVyLGdldENsb3VkSGVhZChjbG91ZF9sb2dpbl90b2tlbiksYm9keSlcXG5cXG4gICAgICAgIGlmIChkYXRhLmNvZGUgPT09IDIwMCl7XFxuICAgICAgICAgICAgcmV0dXJuIGRhdGFcXG4gICAgICAgIH1lbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5paw5bu65paH5Lu25aS55aSx6LSlJ1xcbiAgICAgICAgfVxcbiAgICB9Y2F0Y2ggKGUpe1xcbiAgICAgICAgbG9nKGUubWVzc2FnZSlcXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBzYXZlT25lQ2xvdWRGaWxlKGZpbGVOYW1lLGZpbGVTaXplLGZpbGVDaWQsZmlsZVR5cGUscGFyZW50SWQsc3VmZml4KXtcXG5cXG4gICAgbGV0IGJvZHkgPSBge1xcXCJmaWxlUGF0aFxcXCI6XFxcIlxcXCIsXFxcImRpclBhdGhcXFwiOltdLFxcXCJmaWxlTmFtZVxcXCI6XFxcImArZmlsZU5hbWUrYFxcXCIsXFxcImZpbGVTaXplXFxcIjpgK2ZpbGVTaXplK2AsXFxcImZpbGVDaWRcXFwiOlxcXCJgK2ZpbGVDaWQrYFxcXCIsXFxcImZpbGVUeXBlXFxcIjpgK2ZpbGVUeXBlK2AsXFxcInBhcmVudElkXFxcIjpcXFwiYCtwYXJlbnRJZCtgXFxcIixcXFwiaWRcXFwiOlxcXCJcXFwiLFxcXCJzdWZmaXhcXFwiOlxcXCJgK3N1ZmZpeCtgXFxcIixcXFwidGh1bWJuYWlsXFxcIjpcXFwiXFxcIixcXFwiZHVyYXRpb25cXFwiOjEsXFxcIndpZHRoXFxcIjpcXFwiMFxcXCIsXFxcImhlaWdodFxcXCI6XFxcIjBcXFwifWBcXG5cXG4gICAgbGV0IGRhdGEgPSBnZXRDbG91ZFBvc3REYXRhKGNsb3VkX2FkZEZpbGUsZ2V0Q2xvdWRIZWFkKGNsb3VkX2xvZ2luX3Rva2VuKSxib2R5KVxcblxcbiAgICByZXR1cm4gZGF0YS5jb2RlID09PSAyMDA7XFxufVxcblxcblxcblxcbmZ1bmN0aW9uIGNoZWNrU2F2ZUZpbGUocGFyZW50SWQsZmlsZU5hbWUpe1xcblxcbiAgICBsZXQgYm9keSA9IGB7XFxcImZpbGVOYW1lXFxcIjogXFxcImArZmlsZU5hbWUrYFxcXCIsXFxcInNvcnRGbGFnXFxcIjogXFxcIm5hbWVcXFwiLFxcXCJzb3J0VHlwZVxcXCI6IFxcXCJkZXNjXFxcIixcXFwicGFyZW50SWRcXFwiOiBcXFwiYCtwYXJlbnRJZCtgXFxcIn1gXFxuXFxuICAgIGxldCByZXN1bHQgPSBnZXRDbG91ZFBvc3REYXRhKGNsb3VkX2NoZWNrRmlsZSxnZXRDbG91ZEhlYWQoY2xvdWRfbG9naW5fdG9rZW4pLGJvZHkpXFxuXFxuICAgIGlmKHJlc3VsdC5jb2RlID09PSAyMDApe1xcblxcbiAgICAgICAgaWYocmVzdWx0LmRhdGEuY291bnQgPiAwKXtcXG5cXG4gICAgICAgICAgICByZXR1cm4gcmVzdWx0LmRhdGEuZGF0YVswXVxcblxcbiAgICAgICAgfWVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiXFxcIlxcbiAgICAgICAgfVxcblxcbiAgICB9ZWxzZXtcXG4gICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/mn6Xor6It5paH5Lu25piv5ZCm5L+d5a2Y6L+HLeWksei0pVxcXCJcXG4gICAgfVxcbn1cXG5cXG5mdW5jdGlvbiBjaGVja1NhdmVGb2xkZXIocGFyZW50SWQsZmlsZU5hbWUpe1xcblxcbiAgICBsZXQgYm9keSA9IGB7XFxcImZpbGVOYW1lXFxcIjogXFxcImArZmlsZU5hbWUrYFxcXCIsXFxcInNvcnRGbGFnXFxcIjogXFxcInVwbG9hZFxcXCIsXFxcInNvcnRUeXBlXFxcIjogXFxcImRlc2NcXFwiLFxcXCJwYXJlbnRJZFxcXCI6IFxcXCJgK3BhcmVudElkK2BcXFwifWBcXG5cXG4gICAgbGV0IHJlc3VsdCA9IGdldENsb3VkUG9zdERhdGEoY2xvdWRfY2hlY2tGb2xkZXIsZ2V0Q2xvdWRIZWFkKGNsb3VkX2xvZ2luX3Rva2VuKSxib2R5KVxcblxcbiAgICBpZihyZXN1bHQuY29kZSA9PT0gMjAwKXtcXG5cXG4gICAgICAgIGlmKHJlc3VsdC5kYXRhLmNvdW50ID4gMCl7XFxuXFxuICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5kYXRhLmRhdGFbMF1cXG5cXG4gICAgICAgIH1lbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gXFxcIlxcXCJcXG4gICAgICAgIH1cXG5cXG4gICAgfWVsc2V7XFxuICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5p+l6K+iLeaWh+S7tuWkueaYr+WQpuS/neWtmOi/hy3lpLHotKVcXFwiXFxuICAgIH1cXG59XFxuXFxuXFxuXFxuZnVuY3Rpb24gYmFja1NhdmVPbmUobmFtZSxwYXRoLGRhdGEpe1xcblxcbiAgICBsZXQgZmlsZU5hbWUgPSBcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy/lsI/pvpnnm5jotYTmupAv5aSH5Lu95paH5Lu2L+Wwj+m+meebmOaWh+S7tuWkueWkh+S7vS9cXFwiK25hbWUrXFxcIi5qc29uXFxcIlxcblxcbiAgICBsZXQgc2F2ZURhdGEgPSBge1xcXCJjcmVhdGVUaW1lXFxcIjpcXFwiYCtuZXcgRGF0ZSgpLmdldFRpbWUoKStgXFxcIixcXFwic2F2ZVR5cGVcXFwiOlxcXCLmlofku7blpIfku71cXFwiLFxcXCJmaWxlRGF0YVxcXCI6IHtcXFwicGF0aFxcXCI6IFxcXCJgK3BhdGgrYFxcXCIsXFxcImZpbGVzXFxcIjpbYCtkYXRhK2BdfX1gXFxuXFxuICAgIC8vIGxvZyhcXFwi5L+d5a2YanNvbuaWh+S7tu+8mlxcXCIrSlNPTi5zdHJpbmdpZnkoc2F2ZURhdGEpKVxcblxcbiAgICBzYXZlRmlsZShmaWxlTmFtZSwgc2F2ZURhdGEsIDApO1xcblxcbn1cXG5cXG5mdW5jdGlvbiBiYWNrU2F2ZUJ5TW9yZShwYXRoLGRhdGEpe1xcblxcbiAgICBsZXQgZmlsZUJhY2sgPSBKU09OLnBhcnNlKHJlYWRGaWxlKHBhdGgsIDApIHx8ICdbXScpO1xcblxcbiAgICAvLyBsb2coXFxcIuWOn+adpeeahOaVsOaNrjpcXFwiK0pTT04uc3RyaW5naWZ5KGZpbGVCYWNrKSlcXG5cXG4gICAgZmlsZUJhY2suZmlsZURhdGEuZmlsZXMgPSBmaWxlQmFjay5maWxlRGF0YS5maWxlcy5jb25jYXQoSlNPTi5wYXJzZShkYXRhKSlcXG5cXG4gICAgbG9nKFxcXCLkv67mlLnlkI7nmoTvvJpcXFwiK0pTT04uc3RyaW5naWZ5KGZpbGVCYWNrKS50b1N0cmluZygpKVxcblxcbiAgICBzYXZlRmlsZShwYXRoLCBKU09OLnN0cmluZ2lmeShmaWxlQmFjaykudG9TdHJpbmcoKSwgMCk7XFxuXFxufVxcblxcbmZ1bmN0aW9uIGRlbGV0ZUJhY2tGaWxlKHBhdGgpe1xcblxcbiAgICBpZiAoZmlsZUV4aXN0KHBhdGgpKXtcXG5cXG4gICAgICAgIGRlbGV0ZUZpbGUocGF0aClcXG5cXG4gICAgfWVsc2Uge1xcblxcbiAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+acquaJvuWIsOaWh+S7tlxcXCJcXG5cXG4gICAgfVxcbn1cXG5cXG5cXG5cXG5mdW5jdGlvbiBjaGVja0JhY2tJc1RydWUocGF0aCxkYXRhLHBhdGhOYW1lKXtcXG5cXG4gICAgaWYgKGZpbGVFeGlzdChzdGFydEluZGV4UGF0aCtkYXRhLmlkK2RhdGEuZmlsZV9uYW1lK1xcXCIuanNvblxcXCIpKXtcXG5cXG4gICAgICAgIGNvbmZpcm0oe1xcblxcbiAgICAgICAgICAgIHRpdGxlOnBhdGgubGVuZ3RoID4gMCA/ICfmlofku7bku6XlpIfku73ov4fvvIzov5vooYzmm7TmlrDmk43kvZwnIDogJ+abtOaWsOmmlumhteWkh+S7veaPkOmGkicsXFxuICAgICAgICAgICAgY29udGVudDon56Gu5a6aLeWwhuabtOaWsOWOn+acieeahOaVsOaNrlxcXFxu5Y+W5raILeWkh+S7veWPlua2iCcsXFxuXFxuICAgICAgICAgICAgY29uZmlybTokLnRvU3RyaW5nKChzdGFydEluZGV4UGF0aCxkYXRhKT0+e1xcblxcbiAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2Z1bmN0aW9ucycpKS5ydWxlKVxcblxcbiAgICAgICAgICAgICAgICBzaG93TG9hZGluZygn5pu05paw5aSH5Lu95Lit77yB5LiN6KaB5Lmx54K55Ye7Jyk7XFxuXFxuICAgICAgICAgICAgICAgIGxldCBmaWxlID0gSlNPTi5wYXJzZShyZWFkRmlsZShzdGFydEluZGV4UGF0aCtkYXRhLmlkK2RhdGEuZmlsZV9uYW1lK1xcXCIuanNvblxcXCIsIDApIHx8ICdbXScpXFxuXFxuICAgICAgICAgICAgICAgIGNoZWNrVXBkYXRlQmFja0ZpbGUoZGF0YS5pZCxkYXRhLmZpbGVfbmFtZSxmaWxlLmZpbGVEYXRhLnBhdGgpXFxuXFxuICAgICAgICAgICAgICAgIGhpZGVMb2FkaW5nKCk7XFxuXFxuICAgICAgICAgICAgICAgIHRvYXN0KFxcXCLmm7TmlrDlpIfku73miJDlip/vvIFcXFwiKVxcblxcbiAgICAgICAgICAgIH0sc3RhcnRJbmRleFBhdGgsZGF0YSksXFxuXFxuICAgICAgICAgICAgY2FuY2VsOiQudG9TdHJpbmcoKCk9PntcXG5cXG4gICAgICAgICAgICAgICAgc2hvd0xvYWRpbmcoJ+aTjeS9nOabtOaWsOWkh+S7veS4re+8geS4jeimgeS5seeCueWHuycpO1xcblxcbiAgICAgICAgICAgICAgICBoaWRlTG9hZGluZygpO1xcblxcbiAgICAgICAgICAgICAgICB0b2FzdChcXFwi6YCJ5oup5Y+W5raI77yBXFxcIilcXG5cXG4gICAgICAgICAgICB9KVxcblxcbiAgICAgICAgfSlcXG5cXG4gICAgfWVsc2Uge1xcblxcbiAgICAgICAgc2hvd0xvYWRpbmcoJ+aTjeS9nOWkh+S7veS4re+8geS4jeimgeS5seeCueWHuycpO1xcblxcbiAgICAgICAgaWYgKHBhdGgubGVuZ3RoID4gMCl7XFxuXFxuICAgICAgICAgICAgc2F2ZUJhY2tGaWxlRm9yQ2hhbmdlKHBhdGgsZGF0YSxwYXRoTmFtZSlcXG5cXG4gICAgICAgIH1lbHNlIHtcXG5cXG4gICAgICAgICAgICBzYXZlQmFja0ZpbGUoZGF0YSlcXG5cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGhpZGVMb2FkaW5nKCk7XFxuXFxuICAgICAgICB0b2FzdChcXFwi5aSH5Lu95oiQ5Yqf77yBXFxcIilcXG5cXG4gICAgfVxcblxcbn1cXG5cXG5mdW5jdGlvbiBjaGVja1VwZGF0ZUJhY2tGaWxlKGlkLG5hbWUscGF0aCl7XFxuXFxuICAgIGxldCBjaGVja1BhZ2UgPSBkZXRhaWxGb3JGaWxlKGlkKS5kYXRhLnN0YXRzXFxuXFxuICAgIGxldCBwYWdlQ291bnQgPSBOdW1iZXIoY2hlY2tQYWdlLnN1YmRpcl9udW0gKyBjaGVja1BhZ2Uuc3ViZmlsZV9udW0pXFxuXFxuICAgIGxldCBwYWdlID0gcGFnZUNvdW50ID4gMTAwID8gTnVtYmVyKChwYWdlQ291bnQvMTAwKSsxKS50b0ZpeGVkKDApIDogMVxcblxcbiAgICBmb3IgKGxldCBpID0gMTsgaSA8PSBwYWdlOyBpKyspIHtcXG5cXG4gICAgICAgIGxldCBib2R5ID1ge1xcXCJwYWdlX251bVxcXCI6YCtpK2AsXFxcInBhZ2Vfc2l6ZVxcXCI6MTAwLFxcXCJwYXJlbnRfaWRcXFwiOlxcXCJgK2lkK2BcXFwiLFxcXCJzb3J0X2RpcmVjdGlvblxcXCI6XFxcImFzY1xcXCIsXFxcInNvcnRfZmllbGRcXFwiOlxcXCJuYW1lXFxcIn1gXFxuXFxuICAgICAgICBsZXQgZGF0YSA9IGdldFBvc3REYXRhKGNoZWNrX3VybCxib2R5KS5kYXRhLmZpbGVzXFxuXFxuICAgICAgICBsb2coXFxcIuW+queOr+eahHBhdGjmlbDmja7vvJpcXFwiK3N0YXJ0SW5kZXhQYXRoK2lkK25hbWUrXFxcIi5qc29uXFxcIilcXG5cXG4gICAgICAgIGlmIChmaWxlRXhpc3Qoc3RhcnRJbmRleFBhdGgraWQrbmFtZStcXFwiLmpzb25cXFwiKSl7XFxuXFxuICAgICAgICAgICAgdXBkYXRlQmFja0ZpbGUoaWQsbmFtZSxnZXRCYWNrU2F2ZURhdGEoaWQpKVxcblxcbiAgICAgICAgfWVsc2Uge1xcblxcbiAgICAgICAgICAgIGJhY2tTYXZlT25lKGlkK25hbWUscGF0aCtcXFwi4ridXFxcIituYW1lLGdldEJhY2tTYXZlRGF0YShpZCkpXFxuXFxuICAgICAgICB9XFxuXFxuICAgICAgICBmb3IgKHZhciB4IGluIGRhdGEpe1xcblxcbiAgICAgICAgICAgIGxldCBmaWxlSWQgPSBkYXRhW3hdLmlkXFxuXFxuICAgICAgICAgICAgbGV0IGZpbGVOYW1lID0gZGF0YVt4XS5maWxlX25hbWVcXG5cXG4gICAgICAgICAgICBsZXQgaXNGb2xkZXIgPSBkYXRhW3hdLmlzX2ZvbGRlclxcblxcbiAgICAgICAgICAgIGlmIChpc0ZvbGRlciA+IDApe1xcblxcbiAgICAgICAgICAgICAgICBjaGVja1VwZGF0ZUJhY2tGaWxlKGZpbGVJZCxmaWxlTmFtZSlcXG5cXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuXFxuICAgIH1cXG59XFxuXFxuZnVuY3Rpb24gdXBkYXRlQmFja0ZpbGUoaWQsbmFtZSxuZXdEYXRhKXtcXG5cXG4gICAgbGV0IGNoZWNrRmlsZSA9IEpTT04ucGFyc2UocmVhZEZpbGUoc3RhcnRJbmRleFBhdGgraWQrbmFtZStcXFwiLmpzb25cXFwiLCAwKSB8fCAnW10nKVxcblxcbiAgICBsZXQgb2xkRGF0YSA9IGNoZWNrRmlsZS5maWxlRGF0YS5maWxlc1xcblxcbiAgICBpZiAob2xkRGF0YS5sZW5ndGggPT09IG5ld0RhdGEubGVuZ3RoKXtcXG5cXG4gICAgICAgIGxvZyhcXFwi5p2h5pWw55u45ZCM77yM5rKh5pyJ5paw5aKeXFxcIilcXG5cXG4gICAgICAgIHJldHVybiBcXFwiXFxcIlxcblxcbiAgICB9ZWxzZSB7XFxuXFxuICAgICAgICBsZXQgZmlsZUJhY2sgPSBKU09OLnBhcnNlKHJlYWRGaWxlKHN0YXJ0SW5kZXhQYXRoK2lkK25hbWUrXFxcIi5qc29uXFxcIiwgMCkgfHwgJ1tdJyk7XFxuXFxuICAgICAgICBsZXQgc2F2ZURhdGEgPSAnWycrKG5ld0RhdGEudG9TdHJpbmcoKSkrJ10nXFxuXFxuICAgICAgICBmaWxlQmFjay5maWxlRGF0YS5maWxlcyA9IEpTT04ucGFyc2Uoc2F2ZURhdGEpXFxuXFxuICAgICAgICBzYXZlRmlsZShzdGFydEluZGV4UGF0aCtpZCtuYW1lK1xcXCIuanNvblxcXCIsIEpTT04uc3RyaW5naWZ5KGZpbGVCYWNrKSwgMCk7XFxuXFxuXFxuICAgIH1cXG5cXG59XFxuXFxuXFxuZnVuY3Rpb24gc2F2ZUJhY2tGaWxlRm9yQ2hhbmdlKHBhdGgsZGF0YSxwYXRoTmFtZSl7XFxuXFxuICAgIHNob3dMb2FkaW5nKCfmk43kvZzlpIfku73kuK3vvIHkuI3opoHkubHngrnlh7snKTtcXG5cXG4gICAgbGV0IGNoZWNrID0gZGV0YWlsRm9yRmlsZShkYXRhLmlkKVxcblxcbiAgICBpZiAoZGF0YS5pc19mb2xkZXIgPT09IDApe1xcblxcbiAgICAgICAgaWYgKGRhdGEuZmlsZV9jaWQubGVuZ3RoIDwgMSl7XFxuXFxuICAgICAgICAgICAgaGlkZUxvYWRpbmcoKTtcXG5cXG4gICAgICAgICAgICB0b2FzdChcXFwi5paH5Lu2Y2lk5Lii5aSx77yBXFxcIilcXG5cXG4gICAgICAgICAgICByZXR1cm4gXFxcIlxcXCJcXG4gICAgICAgIH1cXG5cXG4gICAgfWVsc2Uge1xcblxcbiAgICAgICAgbGV0IGNoZWNrUGFnZSA9IGNoZWNrLmRhdGEuc3RhdHNcXG5cXG4gICAgICAgIGlmIChjaGVjay5jb2RlID09PSB1bmRlZmluZWQpe1xcblxcbiAgICAgICAgICAgIGhpZGVMb2FkaW5nKCk7XFxuXFxuICAgICAgICAgICAgdG9hc3QoXFxcIuaWh+S7tumUmeivr+aIluS4jeWtmOWcqO+8gVxcXCIpXFxuXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJcXFwiXFxuICAgICAgICB9XFxuXFxuICAgICAgICBpZiAoTnVtYmVyKGNoZWNrUGFnZS5zdWJkaXJfbnVtICsgY2hlY2tQYWdlLnN1YmZpbGVfbnVtKSA8IDEpe1xcblxcbiAgICAgICAgICAgIGhpZGVMb2FkaW5nKCk7XFxuXFxuICAgICAgICAgICAgdG9hc3QoXFxcIuayoeaWh+S7tuS9oOWkh+S7veS7gOS5iO+8n+Wwj+W/g+aIkemUpOatu+S9oO+8gVxcXCIpXFxuXFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJcXFwiXFxuICAgICAgICB9XFxuXFxuICAgIH1cXG5cXG4gICAgbGV0IGluZGV4UGF0aCA9IFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL+Wwj+m+meebmOi1hOa6kC/lpIfku73mlofku7Yv5bCP6b6Z55uY5paH5Lu25aS55aSH5Lu9L1xcXCJcXG5cXG4gICAgbGV0IGluZGV4RmlsZSA9IFtdO1xcblxcbiAgICBpZiAoZGF0YS5pc19mb2xkZXIgPT09IDEpe1xcblxcbiAgICAgICAgaW5kZXhGaWxlLnB1c2goZ2V0QmFja1NhdmVGb2xkZXIoZGF0YS5pZCxkYXRhLmZpbGVfbmFtZSkpO1xcblxcbiAgICB9ZWxzZSB7XFxuXFxuICAgICAgICBsZXQgZmlsZU5hbWUgPSBkYXRhLmZpbGVfbmFtZVxcbiAgICAgICAgbGV0IGZpbGVTaXplID0gZGF0YS5maWxlX3NpemVcXG4gICAgICAgIGxldCBmaWxlQ2lkID0gZGF0YS5maWxlX2NpZFxcbiAgICAgICAgbGV0IGZpbGVUeXBlID0gZGF0YS5maWxlX3R5cGVcXG4gICAgICAgIGxldCBzdWZmaXggPSBcXFwiLlxcXCIrZGF0YS5maWxlX2V4dFxcblxcbiAgICAgICAgaW5kZXhGaWxlLnB1c2goZ2V0QmFja1NhdmVGaWxlKGZpbGVOYW1lLGZpbGVTaXplLGZpbGVDaWQsZmlsZVR5cGUsc3VmZml4KSk7XFxuXFxuICAgIH1cXG5cXG4gICAgbGV0IGluZGV4ID0gaW5kZXhQYXRoK3BhdGgrXFxcIi5qc29uXFxcIlxcblxcbiAgICBiYWNrU2F2ZUJ5TW9yZShpbmRleCxpbmRleEZpbGUpXFxuXFxuICAgIGxldCBpZCA9IGRhdGEuaWRcXG5cXG4gICAgaWYgKGRhdGEuaXNfZm9sZGVyID09PSAxKXtcXG5cXG4gICAgICAgIHNhdmVGb3JGb2xkZXIoaWQsZGF0YS5maWxlX25hbWUscGF0aE5hbWUpXFxuXFxuICAgIH1cXG5cXG4gICAgaGlkZUxvYWRpbmcoKTtcXG5cXG4gICAgdG9hc3QoXFxcIuWkh+S7veaIkOWKn++8gVxcXCIpXFxuXFxuICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcImJhY2tDaGFuZ2VcXFwiLFxcXCJmYWxzZVxcXCIpXFxuXFxufVxcblxcbmZ1bmN0aW9uIHNhdmVCYWNrRmlsZShkYXRhKXtcXG5cXG4gICAgc2hvd0xvYWRpbmcoJ+aTjeS9nOWkh+S7veS4re+8geS4jeimgeS5seeCueWHuycpO1xcblxcbiAgICBsZXQgY2hlY2sgPSBkZXRhaWxGb3JGaWxlKGRhdGEuaWQpXFxuXFxuICAgIGlmIChkYXRhLmlzX2ZvbGRlciA9PT0gMCl7XFxuXFxuICAgICAgICBpZiAoZGF0YS5maWxlX2NpZC5sZW5ndGggPCAxKXtcXG5cXG4gICAgICAgICAgICBoaWRlTG9hZGluZygpO1xcblxcbiAgICAgICAgICAgIHRvYXN0KFxcXCLmlofku7ZjaWTkuKLlpLHvvIFcXFwiKVxcblxcbiAgICAgICAgICAgIHJldHVybiBcXFwiXFxcIlxcbiAgICAgICAgfVxcblxcbiAgICB9ZWxzZSB7XFxuXFxuICAgICAgICBsZXQgY2hlY2tQYWdlID0gY2hlY2suZGF0YS5zdGF0c1xcblxcbiAgICAgICAgaWYgKGNoZWNrLmNvZGUgPT09IHVuZGVmaW5lZCl7XFxuXFxuICAgICAgICAgICAgaGlkZUxvYWRpbmcoKTtcXG5cXG4gICAgICAgICAgICB0b2FzdChcXFwi5paH5Lu26ZSZ6K+v5oiW5LiN5a2Y5Zyo77yBXFxcIilcXG5cXG4gICAgICAgICAgICByZXR1cm4gXFxcIlxcXCJcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGlmIChOdW1iZXIoY2hlY2tQYWdlLnN1YmRpcl9udW0gKyBjaGVja1BhZ2Uuc3ViZmlsZV9udW0pIDwgMSl7XFxuXFxuICAgICAgICAgICAgaGlkZUxvYWRpbmcoKTtcXG5cXG4gICAgICAgICAgICB0b2FzdChcXFwi5rKh5paH5Lu25L2g5aSH5Lu95LuA5LmI77yf5bCP5b+D5oiR6ZSk5q275L2g77yBXFxcIilcXG5cXG4gICAgICAgICAgICByZXR1cm4gXFxcIlxcXCJcXG4gICAgICAgIH1cXG5cXG4gICAgfVxcblxcbiAgICBsZXQgcGF0aCA9IFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL+Wwj+m+meebmOi1hOa6kC/lpIfku73mlofku7Yv5bCP6b6Z55uY5paH5Lu25aS55aSH5Lu9L1xcXCJcXG5cXG4gICAgbGV0IGluZGV4RmlsZSA9IFtdO1xcblxcbiAgICBpZiAoZGF0YS5pc19mb2xkZXIgPT09IDEpe1xcblxcbiAgICAgICAgaW5kZXhGaWxlLnB1c2goZ2V0QmFja1NhdmVGb2xkZXIoZGF0YS5pZCxkYXRhLmZpbGVfbmFtZSkpO1xcblxcbiAgICB9ZWxzZSB7XFxuXFxuICAgICAgICBsZXQgZmlsZU5hbWUgPSBkYXRhLmZpbGVfbmFtZVxcbiAgICAgICAgbGV0IGZpbGVTaXplID0gZGF0YS5maWxlX3NpemVcXG4gICAgICAgIGxldCBmaWxlQ2lkID0gZGF0YS5maWxlX2NpZFxcbiAgICAgICAgbGV0IGZpbGVUeXBlID0gZGF0YS5maWxlX3R5cGVcXG4gICAgICAgIGxldCBzdWZmaXggPSBcXFwiLlxcXCIrZGF0YS5maWxlX2V4dFxcblxcbiAgICAgICAgaW5kZXhGaWxlLnB1c2goZ2V0QmFja1NhdmVGaWxlKGZpbGVOYW1lLGZpbGVTaXplLGZpbGVDaWQsZmlsZVR5cGUsc3VmZml4KSk7XFxuXFxuICAgIH1cXG5cXG4gICAgaWYoZmlsZUV4aXN0KHBhdGgrXFxcIjAuanNvblxcXCIpKXtcXG5cXG4gICAgICAgIGxldCBpbmRleCA9IHBhdGgrXFxcIjAuanNvblxcXCJcXG5cXG4gICAgICAgIGJhY2tTYXZlQnlNb3JlKGluZGV4LGluZGV4RmlsZSlcXG5cXG4gICAgfWVsc2Uge1xcblxcbiAgICAgICAgYmFja1NhdmVPbmUoXFxcIjBcXFwiLFxcXCIwXFxcIixpbmRleEZpbGUpXFxuXFxuICAgIH1cXG5cXG4gICAgbGV0IGlkID0gZGF0YS5pZFxcblxcbiAgICBsZXQgbmV3TmFtZSA9IGRhdGEuZmlsZV9uYW1lXFxuXFxuICAgIGlmIChkYXRhLmlzX2ZvbGRlciA9PT0gMSl7XFxuXFxuICAgICAgICBzYXZlRm9yRm9sZGVyKGlkLG5ld05hbWUsXFxcIlxcXCIpXFxuXFxuICAgIH1cXG5cXG4gICAgaGlkZUxvYWRpbmcoKTtcXG5cXG4gICAgdG9hc3QoXFxcIuWkh+S7veaIkOWKn++8gVxcXCIpXFxuXFxufVxcblxcbmZ1bmN0aW9uIG1vdmVCYWNrRmlsZShkYXRhLG9sZFBhdGgsbmV3UGF0aCl7XFxuXFxuICAgIGlmIChvbGRQYXRoID09PSBuZXdQYXRoKXtcXG5cXG4gICAgICAgIHRvYXN0KFxcXCLnp7vliqjliLDljp/mnaXnmoTkvY3nva7kvaDlnKjmg7Pku4DkuYjvvJ9cXFwiKVxcblxcbiAgICAgICAgY2xlYXJJdGVtKFxcXCJtb3ZlVHlwZVxcXCIpXFxuXFxuICAgICAgICBjbGVhckl0ZW0oXFxcIm1vdmVEYXRhXFxcIilcXG5cXG4gICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcIm1vdmVUeXBlXFxcIiwgXFxcImZhbHNlXFxcIik7XFxuXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxuXFxuICAgICAgICByZXR1cm4gXFxcIlxcXCJcXG4gICAgfVxcblxcbiAgICBpZiAobmV3UGF0aC5pbmNsdWRlcyhkYXRhLm5hbWUpKXtcXG5cXG4gICAgICAgIHRvYXN0KFxcXCLmiormlofku7blpLnkv53lrZjliLDmlofku7blpLnmnKzouqvkuIvvvIzkvaDnnJ/kvJrnjqnvvIFcXFwiKVxcblxcbiAgICAgICAgY2xlYXJJdGVtKFxcXCJtb3ZlVHlwZVxcXCIpXFxuXFxuICAgICAgICBjbGVhckl0ZW0oXFxcIm1vdmVEYXRhXFxcIilcXG5cXG4gICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcIm1vdmVUeXBlXFxcIiwgXFxcImZhbHNlXFxcIik7XFxuXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxuXFxuICAgICAgICByZXR1cm4gXFxcIlxcXCJcXG4gICAgfVxcblxcbiAgICBsZXQgb2xkRGF0YSA9IEpTT04ucGFyc2UocmVhZEZpbGUob2xkUGF0aCwgMCkgfHwgJ1tdJylcXG5cXG4gICAgbGV0IG9sZEZpbGUgPSBvbGREYXRhLmZpbGVEYXRhLmZpbGVzXFxuXFxuICAgIGxldCBkYXRhSW5kZXggPSBvbGRGaWxlLmZpbmRJbmRleChpdGVtID0+IGl0ZW0ubmFtZSA9PT0gZGF0YS5uYW1lKTtcXG5cXG4gICAgaWYgKGRhdGFJbmRleCAhPT0gLTEpIHtcXG5cXG4gICAgICAgIG9sZERhdGEuZmlsZURhdGEuZmlsZXMuc3BsaWNlKGRhdGFJbmRleCwgMSk7XFxuXFxuICAgIH1cXG5cXG4gICAgc2F2ZUZpbGUob2xkUGF0aCwgSlNPTi5zdHJpbmdpZnkob2xkRGF0YSksIDApO1xcblxcbiAgICBsZXQgbmV3RGF0YSA9IEpTT04ucGFyc2UocmVhZEZpbGUobmV3UGF0aCwgMCkgfHwgJ1tdJylcXG5cXG4gICAgaWYgKGRhdGEudHlwZSA9PT0gMSl7XFxuXFxuICAgICAgICBsZXQgY2hlY2tEYXRhID0gSlNPTi5wYXJzZShyZWFkRmlsZShzdGFydEluZGV4UGF0aCtkYXRhLmlkK2RhdGEubmFtZStcXFwiLmpzb25cXFwiLCAwKSB8fCAnW10nKVxcblxcbiAgICAgICAgY2hlY2tEYXRhLmZpbGVEYXRhLnBhdGggPSBuZXdEYXRhLmZpbGVEYXRhLnBhdGgrXFxcIuK4nVxcXCIrZGF0YS5uYW1lXFxuXFxuICAgICAgICBzYXZlRmlsZShzdGFydEluZGV4UGF0aCtkYXRhLmlkK2RhdGEubmFtZStcXFwiLmpzb25cXFwiLCBKU09OLnN0cmluZ2lmeShjaGVja0RhdGEpLCAwKTtcXG4gICAgfVxcblxcbiAgICBsZXQgbmV3RmlsZSA9IG5ld0RhdGEuZmlsZURhdGEuZmlsZXNcXG5cXG4gICAgbmV3RmlsZS5wdXNoKGRhdGEpXFxuXFxuICAgIHNhdmVGaWxlKG5ld1BhdGgsIEpTT04uc3RyaW5naWZ5KG5ld0RhdGEpLCAwKTtcXG5cXG4gICAgdG9hc3QoXFxcIuenu+WKqOaIkOWKn1xcXCIpXFxuXFxuICAgIGNsZWFySXRlbShcXFwibW92ZVR5cGVcXFwiKVxcblxcbiAgICBjbGVhckl0ZW0oXFxcIm1vdmVEYXRhXFxcIilcXG5cXG4gICAgc3RvcmFnZTAuc2V0SXRlbShcXFwibW92ZVR5cGVcXFwiLCBcXFwiZmFsc2VcXFwiKTtcXG5cXG4gICAgcmVmcmVzaFBhZ2UoKVxcblxcbiAgICByZXR1cm4gXFxcIlxcXCJcXG5cXG59XFxuXFxuXFxuZnVuY3Rpb24gc2F2ZUZvckZvbGRlcihpZCxuYW1lLHBhdGgpe1xcblxcbiAgICBsZXQgY2hlY2tQYWdlID0gZGV0YWlsRm9yRmlsZShpZCkuZGF0YS5zdGF0c1xcblxcbiAgICBsZXQgcGFnZUNvdW50ID0gTnVtYmVyKGNoZWNrUGFnZS5zdWJkaXJfbnVtICsgY2hlY2tQYWdlLnN1YmZpbGVfbnVtKVxcblxcbiAgICBsZXQgcGFnZSA9IHBhZ2VDb3VudCA+IDEwMCA/IE51bWJlcigocGFnZUNvdW50LzEwMCkrMSkudG9GaXhlZCgwKSA6IDFcXG5cXG4gICAgZm9yIChsZXQgaSA9IDE7IGkgPD0gcGFnZTsgaSsrKSB7XFxuXFxuICAgICAgICBsZXQgYm9keSA9YHtcXFwicGFnZV9udW1cXFwiOmAraStgLFxcXCJwYWdlX3NpemVcXFwiOjEwMCxcXFwicGFyZW50X2lkXFxcIjpcXFwiYCtpZCtgXFxcIixcXFwic29ydF9kaXJlY3Rpb25cXFwiOlxcXCJhc2NcXFwiLFxcXCJzb3J0X2ZpZWxkXFxcIjpcXFwibmFtZVxcXCJ9YFxcblxcbiAgICAgICAgbGV0IGRhdGEgPSBnZXRQb3N0RGF0YShjaGVja191cmwsYm9keSkuZGF0YS5maWxlc1xcblxcbiAgICAgICAgbGV0IHNhdmVEYXRhID0gZ2V0QmFja1NhdmVEYXRhKGlkKVxcblxcbiAgICAgICAgaWYgKHBhdGggPT09IFxcXCJcXFwiKXtcXG5cXG4gICAgICAgICAgICBwYXRoID0gXFxcIjDiuJ1cXFwiK25hbWVcXG5cXG4gICAgICAgIH1lbHNlIHtcXG5cXG4gICAgICAgICAgICBwYXRoID0gcGF0aCtcXFwi4ridXFxcIituYW1lXFxuICAgICAgICB9XFxuXFxuICAgICAgICBiYWNrU2F2ZU9uZShpZCtuYW1lLHBhdGgsc2F2ZURhdGEpXFxuXFxuICAgICAgICBmb3IgKHZhciB4IGluIGRhdGEpe1xcblxcbiAgICAgICAgICAgIGxldCBmaWxlSWQgPSBkYXRhW3hdLmlkXFxuXFxuICAgICAgICAgICAgbGV0IGZpbGVOYW1lID0gZGF0YVt4XS5maWxlX25hbWVcXG5cXG4gICAgICAgICAgICBsZXQgaXNGb2xkZXIgPSBkYXRhW3hdLmlzX2ZvbGRlclxcblxcbiAgICAgICAgICAgIGlmIChpc0ZvbGRlciA+IDApe1xcblxcbiAgICAgICAgICAgICAgICBzYXZlRm9yRm9sZGVyKGZpbGVJZCxmaWxlTmFtZSxwYXRoKVxcblxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgfVxcblxcbn1cXG5cXG5mdW5jdGlvbiBnZXRCYWNrU2F2ZURhdGEoaWQpe1xcblxcbiAgICBsZXQgZmlsZURhdGEgPSBbXTtcXG5cXG4gICAgbGV0IGNoZWNrUGFnZSA9IGRldGFpbEZvckZpbGUoaWQpLmRhdGEuc3RhdHNcXG5cXG4gICAgbGV0IHBhZ2VDb3VudCA9IE51bWJlcihjaGVja1BhZ2Uuc3ViZGlyX251bSArIGNoZWNrUGFnZS5zdWJmaWxlX251bSlcXG5cXG4gICAgbGV0IHBhZ2UgPSBwYWdlQ291bnQgPiAxMDAgPyBOdW1iZXIoKHBhZ2VDb3VudC8xMDApKzEpLnRvRml4ZWQoMCkgOiAxXFxuXFxuICAgIGZvciAobGV0IGkgPSAxOyBpIDw9IHBhZ2U7IGkrKykge1xcblxcbiAgICAgICAgbGV0IGJvZHkgPWB7XFxcInBhZ2VfbnVtXFxcIjpgK2krYCxcXFwicGFnZV9zaXplXFxcIjoxMDAsXFxcInBhcmVudF9pZFxcXCI6XFxcImAraWQrYFxcXCIsXFxcInNvcnRfZGlyZWN0aW9uXFxcIjpcXFwiYXNjXFxcIixcXFwic29ydF9maWVsZFxcXCI6XFxcIm5hbWVcXFwifWBcXG5cXG4gICAgICAgIGxldCBkYXRhID0gZ2V0UG9zdERhdGEoY2hlY2tfdXJsLGJvZHkpLmRhdGEuZmlsZXNcXG5cXG4gICAgICAgIGZvciAodmFyIHggaW4gZGF0YSl7XFxuXFxuICAgICAgICAgICAgbGV0IGZpbGVJZCA9IGRhdGFbeF0uaWRcXG5cXG4gICAgICAgICAgICBsZXQgZmlsZU5hbWUgPSBkYXRhW3hdLmZpbGVfbmFtZVxcblxcbiAgICAgICAgICAgIGxldCBpc0ZvbGRlciA9IGRhdGFbeF0uaXNfZm9sZGVyXFxuXFxuICAgICAgICAgICAgaWYgKGlzRm9sZGVyID4gMCl7XFxuXFxuICAgICAgICAgICAgICAgIGZpbGVEYXRhLnB1c2goZ2V0QmFja1NhdmVGb2xkZXIoZmlsZUlkLGZpbGVOYW1lKSk7XFxuXFxuICAgICAgICAgICAgfWVsc2Uge1xcblxcbiAgICAgICAgICAgICAgICBsZXQgZmlsZVNpemUgPSBkYXRhW3hdLmZpbGVfc2l6ZVxcbiAgICAgICAgICAgICAgICBsZXQgZmlsZUNpZCA9IGRhdGFbeF0uZmlsZV9jaWRcXG4gICAgICAgICAgICAgICAgbGV0IGZpbGVUeXBlID0gZGF0YVt4XS5maWxlX3R5cGVcXG4gICAgICAgICAgICAgICAgbGV0IHN1ZmZpeCA9IFxcXCIuXFxcIitkYXRhW3hdLmZpbGVfZXh0XFxuXFxuICAgICAgICAgICAgICAgIGZpbGVEYXRhLnB1c2goZ2V0QmFja1NhdmVGaWxlKGZpbGVOYW1lLGZpbGVTaXplLGZpbGVDaWQsZmlsZVR5cGUsc3VmZml4KSk7XFxuXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcblxcbiAgICB9XFxuXFxuICAgIHJldHVybiBmaWxlRGF0YVxcblxcbn1cXG5cXG5mdW5jdGlvbiBnZXRCYWNrRGVsZXRlRm9yRmlsZShpZCxuYW1lLGZpbGVEYXRhKXtcXG5cXG4gICAgbGV0IGZpbGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZShzdGFydEluZGV4UGF0aCtpZCtuYW1lK1xcXCIuanNvblxcXCIsIDApIHx8ICdbXScpLmZpbGVEYXRhLmZpbGVzXFxuXFxuICAgIGZvciAobGV0IGkgaW4gZmlsZXMpIHtcXG5cXG4gICAgICAgIGxldCBpZCA9IGZpbGVzW2ldLmlkXFxuXFxuICAgICAgICBsZXQgbmFtZSA9IGZpbGVzW2ldLm5hbWVcXG5cXG4gICAgICAgIGxldCB0eXBlID0gZmlsZXNbaV0udHlwZVxcblxcbiAgICAgICAgaWYgKHR5cGUgPT09IDEpe1xcblxcbiAgICAgICAgICAgIGZpbGVEYXRhLnB1c2goc3RhcnRJbmRleFBhdGgraWQrbmFtZStcXFwiLmpzb25cXFwiKVxcblxcbiAgICAgICAgICAgIGdldEJhY2tEZWxldGVGb3JGaWxlKGlkLG5hbWUsZmlsZURhdGEpXFxuICAgICAgICB9XFxuICAgIH1cXG5cXG4gICAgcmV0dXJuIGZpbGVEYXRhXFxufVxcblxcbmZ1bmN0aW9uIGJhY2tGb2xkZXJEZWxldGUoZGF0YSxwYXRoKXtcXG5cXG4gICAgaWYgKGZpbGVFeGlzdChzdGFydEluZGV4UGF0aCtkYXRhLmlkK2RhdGEubmFtZStcXFwiLmpzb25cXFwiKSl7XFxuXFxuICAgICAgICBzaG93TG9hZGluZygn5Yig6Zmk5aSH5Lu95Lit77yB5LiN6KaB5Lmx54K55Ye7Jyk7XFxuXFxuICAgICAgICBsZXQgZmlsZURhdGEgPSBbXTtcXG5cXG4gICAgICAgIGxldCBpbmRleERhdGEgPSBKU09OLnBhcnNlKHJlYWRGaWxlKHBhdGgsIDApIHx8ICdbXScpXFxuXFxuICAgICAgICBsZXQgaW5kZXhGaWxlID0gaW5kZXhEYXRhLmZpbGVEYXRhLmZpbGVzXFxuXFxuICAgICAgICBsZXQgZGF0YUluZGV4ID0gaW5kZXhGaWxlLmZpbmRJbmRleChpdGVtID0+IGl0ZW0uaWQgPT09IGRhdGEuaWQpO1xcblxcbiAgICAgICAgaWYgKGRhdGFJbmRleCAhPT0gLTEpIHtcXG5cXG4gICAgICAgICAgICBpbmRleERhdGEuZmlsZURhdGEuZmlsZXMuc3BsaWNlKGRhdGFJbmRleCwgMSk7XFxuXFxuICAgICAgICB9XFxuXFxuICAgICAgICBzYXZlRmlsZShwYXRoLCBKU09OLnN0cmluZ2lmeShpbmRleERhdGEpLCAwKTtcXG5cXG4gICAgICAgIGlmIChpbmRleERhdGEuZmlsZURhdGEuZmlsZXMubGVuZ3RoIDwgMSl7XFxuXFxuICAgICAgICAgICAgZmlsZURhdGEucHVzaChwYXRoKVxcblxcbiAgICAgICAgfVxcblxcbiAgICAgICAgZmlsZURhdGEucHVzaChzdGFydEluZGV4UGF0aCtkYXRhLmlkK2RhdGEubmFtZStcXFwiLmpzb25cXFwiKVxcblxcbiAgICAgICAgbGV0IGZpbGVzID0gZ2V0QmFja0RlbGV0ZUZvckZpbGUoZGF0YS5pZCxkYXRhLm5hbWUsZmlsZURhdGEpXFxuXFxuICAgICAgICBmb3IgKGxldCBpIGluIGZpbGVzKSB7XFxuXFxuICAgICAgICAgICAgZGVsZXRlQmFja0ZpbGUoZmlsZXNbaV0pXFxuXFxuICAgICAgICB9XFxuXFxuICAgICAgICBoaWRlTG9hZGluZygpO1xcblxcbiAgICAgICAgdG9hc3QoXFxcIuWIoOmZpOWkh+S7veaIkOWKn++8gVxcXCIpXFxuXFxuICAgICAgICByZWZyZXNoUGFnZSgpO1xcblxcbiAgICB9ZWxzZSB7XFxuXFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5aSH5Lu95paH5Lu25LiN5a2Y5Zyo5oiW56iL5bqP6ZSZ6K+v77yM6K+36IGU57O75byA5Y+RJ1xcbiAgICB9XFxuXFxufVxcblxcbmZ1bmN0aW9uIGJhY2tGaWxlRGVsZXRlKGRhdGEscGF0aCl7XFxuXFxuICAgIGlmIChmaWxlRXhpc3QocGF0aCkpe1xcblxcbiAgICAgICAgc2hvd0xvYWRpbmcoJ+WIoOmZpOWkh+S7veS4re+8geS4jeimgeS5seeCueWHuycpO1xcblxcbiAgICAgICAgbGV0IGluZGV4RGF0YSA9IEpTT04ucGFyc2UocmVhZEZpbGUocGF0aCwgMCkgfHwgJ1tdJylcXG5cXG4gICAgICAgIGxldCBpbmRleEZpbGUgPSBpbmRleERhdGEuZmlsZURhdGEuZmlsZXNcXG5cXG4gICAgICAgIGxldCBkYXRhSW5kZXggPSBpbmRleEZpbGUuZmluZEluZGV4KGl0ZW0gPT4gaXRlbS5jaWQgPT09IGRhdGEuY2lkKTtcXG5cXG4gICAgICAgIGlmIChkYXRhSW5kZXggIT09IC0xKSB7XFxuXFxuICAgICAgICAgICAgaW5kZXhEYXRhLmZpbGVEYXRhLmZpbGVzLnNwbGljZShkYXRhSW5kZXgsIDEpO1xcblxcbiAgICAgICAgfVxcblxcbiAgICAgICAgc2F2ZUZpbGUocGF0aCwgSlNPTi5zdHJpbmdpZnkoaW5kZXhEYXRhKSwgMCk7XFxuXFxuICAgICAgICBoaWRlTG9hZGluZygpO1xcblxcbiAgICAgICAgdG9hc3QoXFxcIuWIoOmZpOWkh+S7veaIkOWKn++8gVxcXCIpXFxuXFxuICAgICAgICByZWZyZXNoUGFnZSgpO1xcblxcbiAgICB9ZWxzZSB7XFxuXFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5aSH5Lu95paH5Lu25LiN5a2Y5Zyo5oiW56iL5bqP6ZSZ6K+v77yM6K+36IGU57O75byA5Y+RJ1xcbiAgICB9XFxuXFxufVxcblxcblxcbmZ1bmN0aW9uIGdldEJhY2tTYXZlRm9sZGVyKGZpbGVJZCxmaWxlTmFtZSl7XFxuXFxuICAgIHJldHVybiBge1xcXCJpZFxcXCI6XFxcImArZmlsZUlkK2BcXFwiLFxcXCJuYW1lXFxcIjogXFxcImArZmlsZU5hbWUrYFxcXCIsXFxcInR5cGVcXFwiOiAxfWBcXG59XFxuXFxuZnVuY3Rpb24gZ2V0QmFja1NhdmVGaWxlKGZpbGVOYW1lLGZpbGVTaXplLGZpbGVDaWQsZmlsZVR5cGUsc3VmZml4KXtcXG5cXG4gICAgcmV0dXJuIGB7XFxcIm5hbWVcXFwiOiBcXFwiYCtmaWxlTmFtZStgXFxcIixcXFwidHlwZVxcXCI6IDAsXFxcInNpemVcXFwiOiBcXFwiYCtmaWxlU2l6ZStgXFxcIixcXFwiY2lkXFxcIjogXFxcImArZmlsZUNpZCtgXFxcIixcXFwiZmlsZVR5cGVcXFwiOiBcXFwiYCtmaWxlVHlwZStgXFxcIixcXFwic3VmZml4XFxcIjogXFxcImArc3VmZml4K2BcXFwifWBcXG59XFxuXFxuXFxuXFxuZnVuY3Rpb24gYmF0Y2hGb3JGaWxlKGRhdGEpe1xcblxcbiAgICBsb2coSlNPTi5zdHJpbmdpZnkoZGF0YSkpXFxuXFxuICAgIGNsZWFySXRlbShcXFwiYmF0Y2hcXFwiKVxcblxcbiAgICBjbGVhck15VmFyKFxcXCJiYXRjaERhdGFcXFwiKVxcblxcbn1cXG5cXG5mdW5jdGlvbiBiYXRjaEZvckZpbGVEZWxldGUoZGF0YSl7XFxuXFxuICAgIGxldCBkZWxldGVEYXRhID0gW107XFxuXFxuICAgIGZvcihsZXQgaSBpbiBkYXRhKXtcXG5cXG4gICAgICAgIGxldCBmaWxlSWQgPSBkYXRhW2ldLmlkXFxuXFxuICAgICAgICAvL2xldCBmaWxlTmFtZSA9IGRhdGFbaV0uZmlsZV9uYW1lXFxuXFxuICAgICAgICBkZWxldGVEYXRhLnB1c2goZmlsZUlkKVxcblxcbiAgICB9XFxuXFxuICAgIGxldCBib2R5ID0gYHtcXFwiaWRzXFxcIjogYCtKU09OLnN0cmluZ2lmeShkZWxldGVEYXRhKStgfWBcXG5cXG4gICAgdHJ5IHtcXG5cXG4gICAgICAgIGxldCBkYXRhID0gZ2V0UG9zdERhdGEoZGVsZXRlX2ZvbGRlcixib2R5KVxcblxcbiAgICAgICAgaWYgKGRhdGEuY29kZSA9PT0gMjAwKXtcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/mibnph4/liKDpmaTmiJDlip8nXFxuICAgICAgICB9ZWxzZSB7XFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5om56YeP5Yig6Zmk5aSx6LSlJytkYXRhLm1lc3NhZ2VcXG4gICAgICAgIH1cXG5cXG4gICAgfWNhdGNoIChlKXtcXG4gICAgICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgIH1cXG59XFxuXFxuXFxuXFxuXFxuZnVuY3Rpb24gZ2V0Q2xvdWRGaWxlRGF0YShpZCxwYWdlKXtcXG5cXG4gICAgbGV0IGJvZHkgPSBge1xcXCJmaWxlVHlwZVxcXCI6ICAgW10sIFxcXCJmaWxlTmFtZVxcXCI6IFxcXCJcXFwiLCBcXFwicGFnZU51bVxcXCI6IGArcGFyc2VJbnQocGFnZSkrYCwgXFxcInBhZ2VTaXplXFxcIjogMTAwLCBcXFwicGFyZW50SWRcXFwiOiBcXFwiYCtpZCtgXFxcIiwgXFxcInNvcnRUeXBlXFxcIjogXFxcImRlc2NcXFwiLCBcXFwic29ydEZsYWdcXFwiOiBcXFwibmFtZVxcXCIsIFxcXCJjb3VudFxcXCI6IDB9YFxcblxcbiAgICB0cnkge1xcblxcbiAgICAgICAgbGV0IGRhdGEgPSBnZXRDbG91ZFBvc3REYXRhKGNsb3VkX2ZsaWVzLGdldENsb3VkSGVhZChjbG91ZF9sb2dpbl90b2tlbiksYm9keSlcXG5cXG4gICAgICAgIHJldHVybiBkYXRhXFxuICAgIH1jYXRjaCAoZSl7XFxuICAgICAgICBsb2coZS5tZXNzYWdlKVxcbiAgICB9XFxuXFxufVxcblxcbmZ1bmN0aW9uIGdldFNlZWRzRGF0YShwYWdlKXtcXG5cXG4gICAgbGV0IGJvZHkgPSBge1xcXCJwYWdlX3NlcVxcXCI6IGArcGFyc2VJbnQocGFnZSkrYCxcXFwicGFnZV9zaXplXFxcIjogMTAwfWBcXG5cXG4gICAgdHJ5IHtcXG5cXG4gICAgICAgIGxldCBkYXRhID0gZ2V0Q2xvdWRQb3N0RGF0YShjbG91ZF9zZWVkcyxnZXRDbG91ZEhlYWQoY2xvdWRfbG9naW5fdG9rZW4pLGJvZHkpXFxuXFxuICAgICAgICBpZiAoZGF0YS5jb2RlID09PSAyMDApe1xcbiAgICAgICAgICAgIHJldHVybiBkYXRhXFxuICAgICAgICB9ZWxzZSB7XFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+afpeivouWksei0pScrZGF0YS5tZXNzYWdlXFxuICAgICAgICB9XFxuICAgIH1jYXRjaCAoZSl7XFxuICAgICAgICBsb2coZS5tZXNzYWdlKVxcbiAgICB9XFxufVxcblxcbmZ1bmN0aW9uIGdldFNlZWRzRm9yVmlkZW9EYXRhKCl7XFxuXFxuICAgIHRvYXN0KFxcXCLmlbDmja7nrKzkuIDmrKHojrflj5bovoPmhaLvvIzor7fogJDlv4PnrYnlgJnvvIFcXFwiKVxcblxcbiAgICBsZXQgYm9keSA9IGB7fWBcXG5cXG4gICAgdHJ5IHtcXG5cXG4gICAgICAgIGxldCBkYXRhID0gZ2V0Q2xvdWRQb3N0RGF0YShjbG91ZF9zZWVkc192aWRlbyxnZXRDbG91ZEhlYWQoY2xvdWRfbG9naW5fdG9rZW4pLGJvZHkpXFxuXFxuICAgICAgICAvL2xvZyhKU09OLnN0cmluZ2lmeShkYXRhKSlcXG5cXG4gICAgICAgIGlmIChkYXRhLmNvZGUgPT09IDIwMCl7XFxuICAgICAgICAgICAgcHV0TXlWYXIoXFxcInNlZWRzVmlkZW9zXFxcIixkYXRhLmRhdGEudmlkZW9zKVxcbiAgICAgICAgICAgIHB1dE15VmFyKFxcXCJzZWVkc1ZpZGVvc0xlbmd0aFxcXCIsZGF0YS5kYXRhLnZpZGVvcy5sZW5ndGgpXFxuICAgICAgICAgICAgcmV0dXJuIGRhdGEuZGF0YS52aWRlb3NcXG4gICAgICAgIH1lbHNlIHtcXG4gICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5p+l6K+i5aSx6LSlJytkYXRhLm1lc3NhZ2VcXG4gICAgICAgIH1cXG4gICAgfWNhdGNoIChlKXtcXG4gICAgICAgIGxvZyhlLm1lc3NhZ2UpXFxuICAgIH1cXG59XFxuXFxuXFxuXFxuXFxuZnVuY3Rpb24gY2hlY2tNYWdlbnREYXRhKG1hZ2VudCx0eXBlKSB7XFxuXFxuICAgIGlmICh0eXBlID09PSAnZGF0YScpIHtcXG5cXG4gICAgICAgIGxldCB1cmwgPSBcXFwiaHR0cHM6Ly9hcGkubWFnbmV0LXZpcC5jb20vYXBpMi9tYWduZXRpbmZvXFxcIlxcblxcbiAgICAgICAgbGV0IGhlYWQ9e31cXG5cXG4gICAgICAgIGxldCBib2R5ID0gYHtcXFwidXJsXFxcIjpcXFwiYCArIG1hZ2VudCArIGBcXFwifWBcXG5cXG4gICAgICAgIGxldCBkYXRhID0gcG9zdCh1cmwsIHtoZWFkZXJzOmhlYWQsYm9keTogYm9keX0pXFxuXFxuICAgICAgICBpZiAoZGF0YSA9PT0gXFxcIlRvbyBtYW55IHJlcXVlc3RzLCBwbGVhc2UgdHJ5IGFnYWluIGxhdGVyLlxcXCIpIHtcXG5cXG4gICAgICAgICAgICByZXR1cm4gXFxcImVycm9yXFxcIlxcbiAgICAgICAgfSBlbHNlIGlmKGRhdGEgPT09IFxcXCJcXFwiKXtcXG4gICAgICAgICAgICByZXR1cm4gXFxcIlxcXCJcXG4gICAgICAgIH1lbHNlIHtcXG5cXG4gICAgICAgICAgICByZXR1cm4gZGF0YVxcbiAgICAgICAgfVxcblxcbiAgICB9IGVsc2Uge1xcblxcbiAgICAgICAgbGV0IHVybCA9IFxcXCJodHRwczovL3doYXRzbGluay5pbmZvL2FwaS92MS9saW5rP3VybD1cXFwiICsgbWFnZW50XFxuXFxuICAgICAgICBsZXQgZGF0YSA9IHJlcXVlc3QodXJsKVxcblxcbiAgICAgICAgaWYgKGRhdGEgPT09IFxcXCJUb28gbWFueSByZXF1ZXN0cywgcGxlYXNlIHRyeSBhZ2FpbiBsYXRlci5cXFwiKSB7XFxuXFxuICAgICAgICAgICAgcmV0dXJuIGB7XFxcInN0YXR1c1xcXCI6IFxcXCJlcnJvclxcXCJ9YFxcbiAgICAgICAgfSBlbHNlIHtcXG5cXG4gICAgICAgICAgICByZXR1cm4gZGF0YVxcbiAgICAgICAgfVxcblxcbiAgICB9XFxuXFxufVxcblxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5bCP6b6Z55uY5paH5Lu2XCIsXCJwYXRoXCI6XCJzdGFydFwiLFwicnVsZVwiOlwianM6XFxuICAgIHZhciBkID0gW107XFxuXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9mdW5jdGlvbnMnKSkucnVsZSlcXG5cXG4vL+WAvOS8oOmAklxcblxcbmlkID0gTVlfUEFSQU1TLmlkXFxucGFyZW50X2lkID0gTVlfUEFSQU1TLnBhcmVudF9pZFxcblxcbmxldCBzdGFydFBhZ2UgPSBOdW1iZXIoZ2V0TXlWYXIoaWQrXFxcInN0YXJ0UGFnZVxcXCIsXFxcIjFcXFwiKSlcXG5cXG5cXG5pZighaWQpe1xcbiAgICBpZCA9IFxcXCJcXFwiXFxuICAgIHBhcmVudF9pZCA9IFxcXCJcXFwiXFxufVxcblxcbmxldCBjaGVja19sb2dpbiA9IGNoZWNrVG9rZW4oKVxcblxcbmlmKGNoZWNrX2xvZ2luLmNvZGUgPT09IDIwMCl7XFxuICAgIC8v57q/6Lev5YiX6KGoXFxuXFxuICAgIGxpbmU9XFxcImh0dHBzOi8vaXBmc2d3MDAuc3Rhcml2ZXJwYW4uY29tOjkwOTUvaXBmcy9cXFwiXFxuXFxuLy/lm7rlrprlgLzku6Xlj4rlm77moIdcXG5cXG4gICAgdG9rZW4gPSBnZXRWYXIoXFxcInRva2VuXFxcIilcXG5cXG4gICAgdHJ5e1xcblxcblxcbiAgICAgICAgaGVhZCA9IHtcXG4gICAgICAgICAgICBcXFwiQXV0aG9yaXphdGlvblxcXCI6IFxcXCJCZWFyZXIgXFxcIit0b2tlbixcXG4gICAgICAgICAgICBcXFwiVXNlci1BZ2VudFxcXCI6IFxcXCJNb3ppbGxhLzUuMCAoV2luZG93cyBOVCAxMC4wOyBXaW42NDsgeDY0KSBBcHBsZVdlYktpdC81MzcuMzYgKEtIVE1MLCBsaWtlIEdlY2tvKSBsb29uZ2JveC11LzEuMi4zIENocm9tZS8xMDguMC41MzU5LjE3OSBFbGVjdHJvbi8yMi4xLjAgU2FmYXJpLzUzNy4zNlxcXCJcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIC8vIGlmIChzdG9yYWdlMC5nZXRJdGVtKFxcXCJzZWFyY2hcXFwiLFxcXCIwXFxcIikgPT09IFxcXCIxXFxcIil7XFxuICAgICAgICAvLyAgICAgdXJsID0gc2VhcmNoX2ZpbGVcXG4gICAgICAgIC8vICAgICBib2R5ID0gYHtcXFwia2V5d29yZHNcXFwiOiBcXFwiYCtzdG9yYWdlMC5nZXRJdGVtKFxcXCJzZWFyY2hOYW1lXFxcIiwgXFxcIlxcXCIpK2BcXFwiLCBcXFwic29ydF9kaXJlY3Rpb25cXFwiOiBcXFwiYCtzdG9yYWdlMC5nZXRJdGVtKFxcXCLmjpLluo/mlrnlvI9cXFwiLCBcXFwiYXNjXFxcIikrYFxcXCIsIFxcXCJzb3J0X2ZpZWxkXFxcIjogXFxcImArc3RvcmFnZTAuZ2V0SXRlbShcXFwi5o6S5bqP57G75Z6LXFxcIiwgXFxcIm5hbWVcXFwiKStgXFxcIiwgXFxcImNvdW50XFxcIjogMCwgXFxcInBhZ2VfbnVtXFxcIjogYCtwYWdlK2AsIFxcXCJwYWdlX3NpemVcXFwiOiAxMDAsIFxcXCJzdWZmaXhlc1xcXCI6IFtdLCBcXFwicm9vdF9pZFxcXCI6IFxcXCJcXFwifWBcXG4gICAgICAgIC8vIH1lbHNlIHtcXG4gICAgICAgIHVybCA9IGNoZWNrX3VybFxcbiAgICAgICAgYm9keSA9YHtcXFwicGFnZV9udW1cXFwiOmArc3RhcnRQYWdlK2AsXFxcInBhZ2Vfc2l6ZVxcXCI6MTAwLFxcXCJwYXJlbnRfaWRcXFwiOlxcXCJgK2lkK2BcXFwiLFxcXCJzb3J0X2RpcmVjdGlvblxcXCI6XFxcImArc3RvcmFnZTAuZ2V0SXRlbShcXFwi5o6S5bqP5pa55byPXFxcIiwgXFxcImFzY1xcXCIpK2BcXFwiLFxcXCJzb3J0X2ZpZWxkXFxcIjpcXFwiYCtzdG9yYWdlMC5nZXRJdGVtKFxcXCLmjpLluo/nsbvlnotcXFwiLCBcXFwibmFtZVxcXCIpK2BcXFwifWBcXG4gICAgICAgIC8vIH1cXG5cXG5cXG4gICAgICAgIHJlc3VsdCA9IHBvc3QodXJsLHtoZWFkZXJzOiBoZWFkLGJvZHk6Ym9keX0pXFxuXFxuICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShyZXN1bHQpLmRhdGEuZmlsZXNcXG4gICAgICAgIHBhZ2VzID0gTnVtYmVyKEpTT04ucGFyc2UocmVzdWx0KS5kYXRhLnRvdGFsX251bSlcXG4gICAgICAgIHBhZ2VDb3VudCA9IHBhcnNlSW50KChwYWdlcyArIDEwMCAtMSkvMTAwKVxcbiAgICAgICAgbWluUGFnZSA9IHN0YXJ0UGFnZSA+IDEgPyBjaGFuZ2VQYWdlSW50KHN0YXJ0UGFnZSxcXFwiLVxcXCIpIDogMVxcbiAgICAgICAgbWF4UGFnZSA9IHN0YXJ0UGFnZSA+PSBwYWdlQ291bnQgPyBwYWdlQ291bnQgOiBjaGFuZ2VQYWdlSW50KHN0YXJ0UGFnZSxcXFwiK1xcXCIpXFxuXFxuXFxuICAgICAgICAvL+aOkuW6j+WKn+iDvVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpzdG9yYWdlMC5nZXRJdGVtKFxcXCLmjpLluo/lj5jph49cXFwiLCBcXFwi5ZCN56ew5q2j5bqPXFxcIiksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzNcXFwiLFxcbiAgICAgICAgICAgIHVybDokKFtcXFwi5ZCN56ew5q2j5bqPXFxcIixcXFwi5ZCN56ew5YCS5bqPXFxcIixcXFwi5pe26Ze05q2j5bqPXFxcIixcXFwi5pe26Ze05YCS5bqPXFxcIixcXFwi5aSn5bCP5q2j5bqPXFxcIixcXFwi5aSn5bCP5YCS5bqPXFxcIl0sIDIsJ+mcgOimgeS7gOS5iOexu+Wei+aOkuW6j++8nycpLnNlbGVjdCgoKSA9PiB7XFxuXFxuICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcIuaOkuW6j+WPmOmHj1xcXCIsIGlucHV0KTtcXG4gICAgICAgICAgICAgICAgaWYoaW5wdXQuaW5jbHVkZXMoXFxcIuWQjeensFxcXCIpKVxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwi5o6S5bqP57G75Z6LXFxcIiwgXFxcIm5hbWVcXFwiKTtcXG4gICAgICAgICAgICAgICAgZWxzZSBpZihpbnB1dC5pbmNsdWRlcyhcXFwi5pe26Ze0XFxcIikpXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCLmjpLluo/nsbvlnotcXFwiLCBcXFwidXBsb2FkXFxcIik7XFxuICAgICAgICAgICAgICAgIGVsc2VcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcIuaOkuW6j+exu+Wei1xcXCIsIFxcXCJzaXplXFxcIik7XFxuXFxuICAgICAgICAgICAgICAgIGlmKGlucHV0LmluY2x1ZGVzKFxcXCLmraPluo9cXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcIuaOkuW6j+aWueW8j1xcXCIsIFxcXCJhc2NcXFwiKTtcXG4gICAgICAgICAgICAgICAgZWxzZVxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwi5o6S5bqP5pa55byPXFxcIiwgXFxcImRlc2NcXFwiKTtcXG5cXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5YiH5o2i5oiQ5YqfXFxcIlxcblxcbiAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgICAgdGV4dFNpemU6NlxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgLy/mmL7npLrnsbvlnotcXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6c3RvcmFnZTAuZ2V0SXRlbShcXFwi5paH5Lu25qC35byPXFxcIiwgXFxcIuWIl+ihqOaooeW8j1xcXCIpLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8zXFxcIixcXG4gICAgICAgICAgICB1cmw6JChbXFxcIuWIl+ihqOaooeW8j1xcXCIsXFxcIuWbvuaWh+aooeW8j1xcXCIsXFxcIuWFqOWQjeaooeW8j1xcXCIsXFxcIua8q+eUu+aooeW8j1xcXCJdLCAyLCfpnIDopoHku4DkuYjmoLflvI/mmL7npLrvvJ8nKS5zZWxlY3QoKGRhdGEpID0+IHtcXG5cXG4gICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwi5paH5Lu25qC35byPXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICBpZihpbnB1dD09XFxcIuWIl+ihqOaooeW8j1xcXCIpXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCLmlofku7bmoLflvI/lj5jph49cXFwiLCBcXFwiYXZhdGFyXFxcIik7XFxuICAgICAgICAgICAgICAgIGlmKGlucHV0PT1cXFwi5Zu+5paH5qih5byPXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcIuaWh+S7tuagt+W8j+WPmOmHj1xcXCIsIFxcXCJtb3ZpZV8yXFxcIik7XFxuICAgICAgICAgICAgICAgIGlmKGlucHV0PT1cXFwi5YWo5ZCN5qih5byPXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcIuaWh+S7tuagt+W8j+WPmOmHj1xcXCIsIFxcXCJ0ZXh0XzFcXFwiKTtcXG4gICAgICAgICAgICAgICAgaWYgKGlucHV0PT1cXFwi5ryr55S75qih5byPXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCcnKS5sYXp5UnVsZSgoZGF0YSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZnVuY3Rpb25zJykpLnJ1bGUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldEltYWdlTGlzdChkYXRhKVxcbiAgICAgICAgICAgICAgICAgICAgfSxkYXRhKVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/liIfmjaLmiJDlip9cXFwiXFxuXFxuICAgICAgICAgICAgfSxkYXRhKVxcbiAgICAgICAgfSk7XFxuICAgICAgICAvL+abtOWkmuWKn+iDvVxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpcXFwi5pu05aSa5Yqf6IO9XFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfM1xcXCIsXFxuICAgICAgICAgICAgdXJsOiQoW1xcXCLmlrDlu7rmlofku7blpLlcXFwiLFxcXCLmkJzntKJcXFwiLFxcXCLmibnph4/mk43kvZxcXFwiLFxcXCLmvKvnlLvmqKHlvI9cXFwiLFxcXCLovazlrZjmqKHlvI9cXFwiLFxcXCLmibnph4/mqKHlvI9cXFwiLFxcXCLmma7pgJrmqKHlvI9cXFwiXSwgMiwn5Yqf6IO95pON5L2cJykuc2VsZWN0KChkYXRhLGlkKSA9PiB7XFxuXFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PSBcXFwi5paw5bu65paH5Lu25aS5XFxcIil7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIixcXFwi5paH5Lu25ZCN56ewXFxcIikuaW5wdXQoKGlkKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9mdW5jdGlvbnMnKSkucnVsZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlRm9sZGVyKGlkLGlucHV0KVxcbiAgICAgICAgICAgICAgICAgICAgfSxpZClcXG4gICAgICAgICAgICAgICAgfWVsc2UgaWYoaW5wdXQ9PVxcXCLmkJzntKJcXFwiKXtcXG4gICAgICAgICAgICAgICAgICAgIC8vIHJldHVybiAkKFxcXCJcXFwiLFxcXCLmlofku7blkI3np7BcXFwiKS5pbnB1dCgoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgY2xlYXJJdGVtKFxcXCJzZWFyY2hcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgIGNsZWFySXRlbShcXFwic2VhcmNoTmFtZVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwic2VhcmNoXFxcIiwgXFxcIjFcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJzZWFyY2hOYW1lXFxcIiwgaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgIC8vICAgICB0b2FzdChcXFwi5pCc57Si5oiQ5YqfXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIC8vIH0pXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5b6F5a6e546wXFxcIlxcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZihpbnB1dD09XFxcIuaJuemHj+aTjeS9nFxcXCIpe1xcblxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW1xcXCLmibnph4/lpIfku71cXFwiLFxcXCLmibnph4/liKDpmaRcXFwiXSwgMiwn5Yqf6IO95pON5L2cJykuc2VsZWN0KChpZCkgPT4ge1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBiYXRjaEZpbGVKc29uID0gSlNPTi5wYXJzZShnZXRNeVZhcihcXFwiYmF0Y2hEYXRhXFxcIixcXFwiW11cXFwiKSlcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoYmF0Y2hGaWxlSnNvbi5sZW5ndGggPCAxKXtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+ayoeaciemAieaLqeaVsOaNrizor7fov5vlhaXmibnph4/mqKHlvI/pgInmi6nvvIFcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gXFxcIuaJuemHj+Wkh+S7vVxcXCIpe1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhckl0ZW0oXFxcImJhY2tUeXBlXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJdGVtKFxcXCJiYWNrQ2hhbmdlXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJdGVtKFxcXCJiYWNrQ2hhbmdlRGF0YVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySXRlbShcXFwiYmFja0NoYW5nZVR5cGVcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJiYWNrVHlwZVxcXCIsIFxcXCJzdGFydFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJiYWNrQ2hhbmdlXFxcIixcXFwidHJ1ZVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJiYWNrQ2hhbmdlVHlwZVxcXCIsXFxcInRydWVcXFwiKTtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvcmVhZEJhY2tcXFwiXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYgKGlucHV0ID09PSBcXFwi5om56YeP5Yig6ZmkXFxcIil7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZnVuY3Rpb25zJykpLnJ1bGUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYXRjaEZvckZpbGVEZWxldGUoYmF0Y2hGaWxlSnNvbilcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgICAgICB9LGlkKVxcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZiAoaW5wdXQ9PVxcXCLmvKvnlLvmqKHlvI9cXFwiKXtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCcnKS5sYXp5UnVsZSgoZGF0YSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZnVuY3Rpb25zJykpLnJ1bGUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldEltYWdlTGlzdChkYXRhKVxcbiAgICAgICAgICAgICAgICAgICAgfSxkYXRhKVxcbiAgICAgICAgICAgICAgICB9ZWxzZSBpZiAoaW5wdXQ9PVxcXCLovazlrZjmqKHlvI9cXFwiKXtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBjb25maXJtKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTon6L2s5a2Y56Gu6K6kJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50Oifor7fms6jmhI/vvJrovazlrZjmqKHlvI/lvIDlkK/lkI7ml6Dms5Xmn6Xor6LlsI/pvpnnm5jmlofku7bvvIEnLFxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm06JC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySXRlbShcXFwic2F2ZVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcInNhdmVcXFwiLCBcXFwiMVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6L2s5a2Y5qih5byP5bey5byA5ZCvXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pLFxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbDokLnRvU3RyaW5nKCgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJdGVtKFxcXCJzYXZlXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwic2F2ZVxcXCIsIFxcXCIwXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lj5bmtojovazlrZhcXFwiXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQ9PVxcXCLmma7pgJrmqKHlvI9cXFwiKXtcXG4gICAgICAgICAgICAgICAgICAgIGNsZWFySXRlbShcXFwic2F2ZVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICBjbGVhckl0ZW0oXFxcInNlYXJjaFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICBjbGVhckl0ZW0oXFxcInNlYXJjaE5hbWVcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJdGVtKFxcXCJiYXRjaFxcXCIpXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJzZWFyY2hcXFwiLCBcXFwiMFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwic2F2ZVxcXCIsIFxcXCIwXFxcIik7XFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJiYXRjaFxcXCIsIFxcXCJmYWxzZVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/mma7pgJrmqKHlvI/lt7LlvIDlkK9cXFwiXFxuICAgICAgICAgICAgICAgIH1lbHNlIGlmIChpbnB1dD09XFxcIuaJuemHj+aooeW8j1xcXCIpe1xcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJJdGVtKFxcXCJzYXZlXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcImJhdGNoXFxcIiwgXFxcInRydWVcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5om56YeP5qih5byP5bey5byA5ZCvXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgfSxkYXRhLGlkKVxcbiAgICAgICAgfSk7XFxuXFxuXFxuICAgICAgICAvLyBkLnB1c2goe1xcbiAgICAgICAgLy8gICAgIHRpdGxlOiBcXFwiXFxcIixcXG4gICAgICAgIC8vICAgICBkZXNjOmdldFBvc3REYXRhKGNoZWNrX3VybCxib2R5KS5kYXRhLmZpbGVzLFxcbiAgICAgICAgLy8gICAgIGNvbF90eXBlOiBcXFwidGV4dF8zXFxcIlxcbiAgICAgICAgLy8gfSk7XFxuXFxuXFxuICAgICAgICAvL+mhtumDqOmhteaVsOaTjeS9nFxcbiAgICAgICAgaWYgKHBhZ2VzID4gMTAwKXtcXG4gICAgICAgICAgICAvL+ivt+axgumhteaVsFxcblxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOlxcXCLkuIrkuIDpobVcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaWQsc3RhcnRQYWdlLG1pblBhZ2UpID0+IHtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGlmKHN0YXJ0UGFnZT5taW5QYWdlKVxcbiAgICAgICAgICAgICAgICAgICAge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKGlkK1xcXCJzdGFydFBhZ2VcXFwiLG1pblBhZ2UpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5LiK5LiA6aG1XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7cmV0dXJuIFxcXCJ0b2FzdDovL+W3sue7j+acgOWJjVxcXCJ9XFxuXFxuICAgICAgICAgICAgICAgIH0saWQsc3RhcnRQYWdlLG1pblBhZ2UpLFxcbiAgICAgICAgICAgICAgICAvL3BpY191cmw6bGFzdF9pbWFnZSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzNcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgY2xzOiBcXFwicGxheWxpc3Qg5LiK5LiA6aG1XFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6c3RhcnRQYWdlK1xcXCIvXFxcIitwYWdlQ291bnQsXFxuICAgICAgICAgICAgICAgIHVybDokKCcnLCfor7fovpPlhaXpobXnoIEnKS5pbnB1dCgoaWQscGFnZUNvdW50KT0+e1xcblxcbiAgICAgICAgICAgICAgICAgICAgaWYoaW5wdXQ+MCYmTnVtYmVyKGlucHV0KTw9cGFnZUNvdW50KXtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihpZCsnc3RhcnRQYWdlJyxpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3sue7j+i3s+i9rOWIsOesrFxcXCIraW5wdXQrXFxcIumhtVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle3JldHVybiBcXFwidG9hc3Q6Ly/ovpPlhaXplJnor69cXFwifVxcbiAgICAgICAgICAgICAgICB9LGlkLHBhZ2VDb3VudCksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8zXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGNsczogXFxcInBsYXlsaXN0IOaAu+mhteaVsFxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOlxcXCLkuIvkuIDpobVcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaWQsc3RhcnRQYWdlLG1heFBhZ2UpID0+IHtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGlmKHN0YXJ0UGFnZTxtYXhQYWdlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoaWQrXFxcInN0YXJ0UGFnZVxcXCIsbWF4UGFnZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kuIvkuIDpobVcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtyZXR1cm4gXFxcInRvYXN0Oi8v5bey57uP5pyA5ZCOXFxcIn1cXG4gICAgICAgICAgICAgICAgfSxpZCxzdGFydFBhZ2UsbWF4UGFnZSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8zXFxcIixcXG4gICAgICAgICAgICAgICAgLy9waWNfdXJsOm5leHRfaW1hZ2UsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBjbHM6IFxcXCJwbGF5bGlzdCDkuIvkuIDpobVcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG5cXG5cXG4gICAgICAgIC8v5pWw5o2u5b6q546vXFxuXFxuICAgICAgICBmb3IgKHZhciBpIGluIGRhdGEpIHtcXG5cXG4gICAgICAgICAgICAvL+WbuuWumuWAvOWIpOaWrVxcblxcbiAgICAgICAgICAgIHBpY1R5cGUgPSBmb2xkZXJfaW1hZ2VcXG4gICAgICAgICAgICB1cmxfdHlwZSA9IFxcXCJcXFwiXFxuICAgICAgICAgICAgdXJsX2JhY2sgPSBcXFwiXFxcIlxcbiAgICAgICAgICAgIGNvbFR5cGUgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCLmlofku7bmoLflvI/lj5jph49cXFwiLCBcXFwiYXZhdGFyXFxcIilcXG5cXG4gICAgICAgICAgICAvL+W+queOr+WbuuWumuWAvFxcblxcbiAgICAgICAgICAgIGZpbGVOYW1lID0gZGF0YVtpXS5maWxlX25hbWVcXG4gICAgICAgICAgICB0aW1lID0gdGltZXN0YW1wVG9UaW1lKGRhdGFbaV0uY3JlYXRlX3RpbWUpXFxuICAgICAgICAgICAgaXNGb2xkZXIgPSBkYXRhW2ldLmlzX2ZvbGRlclxcbiAgICAgICAgICAgIGZpbGVJZCA9IGRhdGFbaV0uaWRcXG4gICAgICAgICAgICBmaWxlX3NpemUgPSBnZXRGaWxlU2l6ZShkYXRhW2ldLmZpbGVfc2l6ZSlcXG4gICAgICAgICAgICBwYXJlbnRJZCA9IGRhdGFbaV0ucGFyZW50X2lkXFxuICAgICAgICAgICAgZmlsZVR5cGUgPSBkYXRhW2ldLmZpbGVfdHlwZVxcblxcbiAgICAgICAgICAgIGxldCBiYWNrRGF0YSA9IGRhdGFbaV1cXG5cXG5cXG4vL+WIpOaWreaWh+S7tuWkueWSjOaWh+S7tlxcblxcbiAgICAgICAgICAgIGlmKGlzRm9sZGVyID4gMCl7XFxuXFxuICAgICAgICAgICAgICAgIHBpY1R5cGUgPSBmb2xkZXJfaW1hZ2VcXG5cXG5cXG4gICAgICAgICAgICAgICAgaWYgKHN0b3JhZ2UwLmdldEl0ZW0oXFxcInNhdmVcXFwiLFxcXCIwXFxcIikuZXF1YWxzKFxcXCIxXFxcIikpe1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogXFxcIui9rOWtmOatpOaWh+S7tuWkue+8mlxcXCIrZmlsZU5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOlxcXCJoaWtlcjovL3BhZ2UvY2xvdWQ/aWQ9XFxcIitmaWxlSWQrXFxcIiZmaWxlTmFtZT1cXFwiK2ZpbGVOYW1lK1xcXCImdHlwZT1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpY191cmw6IHBpY1R5cGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGNvbFR5cGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDpmaWxlSWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5hbWU6IGZpbGVOYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiAnZm9sZGVyJyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmV3V2luZG93OiB0cnVlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB3aW5kb3dJZDogZmlsZUlkXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoc3RvcmFnZTAuZ2V0SXRlbShcXFwiYmF0Y2hcXFwiLFxcXCJmYWxzZVxcXCIpLmVxdWFscyhcXFwidHJ1ZVxcXCIpKXtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGxldCBiYXRjaERhdGEgPSBkYXRhW2ldXFxuXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOlxcXCLmibnph48tIFxcXCIrZmlsZU5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzpcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOmdldE15VmFyKGZpbGVJZCtiYXRjaERhdGEsZm9sZGVyX2ltYWdlKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTpjb2xUeXBlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDokKFxcXCIjbm9Mb2FkaW5nI1xcXCIpLmxhenlSdWxlKChmaWxlSWQsYmF0Y2hEYXRhKT0+e1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgYmF0Y2hGb3JEYXRhID0gSlNPTi5wYXJzZShnZXRNeVZhcihcXFwiYmF0Y2hEYXRhXFxcIixcXFwiW11cXFwiKSlcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKFxcXCLmlbDmja7vvJpcXFwiK0pTT04uc3RyaW5naWZ5KGJhdGNoRm9yRGF0YSkpXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChnZXRNeVZhcihmaWxlSWQrYmF0Y2hEYXRhKSl7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXRjaEZvckRhdGEuc3BsaWNlKGJhdGNoRm9yRGF0YS5pbmRleE9mKGJhdGNoRGF0YSksMSlcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKFxcXCJiYXRjaERhdGFcXFwiLGJhdGNoRm9yRGF0YSlcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhcXFwi5Yig6Zmk77yaXFxcIitnZXRNeVZhcihcXFwiYmF0Y2hEYXRhXFxcIikpXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhck15VmFyKGZpbGVJZCtiYXRjaERhdGEpXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFxcXCLlj5bmtojpgInmi6k6XFxcIitiYXRjaERhdGEuZmlsZV9uYW1lKVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSB7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coXFxcIui/m+WFpVxcXCIpXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZGF0YSA9IFtdO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9mdW5jdGlvbnMnKSkucnVsZSlcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEucHVzaChiYXRjaERhdGEpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmF0Y2hGb3JEYXRhID0gYmF0Y2hGb3JEYXRhLmNvbmNhdChkYXRhKVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoXFxcImJhdGNoRGF0YVxcXCIsYmF0Y2hGb3JEYXRhKVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoZmlsZUlkK2JhdGNoRGF0YSxwaXRjaF9pbWFnZSlcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvZyhcXFwi5re75Yqg77yaXFxcIitnZXRNeVZhcihcXFwiYmF0Y2hEYXRhXFxcIikpXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvYXN0KFxcXCLpgInmi6k6XFxcIitiYXRjaERhdGEuZmlsZV9uYW1lKVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL2VtcHR5XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxmaWxlSWQsYmF0Y2hEYXRhKSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOmZpbGVJZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTogZmlsZU5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVzYzogdGltZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBwaWNUeXBlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogY29sVHlwZT09XFxcIua8q+eUu+aooeW8j1xcXCI/JCgnJykubGF6eVJ1bGUoKGRhdGEpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZnVuY3Rpb25zJykpLnJ1bGUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0SW1hZ2VMaXN0KGRhdGEpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sZGF0YSk6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcXCJoaWtlcjovL3BhZ2Uvc3RhcnQjbm9SZWNvcmRIaXN0b3J5IyNjYWNoZU9ubHkjP2lkPVxcXCIrZmlsZUlkK1xcXCImc3RhcnRQYWdlPVxcXCIrc3RhcnRQYWdlK1xcXCImcGFyZW50X2lkPVxcXCIrcGFyZW50SWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGNvbFR5cGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZDpmaWxlSWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0YXJ0UGFnZToxLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRfaWQ6cGFyZW50SWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazpbXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGl0bGU6IFxcXCLmlofku7bmk43kvZxcXFwiLCBqczogJC50b1N0cmluZygoZmlsZUlkKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW1xcXCLkv67mlLnlkI3np7BcXFwiLFxcXCLliKDpmaTmlofku7ZcXFwiLFxcXCLmlofku7bor6bmg4VcXFwiXSwgMiwn5Yqf6IO95pON5L2cJykuc2VsZWN0KChmaWxlSWQpID0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChpbnB1dCA9PT0gXFxcIuS/ruaUueWQjeensFxcXCIpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIixcXFwi5paH5Lu25ZCN56ewXFxcIikuaW5wdXQoKGZpbGVJZCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9mdW5jdGlvbnMnKSkucnVsZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVGaWxlTmFtZShmaWxlSWQsaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sZmlsZUlkKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IFxcXCLliKDpmaTmlofku7ZcXFwiKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9mdW5jdGlvbnMnKSkucnVsZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGV0ZVN0YXJ0RmlsZShmaWxlSWQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmKGlucHV0ID09PSBcXFwi5paH5Lu26K+m5oOFXFxcIil7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZnVuY3Rpb25zJykpLnJ1bGUpXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBkYXRhID0gZGV0YWlsRm9yRmlsZShmaWxlSWQpLmRhdGFcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9nKEpTT04uc3RyaW5naWZ5KGRhdGEpKVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgZm9sZGVyID0gZGF0YS5zdGF0cy5zdWJkaXJfbnVtXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxldCBmaWxlID0gZGF0YS5zdGF0cy5zdWJmaWxlX251bVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgc2l6ZSA9IGdldEZpbGVTaXplKGRhdGEuc3RhdHMuc3ViZmlsZV9zaXplKVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYGNvbmZpcm06Ly/mlofku7bwn5OROmArZmlsZStgXFxcXG7mlofku7blpLnwn5eCOmArZm9sZGVyK2BcXFxcbuWkp+Wwj/CfkqU6YCtzaXplK2AuanM6J3RvYXN0Oi8v8J+MmvCfjJrwn4yaJ2BcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sZmlsZUlkKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sZmlsZUlkKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aXRsZTogXFxcIuejgeWKm+aTjeS9nFxcXCIsanM6ICQudG9TdHJpbmcoKGZpbGVJZCxmaWxlTmFtZSk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW1xcXCLorr7nva7pu5jorqTno4HliptcXFwiLFxcXCLmt7vliqDno4HliptcXFwiXSwgMiwn5Yqf6IO95pON5L2cJykuc2VsZWN0KChmaWxlSWQsZmlsZU5hbWUpID0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0ID09PSBcXFwi6K6+572u6buY6K6k56OB5YqbXFxcIil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9mdW5jdGlvbnMnKSkucnVsZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coZmlsZUlkKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzZXRBZGRGb2xkZXIoZmlsZUlkLGZpbGVOYW1lKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoaW5wdXQgPT09IFxcXCLmt7vliqDno4HliptcXFwiKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChcXFwiXFxcIixcXFwi56OB5Yqb6ZO+5o6lXFxcIikuaW5wdXQoKGZpbGVJZCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2Z1bmN0aW9ucycpKS5ydWxlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYWRkTWFnZW50KGZpbGVJZCxpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LGZpbGVJZClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxmaWxlSWQsZmlsZU5hbWUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxmaWxlSWQsZmlsZU5hbWUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LHt0aXRsZTogXFxcIuabtOWkmuaTjeS9nFxcXCIsIGpzOiAkLnRvU3RyaW5nKChmaWxlSWQsYmFja0RhdGEpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFtcXFwi5rKJ5rW45ryr55S7XFxcIixcXFwi5aSH5Lu95paH5Lu2XFxcIixcXFwi6Ieq5Li75aSH5Lu9XFxcIl0sIDIsJ+WKn+iDveaTjeS9nCcpLnNlbGVjdCgoZmlsZUlkLGJhY2tEYXRhKSA9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlucHV0ID09PSBcXFwi5rKJ5rW45ryr55S7XFxcIil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9mdW5jdGlvbnMnKSkucnVsZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW1tZXJzaW9uSW5Db21pY3MoZmlsZUlkKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoaW5wdXQgPT09IFxcXCLlpIfku73mlofku7ZcXFwiKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2Z1bmN0aW9ucycpKS5ydWxlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBjaGVja0JhY2tJc1RydWUoXFxcIlxcXCIsYmFja0RhdGEsXFxcIlxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihpbnB1dCA9PT0gXFxcIuiHquS4u+Wkh+S7vVxcXCIpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySXRlbShcXFwiYmFja1R5cGVcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySXRlbShcXFwiYmFja0NoYW5nZVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJdGVtKFxcXCJiYWNrQ2hhbmdlRGF0YVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJdGVtKFxcXCJiYWNrQ2hhbmdlVHlwZVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwiYmFja1R5cGVcXFwiLCBcXFwic3RhcnRcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJiYWNrQ2hhbmdlXFxcIixcXFwidHJ1ZVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcImJhY2tDaGFuZ2VUeXBlXFxcIixcXFwiZmFsc2VcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJiYWNrQ2hhbmdlRGF0YVxcXCIsYmFja0RhdGEpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3JlYWRCYWNrXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LGZpbGVJZCxiYWNrRGF0YSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LGZpbGVJZCxiYWNrRGF0YSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFNpemU6MjQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgICAgIH1cXG5cXG5cXG5cXG4gICAgICAgICAgICB9ZWxzZXtcXG5cXG4gICAgICAgICAgICAgICAgLy/mlofku7blm7rlrprlgLxcXG5cXG4gICAgICAgICAgICAgICAgY2lkID0gZGF0YVtpXS5maWxlX2NpZFxcbiAgICAgICAgICAgICAgICB0eXBlID0gZGF0YVtpXS5maWxlX2V4dFxcbiAgICAgICAgICAgICAgICBwaWNUeXBlID0gZmlsZV9pbWFnZVxcblxcblxcbiAgICAgICAgICAgICAgICAvL+WIpOaWreaWh+S7tuexu+Wei1xcblxcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKHRydWUpIHtcXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgaW1hZ2VfcmVndWxhci50ZXN0KHR5cGUpOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpY1R5cGUgPSBsaW5lK2NpZCsnQFJlZmVyZXI9aHR0cHM6Ly93eC5zdGFyaXZlcnBhbi5jb20vJ1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSB2aWRlb19yZWd1bGFyLnRlc3QodHlwZSk6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGljVHlwZSA9IHZpZGVvX2ltYWdlXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuICAgICAgICAgICAgICAgICAgICBjYXNlIGF1ZGlvX3JlZ3VsYXIudGVzdCh0eXBlKTpcXG4gICAgICAgICAgICAgICAgICAgICAgICBwaWNUeXBlID0gYXVkaW9faW1hZ2VcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGljVHlwZSA9IGZpbGVfaW1hZ2VcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICBpZiAoc3RvcmFnZTAuZ2V0SXRlbShcXFwic2F2ZVxcXCIsXFxcIjBcXFwiKS5lcXVhbHMoXFxcIjFcXFwiKSl7XFxuXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi6L2s5a2Y5q2k5paH5Lu277yaXFxcIitmaWxlTmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBmaWxlX3NpemUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGljX3VybDogcGljVHlwZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvY2xvdWQ/aWQ9XFxcIitmaWxlSWQrXFxcIiZmaWxlTmFtZT1cXFwiK2ZpbGVOYW1lK1xcXCImdHlwZT1cXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBjb2xUeXBlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWQ6ZmlsZUlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBmaWxlTmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTonZmlsZScsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5ld1dpbmRvdzogdHJ1ZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgd2luZG93SWQ6IGZpbGVJZFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICB9ZWxzZXtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGZpbGVOYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGZpbGVfc2l6ZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBwaWNUeXBlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogY2lkK1xcXCImJlxcXCIrdHlwZStnZXRGaWxlVXJsTGluZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogY29sVHlwZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazogW1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3RpdGxlOiBcXFwi5pu05aSa5pON5L2cXFxcIiwganM6ICQudG9TdHJpbmcoKGZpbGVJZCxiYWNrRGF0YSk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW1xcXCLlpIfku73mlofku7ZcXFwiLFxcXCLoh6rkuLvlpIfku71cXFwiXSwgMiwn5Yqf6IO95pON5L2cJykuc2VsZWN0KChmaWxlSWQsYmFja0RhdGEpID0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaW5wdXQgPT09IFxcXCLlpIfku73mlofku7ZcXFwiKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2Z1bmN0aW9ucycpKS5ydWxlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzYXZlQmFja0ZpbGUoYmFja0RhdGEpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZihpbnB1dCA9PT0gXFxcIuiHquS4u+Wkh+S7vVxcXCIpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySXRlbShcXFwiYmFja1R5cGVcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySXRlbShcXFwiYmFja0NoYW5nZVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJdGVtKFxcXCJiYWNrQ2hhbmdlRGF0YVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwiYmFja1R5cGVcXFwiLCBcXFwic3RhcnRcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJiYWNrQ2hhbmdlXFxcIixcXFwidHJ1ZVxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcImJhY2tDaGFuZ2VEYXRhXFxcIixiYWNrRGF0YSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvcmVhZEJhY2tcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sZmlsZUlkLGJhY2tEYXRhKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sZmlsZUlkLGJhY2tEYXRhKX1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICB9XFxuXFxuXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcblxcbiAgICAgICAgLy/lsL7pg6jpobXmlbDmk43kvZxcXG4gICAgICAgIGlmIChwYWdlcyA+IDEwMCl7XFxuICAgICAgICAgICAgLy/or7fmsYLpobXmlbBcXG5cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTpcXFwi5LiK5LiA6aG1XFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGlkLHN0YXJ0UGFnZSxtaW5QYWdlKSA9PiB7XFxuXFxuICAgICAgICAgICAgICAgICAgICBpZihzdGFydFBhZ2U+bWluUGFnZSlcXG4gICAgICAgICAgICAgICAgICAgIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihpZCtcXFwic3RhcnRQYWdlXFxcIixtaW5QYWdlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S4iuS4gOmhtVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle3JldHVybiBcXFwidG9hc3Q6Ly/lt7Lnu4/mnIDliY1cXFwifVxcblxcbiAgICAgICAgICAgICAgICB9LGlkLHN0YXJ0UGFnZSxtaW5QYWdlKSxcXG4gICAgICAgICAgICAgICAgLy9waWNfdXJsOmxhc3RfaW1hZ2UsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8zXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGNsczogXFxcInBsYXlsaXN0IOS4iuS4gOmhtVxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOlxcXCLmm7TlpJrmk43kvZxcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6JChbXFxcIui/lOWbnummlumhtVxcXCIsXFxcIui3s+i9rOWwvumhtVxcXCJdLCAyLCfor7fpgInmi6nmm7TlpJrpobXmlbDlip/og70nKS5zZWxlY3QoKGlkLHBhZ2VDb3VudCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgaWYoaW5wdXQ9PVxcXCLov5Tlm57pppbpobVcXFwiKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoaWQrJ3N0YXJ0UGFnZScsMSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3sue7j+i3s+i9rOWIsOmmlumhtVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LGlkKVxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYgKGlucHV0PT1cXFwi6Lez6L2s5bC+6aG1XFxcIil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGlkLHBhZ2VDb3VudCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihpZCsnc3RhcnRQYWdlJyxwYWdlQ291bnQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7Lnu4/ot7PovazliLDlsL7pobVcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxpZCxwYWdlQ291bnQpXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0saWQscGFnZUNvdW50KSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzNcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgY2xzOiBcXFwicGxheWxpc3Qg5pu05aSa5pON5L2cXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6XFxcIuS4i+S4gOmhtVxcXCIsXFxuICAgICAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpZCxzdGFydFBhZ2UsbWF4UGFnZSkgPT4ge1xcblxcbiAgICAgICAgICAgICAgICAgICAgaWYoc3RhcnRQYWdlPG1heFBhZ2UpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihpZCtcXFwic3RhcnRQYWdlXFxcIixtYXhQYWdlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S4i+S4gOmhtVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle3JldHVybiBcXFwidG9hc3Q6Ly/lt7Lnu4/mnIDlkI5cXFwifVxcbiAgICAgICAgICAgICAgICB9LGlkLHN0YXJ0UGFnZSxtYXhQYWdlKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzNcXFwiLFxcbiAgICAgICAgICAgICAgICAvL3BpY191cmw6bmV4dF9pbWFnZSxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGNsczogXFxcInBsYXlsaXN0IOS4i+S4gOmhtVxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcblxcbiAgICB9Y2F0Y2goZSl7XFxuICAgICAgICBsb2coZS5tZXNzYWdlKVxcbiAgICB9XFxufWVsc2Uge1xcbiAgICB0b2FzdChcXFwi5a+G6ZKl5pyJ6Zeu6aKY5oiW6ICF5pyq55m75b2VXFxcIilcXG59XFxuXFxuc2V0UmVzdWx0KGQpO1wifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5re75Yqg56OB5YqbXCIsXCJwYXRoXCI6XCJhZGRtYWdlbnRcIixcInJ1bGVcIjpcImpzOlxcbiAgICB2YXIgZCA9IFtdO1xcblxcbnRyeXtcXG5cXG4gICAgaWYgKCFzdG9yYWdlMC5nZXRJdGVtKFxcXCJhZGRGb2xkZXJOYW1lXFxcIikpe1xcbiAgICAgICAgbmFtZSA9IFxcXCLpppbpobVcXFwiXFxuICAgIH1lbHNle1xcbiAgICAgICAgbmFtZSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcImFkZEZvbGRlck5hbWVcXFwiKVxcbiAgICB9XFxuXFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTpcXFwi5pON5L2cXFxcIixcXG4gICAgICAgIGRlc2M6XFxcIuivt+i+k+WFpeejgeWKm+mTvuaOpVxcXFxu6buY6K6k5re75Yqg5YiwXFxcIituYW1lLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICB1cmw6JC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9mdW5jdGlvbnMnKSkucnVsZSlcXG4gICAgICAgICAgICBoZWFkID0ge1xcbiAgICAgICAgICAgICAgICBcXFwiQXV0aG9yaXphdGlvblxcXCI6IFxcXCJCZWFyZXIgXFxcIitnZXRWYXIoXFxcInRva2VuXFxcIiksXFxuICAgICAgICAgICAgICAgIFxcXCJVc2VyLUFnZW50XFxcIjogXFxcIk1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjA7IFdpbjY0OyB4NjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIGxvb25nYm94LXUvMS4yLjMgQ2hyb21lLzEwOC4wLjUzNTkuMTc5IEVsZWN0cm9uLzIyLjEuMCBTYWZhcmkvNTM3LjM2XFxcIlxcbiAgICAgICAgICAgIH1cXG5cXG5cXG4gICAgICAgICAgICBib2R5PWB7XFxcInBhcmFtc1xcXCI6e1xcXCJ3aXRoX3RodW1ibmFpbFxcXCI6dHJ1ZX0sXFxcInBhcmVudF9pZFxcXCI6XFxcImArc3RvcmFnZTAuZ2V0SXRlbShcXFwiYWRkRm9sZGVyXFxcIikrYFxcXCIsXFxcInVwbG9hZF90eXBlXFxcIjpcXFwidXJsXFxcIixcXFwidXJsXFxcIjpcXFwiYCtpbnB1dCtgXFxcIn1gXFxuXFxuXFxuICAgICAgICAgICAgcmVzdWx0PUpTT04ucGFyc2UocG9zdChhZGRfbWFnZW50LHtoZWFkZXJzOiBoZWFkLGJvZHk6Ym9keX0pKVxcblxcbiAgICAgICAgICAgIGlmKHJlc3VsdC5jb2RlID09PSBcXFwiMjAwXFxcIil7XFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+aPkOS6pOaIkOWKnyEnXFxuICAgICAgICAgICAgfWVsc2Uge1xcbiAgICAgICAgICAgICAgICBsZXQgbWVzc2FnZSA9IHJlc3VsdC5tZXNzYWdlID09PSBcXFwiVGFzayBhbHJlYWR5IGV4aXN0XFxcIiA/IFxcXCLno4Hlipvlt7LlnKjpmJ/liJfkuK1cXFwiIDogcmVzdWx0Lm1lc3NhZ2VcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgICAgICAgICByZXR1cm4gJ3RvYXN0Oi8vJyttZXNzYWdlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSksXFxuICAgICAgICBleHRyYToge3R5cGU6ICd0ZXh0YXJlYScsaGVpZ2h0OiAyfVxcbiAgICB9KTtcXG5cXG59Y2F0Y2goZSl7XFxuICAgIGxvZyhlLm1lc3NhZ2UpXFxufVxcblxcbnNldFJlc3VsdChkKTtcXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzFcIixcIm5hbWVcIjpcIuS8keaBr1wiLFwicGF0aFwiOlwicmVzdFwiLFwicnVsZVwiOlwianM6XFxuICAgIHNldFJlc3VsdChcXG4gICAgICAgIFt7XFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ4NV93ZWJ2aWV3X3NpbmdsZVxcXCIsXFxuICAgICAgICAgICAgdXJsOiBcXFwiaHR0cHM6Ly90dWNkbi53cG9uLmNuL2FwaS1naXJsL2luZGV4LnBocD93cG9uPTMwMlxcXCIsICAgIC8vXFxcImh0dHA6L1xcXCIrXFxcIi9oaGRnbG0uY29tL2R5Lmh0bWxcXFwiLFxcbiAgICAgICAgICAgIGRlc2M6XFxcImZsb2F0JiYxMDAlXFxcIixcXG4gICAgICAgICAgICBleHRyYTp7XFxuICAgICAgICAgICAgICAgIGF1dG9QbGF5OnRydWUsXFxuICAgICAgICAgICAgICAgIGNhbkJhY2s6dHJ1ZSxcXG4gICAgICAgICAgICAgICAgc2hvd1Byb2dyZXNzOmZhbHNlLFxcbiAgICAgICAgICAgICAgICBqczoncmVmcmVzaFBhZ2UoKTsnXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfV1cXG5cXG4gICAgKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi55m75b2VXCIsXCJwYXRoXCI6XCJsb2dpblwiLFwicnVsZVwiOlwianM6XFxuICAgIHZhciBkID0gW107XFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9mdW5jdGlvbnMnKSkucnVsZSlcXG5cXG5sZXQgdHlwZSA9IGdldE15VmFyKFxcXCJ0eXBlXFxcIixcXFwiXFxcIilcXG5cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+WQjeensCcsXFxuICAgIGRlc2M6ICflpIfms6jpmo/kvr/loasnLFxcbiAgICBjb2xfdHlwZTogJ2lucHV0JyxcXG4gICAgdXJsOiAkLnRvU3RyaW5nKCgpID0+IHt9KSxcXG4gICAgZXh0cmE6IHtcXG4gICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoJ25hbWUnLCAnJyksXFxuICAgICAgICBvbkNoYW5nZTogJ3B1dE15VmFyKFxcXCJuYW1lXFxcIixpbnB1dCknXFxuICAgIH1cXG59KTtcXG5cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+i0puWPtyjlr4bpkqUpJyxcXG4gICAgZGVzYzogJ+W/hemhu+Whq+Wwj+m+meebmOWvhumSpScsXFxuICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICB1cmw6ICQudG9TdHJpbmcoKCkgPT4ge30pLFxcbiAgICBleHRyYToge1xcbiAgICAgICAgZGVmYXVsdFZhbHVlOiBnZXRNeVZhcigndXNlcmtleScsICcnKSxcXG4gICAgICAgIG9uQ2hhbmdlOiAncHV0TXlWYXIoXFxcInVzZXJrZXlcXFwiLGlucHV0KSdcXG4gICAgfVxcbn0pO1xcblxcblxcbmZ1bmN0aW9uIHNhdmVTdWIoKSB7XFxuICAgIGxldCBhX25hbWUgPSBnZXRNeVZhcignbmFtZScsICcnKS50cmltKCk7XFxuICAgIGxldCBhX3VzZXIgPSBnZXRNeVZhcigndXNlcmtleScsICcnKS50cmltKCk7XFxuICAgIHJldHVybiAkKCcnKS5sYXp5UnVsZSgoYV9uYW1lLGFfdXNlcikgPT4ge1xcbiAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9mdW5jdGlvbnMnKSkucnVsZSlcXG4gICAgICAgIHJldHVybiBzYXZlVG9rZW4oYV9uYW1lLGFfdXNlcilcXG4gICAgfSxhX25hbWUsYV91c2VyKVxcbn1cXG5cXG5kLnB1c2goe1xcbiAgICB0aXRsZTogJ+aWsOWinui0puWPtycsXFxuICAgIGNvbF90eXBlOiBcXFwidGV4dF8yXFxcIixcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzYXZlU3ViKSA9PiB7XFxuICAgICAgICBsZXQgdGlwcyA9IHNhdmVTdWIoKTtcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcIm5hbWVcXFwiKTtcXG4gICAgICAgIGNsZWFyTXlWYXIoXFxcInVzZXJrZXlcXFwiKTtcXG5cXG5cXG4gICAgICAgIHJldHVybiB0aXBzXFxuICAgIH0sIHNhdmVTdWIpXFxufSk7XFxuXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6ICfmm7TlpJrlip/og70nLFxcbiAgICBjb2xfdHlwZTogXFxcInRleHRfMlxcXCIsXFxuICAgIHVybDokKFtcXFwi6LWE5rqQ5bqTXFxcIixcXFwi5Zue5pS256uZXFxcIixcXFwi5bCP6b6Z55uY5aSH5Lu9XFxcIixcXFwi5LqR55uY5aSH5Lu9XFxcIl0sIDIsJ+ivt+mAieaLqeabtOWkmuWKn+iDvScpLnNlbGVjdCgoKSA9PiB7XFxuICAgICAgICBpZihpbnB1dD09XFxcIui1hOa6kOW6k1xcXCIpe1xcbiAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcInNlZWRzVHlwZVxcXCIsXFxcInNlbmRzXFxcIilcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9zZWVkc1xcXCJcXG4gICAgICAgIH1lbHNlIGlmIChpbnB1dD09XFxcIuWbnuaUtuermVxcXCIpe1xcbiAgICAgICAgICAgIHJldHVybiBcXFwiaGlrZXI6Ly9wYWdlL3RyYXNoXFxcIlxcbiAgICAgICAgfWVsc2UgaWYgKGlucHV0PT1cXFwi5bCP6b6Z55uY5aSH5Lu9XFxcIil7XFxuICAgICAgICAgICAgY2xlYXJJdGVtKFxcXCJiYWNrVHlwZVxcXCIpXFxuICAgICAgICAgICAgY2xlYXJJdGVtKFxcXCJtb3ZlVHlwZVxcXCIpXFxuICAgICAgICAgICAgY2xlYXJJdGVtKFxcXCJtb3ZlRGF0YVxcXCIpXFxuICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwiYmFja1R5cGVcXFwiLCBcXFwic3RhcnRcXFwiKTtcXG4gICAgICAgICAgICByZXR1cm4gXFxcImhpa2VyOi8vcGFnZS9yZWFkQmFja1xcXCJcXG4gICAgICAgIH1lbHNlIGlmIChpbnB1dD09XFxcIuS6keebmOWkh+S7vVxcXCIpe1xcbiAgICAgICAgICAgIGNsZWFySXRlbShcXFwiYmFja1R5cGVcXFwiKVxcbiAgICAgICAgICAgIGNsZWFySXRlbShcXFwibW92ZVR5cGVcXFwiKVxcbiAgICAgICAgICAgIGNsZWFySXRlbShcXFwibW92ZURhdGFcXFwiKVxcbiAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcImJhY2tUeXBlXFxcIiwgXFxcImNsb3VkXFxcIik7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJoaWtlcjovL3BhZ2UvcmVhZEJhY2tcXFwiXFxuICAgICAgICB9XFxuICAgIH0pLFxcbiAgICBleHRyYTp7XFxuICAgICAgICB0eXBlOiBzdG9yYWdlMC5nZXRJdGVtKFxcXCJiYWNrVHlwZVxcXCIpXFxuICAgIH1cXG59KTtcXG5cXG50b2tlbl9kYXRhLmZvckVhY2goKGl0LCBpZGV4KSA9PiB7XFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTogaXQubmFtZStcXFwiXFxcXG5cXFxcbuS9v+eUqOWuuemHj++8mlxcXCIrY2hlY2tVc2VyQWNjb3VudCgpLFxcbiAgICAgICAgZGVzYzogaXQudXNlcixcXG4gICAgICAgIHVybDogXFxcIlxcXCIsXFxuICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCIsXFxuICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgIGlkZXg6IGlkZXggKyAnJyxcXG4gICAgICAgICAgICBsb25nQ2xpY2s6IFtcXG4gICAgICAgICAgICAgICAge1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6XFxcIuS/ruaUueS/oeaBr1xcXCIsanM6JC50b1N0cmluZygoaXQsdG9rZW5fZGF0YSwgaWRleCk9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoaXQudXNlciwgJ+S/ruaUueWvhumSpScpLmlucHV0KCh0b2tlbl9kYXRhLCBpZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZnVuY3Rpb25zJykpLnJ1bGUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiB1cGRhdGVUb2tlbih0b2tlbl9kYXRhLCBpbnB1dCwgaWRleClcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCB0b2tlbl9kYXRhLCBpZGV4KVxcbiAgICAgICAgICAgICAgICAgICAgfSxpdCx0b2tlbl9kYXRhLCBpZGV4KVxcbiAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICB7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTpcXFwi5YiH5o2i6LSm5Y+3XFxcIixqczokLnRvU3RyaW5nKChpdCwgaWRleCk9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9mdW5jdGlvbnMnKSkucnVsZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3dpdGNoZWQoaXQudXNlciwgaWRleClcXG4gICAgICAgICAgICAgICAgICAgIH0saXQsIGlkZXgpXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOlxcXCLliKDpmaTotKblj7dcXFwiLGpzOiQudG9TdHJpbmcoKGlkZXgpPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZnVuY3Rpb25zJykpLnJ1bGUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGV0ZVRva2VuKGlkZXgpXFxuICAgICAgICAgICAgICAgICAgICB9LGlkZXgpXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOlxcXCLkv67mlLnkupHnm5jlr4bpkqVcXFwiLGpzOiQudG9TdHJpbmcoKGl0LGlkZXgpPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKGl0LmNsb3VkLCAn5L+u5pS55LqR55uY5a+G6ZKlJykuaW5wdXQoKGlkZXgpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9mdW5jdGlvbnMnKSkucnVsZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNldENsb3VkVG9rZW4oaW5wdXQsaWRleClcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCBpZGV4KVxcbiAgICAgICAgICAgICAgICAgICAgfSxpdCxpZGV4KVxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgXVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG59KVxcblxcblxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5rWL6K+VXCIsXCJwYXRoXCI6XCJ0ZXN0XCIsXCJydWxlXCI6XCJqczpcXG52YXIgZCA9IFtdO1xcblxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZnVuY3Rpb25zJykpLnJ1bGUpXFxuXFxudG9hc3QodG9rZW4pXFxuXFxuZC5wdXNoKHtcXG4gICAgdGl0bGU6XFxcInRlc3RcXFwiLFxcbiAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgcGljX3VybDpwbmcxLFxcbiAgICB1cmw6XFxcIlxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwiaWNvbl80XFxcIlxcbn0pO1xcblxcbnNldFJlc3VsdChkKTtcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWwj+m+meS6keebmFwiLFwicGF0aFwiOlwiY2xvdWRcIixcInJ1bGVcIjpcImpzOlxcbiAgICB2YXIgZCA9IFtdXFxuXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9mdW5jdGlvbnMnKSkucnVsZSlcXG5cXG5pZCA9IE1ZX1BBUkFNUy5pZFxcbm9sZEZpbGVOYW1lID0gTVlfUEFSQU1TLm5hbWVcXG50eXBlID0gTVlfUEFSQU1TLnR5cGVcXG5jaGVja0lkID0gTVlfUEFSQU1TLmNoZWNrSWRcXG5cXG5cXG5zdG9yYWdlMC5zZXRJdGVtKFxcXCJzYXZlXFxcIixcXFwiMFxcXCIpXFxuXFxubGV0IGNsb3VkUGFnZSA9IGdldE15VmFyKGlkK1xcXCJjbG91ZFBhZ2VcXFwiLFxcXCIxXFxcIilcXG5cXG5pZiAoIWlkKSB7XFxuICAgIGlkID0gMFxcbiAgICBmaWxlTmFtZSA9IFxcXCJcXFwiXFxufVxcblxcbmlmICghY2hlY2tJZCkge1xcbiAgICBjaGVja0lkID0gMFxcbn1cXG5cXG5pZiAoIXR5cGUpIHtcXG4gICAgdHlwZSA9IFxcXCJcXFwiXFxufVxcblxcbmRhdGEgPSBjaGVja0Nsb3VkVHlwZShjbG91ZF90b2tlbikuZGF0YVxcblxcbmlmIChkYXRhID09PSB1bmRlZmluZWQpIHtcXG5cXG4gICAgdG9hc3QoXFxcIuivt+ajgOafpeS6keebmOWvhumSpe+8gVxcXCIpXFxuXFxuICAgIGphdmEubGFuZy5UaHJlYWQuc2xlZXAoMTUwMClcXG5cXG4gICAgYmFjaygpO1xcblxcbn1lbHNle1xcblxcbiAgICB2aXAgPSBjaGVja1ZpcChkYXRhLmlkKS5pc1ZpcFxcblxcbiAgICBpZiAodmlwID09PSAyKSB7XFxuXFxuICAgICAgICBmaWxlRGF0YSA9IGdldENsb3VkRmlsZURhdGEoY2hlY2tJZCxjbG91ZFBhZ2UpXFxuXFxuICAgICAgICBpZiAoY2xvdWRQYWdlID4gZmlsZURhdGEuZGF0YS50b3RhbFBhZ2UpIHtcXG5cXG4gICAgICAgICAgICBwdXRNeVZhcihpZCtcXFwiY2xvdWRQYWdlXFxcIixcXFwiMVxcXCIpXFxuXFxuICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIHBhZ2VzID0gTnVtYmVyKGZpbGVEYXRhLmRhdGEuY291bnQpXFxuICAgICAgICBwYWdlQ291bnQgPSBOdW1iZXIoZmlsZURhdGEuZGF0YS50b3RhbFBhZ2UpXFxuICAgICAgICBtaW5QYWdlID0gY2xvdWRQYWdlID4gMSA/IGNoYW5nZVBhZ2VJbnQoY2xvdWRQYWdlLFxcXCItXFxcIikgOiAxXFxuICAgICAgICBtYXhQYWdlID0gY2xvdWRQYWdlID49IHBhZ2VDb3VudCA/IHBhZ2VDb3VudCA6IGNoYW5nZVBhZ2VJbnQoY2xvdWRQYWdlLFxcXCIrXFxcIilcXG5cXG5cXG5cXG4gICAgICAgIGlmIChwYWdlcyA+IDEwMCl7XFxuICAgICAgICAgICAgLy/or7fmsYLpobXmlbBcXG5cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTpcXFwi5LiK5LiA6aG1XFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGlkLGNsb3VkUGFnZSxtaW5QYWdlKSA9PiB7XFxuXFxuICAgICAgICAgICAgICAgICAgICBpZihOdW1iZXIoY2xvdWRQYWdlKT5OdW1iZXIobWluUGFnZSkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihpZCtcXFwiY2xvdWRQYWdlXFxcIixtaW5QYWdlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S4iuS4gOmhtVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle3JldHVybiBcXFwidG9hc3Q6Ly/lt7Lnu4/mnIDliY1cXFwifVxcblxcbiAgICAgICAgICAgICAgICB9LGlkLGNsb3VkUGFnZSxtaW5QYWdlKSxcXG4gICAgICAgICAgICAgICAgLy9waWNfdXJsOmxhc3RfaW1hZ2UsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8zXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGNsczogXFxcInBsYXlsaXN0IOS4iuS4gOmhtVxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOmNsb3VkUGFnZStcXFwiL1xcXCIrcGFnZUNvdW50LFxcbiAgICAgICAgICAgICAgICB1cmw6JCgnJywn6K+36L6T5YWl6aG156CBJykuaW5wdXQoKGlkLHBhZ2VDb3VudCk9PntcXG5cXG4gICAgICAgICAgICAgICAgICAgIGlmKGlucHV0PjAmJk51bWJlcihpbnB1dCk8PXBhZ2VDb3VudCl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoaWQrJ2Nsb3VkUGFnZScsaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7Lnu4/ot7PovazliLDnrKxcXFwiK2lucHV0K1xcXCLpobVcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtyZXR1cm4gXFxcInRvYXN0Oi8v6L6T5YWl6ZSZ6K+vXFxcIn1cXG4gICAgICAgICAgICAgICAgfSxpZCxwYWdlQ291bnQpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfM1xcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBjbHM6IFxcXCJwbGF5bGlzdCDmgLvpobXmlbBcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTpcXFwi5LiL5LiA6aG1XFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGlkLGNsb3VkUGFnZSxtYXhQYWdlKSA9PiB7XFxuXFxuICAgICAgICAgICAgICAgICAgICBpZihOdW1iZXIoY2xvdWRQYWdlKTxOdW1iZXIobWF4UGFnZSkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihpZCtcXFwiY2xvdWRQYWdlXFxcIixtYXhQYWdlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S4i+S4gOmhtVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle3JldHVybiBcXFwidG9hc3Q6Ly/lt7Lnu4/mnIDlkI5cXFwifVxcbiAgICAgICAgICAgICAgICB9LGlkLGNsb3VkUGFnZSxtYXhQYWdlKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzNcXFwiLFxcbiAgICAgICAgICAgICAgICAvL3BpY191cmw6bmV4dF9pbWFnZSxcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGNsczogXFxcInBsYXlsaXN0IOS4i+S4gOmhtVxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgLypkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOiB2aXAsXFxuICAgICAgICAgICAgZGVzYzogXFxcIlxcXCIsXFxuICAgICAgICAgICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfMVxcXCJcXG4gICAgICAgIH0pOyovXFxuXFxuXFxuICAgICAgICBpZiAoZmlsZURhdGEuY29kZSA9PT0gMjAwKXtcXG5cXG4gICAgICAgICAgICByZXN1bHQgPSBmaWxlRGF0YS5kYXRhLmRhdGFcXG5cXG4gICAgICAgICAgICBmb3IgKHZhciBpIGluIHJlc3VsdCl7XFxuXFxuICAgICAgICAgICAgICAgIHBpY1R5cGUgPSBcXFwiXFxcIlxcbiAgICAgICAgICAgICAgICB1cmxfdHlwZSA9IFxcXCJcXFwiXFxuICAgICAgICAgICAgICAgIHVybF9iYWNrID0gXFxcIlxcXCJcXG4gICAgICAgICAgICAgICAgY29sVHlwZSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcIuaWh+S7tuagt+W8j+WPmOmHj1xcXCIsIFxcXCJhdmF0YXJcXFwiKVxcblxcbiAgICAgICAgICAgICAgICBmaWxlTmFtZSA9IHJlc3VsdFtpXS5maWxlTmFtZVxcbiAgICAgICAgICAgICAgICB0aW1lID0gcmVzdWx0W2ldLmNyZWF0ZVRpbWVcXG4gICAgICAgICAgICAgICAgaXNGb2xkZXIgPSByZXN1bHRbaV0uaXNGb2xkZXJcXG4gICAgICAgICAgICAgICAgZmlsZUlkID0gcmVzdWx0W2ldLmlkXFxuICAgICAgICAgICAgICAgIGZpbGVfc2l6ZSA9IGdldEZpbGVTaXplKHJlc3VsdFtpXS5maWxlU2l6ZSlcXG5cXG5cXG4gICAgICAgICAgICAgICAgaWYoaXNGb2xkZXIgPiAwKXtcXG5cXG4gICAgICAgICAgICAgICAgICAgIHBpY1R5cGUgPSBmb2xkZXJfaW1hZ2VcXG5cXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGZpbGVOYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IHRpbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGljX3VybDogcGljVHlwZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL3BhZ2UvY2xvdWQjbm9SZWNvcmRIaXN0b3J5IyNjYWNoZU9ubHkjP2lkPVxcXCIraWQrXFxcIiZjaGVja0lkPVxcXCIrY2hlY2tJZCtcXFwiJnR5cGU9XFxcIit0eXBlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBjb2xUeXBlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlkOmlkLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjaGVja0lkOiBmaWxlSWQsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR5cGU6IHR5cGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazpbXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXFxcInRpdGxlXFxcIjpcXFwi6L2s5a2Y5Yiw5q2kXFxcIixqczogJC50b1N0cmluZygoaWQsb2xkRmlsZU5hbWUsZmlsZUlkLHR5cGUpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZnVuY3Rpb25zJykpLnJ1bGUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBzYXZlRmlsZVRvQ2hhbmdlKGlkLG9sZEZpbGVOYW1lLGZpbGVJZCx0eXBlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0saWQsb2xkRmlsZU5hbWUsZmlsZUlkLHR5cGUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF1cXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBmaWxlTmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBmaWxlX3NpemUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGljX3VybDogcF9pbWFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogY29sVHlwZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFxcXCJ0b2FzdDovL+S9oOWcqOaDs+S7gOS5iO+8n1xcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBsb25nQ2xpY2s6W1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIFxcXCJ0aXRsZVxcXCI6XFxcIui9rOWtmOWIsOatpFxcXCIsanM6ICQudG9TdHJpbmcoKGlkLGZpbGVOYW1lLGNoZWNrSWQpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZnVuY3Rpb25zJykpLnJ1bGUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgICAgICAgICAgIHJldHVybiBzYXZlRmlsZVRvQ2hhbmdlKGlkLGZpbGVOYW1lLGNoZWNrSWQsXFxcImZpbGVcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICAgICAgICAgIH0saWQsZmlsZU5hbWUsY2hlY2tJZClcXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAgICAgXVxcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIGlmIChwYWdlcyA+IDEwMCl7XFxuICAgICAgICAgICAgICAgIC8v6K+35rGC6aG15pWwXFxuXFxuICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICB0aXRsZTpcXFwi5LiK5LiA6aG1XFxcIixcXG4gICAgICAgICAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpZCxjbG91ZFBhZ2UsbWluUGFnZSkgPT4ge1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKE51bWJlcihjbG91ZFBhZ2UpPk51bWJlcihtaW5QYWdlKSlcXG4gICAgICAgICAgICAgICAgICAgICAgICB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKGlkK1xcXCJjbG91ZFBhZ2VcXFwiLG1pblBhZ2UpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kuIrkuIDpobVcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2V7cmV0dXJuIFxcXCJ0b2FzdDovL+W3sue7j+acgOWJjVxcXCJ9XFxuXFxuICAgICAgICAgICAgICAgICAgICB9LGlkLGNsb3VkUGFnZSxtaW5QYWdlKSxcXG4gICAgICAgICAgICAgICAgICAgIC8vcGljX3VybDpsYXN0X2ltYWdlLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzNcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbHM6IFxcXCJwbGF5bGlzdCDkuIrkuIDpobVcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6XFxcIuabtOWkmuaTjeS9nFxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6JChbXFxcIui/lOWbnummlumhtVxcXCIsXFxcIui3s+i9rOWwvumhtVxcXCJdLCAyLCfor7fpgInmi6nmm7TlpJrpobXmlbDlip/og70nKS5zZWxlY3QoKGlkLHBhZ2VDb3VudCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGlucHV0PT1cXFwi6L+U5Zue6aaW6aG1XFxcIil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpZCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoaWQrJ2Nsb3VkUGFnZScsMSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5bey57uP6Lez6L2s5Yiw6aaW6aG1XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LGlkKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmIChpbnB1dD09XFxcIui3s+i9rOWwvumhtVxcXCIpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaWQscGFnZUNvdW50KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihpZCsnY2xvdWRQYWdlJyxwYWdlQ291bnQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3sue7j+i3s+i9rOWIsOWwvumhtVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxpZCxwYWdlQ291bnQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSxpZCxwYWdlQ291bnQpLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzNcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBjbHM6IFxcXCJwbGF5bGlzdCDmm7TlpJrmk43kvZxcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6XFxcIuS4i+S4gOmhtVxcXCIsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaWQsY2xvdWRQYWdlLG1heFBhZ2UpID0+IHtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICBpZihOdW1iZXIoY2xvdWRQYWdlKTxOdW1iZXIobWF4UGFnZSkpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoaWQrXFxcImNsb3VkUGFnZVxcXCIsbWF4UGFnZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S4i+S4gOmhtVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtyZXR1cm4gXFxcInRvYXN0Oi8v5bey57uP5pyA5ZCOXFxcIn1cXG4gICAgICAgICAgICAgICAgICAgIH0saWQsY2xvdWRQYWdlLG1heFBhZ2UpLFxcbiAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzNcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgLy9waWNfdXJsOm5leHRfaW1hZ2UsXFxuICAgICAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsczogXFxcInBsYXlsaXN0IOS4i+S4gOmhtVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfVxcblxcbiAgICAgICAgfWVsc2Uge1xcbiAgICAgICAgICAgIHRvYXN0KGZpbGVEYXRhLm1lc3NhZ2UpXFxuICAgICAgICB9XFxuICAgIH1lbHNlIHtcXG4gICAgICAgIHRvYXN0KFxcXCLkvaDnm67liY3ov5jkuI3mmK92aXBcXFwiKVxcblxcbiAgICAgICAgamF2YS5sYW5nLlRocmVhZC5zbGVlcCgxNTAwKVxcblxcbiAgICAgICAgYmFjaygpO1xcbiAgICB9XFxuXFxuXFxufVxcblxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwiIOi1hOa6kOW6k1wiLFwicGF0aFwiOlwic2VlZHNcIixcInJ1bGVcIjpcImpzOlxcblxcbiAgICB2YXIgZCA9IFtdO1xcblxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZnVuY3Rpb25zJykpLnJ1bGUpXFxuXFxuaWQgPSBNWV9QQVJBTVMuaWRcXG5cXG5pZighaWQpe1xcbiAgICBpZCA9IFxcXCJcXFwiXFxufVxcblxcbmxldCBwYWdlID0gTnVtYmVyKGdldE15VmFyKGlkK1xcXCJwYWdlXFxcIixcXFwiMVxcXCIpKVxcblxcbmxldCBudW0gPSBOdW1iZXIoZ2V0TXlWYXIoaWQrXFxcIm51bVxcXCIsXFxcIjFcXFwiKSlcXG5cXG5sZXQgY291bnQgPSBOdW1iZXIoZ2V0TXlWYXIoaWQrXFxcImNvdW50XFxcIixcXFwiMTAwXFxcIikpXFxuXFxubGV0IGNvbFR5cGUgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCLmlofku7bmoLflvI/lj5jph49cXFwiLCBcXFwiYXZhdGFyXFxcIilcXG5cXG5pZiAoY2hlY2tDbG91ZFR5cGUoY2xvdWRfdG9rZW4pLmNvZGUgPT09IDIwMCl7XFxuXFxuICAgIGQucHVzaCh7XFxuICAgICAgICB0aXRsZTpcXFwiLeWIh+aNouaVsOaNriznsbvlnovmmL7npLotXFxcIiAsXFxuICAgICAgICBkZXNjOiBcXFwiXFxcIixcXG4gICAgICAgIHBpY191cmw6IG9ydGhlcl9pbWFnZSxcXG4gICAgICAgIGNvbF90eXBlOlxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgdXJsOiAkKFtcXFwi56OB5Yqb5YiX6KGoXFxcIixcXFwi6LWE5rqQ5YiX6KGoXFxcIixcXFwi5YiX6KGo5qih5byPXFxcIixcXFwi5Zu+5paH5qih5byPXFxcIixcXFwi5YWo5ZCN5qih5byPXFxcIl0sIDIsJ+WKn+iDveaTjeS9nCcpLnNlbGVjdCgoKSA9PiB7XFxuICAgICAgICAgICAgaWYoaW5wdXQgPT09IFxcXCLno4HlipvliJfooahcXFwiKXtcXG5cXG4gICAgICAgICAgICAgICAgY2xlYXJJdGVtKFxcXCJzZWVkc1R5cGVcXFwiKVxcbiAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJzZWVkc1R5cGVcXFwiLCBcXFwic2VuZHNcXFwiKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG5cXG4gICAgICAgICAgICB9ZWxzZSBpZihpbnB1dCA9PT0gXFxcIui1hOa6kOWIl+ihqFxcXCIpe1xcblxcbiAgICAgICAgICAgICAgICBjbGVhckl0ZW0oXFxcInNlZWRzVHlwZVxcXCIpXFxuICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcInNlZWRzVHlwZVxcXCIsIFxcXCJ2aWRlb1xcXCIpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcblxcbiAgICAgICAgICAgIH1lbHNlIGlmKGlucHV0ID09PSBcXFwi5YiX6KGo5qih5byPXFxcIil7XFxuICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcIuaWh+S7tuagt+W8j+WPmOmHj1xcXCIsIFxcXCJhdmF0YXJcXFwiKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICB9ZWxzZSBpZihpbnB1dCA9PT0gXFxcIuWbvuaWh+aooeW8j1xcXCIpe1xcbiAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCLmlofku7bmoLflvI/lj5jph49cXFwiLCBcXFwibW92aWVfMlxcXCIpO1xcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgIH1lbHNlIGlmKGlucHV0ID09PSBcXFwi5YWo5ZCN5qih5byPXFxcIil7XFxuICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcIuaWh+S7tuagt+W8j+WPmOmHj1xcXCIsIFxcXCJ0ZXh0XzFcXFwiKTtcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9KSxcXG4gICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICB0ZXh0QWxpZ246J2NlbnRlcidcXG4gICAgICAgIH1cXG4gICAgfSk7XFxuXFxuICAgIGlmIChzdG9yYWdlMC5nZXRJdGVtKFxcXCJzZWVkc1R5cGVcXFwiLFxcXCJzZW5kc1xcXCIpID09PSBcXFwic2VuZHNcXFwiKXtcXG5cXG4gICAgICAgIGRhdGEgPSBnZXRTZWVkc0RhdGEocGFnZSkuZGF0YVxcblxcbiAgICAgICAgcGFnZXMgPSBOdW1iZXIoZGF0YS5jb3VudClcXG4gICAgICAgIHBhZ2VDb3VudCA9IE51bWJlcigocGFnZXMvMTAwKSsxKS50b0ZpeGVkKDApXFxuICAgICAgICBtaW5QYWdlID0gcGFnZSA+IDEgPyBjaGFuZ2VQYWdlSW50KHBhZ2UsXFxcIi1cXFwiKSA6IDFcXG4gICAgICAgIG1heFBhZ2UgPSBwYWdlID49IHBhZ2VDb3VudCA/IHBhZ2VDb3VudCA6IGNoYW5nZVBhZ2VJbnQocGFnZSxcXFwiK1xcXCIpXFxuXFxuLy8gZC5wdXNoKHtcXG4vLyAgICAgdGl0bGU6bWluUGFnZStcXFwiL1xcXCIrbWF4UGFnZStcXFwiL1xcXCIrcGFnZSxcXG4vLyAgICAgdXJsOiBcXFwiXFxcIixcXG4vLyAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiXFxuLy8gfSk7XFxuXFxuICAgICAgICBpZiAocGFnZXMgPiAxMDApe1xcbiAgICAgICAgICAgIC8v6K+35rGC6aG15pWwXFxuXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6XFxcIuS4iuS4gOmhtVxcXCIsXFxuICAgICAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpZCxwYWdlLG1pblBhZ2UpID0+IHtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGlmKHBhZ2U+bWluUGFnZSlcXG4gICAgICAgICAgICAgICAgICAgIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihpZCtcXFwicGFnZVxcXCIsbWluUGFnZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kuIrkuIDpobVcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtyZXR1cm4gXFxcInRvYXN0Oi8v5bey57uP5pyA5YmNXFxcIn1cXG5cXG4gICAgICAgICAgICAgICAgfSxpZCxwYWdlLG1pblBhZ2UpLFxcbiAgICAgICAgICAgICAgICAvL3BpY191cmw6bGFzdF9pbWFnZSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzNcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgY2xzOiBcXFwicGxheWxpc3Qg5LiK5LiA6aG1XFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6cGFnZStcXFwiL1xcXCIrcGFnZUNvdW50LFxcbiAgICAgICAgICAgICAgICB1cmw6JCgnJywn6K+36L6T5YWl6aG156CBJykuaW5wdXQoKGlkLHBhZ2VDb3VudCk9PntcXG5cXG4gICAgICAgICAgICAgICAgICAgIGlmKGlucHV0PjAmJk51bWJlcihpbnB1dCk8PXBhZ2VDb3VudCl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoaWQrJ3BhZ2UnLGlucHV0KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5bey57uP6Lez6L2s5Yiw56ysXFxcIitpbnB1dCtcXFwi6aG1XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7cmV0dXJuIFxcXCJ0b2FzdDovL+i+k+WFpemUmeivr1xcXCJ9XFxuICAgICAgICAgICAgICAgIH0saWQscGFnZUNvdW50KSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzNcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgY2xzOiBcXFwicGxheWxpc3Qg5oC76aG15pWwXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6XFxcIuS4i+S4gOmhtVxcXCIsXFxuICAgICAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpZCxwYWdlLG1heFBhZ2UpID0+IHtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGlmKHBhZ2U8bWF4UGFnZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKGlkK1xcXCJwYWdlXFxcIixtYXhQYWdlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S4i+S4gOmhtVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle3JldHVybiBcXFwidG9hc3Q6Ly/lt7Lnu4/mnIDlkI5cXFwifVxcbiAgICAgICAgICAgICAgICB9LGlkLHBhZ2UsbWF4UGFnZSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8zXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGNsczogXFxcInBsYXlsaXN0IOS4i+S4gOmhtVxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcblxcblxcbiAgICAgICAgcmVzdWx0ID0gZGF0YS5yb3dzXFxuXFxuICAgICAgICBmb3IgKHZhciBpIGluIHJlc3VsdCkge1xcblxcbiAgICAgICAgICAgIGZpbGVfbmFtZSA9IHJlc3VsdFtpXS5uYW1lXFxuICAgICAgICAgICAgbWFnbmV0X25hbWUgPSByZXN1bHRbaV0ubWFnbmV0XFxuXFxuXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6ZmlsZV9uYW1lLFxcbiAgICAgICAgICAgICAgICB1cmw6IFxcXCJjb3B5Oi8vXFxcIittYWduZXRfbmFtZSxcXG4gICAgICAgICAgICAgICAgZGVzYzpcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IGNvbFR5cGUsXFxuICAgICAgICAgICAgICAgIHBpY191cmw6c2VlZHNfaW1hZ2VcXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGlmIChwYWdlcyA+IDEwMCl7XFxuICAgICAgICAgICAgLy/or7fmsYLpobXmlbBcXG5cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTpcXFwi5LiK5LiA6aG1XFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGlkLHBhZ2UsbWluUGFnZSkgPT4ge1xcblxcbiAgICAgICAgICAgICAgICAgICAgaWYocGFnZT5taW5QYWdlKVxcbiAgICAgICAgICAgICAgICAgICAge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKGlkK1xcXCJwYWdlXFxcIixtaW5QYWdlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S4iuS4gOmhtVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle3JldHVybiBcXFwidG9hc3Q6Ly/lt7Lnu4/mnIDliY1cXFwifVxcblxcbiAgICAgICAgICAgICAgICB9LGlkLHBhZ2UsbWluUGFnZSksXFxuICAgICAgICAgICAgICAgIC8vcGljX3VybDpsYXN0X2ltYWdlLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfM1xcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBjbHM6IFxcXCJwbGF5bGlzdCDkuIrkuIDpobVcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTpcXFwi5pu05aSa5pON5L2cXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiQoW1xcXCLov5Tlm57pppbpobVcXFwiLFxcXCLot7PovazlsL7pobVcXFwiXSwgMiwn6K+36YCJ5oup5pu05aSa6aG15pWw5Yqf6IO9Jykuc2VsZWN0KChpZCxwYWdlQ291bnQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmKGlucHV0PT1cXFwi6L+U5Zue6aaW6aG1XFxcIil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGlkKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKGlkKydwYWdlJywxKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5bey57uP6Lez6L2s5Yiw6aaW6aG1XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0saWQpXFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZSBpZiAoaW5wdXQ9PVxcXCLot7PovazlsL7pobVcXFwiKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaWQscGFnZUNvdW50KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKGlkKydwYWdlJyxwYWdlQ291bnQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7Lnu4/ot7PovazliLDlsL7pobVcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxpZCxwYWdlQ291bnQpXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0saWQscGFnZUNvdW50KSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzNcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgY2xzOiBcXFwicGxheWxpc3Qg5pu05aSa5pON5L2cXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6XFxcIuS4i+S4gOmhtVxcXCIsXFxuICAgICAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpZCxwYWdlLG1heFBhZ2UpID0+IHtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGlmKHBhZ2U8bWF4UGFnZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKGlkK1xcXCJwYWdlXFxcIixtYXhQYWdlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S4i+S4gOmhtVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle3JldHVybiBcXFwidG9hc3Q6Ly/lt7Lnu4/mnIDlkI5cXFwifVxcbiAgICAgICAgICAgICAgICB9LGlkLHBhZ2UsbWF4UGFnZSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8zXFxcIixcXG4gICAgICAgICAgICAgICAgLy9waWNfdXJsOm5leHRfaW1hZ2UsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBjbHM6IFxcXCJwbGF5bGlzdCDkuIvkuIDpobVcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG5cXG4gICAgfVxcbiAgICBlbHNlIGlmIChzdG9yYWdlMC5nZXRJdGVtKFxcXCJzZWVkc1R5cGVcXFwiKSA9PT0gXFxcInZpZGVvXFxcIil7XFxuXFxuICAgICAgICBsZXQgZGF0YSA9IGdldE15VmFyKFxcXCJzZWVkc1ZpZGVvc1xcXCIpID8gSlNPTi5wYXJzZShnZXRNeVZhcihcXFwic2VlZHNWaWRlb3NcXFwiKSkgOiBnZXRTZWVkc0ZvclZpZGVvRGF0YSgpXFxuXFxuICAgICAgICBsZXQgcGFnZXMgPSBnZXRNeVZhcihcXFwic2VlZHNWaWRlb3NMZW5ndGhcXFwiKSA/IE51bWJlcihnZXRNeVZhcihcXFwic2VlZHNWaWRlb3NMZW5ndGhcXFwiKSkgOiAxXFxuXFxuICAgICAgICBsZXQgcGFnZUNvdW50ID0gcGFyc2VJbnQoKHBhZ2VzICsgMTAwIC0xKS8xMDAgLTEpXFxuXFxuICAgICAgICBsZXQgbWluUGFnZSA9IHBhZ2UgPiAxID8gY2hhbmdlUGFnZUludChwYWdlLFxcXCItXFxcIikgOiAxXFxuXFxuICAgICAgICBsZXQgbWF4UGFnZSA9IHBhZ2UgPj0gcGFnZUNvdW50ID8gcGFnZUNvdW50IDogY2hhbmdlUGFnZUludChwYWdlLFxcXCIrXFxcIilcXG5cXG5cXG4gICAgICAgIGlmIChwYWdlcyA+IDEwMCl7XFxuICAgICAgICAgICAgLy/or7fmsYLpobXmlbBcXG5cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTpcXFwi5LiK5LiA6aG1XFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGlkLHBhZ2UsbWluUGFnZSxudW0sY291bnQpID0+IHtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGlmKHBhZ2U+bWluUGFnZSlcXG4gICAgICAgICAgICAgICAgICAgIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihpZCtcXFwicGFnZVxcXCIsbWluUGFnZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihpZCtcXFwibnVtXFxcIixOdW1iZXIobnVtLTEwMCkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoaWQrXFxcImNvdW50XFxcIixOdW1iZXIoY291bnQtMTAwKSlcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kuIrkuIDpobVcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtyZXR1cm4gXFxcInRvYXN0Oi8v5bey57uP5pyA5YmNXFxcIn1cXG5cXG4gICAgICAgICAgICAgICAgfSxpZCxwYWdlLG1pblBhZ2UsbnVtLGNvdW50KSxcXG4gICAgICAgICAgICAgICAgLy9waWNfdXJsOmxhc3RfaW1hZ2UsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8zXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGNsczogXFxcInBsYXlsaXN0IOS4iuS4gOmhtVxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOnBhZ2UrXFxcIi9cXFwiK3BhZ2VDb3VudCxcXG4gICAgICAgICAgICAgICAgdXJsOiQoJycsJ+ivt+i+k+WFpemhteeggScpLmlucHV0KChpZCxwYWdlQ291bnQpPT57XFxuXFxuICAgICAgICAgICAgICAgICAgICBsZXQgcGFnZUNoYW5nZSA9IE51bWJlcihpbnB1dCAqIDEwMClcXG5cXG4gICAgICAgICAgICAgICAgICAgIGlmKGlucHV0PjAmJk51bWJlcihpbnB1dCk8PXBhZ2VDb3VudCl7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoaWQrJ3BhZ2UnLGlucHV0KVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKGlkK1xcXCJudW1cXFwiLE51bWJlcihwYWdlQ2hhbmdlKzEpKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKGlkK1xcXCJjb3VudFxcXCIsTnVtYmVyKHBhZ2VDaGFuZ2UrMTAwKSlcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3sue7j+i3s+i9rOWIsOesrFxcXCIraW5wdXQrXFxcIumhtVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle3JldHVybiBcXFwidG9hc3Q6Ly/ovpPlhaXplJnor69cXFwifVxcbiAgICAgICAgICAgICAgICB9LGlkLHBhZ2VDb3VudCksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8zXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGNsczogXFxcInBsYXlsaXN0IOaAu+mhteaVsFxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOlxcXCLkuIvkuIDpobVcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6JCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaWQscGFnZSxtYXhQYWdlLG51bSxjb3VudCkgPT4ge1xcblxcbiAgICAgICAgICAgICAgICAgICAgaWYocGFnZTxtYXhQYWdlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoaWQrXFxcInBhZ2VcXFwiLG1heFBhZ2UpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoaWQrXFxcIm51bVxcXCIsTnVtYmVyKG51bSsxMDApKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKGlkK1xcXCJjb3VudFxcXCIsTnVtYmVyKGNvdW50KzEwMCkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5LiL5LiA6aG1XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7cmV0dXJuIFxcXCJ0b2FzdDovL+W3sue7j+acgOWQjlxcXCJ9XFxuICAgICAgICAgICAgICAgIH0saWQscGFnZSxtYXhQYWdlLG51bSxjb3VudCksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8zXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGNsczogXFxcInBsYXlsaXN0IOS4i+S4gOmhtVxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcbiAgICAgICAgfVxcblxcbiAgICAgICAgZm9yIChsZXQgaSA9IG51bTtpIDwgcGFnZXMgJiYgaSA8PSBjb3VudDsgaSsrKSB7XFxuXFxuICAgICAgICAgICAgbGV0IHBpY1R5cGUgPSBvcnRoZXJfaW1hZ2VcXG5cXG4gICAgICAgICAgICBsZXQgZmlsZU5hbWUgPSBkYXRhW2ldLmZpbGVOYW1lXFxuXFxuICAgICAgICAgICAgbGV0IGNpZCA9IGRhdGFbaV0uZmlsZUNpZFxcblxcbiAgICAgICAgICAgIGxldCBzaXplID0gZ2V0RmlsZVNpemUoZGF0YVtpXS5maWxlU2l6ZSlcXG5cXG4gICAgICAgICAgICAvL2xldCBmaWxlVHlwZSA9IGRhdGFbaV0uZmlsZVR5cGVcXG5cXG4gICAgICAgICAgICBzd2l0Y2ggKHRydWUpIHtcXG4gICAgICAgICAgICAgICAgY2FzZSBpbWFnZV9yZWd1bGFyLnRlc3QoZmlsZU5hbWUpOlxcbiAgICAgICAgICAgICAgICAgICAgcGljVHlwZSA9IGxpbmUrY2lkKydAUmVmZXJlcj1odHRwczovL3d4LnN0YXJpdmVycGFuLmNvbS8nXFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG4gICAgICAgICAgICAgICAgY2FzZSB2aWRlb19yZWd1bGFyLnRlc3QoZmlsZU5hbWUpOlxcbiAgICAgICAgICAgICAgICAgICAgcGljVHlwZSA9IHZpZGVvX2ltYWdlXFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG4gICAgICAgICAgICAgICAgY2FzZSBhdWRpb19yZWd1bGFyLnRlc3QoZmlsZU5hbWUpOlxcbiAgICAgICAgICAgICAgICAgICAgcGljVHlwZSA9IGF1ZGlvX2ltYWdlXFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG4gICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgIHBpY1R5cGUgPSBmaWxlX2ltYWdlXFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGZpbGVOYW1lLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBzaXplLFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBwaWNUeXBlLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogY29sVHlwZSxcXG4gICAgICAgICAgICAgICAgdXJsOmNpZCtcXFwiJiZcXFwiK2ZpbGVOYW1lK2dldEZpbGVVcmxMaW5lXFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuXFxuICAgICAgICBpZiAocGFnZXMgPiAxMDApe1xcbiAgICAgICAgICAgIC8v6K+35rGC6aG15pWwXFxuXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6XFxcIuS4iuS4gOmhtVxcXCIsXFxuICAgICAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpZCxwYWdlLG1pblBhZ2UsbnVtLGNvdW50KSA9PiB7XFxuXFxuICAgICAgICAgICAgICAgICAgICBpZihwYWdlPm1pblBhZ2UpXFxuICAgICAgICAgICAgICAgICAgICB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoaWQrXFxcInBhZ2VcXFwiLG1pblBhZ2UpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoaWQrXFxcIm51bVxcXCIsTnVtYmVyKG51bS0xMDApKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKGlkK1xcXCJjb3VudFxcXCIsTnVtYmVyKGNvdW50LTEwMCkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5LiK5LiA6aG1XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7cmV0dXJuIFxcXCJ0b2FzdDovL+W3sue7j+acgOWJjVxcXCJ9XFxuXFxuICAgICAgICAgICAgICAgIH0saWQscGFnZSxtaW5QYWdlLG51bSxjb3VudCksXFxuICAgICAgICAgICAgICAgIC8vcGljX3VybDpsYXN0X2ltYWdlLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfM1xcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBjbHM6IFxcXCJwbGF5bGlzdCDkuIrkuIDpobVcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTpcXFwi5pu05aSa5pON5L2cXFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiQoW1xcXCLov5Tlm57pppbpobVcXFwiLFxcXCLot7PovazlsL7pobVcXFwiXSwgMiwn6K+36YCJ5oup5pu05aSa6aG15pWw5Yqf6IO9Jykuc2VsZWN0KChpZCxwYWdlQ291bnQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIGlmKGlucHV0PT1cXFwi6L+U5Zue6aaW6aG1XFxcIil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGlkKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKGlkKydwYWdlJywxKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihpZCtcXFwibnVtXFxcIiwxKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihpZCtcXFwiY291bnRcXFwiLDEwMClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3sue7j+i3s+i9rOWIsOmmlumhtVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LGlkKVxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYgKGlucHV0PT1cXFwi6Lez6L2s5bC+6aG1XFxcIil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGlkLHBhZ2VDb3VudCkgPT4ge1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsZXQgbWF4Q291bnQgPSBOdW1iZXIocGFnZUNvdW50ICogMTAwKVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihpZCsncGFnZScscGFnZUNvdW50KVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihpZCtcXFwibnVtXFxcIixOdW1iZXIobWF4Q291bnQrMSkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKGlkK1xcXCJjb3VudFxcXCIsTnVtYmVyKG1heENvdW50KzEwMCkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7Lnu4/ot7PovazliLDlsL7pobVcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxpZCxwYWdlQ291bnQpXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0saWQscGFnZUNvdW50KSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzNcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgY2xzOiBcXFwicGxheWxpc3Qg5pu05aSa5pON5L2cXFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6XFxcIuS4i+S4gOmhtVxcXCIsXFxuICAgICAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpZCxwYWdlLG1heFBhZ2UsbnVtLGNvdW50KSA9PiB7XFxuXFxuICAgICAgICAgICAgICAgICAgICBpZihwYWdlPG1heFBhZ2UpIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihpZCtcXFwicGFnZVxcXCIsbWF4UGFnZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihpZCtcXFwibnVtXFxcIixOdW1iZXIobnVtKzEwMCkpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoaWQrXFxcImNvdW50XFxcIixOdW1iZXIoY291bnQrMTAwKSlcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kuIvkuIDpobVcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtyZXR1cm4gXFxcInRvYXN0Oi8v5bey57uP5pyA5ZCOXFxcIn1cXG4gICAgICAgICAgICAgICAgfSxpZCxwYWdlLG1heFBhZ2UsbnVtLGNvdW50KSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzNcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgY2xzOiBcXFwicGxheWxpc3Qg5LiL5LiA6aG1XFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuXFxuICAgIH1cXG5cXG59ZWxzZXtcXG4gICAgdG9hc3QoXFxcIuivt+ehruiupOS6keebmOWvhumSpVxcXCIpXFxuXFxuICAgIGphdmEubGFuZy5UaHJlYWQuc2xlZXAoMTUwMClcXG5cXG4gICAgYmFjaygpO1xcbn1cXG5cXG5cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuWbnuaUtuermVwiLFwicGF0aFwiOlwidHJhc2hcIixcInJ1bGVcIjpcImpzOlxcbiAgICB2YXIgZCA9IFtdO1xcblxcbmV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZnVuY3Rpb25zJykpLnJ1bGUpXFxuXFxuaWQgPSBNWV9QQVJBTVMuaWRcXG5cXG5pZighaWQpe1xcbiAgICBpZCA9IFxcXCJcXFwiXFxufVxcblxcbmxldCBwYWdlID0gTnVtYmVyKGdldE15VmFyKGlkK1xcXCJwYWdlXFxcIixcXFwiMVxcXCIpKVxcblxcbnRyeSB7XFxuXFxuICAgIGxldCBjaGVja19sb2dpbiA9IGNoZWNrVG9rZW4oKVxcblxcbiAgICBpZihjaGVja19sb2dpbi5jb2RlID09PSAyMDApe1xcblxcblxcbiAgICAgICAgcmVzdWx0ID0gdHJhc2hGaWxlcyhwYWdlLHN0b3JhZ2UwLmdldEl0ZW0oXFxcIuaOkuW6j+exu+Wei1xcXCIsIFxcXCJuYW1lXFxcIiksc3RvcmFnZTAuZ2V0SXRlbShcXFwi5o6S5bqP5pa55byPXFxcIiwgXFxcImFzY1xcXCIpKVxcblxcbiAgICAgICAgLypkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOnJlc3VsdCxcXG4gICAgICAgICAgICB1cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8xXFxcIlxcbiAgICAgICAgfSk7Ki9cXG5cXG4gICAgICAgIHBhZ2VzID0gTnVtYmVyKHJlc3VsdC5kYXRhLnRvdGFsX251bSlcXG4gICAgICAgIHBhZ2VDb3VudCA9IE51bWJlcigocGFnZXMvMTAwKSsxKS50b0ZpeGVkKDApXFxuICAgICAgICBtaW5QYWdlID0gcGFnZSA+IDEgPyBjaGFuZ2VQYWdlSW50KHBhZ2UsXFxcIi1cXFwiKSA6IDFcXG4gICAgICAgIG1heFBhZ2UgPSBwYWdlID49IHBhZ2VDb3VudCA/IHBhZ2VDb3VudCA6IGNoYW5nZVBhZ2VJbnQocGFnZSxcXFwiK1xcXCIpXFxuXFxuXFxuICAgICAgICBkYXRhID0gcmVzdWx0LmRhdGEuZmlsZXNcXG5cXG4gICAgICAgIC8v5o6S5bqP5Yqf6IO9XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOnN0b3JhZ2UwLmdldEl0ZW0oXFxcIuaOkuW6j+WPmOmHj1xcXCIsIFxcXCLlkI3np7DmraPluo9cXFwiKSxcXG4gICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfM1xcXCIsXFxuICAgICAgICAgICAgdXJsOiQoW1xcXCLlkI3np7DmraPluo9cXFwiLFxcXCLlkI3np7DlgJLluo9cXFwiLFxcXCLml7bpl7TmraPluo9cXFwiLFxcXCLml7bpl7TlgJLluo9cXFwiLFxcXCLlpKflsI/mraPluo9cXFwiLFxcXCLlpKflsI/lgJLluo9cXFwiXSwgMiwn6ZyA6KaB5LuA5LmI57G75Z6L5o6S5bqP77yfJykuc2VsZWN0KCgpID0+IHtcXG5cXG4gICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwi5o6S5bqP5Y+Y6YePXFxcIiwgaW5wdXQpO1xcbiAgICAgICAgICAgICAgICBpZihpbnB1dC5pbmNsdWRlcyhcXFwi5ZCN56ewXFxcIikpXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCLmjpLluo/nsbvlnotcXFwiLCBcXFwibmFtZVxcXCIpO1xcbiAgICAgICAgICAgICAgICBlbHNlIGlmKGlucHV0LmluY2x1ZGVzKFxcXCLml7bpl7RcXFwiKSlcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcIuaOkuW6j+exu+Wei1xcXCIsIFxcXCJ1cGxvYWRcXFwiKTtcXG4gICAgICAgICAgICAgICAgZWxzZVxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwi5o6S5bqP57G75Z6LXFxcIiwgXFxcInNpemVcXFwiKTtcXG5cXG4gICAgICAgICAgICAgICAgaWYoaW5wdXQuaW5jbHVkZXMoXFxcIuato+W6j1xcXCIpKVxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwi5o6S5bqP5pa55byPXFxcIiwgXFxcImFzY1xcXCIpO1xcbiAgICAgICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCLmjpLluo/mlrnlvI9cXFwiLCBcXFwiZGVzY1xcXCIpO1xcblxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSk7XFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/liIfmjaLmiJDlip9cXFwiXFxuXFxuICAgICAgICAgICAgfSksXFxuICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgICB0ZXh0U2l6ZTo2XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfSk7XFxuICAgICAgICAvL+aYvuekuuexu+Wei1xcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTpzdG9yYWdlMC5nZXRJdGVtKFxcXCLmlofku7bmoLflvI9cXFwiLCBcXFwi5YiX6KGo5qih5byPXFxcIiksXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzNcXFwiLFxcbiAgICAgICAgICAgIHVybDokKFtcXFwi5YiX6KGo5qih5byPXFxcIixcXFwi5Zu+5paH5qih5byPXFxcIixcXFwi5YWo5ZCN5qih5byPXFxcIixcXFwi5ryr55S75qih5byPXFxcIl0sIDIsJ+mcgOimgeS7gOS5iOagt+W8j+aYvuekuu+8nycpLnNlbGVjdCgoZGF0YSkgPT4ge1xcblxcbiAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCLmlofku7bmoLflvI9cXFwiLCBpbnB1dCk7XFxuICAgICAgICAgICAgICAgIGlmKGlucHV0PT1cXFwi5YiX6KGo5qih5byPXFxcIilcXG4gICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcIuaWh+S7tuagt+W8j+WPmOmHj1xcXCIsIFxcXCJhdmF0YXJcXFwiKTtcXG4gICAgICAgICAgICAgICAgaWYoaW5wdXQ9PVxcXCLlm77mlofmqKHlvI9cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwi5paH5Lu25qC35byP5Y+Y6YePXFxcIiwgXFxcIm1vdmllXzJcXFwiKTtcXG4gICAgICAgICAgICAgICAgaWYoaW5wdXQ9PVxcXCLlhajlkI3mqKHlvI9cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwi5paH5Lu25qC35byP5Y+Y6YePXFxcIiwgXFxcInRleHRfMVxcXCIpO1xcbiAgICAgICAgICAgICAgICBpZiAoaW5wdXQ9PVxcXCLmvKvnlLvmqKHlvI9cXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJycpLmxhenlSdWxlKChkYXRhKSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9mdW5jdGlvbnMnKSkucnVsZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZ2V0SW1hZ2VMaXN0KGRhdGEpXFxuICAgICAgICAgICAgICAgICAgICB9LGRhdGEpXFxuICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKTtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+WIh+aNouaIkOWKn1xcXCJcXG5cXG4gICAgICAgICAgICB9LGRhdGEpXFxuICAgICAgICB9KTtcXG4gICAgICAgIC8v5pu05aSa5Yqf6IO9XFxuICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgIHRpdGxlOlxcXCLmm7TlpJrlip/og71cXFwiLFxcbiAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8zXFxcIixcXG4gICAgICAgICAgICB1cmw6JChbXFxcIua4heepuuWbnuaUtuermVxcXCJdLCAyLCflip/og73mk43kvZwnKS5zZWxlY3QoKCkgPT4ge1xcbiAgICAgICAgICAgICAgICBpZihpbnB1dCA9PT0gXFxcIua4heepuuWbnuaUtuermVxcXCIpe1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9mdW5jdGlvbnMnKSkucnVsZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gY2xlYW5GaWxlc0ZvclRyYXNoKClcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgfSk7XFxuXFxuICAgICAgICBpZiAocGFnZXMgPiAxMDApe1xcbiAgICAgICAgICAgIC8v6K+35rGC6aG15pWwXFxuXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6XFxcIuS4iuS4gOmhtVxcXCIsXFxuICAgICAgICAgICAgICAgIHVybDokKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpZCxwYWdlLG1pblBhZ2UpID0+IHtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGlmKHBhZ2U+bWluUGFnZSlcXG4gICAgICAgICAgICAgICAgICAgIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihpZCtcXFwicGFnZVxcXCIsbWluUGFnZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/kuIrkuIDpobVcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtyZXR1cm4gXFxcInRvYXN0Oi8v5bey57uP5pyA5YmNXFxcIn1cXG5cXG4gICAgICAgICAgICAgICAgfSxpZCxwYWdlLG1pblBhZ2UpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfM1xcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBjbHM6IFxcXCJwbGF5bGlzdCDkuIrkuIDpobVcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTpwYWdlK1xcXCIvXFxcIitwYWdlQ291bnQsXFxuICAgICAgICAgICAgICAgIHVybDokKCcnLCfor7fovpPlhaXpobXnoIEnKS5pbnB1dCgoaWQscGFnZUNvdW50KT0+e1xcblxcbiAgICAgICAgICAgICAgICAgICAgaWYoaW5wdXQ+MCYmTnVtYmVyKGlucHV0KTw9cGFnZUNvdW50KXtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRNeVZhcihpZCsncGFnZScsaW5wdXQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7Lnu4/ot7PovazliLDnrKxcXFwiK2lucHV0K1xcXCLpobVcXFwiXFxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtyZXR1cm4gXFxcInRvYXN0Oi8v6L6T5YWl6ZSZ6K+vXFxcIn1cXG4gICAgICAgICAgICAgICAgfSxpZCxwYWdlQ291bnQpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfM1xcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBjbHM6IFxcXCJwbGF5bGlzdCDmgLvpobXmlbBcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTpcXFwi5LiL5LiA6aG1XFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGlkLHBhZ2UsbWF4UGFnZSkgPT4ge1xcblxcbiAgICAgICAgICAgICAgICAgICAgaWYocGFnZTxtYXhQYWdlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoaWQrXFxcInBhZ2VcXFwiLG1heFBhZ2UpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5LiL5LiA6aG1XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7cmV0dXJuIFxcXCJ0b2FzdDovL+W3sue7j+acgOWQjlxcXCJ9XFxuICAgICAgICAgICAgICAgIH0saWQscGFnZSxtYXhQYWdlKSxcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzNcXFwiLFxcbiAgICAgICAgICAgICAgICBleHRyYToge1xcbiAgICAgICAgICAgICAgICAgICAgY2xzOiBcXFwicGxheWxpc3Qg5LiL5LiA6aG1XFxcIlxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICB9XFxuXFxuXFxuICAgICAgICBmb3IgKHZhciBpIGluIGRhdGEpIHtcXG5cXG4gICAgICAgICAgICAvL+WbuuWumuWAvOWIpOaWrVxcblxcbiAgICAgICAgICAgIHBpY1R5cGUgPSBcXFwiXFxcIlxcbiAgICAgICAgICAgIHVybF90eXBlID0gXFxcIlxcXCJcXG4gICAgICAgICAgICB1cmxfYmFjayA9IFxcXCJcXFwiXFxuICAgICAgICAgICAgY29sVHlwZSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcIuaWh+S7tuagt+W8j+WPmOmHj1xcXCIsIFxcXCJhdmF0YXJcXFwiKVxcblxcbiAgICAgICAgICAgIC8v5b6q546v5Zu65a6a5YC8XFxuXFxuICAgICAgICAgICAgZmlsZU5hbWUgPSBkYXRhW2ldLmZpbGVfbmFtZVxcbiAgICAgICAgICAgIHRpbWUgPSB0aW1lc3RhbXBUb1RpbWUoZGF0YVtpXS5jcmVhdGVfdGltZSlcXG4gICAgICAgICAgICBpc0ZvbGRlciA9IGRhdGFbaV0uaXNfZm9sZGVyXFxuICAgICAgICAgICAgZmlsZUlkID0gZGF0YVtpXS5pZFxcbiAgICAgICAgICAgIGZpbGVfc2l6ZSA9IGdldEZpbGVTaXplKGRhdGFbaV0uZmlsZV9zaXplKVxcbiAgICAgICAgICAgIHBhcmVudElkID0gZGF0YVtpXS5wYXJlbnRfaWRcXG5cXG5cXG4gICAgICAgICAgICAvL+WIpOaWreaWh+S7tuWkueWSjOaWh+S7tlxcblxcbiAgICAgICAgICAgIGlmKGlzRm9sZGVyID4gMCl7XFxuXFxuICAgICAgICAgICAgICAgIHBpY1R5cGUgPSBmb2xkZXJfaW1hZ2VcXG5cXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBmaWxlTmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IHRpbWUsXFxuICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBwaWNUeXBlLFxcbiAgICAgICAgICAgICAgICAgICAgdXJsOiBjb2xUeXBlPT1cXFwi5ryr55S75qih5byPXFxcIj8kKCcnKS5sYXp5UnVsZSgoZGF0YSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZnVuY3Rpb25zJykpLnJ1bGUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGdldEltYWdlTGlzdChkYXRhKVxcbiAgICAgICAgICAgICAgICAgICAgfSxkYXRhKTpcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBjb2xUeXBlLFxcbiAgICAgICAgICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxvbmdDbGljazpbXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aXRsZTogXFxcIuWIoOmZpOaWh+S7tlxcXCIsIGpzOiAkLnRvU3RyaW5nKChmaWxlSWQpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9mdW5jdGlvbnMnKSkucnVsZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gZGVsZXRlRmlsZXNGb3JUcmFzaChmaWxlSWQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LGZpbGVJZClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSx7dGl0bGU6IFxcXCLmgaLlpI3mlofku7ZcXFwiLCBqczogJC50b1N0cmluZygoZmlsZUlkKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZnVuY3Rpb25zJykpLnJ1bGUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHJlY292ZXJGb3JUcmFzaChmaWxlSWQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LGZpbGVJZClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIF0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgdGV4dFNpemU6MjRcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgfWVsc2V7XFxuXFxuICAgICAgICAgICAgICAgIC8v5paH5Lu25Zu65a6a5YC8XFxuXFxuICAgICAgICAgICAgICAgIGNpZCA9IGRhdGFbaV0uZmlsZV9jaWRcXG4gICAgICAgICAgICAgICAgdHlwZSA9IGRhdGFbaV0uZmlsZV9leHRcXG4gICAgICAgICAgICAgICAgcGljVHlwZSA9IGZpbGVfaW1hZ2VcXG5cXG5cXG4gICAgICAgICAgICAgICAgLy/liKTmlq3mlofku7bnsbvlnotcXG5cXG4gICAgICAgICAgICAgICAgc3dpdGNoICh0cnVlKSB7XFxuICAgICAgICAgICAgICAgICAgICBjYXNlIGltYWdlX3JlZ3VsYXIudGVzdCh0eXBlKTpcXG4gICAgICAgICAgICAgICAgICAgICAgICBwaWNUeXBlID0gbGluZStjaWQrJ0BSZWZlcmVyPWh0dHBzOi8vd3guc3Rhcml2ZXJwYW4uY29tLydcXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG5cXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgdmlkZW9fcmVndWxhci50ZXN0KHR5cGUpOlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpY1R5cGUgPSB2aWRlb19pbWFnZVxcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBhdWRpb19yZWd1bGFyLnRlc3QodHlwZSk6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGljVHlwZSA9IGF1ZGlvX2ltYWdlXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OlxcbiAgICAgICAgICAgICAgICAgICAgICAgIHBpY1R5cGUgPSBmaWxlX2ltYWdlXFxuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIH1cXG5cXG5cXG4gICAgICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBmaWxlTmFtZSxcXG4gICAgICAgICAgICAgICAgICAgIGRlc2M6IGZpbGVfc2l6ZSxcXG4gICAgICAgICAgICAgICAgICAgIHBpY191cmw6IHBpY1R5cGUsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IGNpZCtcXFwiJiZcXFwiK3R5cGUrZ2V0RmlsZVVybExpbmUsXFxuICAgICAgICAgICAgICAgICAgICBjb2xfdHlwZTogY29sVHlwZSxcXG4gICAgICAgICAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgICAgICAgICAgICBsb25nQ2xpY2s6W1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGl0bGU6IFxcXCLliKDpmaTmlofku7ZcXFwiLCBqczogJC50b1N0cmluZygoZmlsZUlkKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZnVuY3Rpb25zJykpLnJ1bGUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGRlbGV0ZUZpbGVzRm9yVHJhc2goZmlsZUlkKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxmaWxlSWQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0se3RpdGxlOiBcXFwi5oGi5aSN5paH5Lu2XFxcIiwganM6ICQudG9TdHJpbmcoKGZpbGVJZCk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2Z1bmN0aW9ucycpKS5ydWxlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWNvdmVyRm9yVHJhc2goZmlsZUlkKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxmaWxlSWQpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICBdXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pO1xcblxcblxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG5cXG4gICAgICAgIGlmIChwYWdlcyA+IDEwMCl7XFxuICAgICAgICAgICAgLy/or7fmsYLpobXmlbBcXG5cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTpcXFwi5LiK5LiA6aG1XFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGlkLHBhZ2UsbWluUGFnZSkgPT4ge1xcblxcbiAgICAgICAgICAgICAgICAgICAgaWYocGFnZT5taW5QYWdlKVxcbiAgICAgICAgICAgICAgICAgICAge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKGlkK1xcXCJwYWdlXFxcIixtaW5QYWdlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+S4iuS4gOmhtVxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle3JldHVybiBcXFwidG9hc3Q6Ly/lt7Lnu4/mnIDliY1cXFwifVxcblxcbiAgICAgICAgICAgICAgICB9LGlkLHBhZ2UsbWluUGFnZSksXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBcXFwidGV4dF8zXFxcIixcXG4gICAgICAgICAgICAgICAgZXh0cmE6IHtcXG4gICAgICAgICAgICAgICAgICAgIGNsczogXFxcInBsYXlsaXN0IOS4iuS4gOmhtVxcXCJcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgIHRpdGxlOlxcXCLmm7TlpJrmk43kvZxcXFwiLFxcbiAgICAgICAgICAgICAgICB1cmw6JChbXFxcIui/lOWbnummlumhtVxcXCIsXFxcIui3s+i9rOWwvumhtVxcXCJdLCAyLCfor7fpgInmi6nmm7TlpJrpobXmlbDlip/og70nKS5zZWxlY3QoKGlkLHBhZ2VDb3VudCkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgaWYoaW5wdXQ9PVxcXCLov5Tlm57pppbpobVcXFwiKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaWQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoaWQrJ3BhZ2UnLDEpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBcXFwidG9hc3Q6Ly/lt7Lnu4/ot7PovazliLDpppbpobVcXFwiXFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxpZClcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNlIGlmIChpbnB1dD09XFxcIui3s+i9rOWwvumhtVxcXCIpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChpZCxwYWdlQ291bnQpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoaWQrJ3BhZ2UnLHBhZ2VDb3VudClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3sue7j+i3s+i9rOWIsOWwvumhtVxcXCJcXG4gICAgICAgICAgICAgICAgICAgICAgICB9LGlkLHBhZ2VDb3VudClcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSxpZCxwYWdlQ291bnQpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfM1xcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBjbHM6IFxcXCJwbGF5bGlzdCDmm7TlpJrmk43kvZxcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICB0aXRsZTpcXFwi5LiL5LiA6aG1XFxcIixcXG4gICAgICAgICAgICAgICAgdXJsOiQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGlkLHBhZ2UsbWF4UGFnZSkgPT4ge1xcblxcbiAgICAgICAgICAgICAgICAgICAgaWYocGFnZTxtYXhQYWdlKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoaWQrXFxcInBhZ2VcXFwiLG1heFBhZ2UpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v5LiL5LiA6aG1XFxcIlxcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+W3sue7j+acgOWQjlxcXCJcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSxpZCxwYWdlLG1heFBhZ2UpLFxcbiAgICAgICAgICAgICAgICBjb2xfdHlwZTogXFxcInRleHRfM1xcXCIsXFxuICAgICAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgICAgICBjbHM6IFxcXCJwbGF5bGlzdCDkuIvkuIDpobVcXFwiXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9KTtcXG4gICAgICAgIH1cXG5cXG4gICAgfWVsc2Uge1xcbiAgICAgICAgdG9hc3QoXFxcIuWvhumSpeaciemXrumimOaIluiAheacqueZu+W9lVxcXCIpXFxuXFxuICAgICAgICBqYXZhLmxhbmcuVGhyZWFkLnNsZWVwKDE1MDApXFxuXFxuICAgICAgICBiYWNrKCk7XFxuICAgIH1cXG5cXG59Y2F0Y2ggKGUpe1xcbiAgICBsb2coZS5tZXNzYWdlKVxcbn1cXG5cXG5zZXRSZXN1bHQoZClcIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIuejgeWKm+aVsOaNruino+aekFwiLFwicGF0aFwiOlwiY2hlY2tNYWdlbnRcIixcInJ1bGVcIjpcImpzOlxcbiAgICB2YXIgZCA9IFtdXFxuXFxuZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9mdW5jdGlvbnMnKSkucnVsZSlcXG5cXG50eXBlID0gc3RvcmFnZTAuZ2V0SXRlbShcXFwiQ2hlY2tNYWdlbnRUeXBlXFxcIiwgXFxcIlxcXCIpO1xcbm1hZ2VudCA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcIkNoZWNrTWFnZW50TWFnZW50XFxcIiwgXFxcIlxcXCIpO1xcblxcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOlxcXCLmn6Xor6JcXFxcbuWFt+S9k+WGheWuuVxcXCIsXFxuICAgIGRlc2M6XFxcIuivt+i+k+WFpeejgeWKm+mTvuaOpVxcXCIsXFxuICAgIGNvbF90eXBlOiBcXFwiaW5wdXRcXFwiLFxcbiAgICB1cmw6JC50b1N0cmluZygoKSA9PiB7XFxuICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJDaGVja01hZ2VudFR5cGVcXFwiLCBcXFwiZGF0YVxcXCIpO1xcbiAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwiQ2hlY2tNYWdlbnRNYWdlbnRcXFwiLCBpbnB1dCk7XFxuICAgICAgICByZWZyZXNoUGFnZSgpO1xcbiAgICB9KSxcXG4gICAgZXh0cmE6IHt0eXBlOiAndGV4dGFyZWEnLGhlaWdodDogMn1cXG59KTtcXG5cXG5kLnB1c2goe1xcbiAgICB0aXRsZTpcXFwi5p+l6K+iXFxcXG7luKblm77niYdcXFwiLFxcbiAgICBkZXNjOlxcXCLor7fovpPlhaXno4Hlipvpk77mjqVcXFwiLFxcbiAgICBjb2xfdHlwZTogXFxcImlucHV0XFxcIixcXG4gICAgdXJsOiQudG9TdHJpbmcoKCkgPT4ge1xcbiAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwiQ2hlY2tNYWdlbnRUeXBlXFxcIiwgXFxcImltYWdlXFxcIik7XFxuICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJDaGVja01hZ2VudE1hZ2VudFxcXCIsIGlucHV0KTtcXG4gICAgICAgIHJlZnJlc2hQYWdlKCk7XFxuICAgIH0pLFxcbiAgICBleHRyYToge3R5cGU6ICd0ZXh0YXJlYScsaGVpZ2h0OiAyfVxcbn0pO1xcblxcbmlmICh0eXBlID09PSBcXFwiZGF0YVxcXCIpe1xcblxcbiAgICByZXN1bHQgPSBjaGVja01hZ2VudERhdGEobWFnZW50LHR5cGUpXFxuXFxuICAgIGlmIChyZXN1bHQgPT09IFxcXCJlcnJvclxcXCIpe1xcblxcbiAgICAgICAgdG9hc3QoXFxcIuafpeivouasoeaVsOabtOWkmu+8jOivt+eojeWQjuWGjeivlSFcXFwiKVxcblxcbiAgICB9ZWxzZSBpZihyZXN1bHQgPT09IFxcXCJcXFwiKXtcXG4gICAgICAgIHRvYXN0KFxcXCLmn6Xor6LotoXml7bvvIzor7fmm7TmjaLmqKHlvI8hXFxcIilcXG4gICAgfWVsc2Uge1xcblxcbiAgICAgICAgZGF0YSA9IEpTT04ucGFyc2UocmVzdWx0KS5pbmZvXFxuXFxuICAgICAgICBmaWxlTmFtZSA9IGRhdGEubmFtZVxcbiAgICAgICAgaGFzaCA9IGRhdGEubWFnbmV0XFxuICAgICAgICBjb3VudFNpemUgPSBnZXRGaWxlU2l6ZShkYXRhLmxlbmd0aClcXG4gICAgICAgIGZpbGVzID0gZGF0YS5maWxlc1xcblxcbiAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogZmlsZU5hbWUsXFxuICAgICAgICAgICAgZGVzYzogXFxcIuWkp+Wwj++8mlxcXCIrY291bnRTaXplK1xcXCJcXFxcbumTvuaOpe+8mlxcXCIraGFzaCxcXG4gICAgICAgICAgICB1cmw6XFxcImNvcHk6Ly9cXFwiK2hhc2gsXFxuICAgICAgICAgICAgcGljX3VybDogXFxcIlxcXCIsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiXFxuICAgICAgICB9KTtcXG5cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICAgICAgfSk7XFxuXFxuICAgICAgICBmb3IgKHZhciBpIGluIGZpbGVzKXtcXG5cXG4gICAgICAgICAgICBwYXRoID0gZmlsZXNbaV0ucGF0aFxcbiAgICAgICAgICAgIGZpbGVOYW1lID0gZmlsZXNbaV0ubmFtZVxcbiAgICAgICAgICAgIHNpemUgPSBnZXRGaWxlU2l6ZShmaWxlc1tpXS5sZW5ndGgpXFxuXFxuICAgICAgICAgICAgZC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IGZpbGVOYW1lLFxcbiAgICAgICAgICAgICAgICBkZXNjOiBcXFwi5aSn5bCP77yaXFxcIitzaXplK1xcXCJcXFxcbui3r+W+hO+8mlxcXCIrcGF0aCxcXG4gICAgICAgICAgICAgICAgdXJsOlxcXCJcXFwiLFxcbiAgICAgICAgICAgICAgICBwaWNfdXJsOiBcXFwiXFxcIixcXG4gICAgICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiXFxuICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICB9XFxuXFxuICAgIH1cXG5cXG5cXG59ZWxzZSBpZiAodHlwZSA9PT0gXFxcImltYWdlXFxcIil7XFxuXFxuICAgIHJlc3VsdCA9IGNoZWNrTWFnZW50RGF0YShtYWdlbnQsdHlwZSlcXG5cXG4gICAgZGF0YSA9IEpTT04ucGFyc2UocmVzdWx0KVxcblxcbiAgICBmaWxlTmFtZSA9IGRhdGEubmFtZVxcbiAgICBoYXNoID0gbWFnZW50XFxuICAgIGNvdW50U2l6ZSA9IGdldEZpbGVTaXplKGRhdGEuc2l6ZSlcXG4gICAgY291bnQgPSBkYXRhLmNvdW50XFxuICAgIHR5cGUgPSBkYXRhLmZpbGVfdHlwZVxcbiAgICBmaWxlcyA9IGRhdGEuc2NyZWVuc2hvdHNcXG5cXG4gICAgZC5wdXNoKHtcXG4gICAgICAgIHRpdGxlOiBmaWxlTmFtZSxcXG4gICAgICAgIGRlc2M6IFxcXCLnsbvlnovvvJpcXFwiK3R5cGUrXFxcIlxcXFxu5aSn5bCP77yaXFxcIitjb3VudFNpemUrXFxcIlxcXFxu5oC75pWw77yaXFxcIitjb3VudCxcXG4gICAgICAgIHVybDpcXFwiY29weTovL1xcXCIraGFzaCxcXG4gICAgICAgIHBpY191cmw6IFxcXCJcXFwiLFxcbiAgICAgICAgY29sX3R5cGU6IFxcXCJ0ZXh0XzFcXFwiXFxuICAgIH0pO1xcblxcbiAgICBkLnB1c2goe1xcbiAgICAgICAgY29sX3R5cGU6ICdsaW5lX2JsYW5rJ1xcbiAgICB9KTtcXG5cXG4gICAgZm9yICh2YXIgaSBpbiBmaWxlcyl7XFxuXFxuICAgICAgICBmaWxlX2ltYWdlcyA9IGZpbGVzW2ldLnNjcmVlbnNob3RcXG5cXG4gICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLlsZXnpLrlm74tXFxcIitpLFxcbiAgICAgICAgICAgIGRlc2M6IFxcXCJcXFwiLFxcbiAgICAgICAgICAgIHVybDpmaWxlX2ltYWdlcytcXFwiIy5qcGdAUmVmZXJlcj1odHRwczovL3doYXRzbGluay5pbmZvL1xcXCIsXFxuICAgICAgICAgICAgcGljX3VybDogZmlsZV9pbWFnZXMsXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJtb3ZpZV8yXFxcIlxcbiAgICAgICAgfSk7XFxuXFxuICAgIH1cXG5cXG59ZWxzZSB7XFxuICAgIHRvYXN0KFxcXCLmuKnppqjmj5DnpLoh5YW35L2T5pWw5o2u5LiN5Y+v6YeN5aSN5Yi35pawLOS8muacieS9v+eUqOasoeaVsOmZkOWItlxcXCIpXFxufVxcblxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6K+75Y+W5aSH5Lu9XCIsXCJwYXRoXCI6XCJyZWFkQmFja1wiLFwicnVsZVwiOlwianM6XFxuICAgIHZhciBkID0gW11cXG5cXG5ldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2Z1bmN0aW9ucycpKS5ydWxlKVxcblxcbmxldCBwYXRoID0gTVlfUEFSQU1TLnBhdGhcXG5cXG5sZXQgdHlwZSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcImJhY2tUeXBlXFxcIixcXFwiXFxcIilcXG5cXG5sZXQgbW92ZVR5cGUgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJtb3ZlVHlwZVxcXCIsXFxcImZhbHNlXFxcIilcXG5cXG5sZXQgbW92ZURhdGEgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJtb3ZlRGF0YVxcXCIsJ1tdJylcXG5cXG5sZXQgbW92ZUZpbGVEYXRhUGF0aCA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcIm1vdmVGaWxlRGF0YVBhdGhcXFwiLFxcXCJcXFwiKVxcblxcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywkLnRvU3RyaW5nKCgpPT57cmVmcmVzaFBhZ2UoKX0pKVxcblxcbmlmICghcGF0aCl7XFxuXFxuICAgIGlmICh0eXBlID09PSAnc3RhcnQnKXtcXG5cXG4gICAgICAgIHBhdGggPSBzdGFydFBhdGhcXG5cXG4gICAgfWVsc2UgaWYgKHR5cGUgPT09ICdjbG91ZCcpe1xcblxcbiAgICAgICAgcGF0aCA9IGNsb3VkUGF0aFxcblxcbiAgICB9XFxuXFxufVxcblxcbmlmIChmaWxlRXhpc3QocGF0aCkpe1xcblxcbiAgICBsZXQgbGluZSA9IFxcXCJodHRwczovL2lwZnNndzAwLnN0YXJpdmVycGFuLmNvbTo5MDk1L2lwZnMvXFxcIlxcblxcbiAgICBpZiAodHlwZSA9PT0gJ3N0YXJ0Jyl7XFxuXFxuICAgICAgICB0cnkge1xcblxcbiAgICAgICAgICAgIGxldCBmaWxlQmFjayA9IEpTT04ucGFyc2UocmVhZEZpbGUocGF0aCwgMCkgfHwgJ1tdJyk7XFxuXFxuICAgICAgICAgICAgbGV0IGRhdGEgPSBmaWxlQmFjay5maWxlRGF0YVxcblxcbiAgICAgICAgICAgIGxldCBmaWxlcyA9IGRhdGEuZmlsZXNcXG5cXG4gICAgICAgICAgICBmb3IgKGxldCBpIGluIGZpbGVzKXtcXG5cXG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBmaWxlc1tpXVxcblxcbiAgICAgICAgICAgICAgICBsZXQgaXNGb2xkZXIgPSBmaWxlc1tpXS50eXBlXFxuXFxuICAgICAgICAgICAgICAgIGxldCBmaWxlTmFtZSA9IGZpbGVzW2ldLm5hbWVcXG5cXG4gICAgICAgICAgICAgICAgbGV0IGZpbGVJZCA9IGZpbGVzW2ldLmlkXFxuXFxuICAgICAgICAgICAgICAgIGxldCBuZXdQYXRoID0gc3RhcnRJbmRleFBhdGgrZmlsZUlkK2ZpbGVOYW1lK1xcXCIuanNvblxcXCJcXG5cXG4gICAgICAgICAgICAgICAgbGV0IHBhdGhOYW1lID0gZmlsZUlkK2ZpbGVOYW1lXFxuXFxuICAgICAgICAgICAgICAgIGlmIChpc0ZvbGRlciA+IDApe1xcblxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGJhY2tQYXRoID0gSlNPTi5wYXJzZShyZWFkRmlsZShuZXdQYXRoLCAwKSB8fCAnW10nKS5maWxlRGF0YS5wYXRoXFxuXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBmaWxlTmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBiYWNrX2ZvbGRlcl9pbWFnZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6XFxcImhpa2VyOi8vcGFnZS9yZWFkQmFja1xcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6XFxcImF2YXRhclxcXCIsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBuZXdQYXRoLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IG1vdmVUeXBlID09PSBcXFwiZmFsc2VcXFwiID8gW1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi5pu05aSa5pON5L2cXFxcIiwganM6ICQudG9TdHJpbmcoKG5ld1BhdGgpPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiAkKFtcXFwi5rKJ5rW45ryr55S7XFxcIl0sIDIsJ+WKn+iDveaTjeS9nCcpLnNlbGVjdCgobmV3UGF0aCkgPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZihpbnB1dCA9PT0gXFxcIuayiea1uOa8q+eUu1xcXCIpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZnVuY3Rpb25zJykpLnJ1bGUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGJhY2tGaWxlSW1hZ2VMaXN0Rm9yU3RhcnQobmV3UGF0aClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxuZXdQYXRoKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sbmV3UGF0aCl9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi6Ieq5Li75aSH5Lu95Yiw5q2kXFxcIixqczokLnRvU3RyaW5nKChwYXRoTmFtZSxiYWNrUGF0aCk9PntcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybSh7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aXRsZTon6YCJ5oup5aSH5Lu9JyxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRlbnQ6J+ehruWumi3lsIblrZjlhaXlvZPliY3oh6rkuLvlpIfku73nm67lvZVcXFxcbuWPlua2iC3ph43mlrDpgInmi6noh6rkuLvlpIfku73nmoTnm67lvZUnLFxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uZmlybTokLnRvU3RyaW5nKChwYXRoTmFtZSxiYWNrUGF0aCk9PntcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc3RvcmFnZTAuZ2V0SXRlbShcXFwiYmFja0NoYW5nZVxcXCIsXFxcImZhbHNlXFxcIikgPT09IFxcXCJ0cnVlXFxcIil7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzdG9yYWdlMC5nZXRJdGVtKFxcXCJiYWNrQ2hhbmdlVHlwZVxcXCIsXFxcImZhbHNlXFxcIikgPT09IFxcXCJ0cnVlXFxcIil7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2coSlNPTi5zdHJpbmdpZnkoZ2V0TXlWYXIoXFxcImJhdGNoRGF0YVxcXCIpKSlcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2Uge1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGV0IGRhdGEgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCJiYWNrQ2hhbmdlRGF0YVxcXCIpO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGRhdGEubGVuZ3RoIDwgMSl7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJ0b2FzdDovL+Wkh+S7veaVsOaNruW8guW4uO+8jOivt+iBlOezu+W8gOWPkVxcXCJcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNlIHtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2Z1bmN0aW9ucycpKS5ydWxlKVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNoZWNrQmFja0lzVHJ1ZShwYXRoTmFtZSxkYXRhLGJhY2tQYXRoKVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2Uge1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gXFxcInRvYXN0Oi8v6K+35LuO6Ieq5Li75aSH5Lu96YKj6Lez6L2s6L+H5p2lXFxcIlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0scGF0aE5hbWUsYmFja1BhdGgpLFxcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2FuY2VsOiQudG9TdHJpbmcoKCk9PntcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxwYXRoTmFtZSxiYWNrUGF0aClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB7dGl0bGU6IFxcXCLmlofku7bmk43kvZxcXFwiLCBqczogJC50b1N0cmluZygoZGF0YSxwYXRoKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChbXFxcIuenu+WKqOWkh+S7vVxcXCIsXFxcIuWIoOmZpOWkh+S7vVxcXCJdLCAyLCflip/og73mk43kvZwnKS5zZWxlY3QoKGRhdGEscGF0aCkgPT57XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW5wdXQgPT09IFxcXCLnp7vliqjlpIfku71cXFwiKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhckl0ZW0oXFxcImJhY2tUeXBlXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhckl0ZW0oXFxcIm1vdmVUeXBlXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhckl0ZW0oXFxcIm1vdmVEYXRhXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGVhckl0ZW0oXFxcIm1vdmVGaWxlRGF0YVBhdGhcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcIm1vdmVUeXBlXFxcIixcXFwidHJ1ZVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwibW92ZURhdGFcXFwiLGRhdGEpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwibW92ZUZpbGVEYXRhUGF0aFxcXCIscGF0aClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJiYWNrVHlwZVxcXCIsIFxcXCJzdGFydFxcXCIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT09IFxcXCLliKDpmaTlpIfku71cXFwiKXtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25maXJtKHtcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6ICfliKDpmaTmkq3mlL4nLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50OiAn56Gu5a6aLeWIoOmZpOWkh+S7veaWh+S7tuaIluaWh+S7tuWkuVxcXFxu5Y+W5raILeWPlua2iOWIoOmZpOaSreaUvuaTjeS9nCcsXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbmZpcm06ICQudG9TdHJpbmcoKGRhdGEscGF0aCkgPT4ge1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9mdW5jdGlvbnMnKSkucnVsZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYWNrRm9sZGVyRGVsZXRlKGRhdGEscGF0aClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LGRhdGEscGF0aCksXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNhbmNlbDogJC50b1N0cmluZygoKSA9PiB7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sZGF0YSxwYXRoKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sZGF0YSxwYXRoKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdIDogW1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi56e75Yqo5Yiw5ZCM57qn55uu5b2VXFxcIiwganM6ICQudG9TdHJpbmcoKG1vdmVEYXRhLG1vdmVGaWxlRGF0YVBhdGgscGF0aCk9PntcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9mdW5jdGlvbnMnKSkucnVsZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG1vdmVCYWNrRmlsZShtb3ZlRGF0YSxtb3ZlRmlsZURhdGFQYXRoLHBhdGgpXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxtb3ZlRGF0YSxtb3ZlRmlsZURhdGFQYXRoLHBhdGgpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi56e75Yqo5Yiw5a2Q57qn55uu5b2VXFxcIiwganM6ICQudG9TdHJpbmcoKG1vdmVEYXRhLG1vdmVGaWxlRGF0YVBhdGgsZmlsZUlkLGZpbGVOYW1lKT0+e1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2Z1bmN0aW9ucycpKS5ydWxlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW92ZUJhY2tGaWxlKG1vdmVEYXRhLG1vdmVGaWxlRGF0YVBhdGgsc3RhcnRJbmRleFBhdGgrZmlsZUlkK2ZpbGVOYW1lK1xcXCIuanNvblxcXCIpXFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxtb3ZlRGF0YSxtb3ZlRmlsZURhdGFQYXRoLGZpbGVJZCxmaWxlTmFtZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcblxcbiAgICAgICAgICAgICAgICB9ZWxzZSB7XFxuXFxuICAgICAgICAgICAgICAgICAgICBsZXQgcGljVHlwZSA9IGJhY2tfZmlsZV9pbWFnZVxcblxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvbFR5cGUgPSBzdG9yYWdlMC5nZXRJdGVtKFxcXCLmlofku7bmoLflvI/lj5jph49cXFwiLCBcXFwiYXZhdGFyXFxcIilcXG5cXG4gICAgICAgICAgICAgICAgICAgIGxldCBjaWQgPSBmaWxlc1tpXS5jaWRcXG5cXG4gICAgICAgICAgICAgICAgICAgIGxldCBmaWxlX3NpemUgPSBnZXRGaWxlU2l6ZShmaWxlc1tpXS5zaXplKVxcblxcbiAgICAgICAgICAgICAgICAgICAgc3dpdGNoICh0cnVlKSB7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBpbWFnZV9yZWd1bGFyLnRlc3QoZmlsZU5hbWUpOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNUeXBlID0gbGluZStjaWQrJ0BSZWZlcmVyPWh0dHBzOi8vd3guc3Rhcml2ZXJwYW4uY29tLydcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSB2aWRlb19yZWd1bGFyLnRlc3QoZmlsZU5hbWUpOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNUeXBlID0gdmlkZW9faW1hZ2VcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBhdWRpb19yZWd1bGFyLnRlc3QoZmlsZU5hbWUpOlxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwaWNUeXBlID0gYXVkaW9faW1hZ2VcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuXFxuICAgICAgICAgICAgICAgICAgICAgICAgZGVmYXVsdDpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljVHlwZSA9IGJhY2tfZmlsZV9pbWFnZVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGZpbGVOYW1lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlc2M6IGZpbGVfc2l6ZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBwaWNfdXJsOiBwaWNUeXBlLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIHVybDogY2lkK1xcXCImJlxcXCIrZmlsZU5hbWUrZ2V0RmlsZVVybExpbmUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgY29sX3R5cGU6IGNvbFR5cGUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgZXh0cmE6e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXRoOiBuZXdQYXRoLFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb25nQ2xpY2s6IG1vdmVUeXBlID09PSBcXFwiZmFsc2VcXFwiID8gW1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAge3RpdGxlOiBcXFwi5paH5Lu25pON5L2cXFxcIiwganM6ICQudG9TdHJpbmcoKGRhdGEscGF0aCk9PntcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICQoW1xcXCLnp7vliqjlpIfku71cXFwiLFxcXCLliKDpmaTlpIfku71cXFwiXSwgMiwn5Yqf6IO95pON5L2cJykuc2VsZWN0KChkYXRhLHBhdGgpID0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGlucHV0ID09PSBcXFwi56e75Yqo5aSH5Lu9XFxcIil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJdGVtKFxcXCJiYWNrVHlwZVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJdGVtKFxcXCJtb3ZlVHlwZVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJdGVtKFxcXCJtb3ZlRGF0YVxcXCIpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xlYXJJdGVtKFxcXCJtb3ZlRmlsZURhdGFQYXRoXFxcIilcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdG9yYWdlMC5zZXRJdGVtKFxcXCJtb3ZlVHlwZVxcXCIsXFxcInRydWVcXFwiKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcIm1vdmVEYXRhXFxcIixkYXRhKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0b3JhZ2UwLnNldEl0ZW0oXFxcIm1vdmVGaWxlRGF0YVBhdGhcXFwiLHBhdGgpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RvcmFnZTAuc2V0SXRlbShcXFwiYmFja1R5cGVcXFwiLCBcXFwic3RhcnRcXFwiKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGlucHV0ID09PSBcXFwi5Yig6Zmk5aSH5Lu9XFxcIil7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXZhbChKU09OLnBhcnNlKHJlcXVlc3QoJ2hpa2VyOi8vcGFnZS9mdW5jdGlvbnMnKSkucnVsZSlcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gYmFja0ZpbGVEZWxldGUoZGF0YSxwYXRoKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LGRhdGEscGF0aClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LGRhdGEscGF0aClcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSA6IFtcXG4gICAgICAgICAgICAgICAgICAgICAgICB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBcXFwi56e75Yqo5Yiw5ZCM57qn55uu5b2VXFxcIiwganM6ICQudG9TdHJpbmcoKG1vdmVEYXRhLG1vdmVGaWxlRGF0YVBhdGgscGF0aCk9PntcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGV2YWwoSlNPTi5wYXJzZShyZXF1ZXN0KCdoaWtlcjovL3BhZ2UvZnVuY3Rpb25zJykpLnJ1bGUpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gbW92ZUJhY2tGaWxlKG1vdmVEYXRhLG1vdmVGaWxlRGF0YVBhdGgscGF0aClcXG5cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxtb3ZlRGF0YSxtb3ZlRmlsZURhdGFQYXRoLHBhdGgpXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgXVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pO1xcblxcblxcbiAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgfVxcblxcblxcbiAgICAgICAgfWNhdGNoIChlKSB7ZS5tZXNzYWdlfVxcblxcbiAgICB9IGVsc2UgaWYgKHR5cGUgPT09ICdjbG91ZCcpe1xcblxcbiAgICAgICAgdHJ5IHtcXG5cXG4gICAgICAgICAgICBsZXQgZGF0YUFsbDtcXG5cXG4gICAgICAgICAgICBsZXQgZmlsZUJhY2sgPSBKU09OLnBhcnNlKHJlYWRGaWxlKHBhdGgsIDApIHx8ICdbXScpO1xcblxcbiAgICAgICAgICAgIGxldCBkYXRhID0gZmlsZUJhY2suZGF0YVxcblxcbiAgICAgICAgICAgIGxldCBkYXRhQSA9IGRhdGEu5paH5Lu25aS5XFxuXFxuICAgICAgICAgICAgbGV0IGRhdGFCID0gZGF0YS7mlofku7ZcXG5cXG4gICAgICAgICAgICBkYXRhQWxsID0gZGF0YUEuY29uY2F0KGRhdGFCKVxcblxcbiAgICAgICAgICAgIGlmIChkYXRhQS5sZW5ndGggPiAwKSB7XFxuXFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgaW4gZGF0YUEpIHtcXG5cXG4gICAgICAgICAgICAgICAgICAgIGxldCBmb2xkZXJOYW1lID0gZGF0YUFbaV1cXG5cXG4gICAgICAgICAgICAgICAgICAgIGxldCBuZXdQYXRoID0gcGF0aC5zbGljZSgwLC01KStcXFwi4ridXFxcIitmb2xkZXJOYW1lK1xcXCIuanNvblxcXCJcXG5cXG4gICAgICAgICAgICAgICAgICAgIGQucHVzaCh7XFxuICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGZvbGRlck5hbWUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGljX3VybDogYmFja19mb2xkZXJfaW1hZ2UsXFxuICAgICAgICAgICAgICAgICAgICAgICAgdXJsOiBcXFwiaGlrZXI6Ly9wYWdlL3JlYWRCYWNrI25vUmVjb3JkSGlzdG9yeSNcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOlxcXCJhdmF0YXJcXFwiLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGV4dHJhOntcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGF0aDogbmV3UGF0aCxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9uZ0NsaWNrOltcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHt0aXRsZTogXFxcIuabtOWkmuaTjeS9nFxcXCIsIGpzOiAkLnRvU3RyaW5nKChuZXdQYXRoKT0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gJChbXFxcIuayiea1uOa8q+eUu1xcXCJdLCAyLCflip/og73mk43kvZwnKS5zZWxlY3QoKG5ld1BhdGgpID0+e1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaW5wdXQgPT09IFxcXCLmsonmtbjmvKvnlLtcXFwiKXtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBldmFsKEpTT04ucGFyc2UocmVxdWVzdCgnaGlrZXI6Ly9wYWdlL2Z1bmN0aW9ucycpKS5ydWxlKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiBiYWNrRmlsZUltYWdlTGlzdChuZXdQYXRoKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LG5ld1BhdGgpXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSxuZXdQYXRoKVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBdXFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSk7XFxuXFxuICAgICAgICAgICAgICAgIH1cXG5cXG4gICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgaWYgKGRhdGFCLmxlbmd0aCA+IDApIHtcXG5cXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgeCBpbiBkYXRhQil7XFxuXFxuICAgICAgICAgICAgICAgICAgICBsZXQgZmlsZU5hbWUgPSBkYXRhQlt4XS7mlofku7blkI1cXG5cXG4gICAgICAgICAgICAgICAgICAgIGxldCBwaWNUeXBlID0gYmFja19maWxlX2ltYWdlXFxuXFxuICAgICAgICAgICAgICAgICAgICBsZXQgY29sVHlwZSA9IHN0b3JhZ2UwLmdldEl0ZW0oXFxcIuaWh+S7tuagt+W8j+WPmOmHj1xcXCIsIFxcXCJhdmF0YXJcXFwiKVxcblxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNpZCA9IGRhdGFCW3hdLuaWh+S7tkNJRFxcblxcbiAgICAgICAgICAgICAgICAgICAgbGV0IGZpbGVfc2l6ZSA9IGdldEZpbGVTaXplKGRhdGFCW3hdLuaWh+S7tuWkp+WwjylcXG5cXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaCAodHJ1ZSkge1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgaW1hZ2VfcmVndWxhci50ZXN0KGZpbGVOYW1lKTpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljVHlwZSA9IGxpbmUrY2lkKydAUmVmZXJlcj1odHRwczovL3d4LnN0YXJpdmVycGFuLmNvbS8nXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgdmlkZW9fcmVndWxhci50ZXN0KGZpbGVOYW1lKTpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljVHlwZSA9IHZpZGVvX2ltYWdlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhc2UgYXVkaW9fcmVndWxhci50ZXN0KGZpbGVOYW1lKTpcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGljVHlwZSA9IGF1ZGlvX2ltYWdlXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcblxcbiAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBpY1R5cGUgPSBiYWNrX2ZpbGVfaW1hZ2VcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgICAgICB9XFxuXFxuICAgICAgICAgICAgICAgICAgICBkLnB1c2goe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiBmaWxlTmFtZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICBkZXNjOiBmaWxlX3NpemUsXFxuICAgICAgICAgICAgICAgICAgICAgICAgcGljX3VybDogcGljVHlwZSxcXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IGNpZCtcXFwiJiZcXFwiK2ZpbGVOYW1lK2dldEZpbGVVcmxMaW5lLFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiBjb2xUeXBlXFxuICAgICAgICAgICAgICAgICAgICB9KTtcXG5cXG4gICAgICAgICAgICAgICAgfVxcblxcbiAgICAgICAgICAgIH1cXG5cXG5cXG4gICAgICAgIH1jYXRjaCAoZSkge2UubWVzc2FnZX1cXG5cXG4gICAgfVxcblxcbn1lbHNlIHtcXG5cXG4gICAgdG9hc3QoXFxcIuaaguacquWPkeeOsOWkh+S7veaWh+S7tlxcXCIpXFxufVxcblxcbnNldFJlc3VsdChkKVwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pCc57Si56OB5YqbXCIsXCJwYXRoXCI6XCJzZWFyY2hNYWdlbnRcIixcInJ1bGVcIjpcImpzOlxcbnZhciBkID0gW107XFxuXFxubGV0IHNlYXJjaFVybCA9IFxcXCJodHRwczovL3NrcmJ0aXUudG9wL3NlYXJjaD9rZXl3b3JkPVxcXCJcXG5cXG5sZXQgZGF0YSA9IFtdO1xcblxcbmQucHVzaCh7XFxuICAgIHRpdGxlOiBcXFwi5pCc57Si56OB5YqbXFxcIixcXG4gICAgZGVzYzogXFxcIlxcXCIsXFxuICAgIGNvbF90eXBlOiAnaW5wdXQnLFxcbiAgICB1cmw6ICQudG9TdHJpbmcoKHNlYXJjaFVybCkgPT4ge1xcblxcbiAgICAgIGxvZyhzZWFyY2hVcmwraW5wdXQpXFxuXFxuICAgICAgbGV0IGh0bWwgPSByZXF1ZXN0KHNlYXJjaFVybCtpbnB1dClcXG5cXG4gICAgICBkYXRhID0gcGFyc2VEb21Gb3JBcnJheShodG1sLCdib2R5JiZ1cmwmJi5saXN0LXVuc3R5bGVkJylcXG5cXG4gICAgICBsb2coZGF0YSlcXG5cXG4gICAgfSxzZWFyY2hVcmwpXFxufSk7XFxuXFxuc2V0UmVzdWx0KGQpO1wifV0iLCJpY29uIjoiaHR0cHM6Ly9pcGZzZ3cwMC5zdGFyaXZlcnBhbi5jb206OTA5NS9pcGZzL2JhZmtyZWliNTRtY2h5M2kzc3RzNnB1NDdoNml4ZDRqZXpjdzIzcHNkbHJqNHY1YTJ2N3RnemRwZnRtIy5qcGdAUmVmZXJlcj1odHRwczovL3d4LnN0YXJpdmVycGFuLmNvbS8iLCJwcm94eSI6IiJ9
Add Comment
Please, Sign In to add comment