Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:二级页面详情¥page_detail¥管理解析@@eyJkYXRhIjoie1wiYXNzb2NpYXRlZE1vZGVsc01hcEZvckpvaW5UYWJsZVwiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhGS1wiOnt9LFwiYXNzb2NpYXRlZE1vZGVsc01hcFdpdGhvdXRGS1wiOnt9LFwiZmllbGRzVG9TZXRUb0RlZmF1bHRcIjpbXSxcImlkXCI6MCxcImxhc3RfY2hhcHRlcl9ydWxlXCI6XCJcIixcImxpc3RUb0NsZWFyQXNzb2NpYXRlZEZLXCI6W10sXCJsaXN0VG9DbGVhclNlbGZGS1wiOltdLFwicGFnZUxpc3RcIjpbe1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIlBhcnNlX0RuLmh0bWxcIixcInBhdGhcIjpcIlBhcnNlX0RuLmh0bWxcIixcInJ1bGVcIjpcIjwhRE9DVFlQRSBodG1sPlxcbjxodG1sPlxcbjxoZWFkPlxcbiAgICA8bWV0YSBjaGFyc2V0PVxcXCJ1dGYtOFxcXCI+XFxuICAgIDxtZXRhIG5hbWU9XFxcInZpZXdwb3J0XFxcIiBjb250ZW50PVxcXCJ3aWR0aD1kZXZpY2Utd2lkdGgsaW5pdGlhbC1zY2FsZT0xLG1pbmltdW0tc2NhbGU9MSxtYXhpbXVtLXNjYWxlPTEsdXNlci1zY2FsYWJsZT1ub1xcXCIgLz5cXG4gICAgPCEtLVxcbiAgICA8c2NyaXB0IHNyYz1cXFwiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS92dWVAMi41LjE2L2Rpc3QvdnVlLm1pbi5qc1xcXCI+PC9zY3JpcHQ+XFxuICAgIDxzY3JpcHQgc3JjPVxcXCJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMi4xLjQubWluLmpzXFxcIj48L3NjcmlwdD5cXG4gICAgXFxuICAgIDxzY3JpcHQgc3JjPVxcXCJodHRwOi8vYXBwcy5iZGltZy5jb20vbGlicy9qcXVlcnkvMi4xLjQvanF1ZXJ5Lm1pbi5qc1xcXCI+PC9zY3JpcHQ+XFxuICAgIDxzY3JpcHQgc3JjPVxcXCJodHRwOi8vYXBwcy5iZGltZy5jb20vbGlicy92dWUvMS4wLjE0L3Z1ZS5qc1xcXCI+PC9zY3JpcHQ+XFxuICAgIC0tPlxcbiAgICA8dGl0bGU+UGFyc2VfRG48L3RpdGxlPlxcbiAgICA8c3R5bGUgdHlwZT10ZXh0L2Nzcz5cXG4gICAgICAgIGh0bWwsIGJvZHkge1xcbiAgICAgICAgICAgIGhlaWdodDogYXV0bztcXG4gICAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuO1xcbiAgICAgICAgfVxcbiAgICAgICAgYm9keSB7XFxuICAgICAgICAgICAgbWFyZ2luOiAwIDVweCAwIDVweDtcXG4gICAgICAgICAgICBwYWRkaW5nOiAwIDBweCAwIDBweDtcXG4gICAgICAgICAgICAvL2JhY2tncm91bmQ6ICNGOUYwREE7XFxuICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDA7XFxuICAgICAgICAgICAgZm9udC1mYW1pbHk6IFxcXCJNaWNyb3NvZnQgWWFIZWlcXFwiLFxcXCLlrovkvZNcXFwiLFxcXCJTZWdvZSBVSVxcXCIsIFxcXCJMdWNpZGEgR3JhbmRlXFxcIiwgSGVsdmV0aWNhLCBBcmlhbCxzYW5zLXNlcmlmLCBGcmVlU2FucywgQXJpbW87XFxuICAgICAgICB9XFxuICAgICAgICAjZGl2MntcXG4gICAgICAgICAgIG1hcmdpbi10b3A6MzVweDtcXG4gICAgICAgIH1cXG4gICAgICAgIC8q6L6T5YWl5qGG54i25YWD57SgKi9cXG4gICAgICAgIGRpdi5ib3gge1xcbiAgICAgICAgICAgIGhlaWdodDogNTNweDtcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogMjBweDtcXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgICAgICB9XFxuICAgICAgICAvKui+k+WFpeahhuWwuuWvuCovXFxuICAgICAgICBmb3JtIHtcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDtcXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxuICAgICAgICAgICAgd2lkdGg6IDkyJTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlucHV0LCBsYWJlbCwgLmxpZWIgYnV0dG9uIHtcXG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XFxuICAgICAgICAgICAgb3V0bGluZTogbm9uZTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8q5a2X5L2T5L2N572uKi9cXG4gICAgICAgIGlucHV0IHtcXG4gICAgICAgICAgICB3aWR0aDogNzclO1xcbiAgICAgICAgICAgIGhlaWdodDogMzJweDtcXG4gICAgICAgICAgICBwYWRkaW5nLWxlZnQ6IDY2cHg7XFxuICAgICAgICAgICAgcGFkZGluZy1yaWdodDogMzBweDtcXG4gICAgICAgIH1cXG4gICAgICAgIGxhYmVsIHtcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOmNlbnRlcjtcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogNDNweDtcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxuICAgICAgICAgICAgd2lkdGg6IDYwcHg7XFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcbiAgICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgICAgIH1cXG4gICAgICAgIC8q5bCP5qGGKi9cXG4gICAgICAgIC5iYXIgbGFiZWwge1xcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNEMDZCNkM7XFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTU1IDU1NXB4IDU1NXB4IDU1NTtcXG4gICAgICAgICAgICB3aWR0aDogNjBweDtcXG4gICAgICAgICAgICBmb250LXNpemU6IDEzcHg7XFxuICAgICAgICAgICAgY29sb3I6ICNGOUYwREE7XFxuICAgICAgICAgICAgdG9wOiAwO1xcbiAgICAgICAgICAgIGxlZnQ6IDNweDtcXG4gICAgICAgIH1cXG4gICAgICAgIC8q6L6T5YWl5qGG5qC35byPKi9cXG4gICAgICAgIC5iYXIgaW5wdXQge1xcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGOUYwREE7XFxuICAgICAgICAgICAgYm9yZGVyOiAzcHggc29saWQgI0QwNkI2QztcXG4gICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7XFxuICAgICAgICB9XFxuICAgICAgICAvKuWIl+ihqCovXFxuICAgICAgICAubGllYiBidXR0b24ge1xcbiAgICAgICAgICAgIHRleHQtYWxpZ246Y2VudGVyO1xcbiAgICAgICAgICAgIGxpbmUtaGVpZ2h0OjQwcHg7XFxuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xcbiAgICAgICAgICAgIHdpZHRoOiAyN3B4O1xcbiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjtcXG4gICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgICAgICB9XFxuICAgICAgICAvKuWIl+ihqCovXFxuICAgICAgICAubGllYiBidXR0b257XFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNEMDZCNkM7XFxuICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xcbiAgICAgICAgICAgIGNvbG9yOiAjRjlGMERBO1xcbiAgICAgICAgICAgIHRvcDogMDtcXG4gICAgICAgICAgICByaWdodDogMHB4O1xcbiAgICAgICAgfVxcbiAgICAgICAgLyrlpLTlg48qL1xcbiAgICAgICAgLnJvdW5kX2ljb257XFxuICAgICAgICAgICAgd2lkdGg6IDQwcHg7XFxuICAgICAgICAgICAgaGVpZ2h0OiA0MHB4O1xcbiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xcbiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XFxuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXG4gICAgICAgIH1cXG5cXG4gICAgICAgIC5qeC11bCwgLmNqLXVsIHtcXG4gICAgICAgICAgICB6LWluZGV4OiA5OTk7XFxuICAgICAgICAgICAgcG9zaXRpb246IGZpeGVkO1xcbiAgICAgICAgICAgIHdpZHRoOiA3NyU7XFxuICAgICAgICAgICAvLyBsZWZ0OiAxMCU7XFxuICAgICAgICB9XFxuICAgICAgICAuangtdWwsIC5jai11bCB7XFxuICAgICAgICAgICAgZGlzcGxheTogbm9uZTtcXG4gICAgICAgIH1cXG4gICAgICAgIC5qeC11bCB7XFxuICAgICAgICAgICAgdG9wOiAzJTtcXG4gICAgICAgIH1cXG4gICAgICAgIC5jai11bCB7XFxuICAgICAgICAgICAgdG9wOiAzMCU7XFxuICAgICAgICB9XFxuICAgICAgICBsaSB7XFxuICAgICAgICAgICAgaGVpZ2h0OiAzNXB4O1xcbiAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMwMWJmZGE7XFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC44KTtcXG4gICAgICAgICAgICBjb2xvcjogd2hpdGU7XFxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDM1cHg7XFxuICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyO1xcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDtcXG4gICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxuICAgICAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICAgICAgICB9XFxuICAgICAgICBsaSB7XFxuICAgICAgICAgICAgbGlzdC1zdHlsZTogbm9uZTtcXG4gICAgICAgIH1cXG4gICAgICAgIGxpOmhvdmVyIHtcXG4gICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7XFxuICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxMzksIDEzMSwgMTIwLCAwLjkpO1xcbiAgICAgICAgfVxcbiAgICAgICAgbGlbY2hlY2s9XFxcInRydWVcXFwiXSB7XFxuICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxMzksIDAsIDAsIDAuOSk7XFxuICAgICAgICB9XFxuXFxuICAgIDwvc3R5bGU+XFxuPC9oZWFkPlxcblxcbjxib2R5PlxcbiAgICA8ZGl2IGNsYXNzPVxcXCJmdW5nXFxcIj5cXG4gICAgICAgIDxhIHN0eWxlPVxcXCJmbG9hdDpsZWZ0O1xcXCI+XFxuICAgICAgICAgICAgPGJ1dHRvbiAgc3R5bGU9XFxcImJvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogI2M1NDY0YTt3aWR0aDogODBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAjRjlGMERBO1xcXCIgb25jbGljaz1cXFwiY2FuY2VsKCk7XFxcIj7lhbMg6ZetPC9idXR0b24+XFxuICAgICAgICA8L2E+XFxuICAgICAgICA8YSBzdHlsZT1cXFwiZmxvYXQ6cmlnaHRcXFwiPlxcbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9XFxcImJvcmRlcjogbm9uZTtib3JkZXItcmFkaXVzOjEwcHg7YmFja2dyb3VuZDogIzA2ODAwNjt3aWR0aDogODBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAjRjlGMERBO1xcXCJvbmNsaWNrPVxcXCJjbGlja21lKCfphY0g572uIOW3siDkv50g5a2YIO+8gScsIDEwMDAsICflvIAnKTtcXFwiPuS/nSDlrZg8L2J1dHRvbj4gXFxuICAgICAgICA8L2E+XFxuICAgIDwvZGl2PlxcbiAgICA8YnI+XFxuICAgIDxkaXYgaWQ9XFxcImRpdjJcXFwiPjwvZGl2PlxcbiAgICA8ZGl2PlxcbiAgICAgICAgPGEgc3R5bGU9XFxcImZsb2F0OmxlZnQ7bWFyZ2luLXRvcDo1cHg7XFxcIiBvbmNsaWNrPVxcXCJvcGVuRG5QYWdlKClcXFwiPlxcbiAgICAgICAgICAgIDxpbWcgc3JjPVxcXCJodHRwczovL3MzLmF4MXguY29tLzIwMjEvMDIvMjIveTd3YjlPLmpwZ1xcXCIgY2xhc3M9XFxcInJvdW5kX2ljb25cXFwiICBhbHQ9XFxcIlxcXCI+XFxuICAgICAgICA8L2E+XFxuICAgICAgICA8c3BhbiBzdHlsZT1cXFwibGluZS1oZWlnaHQ6NjBweDtmb250LXNpemU6MThweDtjb2xvcjogZ3JleTtcXFwiPiZuYnNwOyZuYnNwO+aWrSZuYnNwO+W/tTwvc3Bhbj5cXG4gICAgICAgIDxhIHN0eWxlPVxcXCJmbG9hdDpyaWdodDttYXJnaW4tdG9wOjVweDtcXFwiPlxcbiAgICAgICAgICAgIDxidXR0b24gIHN0eWxlPVxcXCJib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6ICMwNUJGQzU7d2lkdGg6IDE4NXB4O2hlaWdodDo0MHB4OyBmb250LXNpemU6IDE4cHg7Y29sb3I6ICNGOUYwREE7XFxcIiBvbmNsaWNrPVxcXCJjbGlja21lKCfphY0g572uIOW3siDkv50g5a2YIO+8gScsIDEwMDAsICflhbMnKTtcXFwiPuS/neWtmOiuvue9ruW5tuWFs+mXreeVjOmdojwvYnV0dG9uPlxcbiAgICAgICAgPC9hPlxcbiAgICA8L2Rpdj5cXG4gICAgPGRpdiBjbGFzcz1cXFwiemotZGl2XFxcIj5cXG4gICAgICAgIDx1bCBjbGFzcz1cXFwiangtdWxcXFwiIHN0eWxlPVxcXCJoZWlnaHQ6NDQ0cHg7b3ZlcmZsb3cteTphdXRvO1xcXCI+XFxuICAgICAgICAgICAgPGxpIGNsYXNzPVxcXCJteUNob2ljZVxcXCIgc3R5bGU9XFxcInotaW5kZXg6OTk5OTtwb3NpdGlvbjogZml4ZWQ7d2lkdGg6NzYuNSU7Y29sb3I6cmVkO1xcXCI+PC9saT5cXG4gICAgICAgICAgICA8bGkgY2xhc3M9XFxcInVzZWxlc3NcXFwiPjwvbGk+XFxuICAgICAgICAgICAgPGxpIGNsYXNzPVxcXCJ4bExpc3RcXFwiIHYtZm9yPVxcXCJpdGVtIGluIGp4RGF0YVxcXCI+e3tpdGVtfX08L2xpPlxcbiAgICAgICAgPC91bD5cXG4gICAgICAgIDx1bCBjbGFzcz1cXFwiY2otdWxcXFwiPlxcbiAgICAgICAgICAgIDxsaSBzdHlsZT1cXFwiYmFja2dyb3VuZDpncmV5O1xcXCI+6K+36YCJ5oup5o+S5Lu2PC9saT5cXG4gICAgICAgICAgICA8bGkgdi1mb3I9XFxcIml0ZW0gaW4gY2pEYXRhXFxcIj57e2l0ZW19fTwvbGk+XFxuICAgICAgICA8L3VsPlxcbiAgICA8L2Rpdj5cXG48L2JvZHk+XFxuPHNjcmlwdD5cXG4gICAgZXZhbChmeV9icmlkZ2VfYXBwLmZldGNoKFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL2pxdWVyeUAyLjEuNC5qc1xcXCIpKTtcXG4gICAgZXZhbChmeV9icmlkZ2VfYXBwLmZldGNoKFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL3Z1ZUAyLjUuMTYuanNcXFwiKSk7XFxuICAgIGV2YWwoZnlfYnJpZGdlX2FwcC5nZXRJbnRlcm5hbEpzKCkpO1xcbiAgICBcXG4gICAgdmFyIHNldHRpbmdzID0ge1xcbiAgICAgICAgcXk6ICd5dW4xNzE3JyxcXG4gICAgICAgIHlrOiAneXVuMTcxNycsXFxuICAgICAgICB0eDogJ3l1bjE3MTcnLFxcbiAgICAgICAgbWc6ICd5dW4xNzE3JyxcXG4gICAgICAgIGJsOiAneXVuMTcxNycsXFxuICAgICAgICBvdGg6ICd5dW4xNzE3JyxcXG4gICAgICAgIHFqdTogJ+m7mOiupCcsXFxuICAgICAgICBjajogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uanMnXFxuICAgIH07XFxuICAgIFxcbiAgICB2YXIgb2xkUm91dGUgPSBcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFwiO1xcbiAgICB2YXIgbXlTZXQgPSBmeV9icmlkZ2VfYXBwLmZldGNoKG9sZFJvdXRlKTtcXG4gICAgXFxuICAgIHZhciBuZXdSb3V0ZSA9IFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL0R1YW5OaWFuL015UGFyc2UuanNvblxcXCI7XFxuICAgIHZhciBuZXdDb25maWcgPSBmeV9icmlkZ2VfYXBwLmZldGNoKG5ld1JvdXRlKTtcXG4gICAgdmFyIG15U2VsZWN0ID0gW107XFxuICAgIHRyeXtcXG4gICAgICAgIGV2YWwoXFxcIm5ld0NvbmZpZyA9XFxcIiArIG5ld0NvbmZpZyArIFxcXCI7XFxcIik7XFxuICAgICAgICBzZXR0aW5ncyA9IG5ld0NvbmZpZy5zZXR0aW5ncy5xanUgPT0gdW5kZWZpbmVkID8gc2V0dGluZ3MgOiBuZXdDb25maWcuc2V0dGluZ3M7XFxuICAgICAgICB2YXIgeWNUaXRsZSA9IFsnZGVmYXVsdFBhcnNlJywgJ21hb3NzJywgJ0NpdHlJUCcsICdjYWNoZU0zdTgnLCAncGNVQScsICdwYXJzZUxjJywgJ2dwYXJzZScsICducGFyc2UnXTtcXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBuZXdDb25maWcudGl0bGUubGVuZ3RoOyBpKyspe1xcbiAgICAgICAgICAgIHZhciBUaXRsZXMgPSBuZXdDb25maWcudGl0bGVbaV07XFxuICAgICAgICAgICAgaWYoeWNUaXRsZS5pbmNsdWRlcyhUaXRsZXMpID09IGZhbHNlKXtcXG4gICAgICAgICAgICAgICAgbXlTZWxlY3QucHVzaChUaXRsZXMpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1cXG4gICAgfWNhdGNoKGUpe31cXG4gICAgdmFyIHNmUmVmcmVzaCA9IHNldHRpbmdzLmNqO1xcbiAgICBmdW5jdGlvbiBEaWQoaWQpe1xcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcXG4gICAgfVxcbiAgICBcXG4gICAgaWYobXlTZXQgPT0gJycpe1xcbiAgICAgICAgRGlkKFxcXCJkaXYyXFxcIikuaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlckJlZ2luJywnXFxcXFxcbjxoND7mj5DnpLrvvJo8YnI+4pGg5rOo5oSP5o+S5Lu26YCJ6aG577yM5rKh5pyJ5omL5Yqo5a+85YWl5o+S5Lu255qE6K+d5LiN55So5Yqo5a6D44CC5aaC6K6+572u5LiN5b2T5Lya5a+86Ie06KeE5YiZ5peg5rOV5L2/55So77yMPGJyPuino+WGs+WKnuazle+8muWwj+eoi+W6j+mmlumhteeCueWHu+aBouWkjem7mOiupOaPkuS7tu+8mzxicj7ikaHlhajlsYDorr7nva7lpoLmnpzpgInmi6nkuobpnZ7pu5jorqTpgqPkuYjlhajpg6jnmoTop6PmnpDkvJrkvb/nlKjov5nkuIDorr7nva7vvIzkuI3mg7Pov5nmoLfnmoTor53or7floavlhaXpu5jorqTvvJs8YnI+4pGi57u/6Imy5L+d5a2Y5oyJ6ZKu5LuF5LuF5L+d5a2Y6YWN572u5LiN5Lya5YWz6Zet6K6+572u6aG16Z2i77yM6YWN572u5ZCO5oOz5L+d5a2Y5bm25YWz6Zet6K6+572u6aG16Z2i55qE6K+d6K+354K56JOd6Imy5oyJ6ZKu77ybPGJyPuKRo+mYheivu+WujOaPkOekuueCueWFs+mXreWKoOi9veWujOaVtOiuvue9rumhtemdou+8jOWmguWHuumXrumimOaXoOazleiHquihjOino+WGs+eCueWbvueJh+i/m+WFpeiuuuWdm+WQkeaIkeWPjemmiOOAgjxicj48L2g0PicpO1xcbiAgICB9XFxuICAgIFxcbiAgICB2YXIgYm94RGF0YSA9IFtcXG4gICAgICAgIHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuWlhyDlpYdcXFwiLFxcbiAgICAgICAgICAgIGlkOiBcXFwicXlcXFwiLFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy5xeSxcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIumFtyDphbdcXFwiLFxcbiAgICAgICAgICAgIGlkOiBcXFwieWtcXFwiLFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy55ayxcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuiFviDohb5cXFwiLFxcbiAgICAgICAgICAgIGlkOiBcXFwidHhcXFwiLFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy50eCxcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuaenCDmnpxcXFwiLFxcbiAgICAgICAgICAgIGlkOiBcXFwibWdcXFwiLFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy5tZyxcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuWTqSDlk6lcXFwiLFxcbiAgICAgICAgICAgIGlkOiBcXFwiYmxcXFwiLFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy5ibCxcXG4gICAgICAgIH0sIHtcXG4gICAgICAgICAgICB0aXRsZTogXFxcIuWFtiDku5ZcXFwiLFxcbiAgICAgICAgICAgIGlkOiBcXFwib3RoXFxcIixcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3Mub3RoLFxcbiAgICAgICAgfSwge1xcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi5YWoIOWxgFxcXCIsXFxuICAgICAgICAgICAgaWQ6IFxcXCJxanVcXFwiLFxcbiAgICAgICAgICAgIHZhbHVlOiBzZXR0aW5ncy5xanUsXFxuICAgICAgICB9LCB7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLmj5Ig5Lu2XFxcIixcXG4gICAgICAgICAgICBpZDogXFxcImNqXFxcIixcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MuY2osXFxuICAgICAgICB9XFxuICAgIF07XFxuXFxuICAgIHZhciBpbnB1dEJveCA9IFxcXCJcXFwiO1xcbiAgICBmb3IobGV0IGkgPSAwOyBpIDwgYm94RGF0YS5sZW5ndGg7IGkrKyl7XFxuICAgICAgICBsZXQgYiA9IGJveERhdGFbaV07XFxuICAgICAgICBpbnB1dEJveCArPSAnPGRpdiBjbGFzcz1cXFwiYm94IGJhclxcXCI+XFxcXFxcbiAgICAgICAgICAgIDxmb3JtPlxcXFxcXG4gICAgICAgICAgICAgICAgPGxhYmVsIHR5cGU9XFxcInN1Ym1pdFxcXCI+JyArIGIudGl0bGUgKyAnPC9sYWJlbD5cXFxcXFxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXCJ0ZXh0XFxcIiBwbGFjZWhvbGRlcj1cXFwi6L6T5YWl6Kej5p6Q5ZCN5oiW6ICFVVJMLi4uLi4uXFxcIiB2YWx1ZT1cXFwiJyArIGIudmFsdWUgKyAnXFxcIiBpZD1cXFwiJyArIGIuaWQgKyAnXFxcIj5cXFxcXFxuICAgICAgICAgICAgPC9mb3JtPlxcXFxcXG4gICAgICAgICAgICA8ZGl2IGNsYXNzPVxcXCJsaWViXFxcIj5cXFxcXFxuICAgICAgICAgICAgICAgIDxidXR0b24gaWQ9XFxcIicgKyBiLmlkICsgJ1NlbGVjdFxcXCI+4piwPC9idXR0b24+XFxcXFxcbiAgICAgICAgICAgIDwvZGl2PlxcXFxcXG4gICAgICAgIDwvZGl2Pic7XFxuICAgIH1cXG4gICAgRGlkKFxcXCJkaXYyXFxcIikuaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlcmVuZCcsIGlucHV0Qm94KTtcXG4gICAgRGlkKFxcXCJjalxcXCIpLnBsYWNlaG9sZGVyID0gXFxcIui+k+WFpeaPkuS7tuWcsOWdgC4uLi4uLlxcXCI7XFxuICAgIERpZChcXFwicWp1XFxcIikucGxhY2Vob2xkZXIgPSBcXFwi5q2k6aG55bu66K6u55WZ56m65oiW6ICF5aGr6buY6K6k5Lik5Liq5a2XXFxcIjtcXG4gICAgXFxuICAgIG5ldyBWdWUoe1xcbiAgICAgICAgZWw6IFxcXCIuemotZGl2XFxcIixcXG4gICAgICAgIGRhdGE6IHtcXG4gICAgICAgICAgICBqeERhdGE6IG15U2VsZWN0LFxcbiAgICAgICAgICAgIGNqRGF0YTogW1xcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzXFxcIiwgXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvZHpIb3VzZS9qcy9zcmNhdXRvLmpzXFxcIiwgXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvanMvUGFyc2UtVjJfRG4uanNcXFwiXVxcbiAgICAgICAgfVxcbiAgICB9KTtcXG5cXG4gICAgJChkb2N1bWVudCkucmVhZHkoZnVuY3Rpb24oKSB7XFxuICAgICAgICB2YXIgbGVuID0gJCgnLmp4LXVsJykuY2hpbGRyZW4oJ2xpJykubGVuZ3RoO1xcbiAgICAgICAgdmFyIGxlbjIgPSAkKCcuY2otdWwnKS5jaGlsZHJlbignbGknKS5sZW5ndGg7XFxuICAgICAgICAkKCcubGllYiBidXR0b24nKS5jbGljayhmdW5jdGlvbihlKSB7XFxuICAgICAgICAgICAgaWYoJCgnLmxpZWIgYnV0dG9uJykudGV4dCgpLmluY2x1ZGVzKCfilIEnKSl7XFxuICAgICAgICAgICAgICAgICQoJy5saWViIGJ1dHRvbicpLmNzcygnYmFja2dyb3VuZCcsICcnKTtcXG4gICAgICAgICAgICAgICAgJCgnLmxpZWIgYnV0dG9uJykudGV4dCgn4piwJyk7XFxuICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICQodGhpcykudGV4dCgn4pSBJyk7XFxuICAgICAgICAgICAgICAgICQodGhpcykuY3NzKCdiYWNrZ3JvdW5kJywgJ3JlZCcpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAkKCdsaScpLmF0dHIoJ2NoZWNrJywgJ2ZhbHNlJyk7XFxuICAgICAgICAgICAgdmFyIGlucHV0aWQgPSBcXFwiI1xcXCIgKyB0aGlzLmlkLnNwbGl0KFxcXCJTZWxlY3RcXFwiKVswXTtcXG4gICAgICAgICAgICB2YXIgYXJyID0gJChpbnB1dGlkKS52YWwoKS5zcGxpdCgnLCcpO1xcbiAgICAgICAgICAgIGFyciA9IGFyclswXSA9PSAnJyA/IFtdIDogYXJyO1xcbiAgICAgICAgICAgICQoJy5teUNob2ljZScpLnRleHQoYXJyKTtcXG4gICAgICAgICAgICBpZiAoaW5wdXRpZCAhPT0gJyNjaicgJiYgJCgnLmNqLXVsJykuY3NzKCdkaXNwbGF5Jyk9PSdub25lJykge1xcbiAgICAgICAgICAgICAgICAkKCcuangtdWwnKS5zbGlkZVRvZ2dsZSgzMDApO1xcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IGxlbjsgaSsrKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIganhMaXN0ID0gJCgnLmp4LXVsIGxpOm5vdCgubXlDaG9pY2UpJykuZXEoaSk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoYXJyLmluY2x1ZGVzKGp4TGlzdC50ZXh0KCkpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAganhMaXN0LmF0dHIoJ2NoZWNrJywgJ3RydWUnKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGp4TGlzdC51bmJpbmQoJ2NsaWNrJykuY2xpY2soZnVuY3Rpb24oZSkge1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQodGhpcykuYXR0cignY2hlY2snKSAhPT0gXFxcInRydWVcXFwiKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignY2hlY2snLCAndHJ1ZScpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIudW5zaGlmdCgkKHRoaXMpLnRleHQoKSk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoaW5wdXRpZCkudmFsKGFycik7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5teUNob2ljZScpLnRleHQoYXJyKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2NoZWNrJywgJ2ZhbHNlJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGEgPSAwOyBhIDwgYXJyLmxlbmd0aDsgYSsrKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyW2FdID09ICQodGhpcykudGV4dCgpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZShhLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGlucHV0aWQpLnZhbChhcnIpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5teUNob2ljZScpLnRleHQoYXJyKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICB9IGVsc2UgaWYoJCgnLmp4LXVsJykuY3NzKCdkaXNwbGF5Jyk9PSdub25lJyl7XFxuICAgICAgICAgICAgICAgICQoJy5jai11bCcpLnNsaWRlVG9nZ2xlKDIwMCk7XFxuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuMjsgaSsrKSB7XFxuICAgICAgICAgICAgICAgICAgICB2YXIgY2pMaXN0ID0gJCgnLmNqLXVsIGxpJykuZXEoaSk7XFxuICAgICAgICAgICAgICAgICAgICBpZiAoJChpbnB1dGlkKS52YWwoKSA9PSBjakxpc3QudGV4dCgpKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgY2pMaXN0LmF0dHIoJ2NoZWNrJywgJ3RydWUnKTtcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgICAgIGNqTGlzdC51bmJpbmQoJ2NsaWNrJykuY2xpY2soZnVuY3Rpb24oKSB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT09IDApIHtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChpbnB1dGlkKS52YWwoJCh0aGlzKS50ZXh0KCkpO1xcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2NoZWNrJywgJ3RydWUnKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5zaWJsaW5ncygpLmF0dHIoJ2NoZWNrJywgJ2ZhbHNlJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICAgICAgJChkb2N1bWVudCkubm90KCQoJy54bExpc3QnKSkuY2xpY2soZnVuY3Rpb24oZSkge1xcbiAgICAgICAgICAgICQoJy5qeC11bCcpLnNsaWRlVXAoKTtcXG4gICAgICAgICAgICAkKCcuY2otdWwnKS5zbGlkZVVwKCk7XFxuICAgICAgICAgICAgJCgnLmxpZWIgYnV0dG9uJykudGV4dCgn4piwJyk7XFxuICAgICAgICAgICAgJCgnLmxpZWIgYnV0dG9uJykuY3NzKCdiYWNrZ3JvdW5kJywgJycpO1xcbiAgICAgICAgfSk7XFxuICAgICAgICAkKGZ1bmN0aW9uKCl7XFxuICAgICAgICAgICAgJCgnbGFiZWwnKS5tb3VzZXVwKGZ1bmN0aW9uKCl7XFxuICAgICAgICAgICAgICAgIGxldCBpbnB1dGlkID0gJyMnICsgJCh0aGlzKS5uZXh0KCkuYXR0cignaWQnKTtcXG4gICAgICAgICAgICAgICAgb25lT3JEYmwoaW5wdXRpZCk7XFxuICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgdmFyIGNvdW50ID0gMDtcXG4gICAgICAgICAgICB2YXIgdGltZXI7XFxuICAgICAgICAgICAgZnVuY3Rpb24gb25lT3JEYmwoaW5wdXRpZCl7XFxuICAgICAgICAgICAgICAgIGNvdW50Kys7XFxuICAgICAgICAgICAgICAgIHRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtcXG4gICAgICAgICAgICAgICAgICAgIGlmKGNvdW50ID09IDEpe1xcbiAgICAgICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSAkKGlucHV0aWQpLnZhbCgpLnNwbGl0KCcsJyk7XFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZSgwLCAxKTtcXG4gICAgICAgICAgICAgICAgICAgICAgICAkKGlucHV0aWQpLnZhbChhcnIpO1xcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJChpbnB1dGlkKS52YWwoJycpO1xcbiAgICAgICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmNsZWFyVGltZW91dCh0aW1lcik7XFxuICAgICAgICAgICAgICAgICAgICBjb3VudCA9IDA7XFxuICAgICAgICAgICAgICAgIH0sMjYwKVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pXFxuICAgIH0pO1xcbiAgICBcXG4gICAgZnVuY3Rpb24gVG9hc3QobXNnLGR1cmF0aW9uKXsgIFxcbiAgICAgICAgZHVyYXRpb249aXNOYU4oZHVyYXRpb24pPzIwMDA6ZHVyYXRpb247ICBcXG4gICAgICAgIHZhciBtID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7ICBcXG4gICAgICAgIG0uaW5uZXJIVE1MID0gbXNnOyAgXFxuICAgICAgICBtLnN0eWxlLmNzc1RleHQ9XFxcIndpZHRoOjQ1JTsgbWluLXdpZHRoOjE1MHB4OyBiYWNrZ3JvdW5kOiMzMTE7IG9wYWNpdHk6MC42OyBoZWlnaHQ6YXV0bzttaW4taGVpZ2h0OiA0NXB4OyBjb2xvcjojZmZmOyBsaW5lLWhlaWdodDo0NXB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgYm9yZGVyLXJhZGl1czoxMHB4OyBwb3NpdGlvbjpmaXhlZDsgdG9wOjYwJTsgbGVmdDoyNiU7IHotaW5kZXg6OTk5OTk5O1xcXCI7ICBcXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobSk7ICBcXG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7ICBcXG4gICAgICAgICAgICB2YXIgZCA9IDAuNTsgIFxcbiAgICAgICAgICAgIG0uc3R5bGUud2Via2l0VHJhbnNpdGlvbiA9ICctd2Via2l0LXRyYW5zZm9ybSAnICsgZCArICdzIGVhc2UtaW4sIG9wYWNpdHkgJyArIGQgKyAncyBlYXNlLWluJzsgIFxcbiAgICAgICAgICAgIG0uc3R5bGUub3BhY2l0eSA9ICcwJzsgIFxcbiAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7IGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQobSkgfSwgZCAqIDEwMDApOyAgXFxuICAgICAgICB9LCBkdXJhdGlvbik7ICBcXG4gICAgfSAgXFxuXFxuICAgIGZ1bmN0aW9uIG9wZW5EblBhZ2UoKXtcXG4gICAgICAgIGZiYS5vcGVuKEpTT04uc3RyaW5naWZ5KHtcXG4gICAgICAgICAgICBydWxlOiBcXFwiPV5fXj1cXFwiLFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFwi566h55CG6Kej5p6QXFxcIixcXG4gICAgICAgICAgICB1cmw6IFxcXCJoaWtlcjovL2VtcHR5I25vSGlzdG9yeSNcXFwiLFxcbiAgICAgICAgICAgIGZpbmRSdWxlOiBcXFwianM6dGhpcy5kPVtdO2V2YWwoZmV0Y2goJ2hpa2VyOi8vZmlsZXMvY2FjaGUvZmlsZUxpbmtz4bSw4oG/LnR4dCcpKTtyZXF1aXJlKGZMaW5rcy5qeEl0VXJsKTtqeEl0ZW0uanhMaXN0KCk7c2V0UmVzdWx0KGQpXFxcIlxcbiAgICAgICAgfSkpO1xcbiAgICB9XFxuICAgIGZ1bmN0aW9uIGNhbmNlbCgpe1xcbiAgICAgICAgaWYobXlTZXQ9PScnKXtcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLndyaXRlRmlsZShvbGRSb3V0ZSwgSlNPTi5zdHJpbmdpZnkoc2V0dGluZ3MsIG51bGwsIDQpKTtcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLnJlZnJlc2hQYWdlKHRydWUpO1xcbiAgICAgICAgfWVsc2V7XFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5iYWNrKGZhbHNlKTtcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBmdW5jdGlvbiBjbGlja21lKG1zZyxkdXJhdGlvbix0aXRsZSl7XFxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgYm94RGF0YS5sZW5ndGg7IGkrKyl7XFxuICAgICAgICAgICAgbGV0IGlkID0gYm94RGF0YVtpXS5pZDtcXG4gICAgICAgICAgICBzZXR0aW5nc1tpZF0gPSBEaWQoaWQpLnZhbHVlO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYoc2V0dGluZ3MucWp1ID09ICcnKXtcXG4gICAgICAgICAgICBzZXR0aW5ncy5xanUgPSAn6buY6K6kJztcXG4gICAgICAgIH1cXG4gICAgICAgIHRyeXtcXG4gICAgICAgICAgICBldmFsKCd2YXIgYmNDb25maWc9JyArIGZ5X2JyaWRnZV9hcHAuZmV0Y2gobmV3Um91dGUpKTtcXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGJjQ29uZmlnLnNldHRpbmdzLCBzZXR0aW5ncyk7XFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC53cml0ZUZpbGUobmV3Um91dGUsICQkJC5zdHJpbmdpZnkoYmNDb25maWcpKTtcXG4gICAgICAgIH1jYXRjaChlKXt9XFxuICAgICAgICBmeV9icmlkZ2VfYXBwLndyaXRlRmlsZShvbGRSb3V0ZSwgJCQkLnN0cmluZ2lmeShzZXR0aW5ncykpO1xcbiAgICAgICAgICAgIFxcbiAgICAgICAgVG9hc3QobXNnLGR1cmF0aW9uKTtcXG4gICAgICAgIGlmKHRpdGxlPT1cXFwi5YWzXFxcIil7XFxuICAgICAgICAgICAgaWYoc2ZSZWZyZXNoICE9IERpZChcXFwiY2pcXFwiKS52YWx1ZSl7XFxuICAgICAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAuYmFjaygpO1xcbiAgICAgICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLmJhY2soZmFsc2UpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH1lbHNle1xcbiAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAucmVmcmVzaFBhZ2UodHJ1ZSk7XFxuICAgICAgICB9XFxuICAgIH1cXG5cXG48L3NjcmlwdD4gICBcXG48L2h0bWw+XCJ9LHtcImNvbF90eXBlXCI6XCJtb3ZpZV8zXCIsXCJuYW1lXCI6XCJQYXJzZV9Ebi5qc1wiLFwicGF0aFwiOlwiUGFyc2VfRG4uanNcIixcInJ1bGVcIjpcIi8vPT09PT09PT09PT095YWN5ZeF6LCD55SoPT09PT09PT09PT09XFxuLy/vvI3vvI3vvI09Xl9ePVxcbi8vQOaWreW/tVxcblxcbnZhciBwYXJzZVJvdXRlID0gJ2hpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uJztcXG52YXIgTXlQYXJzZVMgPSB7fTtcXG52YXIgbXlTZXQgPSB7fTtcXG5pZiAoZmlsZUV4aXN0KHBhcnNlUm91dGUpKSB7XFxuICAgIGV2YWwoJ3ZhciBwYXJzZUZpbGUgPScgKyBmZXRjaChwYXJzZVJvdXRlKSk7XFxuICAgIE15UGFyc2VTID0gcGFyc2VGaWxlLmNvZGVzO1xcbiAgICBteVNldCA9IHBhcnNlRmlsZS5zZXR0aW5ncztcXG59XFxudmFyIHBhcnNlVGl0bGUgPSBbXFxuICAgIFxcXCLwn6WaXFxcIixcXG4gICAgXFxcInl1bjE3MTdcXFwiLFxcbiAgICBcXFwiUGFuR3VcXFwiLFxcbiAgICBcXFwiRnVYaW5nXFxcIixcXG4gICAgXFxcImh0dHBzOi8vanh4LnNteXM4LmNuL2luZGV4LnBocD91cmw9XFxcIixcXG4gICAgXFxcImh0dHBzOi8vb2tqeC5jYy8/dXJsPVxcXCIsXFxuICAgIFxcXCJodHRwczovL2p4Lm0zdTgudHYvamlleGkvP3VybD1cXFwiLFxcbiAgICBcXFwiaHR0cHM6Ly9zYi41Z3Nlby5uZXQvP3VybD1cXFwiXFxuXTtcXG5cXG4vL++8je+8je+8jT1eX149XFxuXFxuLy/mjqXlj6Porr7nva4uXFxuXFxudmFyIHNldFVybCA9IFxcXCJoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSNAcnVsZT1qczp0aGlzLmQ9W107cmVxdWlyZSgnaHR0cHM6Ly9naXRlYS5jb20vQUk5NTcvSGlrZXIvcmF3L20vdi9Sb3V0ZS5qcycpO1JvdXRlLnNldFBhcnNlKCk7c2V0UmVzdWx0KGQpO1xcXCI7XFxudmFyIHNldF9zd2l0Y2ggPSBzZXRVcmw7XFxudmFyIGxhenkgPSBgcmVxdWlyZSgnaHR0cHM6Ly9naXRlYS5jb20vQUk5NTcvSGlrZXIvcmF3L20vdi9Sb3V0ZS5qcycpO2F5dG1QYXJzZShpbnB1dClgO1xcblxcbi8vdmFyIHBhcndpeCA9IGB2YXIgeXVybD0naHR0cHM6Ly9kYWlsaS5tYXlpeGlvbmdkaS5jbi8/dXJsPSc7UmVmZXJlcic6ICdodHRwczovL3d3dy5tYXlpeGlvbmdkaS5jbi95cz9pZD0nOydodHRwczovL2RhaWxpLm1heWl4aW9uZ2RpLmNuL2FwaS5waHAnLCAnUmVmZXJlcic6J2h0dHBzOi8vZGFpbGkubWF5aXhpb25nZGkuY24nO1xcbi8vIOWFqOawkWh0dHBzOi8vcGN2aWRlb2FsaXl1bi50aWFuc2hhbmdyZW5qaWFuLm1ndHYuY29tLjg4d3VtYS5jb20vP3VybD1cXG5cXG4vL++8je+8je+8jeWkhyDnlKjvvI3vvI3vvI1cXG4vKlxcbiAqIOW9seinhuW3peWcuu+8miBodHRwczovL3lzZ2MuY2MvXFxuICog5rGf5rmWOiA1NTXnlLXlvbEgaHR0cHM6Ly93d3cuNTU1ZHkyLmNvbS9waG9uZS5odG1sIO+9nCAxN+eciyBodHRwOi8vMTdrYW55eS5jbi8gaHR0cDovL2poamlleGkuMzB2ci5jbi8/dXJsPSDvvZwgaHR0cDovL2FwaS5tYWl6aW1hbGwuY29tL2luZGV4LnBocD91cmw9XFxuICog5rGf5rmWOiBodHRwOi8vd3d3LnRpYW5zaHV5dW4ubmV0L2luZGV4LnBocC92b2QvcGxheS9pZC80NDgzNzcvc2lkLzEvbmlkLzEuaHRtbFxcbiAqIOaxn+a5ljI6IGh0dHA6Ly85OGh5ay5jbi9pbmRleC5waHAvdm9kL3BsYXkvaWQvNzI4NDEvc2lkLzEvbmlkLzEuaHRtbFxcbiAqIOS6uuS6uui/tzogaHR0cHM6Ly92aXAuc3Vzb3UudHYvcGxheWVyLz91cmw9IO+9nCBodHRwczovL3d3dy5tb21kbS5jYy9cXG4gKiBcXG4gKiB3dWlnZW46IGh0dHBzOi8vd3d3LjVpZ2VuLmNvbS9kbXBsYXllci9wbGF5ZXIvP3VybD1cXG4gKiDlubLppa0o5Lq65Lq66L+3KTogaHR0cHM6Ly9qeC56dWkuY20vP3VybD1cXG4gKiBodHRwczovLzIuNjZtb3ZpZS50b3AvcGxheWVyLz91cmw9XFxuICogXFxuICovXFxuXFxuXFxudmFyIHRvb2xzID0ge1xcbiAgICBNRDU6IGZ1bmN0aW9uKGRhdGEpIHtcXG4gICAgICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxuICAgICAgICByZXR1cm4gQ3J5cHRvSlMuTUQ1KGRhdGEpLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5IZXgpO1xcbiAgICB9LFxcbiAgICBBRVM6IGZ1bmN0aW9uKHRleHQsIGtleSwgaXYsIGlzRW5jcnlwdCkge1xcbiAgICAgICAgZXZhbChnZXRDcnlwdG9KUygpKTtcXG4gICAgICAgIHZhciBrZXkgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShrZXkpO1xcbiAgICAgICAgdmFyIGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoaXYpO1xcbiAgICAgICAgaWYgKGlzRW5jcnlwdCkge1xcbiAgICAgICAgICAgIHJldHVybiBDcnlwdG9KUy5BRVMuZW5jcnlwdCh0ZXh0LCBrZXksIHtcXG4gICAgICAgICAgICAgICAgaXY6IGl2LFxcbiAgICAgICAgICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkNCQyxcXG4gICAgICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxuICAgICAgICAgICAgfSkudG9TdHJpbmcoKTtcXG4gICAgICAgIH07XFxuICAgICAgICByZXR1cm4gQ3J5cHRvSlMuQUVTLmRlY3J5cHQodGV4dCwga2V5LCB7XFxuICAgICAgICAgICAgaXY6IGl2LFxcbiAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcbiAgICAgICAgfSkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLlV0ZjgpO1xcbiAgICB9LFxcbiAgICAvL2FzY2lpXFxuICAgIG5leHRDaGFyYWN0ZXI6IGZ1bmN0aW9uKGFzY2lpVmFsdWUsIGspIHtcXG4gICAgICAgIHZhciBzID0gYXNjaWlWYWx1ZTtcXG4gICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHMgKyBrKTtcXG4gICAgfSxcXG4gICAgLy/lh6/mkpJcXG4gICAgY2Flc2FyQ2lwaGVyOiBmdW5jdGlvbihzdHJpbmdWYWx1ZSwgaykge1xcbiAgICAgICAgdmFyIG5ld1N0cmluZyA9IFxcXCJcXFwiO1xcbiAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHJpbmdWYWx1ZS5sZW5ndGg7IGkrKykge1xcbiAgICAgICAgICAgIG5ld1N0cmluZyArPSB0aGlzLm5leHRDaGFyYWN0ZXIoc3RyaW5nVmFsdWVbaV0uY2hhckNvZGVBdCgpLCBrKTtcXG4gICAgICAgIH1cXG4gICAgICAgIHJldHVybiBuZXdTdHJpbmc7XFxuICAgIH0sXFxuICAgIGhhbmRsZVVybDogZnVuY3Rpb24odXJsLCB2aXBVcmwsIG5hbWUpIHtcXG4gICAgICAgIGlmKHVybCA9PSBcXFwiXFxcIiB8fCB1cmwgPT0gdmlwVXJsKSB7XFxuICAgICAgICAgICAgbG9nKG5hbWUgKyBcXFwi6Kej5p6Q5aSx6LSlXFxcIik7XFxuICAgICAgICAgICAgcmV0dXJuIHZpcFVybDtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmICh1cmxbMF0gPT0gJy8nKSB7XFxuICAgICAgICAgICAgdXJsID0gJ2h0dHBzOicgKyB1cmw7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAodXJsLmluZGV4T2YoJz1odHRwJykgIT0gLTEpIHtcXG4gICAgICAgICAgICB1cmwgPSB1cmwuaW5kZXhPZignJnVybD0nKSA+IC0xID8gdXJsIDogJ2h0dHAnICsgZGVjb2RlVVJJQ29tcG9uZW50KHVybC5zcGxpdCgnPWh0dHAnKVsxXSk7XFxuICAgICAgICB9XFxuICAgICAgICBpZiAodmlwVXJsLmluZGV4T2YoJ21ndHYuY29tJykgIT0gLTEgJiYgdXJsLmluZGV4T2YoJ1VzZXItQWdlbnQnKSA9PSAtMSkge1xcbiAgICAgICAgICAgIHVybCA9IHVybCArICc7e1VzZXItQWdlbnRAYXBwfSc7XFxuICAgICAgICB9IGVsc2UgaWYgKHVybC5pbmRleE9mKCcuZmx2JykgIT0gLTEpIHtcXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAnO3tVc2VyLUFnZW50QGFwcCYmUmVmZXJlckAnICsgdmlwVXJsICsgJ30nO1xcbiAgICAgICAgfVxcbiAgICAgICAgcmV0dXJuIHVybCArICcjaXNWaWRlbz10cnVlIyc7XFxuICAgIH1cXG59O1xcblxcbnZhciBQYXJzZVMgPSB7fTtcXG52YXIgb3JpZ2luYWxQYXJzZVMgPSB7XFxuICAgIENpdHlJUDogJ2h0dHA6Ly9wdi5zb2h1LmNvbS9jaXR5anNvbicsXFxuICAgIHBjVUE6ICdVc2VyLUFnZW50QE1vemlsbGEvNS4wIChXaW5kb3dzIE5UIDEwLjBcXFxc77ybXFxcXO+8myBXT1c2NCkgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzQ5LjAuMjYyMy44NyBTYWZhcmkvNTM3LjM2JyxcXG4gICAgZGVmYXVsdFBhcnNlOiBmdW5jdGlvbih1cmwpIHtcXG4gICAgICAgIHNob3dMb2FkaW5nKFxcXCLmraPlnKjosIPnlKjnvZHpobXop6PmnpAuLi5cXFwiKTtcXG4gICAgICAgIHJldHVybiAkKHVybCkud2ViTGF6eSgoKSA9PiB7XFxuICAgICAgICAgICAgdmFyIFVybHMgPSBfZ2V0VXJscygpO1xcbiAgICAgICAgICAgIHZhciBSZWcxID0gL1xcXFwubXA0fFxcXFwubTN1OFxcXFw/fC5tM3U4JHxcXFxcLmZsdnxcXFxcLmF2aXxcXFxcLnJtdmIvO1xcbiAgICAgICAgICAgIHZhciBSZWcyID0gL3BsYXltM3U4fC5jc3MkfC5qcyR8LmljbyR8Y256elxcXFwuLztcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IFVybHMubGVuZ3RoOyBpKyspIHtcXG4gICAgICAgICAgICAgICAgbGV0IGlzVXJsID0gVXJsc1tpXTtcXG4gICAgICAgICAgICAgICAgaWYgKFJlZzEudGVzdChpc1VybCkgJiYgIVJlZzIudGVzdChpc1VybCkpIHtcXG4gICAgICAgICAgICAgICAgICAgIGZiYS5oaWRlTG9hZGluZygpO1xcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGlzVXJsICsgXFxcIiNpc1ZpZGVvPXRydWUjXFxcIjtcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIH1cXG4gICAgICAgIH0pO1xcbiAgICB9LFxcbiAgICBtYW9zczogZnVuY3Rpb24oanh1cmwsIHJlZiwga2V5KSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIHZhciBnZXRWaWRlb0luZm8gPSBmdW5jdGlvbih0ZXh0KSB7XFxuICAgICAgICAgICAgICAgIHJldHVybiB0b29scy5BRVModGV4dCwga2V5LCBpdik7XFxuICAgICAgICAgICAgfTtcXG4gICAgICAgICAgICBrZXkgPSBrZXkgPT0gdW5kZWZpbmVkID8gJ2R2eVlSUWxuUFJDTWRRU2UnIDoga2V5O1xcbiAgICAgICAgICAgIGlmIChyZWYpIHtcXG4gICAgICAgICAgICAgICAgdmFyIGh0bWwgPSByZXF1ZXN0KGp4dXJsLCB7XFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAgICAgJ1JlZmVyZXInOiByZWZcXG4gICAgICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgfSk7XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgdmFyIGh0bWwgPSByZXF1ZXN0KGp4dXJsKTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgaWYgKGh0bWwuaW5kZXhPZignJmJ0d2FmPScpICE9IC0xKSB7XFxuICAgICAgICAgICAgICAgIGh0bWwgPSByZXF1ZXN0KGp4dXJsICsgJyZidHdhZicgKyBodG1sLm1hdGNoKC8mYnR3YWYoLio/KVxcXCIvKVsxXSwge1xcbiAgICAgICAgICAgICAgICAgICAgaGVhZGVyczoge1xcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogcmVmXFxuICAgICAgICAgICAgICAgICAgICB9XFxuICAgICAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHZhciBpdiA9IGh0bWwuc3BsaXQoJ190b2tlbiA9IFxcXCInKVsxXS5zcGxpdCgnXFxcIicpWzBdO1xcbiAgICAgICAgICAgIGV2YWwoaHRtbC5tYXRjaCgvdmFyIGNvbmZpZyA9IHtbXFxcXHNcXFxcU10qP30vKVswXSArICcnKTtcXG4gICAgICAgICAgICBpZiAoY29uZmlnLnVybC5zbGljZSgwLCA0KSAhPSAnaHR0cCcpIHtcXG4gICAgICAgICAgICAgICAgY29uZmlnLnVybCA9IGRlY29kZVVSSUNvbXBvbmVudCh0b29scy5BRVMoY29uZmlnLnVybCwga2V5LCBpdikpO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gY29uZmlnLnVybDtcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIExMUTogZnVuY3Rpb24oanh1cmwpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgdmFyIGFwaSA9IGp4dXJsLnNwbGl0KCc/dXJsPScpWzBdICsgXFxcImFwaS5waHBcXFwiO1xcbiAgICAgICAgICAgIHZhciBiNjRpZCA9IGJhc2U2NEVuY29kZShqeHVybC5zcGxpdCgndXJsPScpWzFdKTtcXG4gICAgICAgICAgICB2YXIgcGFyc2VpZCA9IHRvb2xzLmNhZXNhckNpcGhlcihiNjRpZCwgLTEpO1xcbiAgICAgICAgICAgIHZhciBqc29uID0gSlNPTi5wYXJzZShyZXF1ZXN0KGFwaSwge1xcbiAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxuICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IGp4dXJsXFxuICAgICAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogJ1BPU1QnLFxcbiAgICAgICAgICAgICAgICBib2R5OiAndXJsPScgKyBwYXJzZWlkXFxuICAgICAgICAgICAgfSkpO1xcbiAgICAgICAgICAgIHVybCA9IChqc29uLmNvZGUgPT0gMjAwID8gYmFzZTY0RGVjb2RlKHRvb2xzLmNhZXNhckNpcGhlcihqc29uLnVybCwgLTEpKSA6ICcnKTtcXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiAnJztcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgUGFuR3U6IGZ1bmN0aW9uKHZpcFVybCwgZGF0YSkge1xcbiAgICAgICAgLyp2YXIgcmVmID0gJ2h0dHBzOi8vd3d3LnBhbmd1amlleGkuY29tLyc7XFxuICAgICAgICB2YXIgcGFyc2UgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L2ppZXhpLz91cmw9JyArIHZpcFVybDtcXG4gICAgICAgIHZhciBhcGkgPSAnaHR0cHM6Ly9wYW5ndWFwaS5udHJ5amQubmV0L2ppZXhpL2FwaS5waHAnO1xcbiAgICAgICAgKi9cXG4gICAgICAgIC8vdmFyIHJlZiA9ICdodHRwczovL3hteXN0di5jb20vJztcXG4gICAgICAgIC8vdmFyIHBhcnNlID0gJ2h0dHBzOi8vd3d3Ljk5a3B3LmNvbS9wYW5ndS9pbmRleC5waHA/dXJsPScgKyB0YWlsVXJsO1xcbiAgICAgICAgLy92YXIgYXBpID0gJ2h0dHBzOi8vd3d3Ljk5a3B3LmNvbS9wYW5ndS9hcGkucGhwJztcXG4gICAgICAgIHZhciBwYXJzZSA9IFxcXCJodHRwczovL3d3dy5wYW5ndWppZXhpLmNvbS9wYW5ndS8/dXJsPVxcXCIgKyB2aXBVcmw7XFxuICAgICAgICB2YXIgYXBpID0gXFxcImh0dHBzOi8vcGFuZ3VhcGkubnRyeWpkLm5ldC9wYW5ndTIwMjEvYXBpLnBocFxcXCI7XFxuICAgICAgICBpZiAoZGF0YSkge1xcbiAgICAgICAgICAgIHJlZiA9IGRhdGFbMF07XFxuICAgICAgICAgICAgcGFyc2UgPSBkYXRhWzFdO1xcbiAgICAgICAgICAgIGFwaSA9IGRhdGFbMl07XFxuICAgICAgICB9XFxuICAgICAgICB2YXIgVGltZSA9IChNYXRoLmZsb29yKG5ldyBEYXRlKCkuZ2V0VGltZSgpIC8gMTAwMCkgKiAxKS50b1N0cmluZygpO1xcbiAgICAgICAgdmFyIGpzb24gPSByZXF1ZXN0KGFwaSwge1xcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXG4gICAgICAgICAgICAgICAgXFxcIlJlZmVyZXJcXFwiOiBwYXJzZVxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgYm9keTogXFxcInVybD1cXFwiICsgdmlwVXJsICsgXFxcIiZyZWZlcmVyPVxcXCIgKyBiYXNlNjRFbmNvZGUocGFyc2UpICsgXFxcIiZyZWY9MSZ0aW1lPVxcXCIgKyBUaW1lICsgXFxcIiZ0eXBlPSZvdGhlcj1cXFwiICsgYmFzZTY0RW5jb2RlKHZpcFVybCkgKyBcXFwiJmlvcz0wXFxcIixcXG4gICAgICAgICAgICBtZXRob2Q6IFxcXCJQT1NUXFxcIlxcbiAgICAgICAgfSk7XFxuICAgICAgICB2YXIgdXJsID0ganNvblswXSA9PSBcXFwie1xcXCIgPyBKU09OLnBhcnNlKGpzb24pLnVybCA6IFxcXCJcXFwiO1xcbiAgICAgICAgcmV0dXJuIHVybDtcXG4gICAgfSxcXG4gICAgeXVuMTcxNzogZnVuY3Rpb24odmlwVXJsKSB7XFxuICAgICAgICB2YXIgaXN5ayA9IHZpcFVybC5pbmRleE9mKCd5b3VrdScpO1xcbiAgICAgICAgdmFyIHJlZiA9IFxcXCJodHRwczovL3d3dy4xNzE3eXVuLmNvbS9qeC90eS5waHA/dXJsPVxcXCIgKyB2aXBVcmw7XFxuICAgICAgICB2YXIgcGFyc2UgPSBcXFwiaHR0cHM6Ly8xNzE3eXVuLmNvbS56aDE4OC5uZXQvMDgyOC8/dXJsPVxcXCIgKyB2aXBVcmw7XFxuICAgICAgICB2YXIgYXBpID0gXFxcImh0dHBzOi8vMTcxN3l1bi5jb20uemgxODgubmV0LzEwMDQvLi5pbmRleC4ucGhwXFxcIjtcXG4gICAgICAgIHJldHVybiBpc3lrID09IC0xID8gdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYsIHBhcnNlLCBhcGldKSA6IHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmICsgJyx2aXA6JywgcGFyc2UgKyAnLHZpcDonLCBhcGldKTtcXG4gICAgfSxcXG4gICAgRnVYaW5nOiBmdW5jdGlvbih2aXBVcmwpIHtcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgLy9pZih2aXBVcmwuaW5kZXhPZigndi55b3VrdScpIT0tMSl7XFxuICAgICAgICAgICAgLy8gICAgdmlwVXJsID0gKEpTT04ucGFyc2UocmVxdWVzdCh2aXBVcmwsIHtyZWRpcmVjdDpmYWxzZSwgd2l0aEhlYWRlcnM6dHJ1ZX0pKS5oZWFkZXJzLmxvY2F0aW9uICsgJycpLnJlcGxhY2UoL1xcXFw/LiovLCcnKTtcXG4gICAgICAgICAgICAvL31cXG4gICAgICAgICAgICB2YXIgcmVmID0gJ2h0dHBzOi8vangueHVldHVpZ3VhbmcuY24vamlleGkvP3VybD0nICsgdmlwVXJsO1xcbiAgICAgICAgICAgIHZhciBwYXJzZSA9IHJlZjtcXG4gICAgICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vangueHVldHVpZ3VhbmcuY24vamlleGkvYXBpdV9meC5waHAnO1xcbiAgICAgICAgICAgIHJldHVybiB0aGlzLlBhbkd1KHZpcFVybCwgW3JlZiwgcGFyc2UsIGFwaV0pO1xcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcbiAgICAgICAgICAgIHJldHVybiAnJztcXG4gICAgICAgIH1cXG4gICAgfSxcXG4gICAgXFxcIvCfpZpcXFwiOiBmdW5jdGlvbih2aXBVcmwpIHtcXG4gICAgICAgIGxldCDkvZzogIVf6KeG55WM55+l5ZCN5aSn5L2sO1xcbiAgICAgICAgdHJ5IHtcXG4gICAgICAgICAgICB2YXIgcGxheSA9IEpTT04ucGFyc2UoZmV0Y2goXFxcImh0dHA6Ly93d3cuenJ1aXJ5LmNvbS95dW4vYXBpLnBocFxcXCIsIHtcXG4gICAgICAgICAgICAgICAgYm9keTogXFxcInVybD1cXFwiICsgaW5wdXQsXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogXFxcIlBPU1RcXFwiXFxuICAgICAgICAgICAgfSkpLnVybDtcXG4gICAgICAgICAgICBpZiAocGxheS5zdGFydHNXaXRoKFxcXCIvXFxcIikpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIFxcXCJodHRwczpcXFwiICsgcGxheTtcXG4gICAgICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgICAgICByZXR1cm4gcGxheTtcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxuICAgICAgICAgICAgcmV0dXJuIFxcXCJcXFwiO1xcbiAgICAgICAgfVxcbiAgICB9XFxufTtcXG5cXG52YXIgZnJvbXMgPSBbJ2R1b2R1b3p5JywgJ3J4JywgJ3JlbnJlbm1pJywgJ2x0bmInLCAneGZ5dW4nXTtcXG5mb3IobGV0IGkgaW4gZnJvbXMpIHtcXG4gICAgbGV0IG5hbWUgPSBmcm9tc1tpXSArIFxcXCIo6YCa55So5Ye95pWwKVxcXCI7XFxuICAgIFBhcnNlU1tuYW1lXSA9IGZ1bmN0aW9uKFVybCwgcmVmZXJlcil7XFxuICAgICAgICByZXR1cm4gdGhpcy5kZWZhdWx0UGFyc2UocmVmZXJlcik7XFxuICAgIH07XFxufVxcbk9iamVjdC5hc3NpZ24oUGFyc2VTLCBvcmlnaW5hbFBhcnNlUywgTXlQYXJzZVMpO1xcbi8v6KaG55uW6aG65bqP77yM56ys5LiJ5Liq6KaG55uW56ys5LqM5Liq54S25ZCO6KaG55uW56ys5LiA5LiqXFxuXFxuXFxuZnVuY3Rpb24gYXl0bVBhcnNlKHZpcFVybCwgcGFyc2VOYW1lKSB7XFxuICAgIHRoaXMucmVxdWVzdCA9IGZ1bmN0aW9uKHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIpIHtcXG4gICAgICAgIHBhcmFtMSA9IHBhcmFtMSA9PSB1bmRlZmluZWQgPyB7fSA6IHBhcmFtMTtcXG4gICAgICAgIGlmKGlzTmFOKHBhcmFtMS50aW1lb3V0KSkge1xcbiAgICAgICAgICAgIHBhcmFtMS50aW1lb3V0ID0gMzAwMDtcXG4gICAgICAgIH1cXG4gICAgICAgIHBhcmFtMiA9IE1ZX1JVTEU7XFxuICAgICAgICB2YXIgcmV0U3RyID0gbWV0aG9kX3JlcXVlc3QuaW52b2tlKGphdmFDb250ZXh0LCBwYXJhbTAsIHBhcmFtMSwgcGFyYW0yKTtcXG4gICAgICAgIHJldHVybiByZXRTdHIgPT0gbnVsbCA/IHJldFN0ciA6IHJldFN0ciArIFxcXCJcXFwiO1xcbiAgICB9O1xcbiAgICB0aGlzLmZldGNoID0gZnVuY3Rpb24ocGFyYW0wLCBwYXJhbTEsIHBhcmFtMikge1xcbiAgICAgICAgcGFyYW0xID0gcGFyYW0xID09IHVuZGVmaW5lZCA/IHt9IDogcGFyYW0xO1xcbiAgICAgICAgcGFyYW0xLmhlYWRlcnMgPSBwYXJhbTEuaGVhZGVycyA9PSB1bmRlZmluZWQgPyB7fSA6IHBhcmFtMS5oZWFkZXJzO1xcbiAgICAgICAgcGFyYW0xLmhlYWRlcnNbJ1VzZXItQWdlbnQnXSA9IFBDX1VBO1xcbiAgICAgICAgaWYoaXNOYU4ocGFyYW0xLnRpbWVvdXQpKSB7XFxuICAgICAgICAgICAgcGFyYW0xLnRpbWVvdXQgPSAzMDAwO1xcbiAgICAgICAgfVxcbiAgICAgICAgcGFyYW0yID0gTVlfUlVMRTtcXG4gICAgICAgIHZhciByZXRTdHIgPSBtZXRob2RfZmV0Y2guaW52b2tlKGphdmFDb250ZXh0LCBwYXJhbTAsIHBhcmFtMSwgcGFyYW0yKTtcXG4gICAgICAgIHJldHVybiByZXRTdHIgPT0gbnVsbCA/IHJldFN0ciA6IHJldFN0ciArIFxcXCJcXFwiO1xcbiAgICB9O1xcbiAgICB2YXIgaG9zdCA9IHZpcFVybC5tYXRjaCgvXFxcXC4oLio/KVxcXFwvLyk7XFxuICAgIGhvc3QgPSBob3N0ID09IG51bGwgPyBudWxsIDogaG9zdFsxXTtcXG4gICAgdmFyIG5vVXJsID0gXFxcInRvYXN0Oi8v5o6l5pS25Yiw55qE6ZO+5o6l5Li6OiBcXFwiO1xcbiAgICBzd2l0Y2ggKG15U2V0LnFqdSkge1xcbiAgICAgICAgY2FzZSBcXFwi6buY6K6kXFxcIjpcXG4gICAgICAgICAgICBzd2l0Y2ggKGhvc3QpIHtcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFwicXEuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnR4O1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGNhc2UgXFxcImlxaXlpLmNvbVxcXCI6XFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBteVNldC5xeTtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgICAgICBjYXNlIFxcXCJ5b3VrdS5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQueWs7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFwibWd0di5jb21cXFwiOlxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQubWc7XFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXG4gICAgICAgICAgICAgICAgY2FzZSBcXFwiYmlsaWJpbGkuY29tXFxcIjpcXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LmJsO1xcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgICAgICAgICBzdHIgPSBob3N0ID09IG51bGwgPyBub1VybCA6IG15U2V0Lm90aDtcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICBicmVhaztcXG4gICAgICAgIGRlZmF1bHQ6XFxuICAgICAgICAgICAgc3RyID0gaG9zdCA9PSBudWxsID8gbm9VcmwgOiBteVNldC5xanU7XFxuICAgICAgICAgICAgYnJlYWs7XFxuICAgIH1cXG4gICAgaWYgKHBhcnNlTmFtZSkge1xcbiAgICAgICAgc3RyID0gcGFyc2VOYW1lO1xcbiAgICB9XFxuICAgIGxldCBteUNob2ljZSA9IHN0ci5zcGxpdCgnLCcpO1xcbiAgICBsZXQgbGVuID0gbXlDaG9pY2UubGVuZ3RoO1xcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XFxuICAgICAgICBsZXQgbmFtZSA9IG15Q2hvaWNlW2ldO1xcbiAgICAgICAgaWYgKHR5cGVvZiBQYXJzZVNbbmFtZV0gPT0gJ2Z1bmN0aW9uJykge1xcbiAgICAgICAgICAgIGxldCB1cmwgPSBQYXJzZVNbbmFtZV0odmlwVXJsKTtcXG4gICAgICAgICAgICBsZXQgUmVnID0gbmV3IFJlZ0V4cChcXFwibTN1OHxtcDR8XFxcIiArIHZpcFVybCArIFxcXCJ8aHR0cFxcXCIpO1xcbiAgICAgICAgICAgIGlmIChpICE9IGxlbiAtIDEgJiYgIVJlZy50ZXN0KHVybCkpIHtcXG4gICAgICAgICAgICAgICAgbG9nKG5hbWUgKyAn6Kej5p6Q5aSx6LSlJyk7XFxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xcbiAgICAgICAgICAgIH1cXG4gICAgICAgICAgICByZXR1cm4gdG9vbHMuaGFuZGxlVXJsKHVybCwgdmlwVXJsLCBuYW1lKTtcXG4gICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIFBhcnNlU1tuYW1lXSA9PSAnc3RyaW5nJykge1xcbiAgICAgICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlKFBhcnNlU1tuYW1lXSArIHZpcFVybCwgdG9vbHMuaGFuZGxlVXJsLCBuYW1lKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgcmV0dXJuIG5hbWUuc3Vic3RyKDAsIDQpID09IFxcXCJodHRwXFxcIiB8fCBob3N0ID09IG51bGwgPyBuYW1lICsgdmlwVXJsIDogXFxcInRvYXN0Oi8vXFxcIiArIG5hbWUgKyBcXFwiIOS4jeaYr+ebtOmTvuS5n+S4jeaYr+WFjeWXhVxcXCI7XFxuICAgICAgICB9XFxuICAgIH1cXG59O1xcblxcbnZhciBwbGF5UGFyc2UgPSB7XFxuICAgIHBsYXllclM6IGZ1bmN0aW9uKGp1cmwpIHtcXG4gICAgICAgIHZhciBodG1sID0gcmVxdWVzdChqdXJsKSxcXG4gICAgICAgICAgICBVcmwgPSAnJyxcXG4gICAgICAgICAgICBmcm9tID0gJyc7XFxuICAgICAgICB2YXIgY29kZTEgPSBodG1sLm1hdGNoKC92YXIgcGxheWVyX1tcXFxcc1xcXFxTXSo/fS8pO1xcbiAgICAgICAgdmFyIGRwVXJsID0gcGRmaChodG1sLCBcXFwiaWZyYW1lJiZkYXRhLXBsYXlcXFwiKTtcXG4gICAgICAgIGlmIChjb2RlMSAhPSBudWxsKSB7XFxuICAgICAgICAgICAgZXZhbChjb2RlMVswXS5yZXBsYWNlKC9wbGF5ZXJfLio/ey8sICdwZGF0YT17JykpO1xcbiAgICAgICAgICAgIFVybCA9IHBkYXRhLnVybDtcXG4gICAgICAgICAgICBmcm9tID0gcGRhdGEuZnJvbTtcXG4gICAgICAgIH0gZWxzZSBpZiAoZHBVcmwgIT0gJycpIHtcXG4gICAgICAgICAgICBVcmwgPSBkcFVybC5zdGFydHNXaXRoKFxcXCJodHRwXFxcIikgPyBkZHBVcmwgOiBkcFVybC5zbGljZSgzKTtcXG4gICAgICAgIH0gZWxzZSB7XFxuICAgICAgICAgICAgY29kZTIgPSBodG1sLm1hdGNoKC92YXIgbm93W1xcXFxzXFxcXFNdKj92YXIgcG5bXFxcXHNcXFxcU10qPzsvKTtcXG4gICAgICAgICAgICBpZiAoY29kZTIgIT0gbnVsbCkge1xcbiAgICAgICAgICAgICAgICBldmFsKGNvZGUyWzBdKTtcXG4gICAgICAgICAgICAgICAgVXJsID0gbm93O1xcbiAgICAgICAgICAgICAgICBmcm9tID0gcG47XFxuICAgICAgICAgICAgfVxcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKFVybC5zdWJzdHIoMCwgOCkubWF0Y2goL0pULi5KVC4uLykgfHwgVXJsLnN0YXJ0c1dpdGgoXFxcImFIUjBcXFwiKSkge1xcbiAgICAgICAgICAgIFVybCA9IGJhc2U2NERlY29kZShVcmwpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKFVybC5zdWJzdHIoMCwgOCkubWF0Y2goLyUuLiUuLi8pKSB7XFxuICAgICAgICAgICAgVXJsID0gdW5lc2NhcGUoVXJsKTtcXG4gICAgICAgIH1cXG4gICAgICAgIGlmIChmcm9tcy5pbmNsdWRlcyhmcm9tKSkge1xcbiAgICAgICAgICAgIHZhciBuYW1lID0gZnJvbSArICco6YCa55So5Ye95pWwKSc7XFxuICAgICAgICAgICAgcmV0dXJuIFBhcnNlU1tuYW1lXShVcmwsIGp1cmwpO1xcbiAgICAgICAgfVxcbiAgICAgICAgaWYgKC9odG1sfGJpbGliaWxpLy50ZXN0KFVybCkpIHtcXG4gICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKFVybCk7XFxuICAgICAgICB9IGVsc2Uge1xcbiAgICAgICAgICAgIHJldHVybiBVcmwuc3RhcnRzV2l0aCgnaHR0cCcpID8gVXJsICsgJyNpc1ZpZGVvPXRydWUjJyA6IFBhcnNlUy5kZWZhdWx0UGFyc2UoanVybCk7XFxuICAgICAgICB9XFxuICAgIH0sXFxuICAgIHBsYXllcl94eDogZnVuY3Rpb24oanVybCkge1xcbiAgICAgICAgcmV0dXJuICQoanVybCkubGF6eVJ1bGUoKCkgPT4ge1xcbiAgICAgICAgICAgIGV2YWwoZmV0Y2goSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb24nKSkuY2opKTtcXG4gICAgICAgICAgICByZXR1cm4gcGxheVBhcnNlLnBsYXllclMoaW5wdXQpO1xcbiAgICAgICAgfSkgXFxuICAgIH1cXG59O1xcblxcbmZ1bmN0aW9uIHNldFBhcnNlKCkge1xcbiAgICB0aGlzLmQgPSBbXTtcXG4gICAgcmVxdWlyZSgnaHR0cHM6Ly9naXRlYS5jb20vQUk5NTcvSGlrZXIvcmF3L20vdi9Sb3V0ZS5qcycpO1xcbiAgICBSb3V0ZS5zZXRQYXJzZSgpO1xcbiAgICBzZXRSZXN1bHQoZCk7XFxufVwifV0sXCJzYXZlZFwiOmZhbHNlLFwidGl0bGVcIjpcIvCdkYDwnZGm8J2QufCdkZbwnZGS8J2RmfCdkZHhtLDigb9cIixcInZlcnNpb25cIjowLFwidXJsXCI6XCJoaWtlcjovL2VtcHR5I25vUmVjb3JkSGlzdG9yeSM7Z2V0O1VURi04O3tVc2VyLUFnZW50QE1vemlsbGEvNS4wIChMaW51eO+8m++8myBBbmRyb2lkIDEx77yb77ybIE1pIDEwIFBybykgQXBwbGVXZWJLaXQvNTM3LjM2IChLSFRNTCwgbGlrZSBHZWNrbykgQ2hyb21lLzg4LjAuNDMyNC4xNTIgTW9iaWxlIFNhZmFyaS81MzcuMzZ9XCIsXCJjb2xfdHlwZVwiOlwidGV4dF9jZW50ZXJfMVwiLFwiZmluZF9ydWxlXCI6XCJqczooXFxuKCkgPT4ge1xcbiAgICB0aGlzLmQgPSBbXTtcXG4gICAgZXZhbChmZXRjaChcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9maWxlTGlua3NcXFxcdTFkMzBcXFxcdTIwN2YudHh0XFxcIikpO1xcbiAgICByZXF1aXJlKGZMaW5rcy5qeEl0VXJsKTtcXG4gICAganhJdGVtLmp4TGlzdCgpO1xcbiAgICBzZXRSZXN1bHQoZCk7XFxufVxcbikoKVwiLFwiZ3JvdXBcIjpcIuKRpOW3peWFt1wiLFwidWFcIjpcIm1vYmlsZVwiLFwicHJlUnVsZVwiOlwiLy/lpoLmnpzlh7rnjrDojrflj5bkuI3liLDov5znqIvotYTmupDnmoTmg4XlhrXvvIzmiorigJwvL2tU4oCd55qE4oCcLy/igJ3ljrvmjonnhLblkI7ph43lkK9BUFBcXG5cXG52YXIga1QgPSBcXFwiaHR0cHM6Ly9naXRlYS5jb20vQUk5NTcvSGlrZXIvcmF3L2JyYW5jaC9tL3YvXFxcIixcXG4gICAga1QyID0gJ2h0dHBzOi8vY29kZS5hbGl5dW4uY29tL0FJOTU3L0hpa2VyL3Jhdy9tYXN0ZXIvdi8nLFxcbiAgICBrVDMgPSAnaHR0cHM6Ly9naXRlZS5jb20vRHVhbi1OaWFuL0RuL3Jhdy9tYXN0ZXIvaGlrZXJ2aWV3Lyc7XFxuLy9rVCA9IGtUMjtcXG52YXIgZkxpbmtzID0ge1xcbiAgICBrVDoga1QsXFxuICAgIGtUMjoga1QyLFxcbiAgICBrVDM6IGtUMyxcXG4gICAgY2pGcm9tOiAnaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmpzJyxcXG4gICAgeDVGcm9tOiAnaGlrZXI6Ly9wYWdlL1BhcnNlX0RuLmh0bWwnLFxcbiAgICBfYmpVcmw6IGtUICsgJ2p4SXRlbV9iai5qcycsXFxuICAgIGp4SXRVcmw6IGtUICsgJ2p4SXRlbS5qcycsXFxuICAgIHJvdXRlVXJsOiAnaHR0cHM6Ly9naXRlYS5jb20vQUk5NTcvSGlrZXIvcmF3L20vdi9Sb3V0ZS5qcycsXFxuICAgIGNqY2FjaGU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzJyxcXG4gICAgeDVjYWNoZTogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvUGFyc2VfRG4uaHRtbCcsXFxuICAgIHBsZ2w6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL3BsZ2xQYXJzZS5odG1sJyxcXG4gICAgTGFuSmllOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS94NVBhcnNlTGFuSmllLnR4dCcsXFxuICAgIGNvbmZpZzogJ2hpa2VyOi8vZmlsZXMvY2FjaGUvTXlQYXJzZVNldC5qc29uJyxcXG4gICAgcGFyc2VzOiAnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nLFxcbiAgICBjenp5OiAnaHR0cHM6Ly9kb2NzLnFxLmNvbS9kb2MvRFZYTkdWR2RMUkVGUFkzWnonLFxcbiAgICBneHJ6OiAnaHR0cHM6Ly93d3cueXVxdWUuY29tL2R1YW5uaWFuLWNvcXRiL2VseThjYS9nYWY3b3AnLFxcbiAgICB2dWU6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL3Z1ZUAyLjUuMTYuanMnLFxcbiAgICBqcXVlcnk6ICdoaWtlcjovL2ZpbGVzL2NhY2hlL2pxdWVyeUAyLjEuNC5qcycsXFxuICAgIHg1Um91dGU6ICdmaWxlOi8vL3N0b3JhZ2UvZW11bGF0ZWQvMC9BbmRyb2lkL2RhdGEvY29tLmV4YW1wbGUuaGlrZXJ2aWV3L2ZpbGVzL0RvY3VtZW50cy9jYWNoZS8nXFxufTtcXG5sZXQgZlJvdXRlID0gJ2hpa2VyOi8vZmlsZXMvY2FjaGUvZmlsZUxpbmtz4bSw4oG/LnR4dCc7XFxuaWYgKCFnZXRWYXIoJ2p4SXRlbVYnKSB8fCBnZXRWYXIoJ2p4SXROZXdWJywgJzAnKSAhPT0gJzAnKSB7XFxuICAgIHdyaXRlRmlsZShmUm91dGUsICd2YXIgZkxpbmtzPScgKyAkLnN0cmluZ2lmeShmTGlua3MpKTtcXG59XCIsXCJwYWdlc1wiOlwiW3tcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIlBhcnNlX0RuLmh0bWxcXFwiLFxcXCJwYXRoXFxcIjpcXFwiUGFyc2VfRG4uaHRtbFxcXCIsXFxcInJ1bGVcXFwiOlxcXCI8IURPQ1RZUEUgaHRtbD5cXFxcbjxodG1sPlxcXFxuPGhlYWQ+XFxcXG4gICAgPG1ldGEgY2hhcnNldD1cXFxcXFxcInV0Zi04XFxcXFxcXCI+XFxcXG4gICAgPG1ldGEgbmFtZT1cXFxcXFxcInZpZXdwb3J0XFxcXFxcXCIgY29udGVudD1cXFxcXFxcIndpZHRoPWRldmljZS13aWR0aCxpbml0aWFsLXNjYWxlPTEsbWluaW11bS1zY2FsZT0xLG1heGltdW0tc2NhbGU9MSx1c2VyLXNjYWxhYmxlPW5vXFxcXFxcXCIgLz5cXFxcbiAgICA8IS0tXFxcXG4gICAgPHNjcmlwdCBzcmM9XFxcXFxcXCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3Z1ZUAyLjUuMTYvZGlzdC92dWUubWluLmpzXFxcXFxcXCI+PC9zY3JpcHQ+XFxcXG4gICAgPHNjcmlwdCBzcmM9XFxcXFxcXCJodHRwczovL2NvZGUuanF1ZXJ5LmNvbS9qcXVlcnktMi4xLjQubWluLmpzXFxcXFxcXCI+PC9zY3JpcHQ+XFxcXG4gICAgXFxcXG4gICAgPHNjcmlwdCBzcmM9XFxcXFxcXCJodHRwOi8vYXBwcy5iZGltZy5jb20vbGlicy9qcXVlcnkvMi4xLjQvanF1ZXJ5Lm1pbi5qc1xcXFxcXFwiPjwvc2NyaXB0PlxcXFxuICAgIDxzY3JpcHQgc3JjPVxcXFxcXFwiaHR0cDovL2FwcHMuYmRpbWcuY29tL2xpYnMvdnVlLzEuMC4xNC92dWUuanNcXFxcXFxcIj48L3NjcmlwdD5cXFxcbiAgICAtLT5cXFxcbiAgICA8dGl0bGU+UGFyc2VfRG48L3RpdGxlPlxcXFxuICAgIDxzdHlsZSB0eXBlPXRleHQvY3NzPlxcXFxuICAgICAgICBodG1sLCBib2R5IHtcXFxcbiAgICAgICAgICAgIGhlaWdodDogYXV0bztcXFxcbiAgICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgYm9keSB7XFxcXG4gICAgICAgICAgICBtYXJnaW46IDAgNXB4IDAgNXB4O1xcXFxuICAgICAgICAgICAgcGFkZGluZzogMCAwcHggMCAwcHg7XFxcXG4gICAgICAgICAgICAvL2JhY2tncm91bmQ6ICNGOUYwREE7XFxcXG4gICAgICAgICAgICBmb250LXdlaWdodDogMDtcXFxcbiAgICAgICAgICAgIGZvbnQtZmFtaWx5OiBcXFxcXFxcIk1pY3Jvc29mdCBZYUhlaVxcXFxcXFwiLFxcXFxcXFwi5a6L5L2TXFxcXFxcXCIsXFxcXFxcXCJTZWdvZSBVSVxcXFxcXFwiLCBcXFxcXFxcIkx1Y2lkYSBHcmFuZGVcXFxcXFxcIiwgSGVsdmV0aWNhLCBBcmlhbCxzYW5zLXNlcmlmLCBGcmVlU2FucywgQXJpbW87XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgI2RpdjJ7XFxcXG4gICAgICAgICAgIG1hcmdpbi10b3A6MzVweDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvKui+k+WFpeahhueItuWFg+e0oCovXFxcXG4gICAgICAgIGRpdi5ib3gge1xcXFxuICAgICAgICAgICAgaGVpZ2h0OiA1M3B4O1xcXFxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7XFxcXG4gICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLyrovpPlhaXmoYblsLrlr7gqL1xcXFxuICAgICAgICBmb3JtIHtcXFxcbiAgICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50O1xcXFxuICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlO1xcXFxuICAgICAgICAgICAgd2lkdGg6IDkyJTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpbnB1dCwgbGFiZWwsIC5saWViIGJ1dHRvbiB7XFxcXG4gICAgICAgICAgICBib3JkZXI6IG5vbmU7XFxcXG4gICAgICAgICAgICBvdXRsaW5lOiBub25lO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC8q5a2X5L2T5L2N572uKi9cXFxcbiAgICAgICAgaW5wdXQge1xcXFxuICAgICAgICAgICAgd2lkdGg6IDc3JTtcXFxcbiAgICAgICAgICAgIGhlaWdodDogMzJweDtcXFxcbiAgICAgICAgICAgIHBhZGRpbmctbGVmdDogNjZweDtcXFxcbiAgICAgICAgICAgIHBhZGRpbmctcmlnaHQ6IDMwcHg7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbGFiZWwge1xcXFxuICAgICAgICAgICAgdGV4dC1hbGlnbjpjZW50ZXI7XFxcXG4gICAgICAgICAgICBsaW5lLWhlaWdodDogNDNweDtcXFxcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcXFxcbiAgICAgICAgICAgIHdpZHRoOiA2MHB4O1xcXFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcXFxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC8q5bCP5qGGKi9cXFxcbiAgICAgICAgLmJhciBsYWJlbCB7XFxcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiAjRDA2QjZDO1xcXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTU1IDU1NXB4IDU1NXB4IDU1NTtcXFxcbiAgICAgICAgICAgIHdpZHRoOiA2MHB4O1xcXFxuICAgICAgICAgICAgZm9udC1zaXplOiAxM3B4O1xcXFxuICAgICAgICAgICAgY29sb3I6ICNGOUYwREE7XFxcXG4gICAgICAgICAgICB0b3A6IDA7XFxcXG4gICAgICAgICAgICBsZWZ0OiAzcHg7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgLyrovpPlhaXmoYbmoLflvI8qL1xcXFxuICAgICAgICAuYmFyIGlucHV0IHtcXFxcbiAgICAgICAgICAgIGJhY2tncm91bmQ6ICNGOUYwREE7XFxcXG4gICAgICAgICAgICBib3JkZXI6IDNweCBzb2xpZCAjRDA2QjZDO1xcXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC8q5YiX6KGoKi9cXFxcbiAgICAgICAgLmxpZWIgYnV0dG9uIHtcXFxcbiAgICAgICAgICAgIHRleHQtYWxpZ246Y2VudGVyO1xcXFxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6NDBweDtcXFxcbiAgICAgICAgICAgIGhlaWdodDogNDBweDtcXFxcbiAgICAgICAgICAgIHdpZHRoOiAyN3B4O1xcXFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcXFxuICAgICAgICAgICAgcG9zaXRpb246IGFic29sdXRlO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC8q5YiX6KGoKi9cXFxcbiAgICAgICAgLmxpZWIgYnV0dG9ue1xcXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4O1xcXFxuICAgICAgICAgICAgYmFja2dyb3VuZDogI0QwNkI2QztcXFxcbiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDtcXFxcbiAgICAgICAgICAgIGNvbG9yOiAjRjlGMERBO1xcXFxuICAgICAgICAgICAgdG9wOiAwO1xcXFxuICAgICAgICAgICAgcmlnaHQ6IDBweDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAvKuWktOWDjyovXFxcXG4gICAgICAgIC5yb3VuZF9pY29ue1xcXFxuICAgICAgICAgICAgd2lkdGg6IDQwcHg7XFxcXG4gICAgICAgICAgICBoZWlnaHQ6IDQwcHg7XFxcXG4gICAgICAgICAgICBkaXNwbGF5OiBmbGV4O1xcXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlO1xcXFxuICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjtcXFxcbiAgICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyO1xcXFxuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXFxcbiAgICAgICAgfVxcXFxuXFxcXG4gICAgICAgIC5qeC11bCwgLmNqLXVsIHtcXFxcbiAgICAgICAgICAgIHotaW5kZXg6IDk5OTtcXFxcbiAgICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDtcXFxcbiAgICAgICAgICAgIHdpZHRoOiA3NyU7XFxcXG4gICAgICAgICAgIC8vIGxlZnQ6IDEwJTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICAuangtdWwsIC5jai11bCB7XFxcXG4gICAgICAgICAgICBkaXNwbGF5OiBub25lO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC5qeC11bCB7XFxcXG4gICAgICAgICAgICB0b3A6IDMlO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIC5jai11bCB7XFxcXG4gICAgICAgICAgICB0b3A6IDMwJTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBsaSB7XFxcXG4gICAgICAgICAgICBoZWlnaHQ6IDM1cHg7XFxcXG4gICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMDFiZmRhO1xcXFxuICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4O1xcXFxuICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjgpO1xcXFxuICAgICAgICAgICAgY29sb3I6IHdoaXRlO1xcXFxuICAgICAgICAgICAgbGluZS1oZWlnaHQ6IDM1cHg7XFxcXG4gICAgICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7XFxcXG4gICAgICAgICAgICBmb250LXNpemU6IDE2cHg7XFxcXG4gICAgICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwO1xcXFxuICAgICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjtcXFxcbiAgICAgICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxpIHtcXFxcbiAgICAgICAgICAgIGxpc3Qtc3R5bGU6IG5vbmU7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgbGk6aG92ZXIge1xcXFxuICAgICAgICAgICAgY3Vyc29yOiBwb2ludGVyO1xcXFxuICAgICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxMzksIDEzMSwgMTIwLCAwLjkpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGxpW2NoZWNrPVxcXFxcXFwidHJ1ZVxcXFxcXFwiXSB7XFxcXG4gICAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDEzOSwgMCwgMCwgMC45KTtcXFxcbiAgICAgICAgfVxcXFxuXFxcXG4gICAgPC9zdHlsZT5cXFxcbjwvaGVhZD5cXFxcblxcXFxuPGJvZHk+XFxcXG4gICAgPGRpdiBjbGFzcz1cXFxcXFxcImZ1bmdcXFxcXFxcIj5cXFxcbiAgICAgICAgPGEgc3R5bGU9XFxcXFxcXCJmbG9hdDpsZWZ0O1xcXFxcXFwiPlxcXFxuICAgICAgICAgICAgPGJ1dHRvbiAgc3R5bGU9XFxcXFxcXCJib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6ICNjNTQ2NGE7d2lkdGg6IDgwcHg7IGZvbnQtc2l6ZTogMThweDtjb2xvcjogI0Y5RjBEQTtcXFxcXFxcIiBvbmNsaWNrPVxcXFxcXFwiY2FuY2VsKCk7XFxcXFxcXCI+5YWzIOmXrTwvYnV0dG9uPlxcXFxuICAgICAgICA8L2E+XFxcXG4gICAgICAgIDxhIHN0eWxlPVxcXFxcXFwiZmxvYXQ6cmlnaHRcXFxcXFxcIj5cXFxcbiAgICAgICAgICAgIDxidXR0b24gc3R5bGU9XFxcXFxcXCJib3JkZXI6IG5vbmU7Ym9yZGVyLXJhZGl1czoxMHB4O2JhY2tncm91bmQ6ICMwNjgwMDY7d2lkdGg6IDgwcHg7IGZvbnQtc2l6ZTogMThweDtjb2xvcjogI0Y5RjBEQTtcXFxcXFxcIm9uY2xpY2s9XFxcXFxcXCJjbGlja21lKCfphY0g572uIOW3siDkv50g5a2YIO+8gScsIDEwMDAsICflvIAnKTtcXFxcXFxcIj7kv50g5a2YPC9idXR0b24+IFxcXFxuICAgICAgICA8L2E+XFxcXG4gICAgPC9kaXY+XFxcXG4gICAgPGJyPlxcXFxuICAgIDxkaXYgaWQ9XFxcXFxcXCJkaXYyXFxcXFxcXCI+PC9kaXY+XFxcXG4gICAgPGRpdj5cXFxcbiAgICAgICAgPGEgc3R5bGU9XFxcXFxcXCJmbG9hdDpsZWZ0O21hcmdpbi10b3A6NXB4O1xcXFxcXFwiIG9uY2xpY2s9XFxcXFxcXCJvcGVuRG5QYWdlKClcXFxcXFxcIj5cXFxcbiAgICAgICAgICAgIDxpbWcgc3JjPVxcXFxcXFwiaHR0cHM6Ly9zMy5heDF4LmNvbS8yMDIxLzAyLzIyL3k3d2I5Ty5qcGdcXFxcXFxcIiBjbGFzcz1cXFxcXFxcInJvdW5kX2ljb25cXFxcXFxcIiAgYWx0PVxcXFxcXFwiXFxcXFxcXCI+XFxcXG4gICAgICAgIDwvYT5cXFxcbiAgICAgICAgPHNwYW4gc3R5bGU9XFxcXFxcXCJsaW5lLWhlaWdodDo2MHB4O2ZvbnQtc2l6ZToxOHB4O2NvbG9yOiBncmV5O1xcXFxcXFwiPiZuYnNwOyZuYnNwO+aWrSZuYnNwO+W/tTwvc3Bhbj5cXFxcbiAgICAgICAgPGEgc3R5bGU9XFxcXFxcXCJmbG9hdDpyaWdodDttYXJnaW4tdG9wOjVweDtcXFxcXFxcIj5cXFxcbiAgICAgICAgICAgIDxidXR0b24gIHN0eWxlPVxcXFxcXFwiYm9yZGVyOiBub25lO2JvcmRlci1yYWRpdXM6MTBweDtiYWNrZ3JvdW5kOiAjMDVCRkM1O3dpZHRoOiAxODVweDtoZWlnaHQ6NDBweDsgZm9udC1zaXplOiAxOHB4O2NvbG9yOiAjRjlGMERBO1xcXFxcXFwiIG9uY2xpY2s9XFxcXFxcXCJjbGlja21lKCfphY0g572uIOW3siDkv50g5a2YIO+8gScsIDEwMDAsICflhbMnKTtcXFxcXFxcIj7kv53lrZjorr7nva7lubblhbPpl63nlYzpnaI8L2J1dHRvbj5cXFxcbiAgICAgICAgPC9hPlxcXFxuICAgIDwvZGl2PlxcXFxuICAgIDxkaXYgY2xhc3M9XFxcXFxcXCJ6ai1kaXZcXFxcXFxcIj5cXFxcbiAgICAgICAgPHVsIGNsYXNzPVxcXFxcXFwiangtdWxcXFxcXFxcIiBzdHlsZT1cXFxcXFxcImhlaWdodDo0NDRweDtvdmVyZmxvdy15OmF1dG87XFxcXFxcXCI+XFxcXG4gICAgICAgICAgICA8bGkgY2xhc3M9XFxcXFxcXCJteUNob2ljZVxcXFxcXFwiIHN0eWxlPVxcXFxcXFwiei1pbmRleDo5OTk5O3Bvc2l0aW9uOiBmaXhlZDt3aWR0aDo3Ni41JTtjb2xvcjpyZWQ7XFxcXFxcXCI+PC9saT5cXFxcbiAgICAgICAgICAgIDxsaSBjbGFzcz1cXFxcXFxcInVzZWxlc3NcXFxcXFxcIj48L2xpPlxcXFxuICAgICAgICAgICAgPGxpIGNsYXNzPVxcXFxcXFwieGxMaXN0XFxcXFxcXCIgdi1mb3I9XFxcXFxcXCJpdGVtIGluIGp4RGF0YVxcXFxcXFwiPnt7aXRlbX19PC9saT5cXFxcbiAgICAgICAgPC91bD5cXFxcbiAgICAgICAgPHVsIGNsYXNzPVxcXFxcXFwiY2otdWxcXFxcXFxcIj5cXFxcbiAgICAgICAgICAgIDxsaSBzdHlsZT1cXFxcXFxcImJhY2tncm91bmQ6Z3JleTtcXFxcXFxcIj7or7fpgInmi6nmj5Lku7Y8L2xpPlxcXFxuICAgICAgICAgICAgPGxpIHYtZm9yPVxcXFxcXFwiaXRlbSBpbiBjakRhdGFcXFxcXFxcIj57e2l0ZW19fTwvbGk+XFxcXG4gICAgICAgIDwvdWw+XFxcXG4gICAgPC9kaXY+XFxcXG48L2JvZHk+XFxcXG48c2NyaXB0PlxcXFxuICAgIGV2YWwoZnlfYnJpZGdlX2FwcC5mZXRjaChcXFxcXFxcImhpa2VyOi8vZmlsZXMvY2FjaGUvanF1ZXJ5QDIuMS40LmpzXFxcXFxcXCIpKTtcXFxcbiAgICBldmFsKGZ5X2JyaWRnZV9hcHAuZmV0Y2goXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL3Z1ZUAyLjUuMTYuanNcXFxcXFxcIikpO1xcXFxuICAgIGV2YWwoZnlfYnJpZGdlX2FwcC5nZXRJbnRlcm5hbEpzKCkpO1xcXFxuICAgIFxcXFxuICAgIHZhciBzZXR0aW5ncyA9IHtcXFxcbiAgICAgICAgcXk6ICd5dW4xNzE3JyxcXFxcbiAgICAgICAgeWs6ICd5dW4xNzE3JyxcXFxcbiAgICAgICAgdHg6ICd5dW4xNzE3JyxcXFxcbiAgICAgICAgbWc6ICd5dW4xNzE3JyxcXFxcbiAgICAgICAgYmw6ICd5dW4xNzE3JyxcXFxcbiAgICAgICAgb3RoOiAneXVuMTcxNycsXFxcXG4gICAgICAgIHFqdTogJ+m7mOiupCcsXFxcXG4gICAgICAgIGNqOiAnaGlrZXI6Ly9maWxlcy9jYWNoZS9QYXJzZV9Ebi5qcydcXFxcbiAgICB9O1xcXFxuICAgIFxcXFxuICAgIHZhciBvbGRSb3V0ZSA9IFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9jYWNoZS9NeVBhcnNlU2V0Lmpzb25cXFxcXFxcIjtcXFxcbiAgICB2YXIgbXlTZXQgPSBmeV9icmlkZ2VfYXBwLmZldGNoKG9sZFJvdXRlKTtcXFxcbiAgICBcXFxcbiAgICB2YXIgbmV3Um91dGUgPSBcXFxcXFxcImhpa2VyOi8vZmlsZXMvcnVsZXMvRHVhbk5pYW4vTXlQYXJzZS5qc29uXFxcXFxcXCI7XFxcXG4gICAgdmFyIG5ld0NvbmZpZyA9IGZ5X2JyaWRnZV9hcHAuZmV0Y2gobmV3Um91dGUpO1xcXFxuICAgIHZhciBteVNlbGVjdCA9IFtdO1xcXFxuICAgIHRyeXtcXFxcbiAgICAgICAgZXZhbChcXFxcXFxcIm5ld0NvbmZpZyA9XFxcXFxcXCIgKyBuZXdDb25maWcgKyBcXFxcXFxcIjtcXFxcXFxcIik7XFxcXG4gICAgICAgIHNldHRpbmdzID0gbmV3Q29uZmlnLnNldHRpbmdzLnFqdSA9PSB1bmRlZmluZWQgPyBzZXR0aW5ncyA6IG5ld0NvbmZpZy5zZXR0aW5ncztcXFxcbiAgICAgICAgdmFyIHljVGl0bGUgPSBbJ2RlZmF1bHRQYXJzZScsICdtYW9zcycsICdDaXR5SVAnLCAnY2FjaGVNM3U4JywgJ3BjVUEnLCAncGFyc2VMYycsICdncGFyc2UnLCAnbnBhcnNlJ107XFxcXG4gICAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBuZXdDb25maWcudGl0bGUubGVuZ3RoOyBpKyspe1xcXFxuICAgICAgICAgICAgdmFyIFRpdGxlcyA9IG5ld0NvbmZpZy50aXRsZVtpXTtcXFxcbiAgICAgICAgICAgIGlmKHljVGl0bGUuaW5jbHVkZXMoVGl0bGVzKSA9PSBmYWxzZSl7XFxcXG4gICAgICAgICAgICAgICAgbXlTZWxlY3QucHVzaChUaXRsZXMpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9XFxcXG4gICAgfWNhdGNoKGUpe31cXFxcbiAgICB2YXIgc2ZSZWZyZXNoID0gc2V0dGluZ3MuY2o7XFxcXG4gICAgZnVuY3Rpb24gRGlkKGlkKXtcXFxcbiAgICAgICAgcmV0dXJuIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGlkKTtcXFxcbiAgICB9XFxcXG4gICAgXFxcXG4gICAgaWYobXlTZXQgPT0gJycpe1xcXFxuICAgICAgICBEaWQoXFxcXFxcXCJkaXYyXFxcXFxcXCIpLmluc2VydEFkamFjZW50SFRNTCgnYWZ0ZXJCZWdpbicsJ1xcXFxcXFxcXFxcXG48aDQ+5o+Q56S677yaPGJyPuKRoOazqOaEj+aPkuS7tumAiemhue+8jOayoeacieaJi+WKqOWvvOWFpeaPkuS7tueahOivneS4jeeUqOWKqOWug+OAguWmguiuvue9ruS4jeW9k+S8muWvvOiHtOinhOWImeaXoOazleS9v+eUqO+8jDxicj7op6PlhrPlip7ms5XvvJrlsI/nqIvluo/pppbpobXngrnlh7vmgaLlpI3pu5jorqTmj5Lku7bvvJs8YnI+4pGh5YWo5bGA6K6+572u5aaC5p6c6YCJ5oup5LqG6Z2e6buY6K6k6YKj5LmI5YWo6YOo55qE6Kej5p6Q5Lya5L2/55So6L+Z5LiA6K6+572u77yM5LiN5oOz6L+Z5qC355qE6K+d6K+35aGr5YWl6buY6K6k77ybPGJyPuKRoue7v+iJsuS/neWtmOaMiemSruS7heS7heS/neWtmOmFjee9ruS4jeS8muWFs+mXreiuvue9rumhtemdou+8jOmFjee9ruWQjuaDs+S/neWtmOW5tuWFs+mXreiuvue9rumhtemdoueahOivneivt+eCueiTneiJsuaMiemSru+8mzxicj7ikaPpmIXor7vlrozmj5DnpLrngrnlhbPpl63liqDovb3lrozmlbTorr7nva7pobXpnaLvvIzlpoLlh7rpl67popjml6Dms5Xoh6rooYzop6PlhrPngrnlm77niYfov5vlhaXorrrlnZvlkJHmiJHlj43ppojjgII8YnI+PC9oND4nKTtcXFxcbiAgICB9XFxcXG4gICAgXFxcXG4gICAgdmFyIGJveERhdGEgPSBbXFxcXG4gICAgICAgIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuWlhyDlpYdcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGlkOiBcXFxcXFxcInF5XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MucXksXFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIumFtyDphbdcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGlkOiBcXFxcXFxcInlrXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MueWssXFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuiFviDohb5cXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGlkOiBcXFxcXFxcInR4XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MudHgsXFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuaenCDmnpxcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGlkOiBcXFxcXFxcIm1nXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MubWcsXFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuWTqSDlk6lcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGlkOiBcXFxcXFxcImJsXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MuYmwsXFxcXG4gICAgICAgIH0sIHtcXFxcbiAgICAgICAgICAgIHRpdGxlOiBcXFxcXFxcIuWFtiDku5ZcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIGlkOiBcXFxcXFxcIm90aFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdmFsdWU6IHNldHRpbmdzLm90aCxcXFxcbiAgICAgICAgfSwge1xcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi5YWoIOWxgFxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgaWQ6IFxcXFxcXFwicWp1XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB2YWx1ZTogc2V0dGluZ3MucWp1LFxcXFxuICAgICAgICB9LCB7XFxcXG4gICAgICAgICAgICB0aXRsZTogXFxcXFxcXCLmj5Ig5Lu2XFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBpZDogXFxcXFxcXCJjalxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdmFsdWU6IHNldHRpbmdzLmNqLFxcXFxuICAgICAgICB9XFxcXG4gICAgXTtcXFxcblxcXFxuICAgIHZhciBpbnB1dEJveCA9IFxcXFxcXFwiXFxcXFxcXCI7XFxcXG4gICAgZm9yKGxldCBpID0gMDsgaSA8IGJveERhdGEubGVuZ3RoOyBpKyspe1xcXFxuICAgICAgICBsZXQgYiA9IGJveERhdGFbaV07XFxcXG4gICAgICAgIGlucHV0Qm94ICs9ICc8ZGl2IGNsYXNzPVxcXFxcXFwiYm94IGJhclxcXFxcXFwiPlxcXFxcXFxcXFxcXG4gICAgICAgICAgICA8Zm9ybT5cXFxcXFxcXFxcXFxuICAgICAgICAgICAgICAgIDxsYWJlbCB0eXBlPVxcXFxcXFwic3VibWl0XFxcXFxcXCI+JyArIGIudGl0bGUgKyAnPC9sYWJlbD5cXFxcXFxcXFxcXFxuICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPVxcXFxcXFwidGV4dFxcXFxcXFwiIHBsYWNlaG9sZGVyPVxcXFxcXFwi6L6T5YWl6Kej5p6Q5ZCN5oiW6ICFVVJMLi4uLi4uXFxcXFxcXCIgdmFsdWU9XFxcXFxcXCInICsgYi52YWx1ZSArICdcXFxcXFxcIiBpZD1cXFxcXFxcIicgKyBiLmlkICsgJ1xcXFxcXFwiPlxcXFxcXFxcXFxcXG4gICAgICAgICAgICA8L2Zvcm0+XFxcXFxcXFxcXFxcbiAgICAgICAgICAgIDxkaXYgY2xhc3M9XFxcXFxcXCJsaWViXFxcXFxcXCI+XFxcXFxcXFxcXFxcbiAgICAgICAgICAgICAgICA8YnV0dG9uIGlkPVxcXFxcXFwiJyArIGIuaWQgKyAnU2VsZWN0XFxcXFxcXCI+4piwPC9idXR0b24+XFxcXFxcXFxcXFxcbiAgICAgICAgICAgIDwvZGl2PlxcXFxcXFxcXFxcXG4gICAgICAgIDwvZGl2Pic7XFxcXG4gICAgfVxcXFxuICAgIERpZChcXFxcXFxcImRpdjJcXFxcXFxcIikuaW5zZXJ0QWRqYWNlbnRIVE1MKCdhZnRlcmVuZCcsIGlucHV0Qm94KTtcXFxcbiAgICBEaWQoXFxcXFxcXCJjalxcXFxcXFwiKS5wbGFjZWhvbGRlciA9IFxcXFxcXFwi6L6T5YWl5o+S5Lu25Zyw5Z2ALi4uLi4uXFxcXFxcXCI7XFxcXG4gICAgRGlkKFxcXFxcXFwicWp1XFxcXFxcXCIpLnBsYWNlaG9sZGVyID0gXFxcXFxcXCLmraTpobnlu7rorq7nlZnnqbrmiJbogIXloavpu5jorqTkuKTkuKrlrZdcXFxcXFxcIjtcXFxcbiAgICBcXFxcbiAgICBuZXcgVnVlKHtcXFxcbiAgICAgICAgZWw6IFxcXFxcXFwiLnpqLWRpdlxcXFxcXFwiLFxcXFxuICAgICAgICBkYXRhOiB7XFxcXG4gICAgICAgICAgICBqeERhdGE6IG15U2VsZWN0LFxcXFxuICAgICAgICAgICAgY2pEYXRhOiBbXFxcXFxcXCJoaWtlcjovL2ZpbGVzL2NhY2hlL1BhcnNlX0RuLmpzXFxcXFxcXCIsIFxcXFxcXFwiaGlrZXI6Ly9maWxlcy9ydWxlcy9kekhvdXNlL2pzL3NyY2F1dG8uanNcXFxcXFxcIiwgXFxcXFxcXCJoaWtlcjovL2ZpbGVzL3J1bGVzL2pzL1BhcnNlLVYyX0RuLmpzXFxcXFxcXCJdXFxcXG4gICAgICAgIH1cXFxcbiAgICB9KTtcXFxcblxcXFxuICAgICQoZG9jdW1lbnQpLnJlYWR5KGZ1bmN0aW9uKCkge1xcXFxuICAgICAgICB2YXIgbGVuID0gJCgnLmp4LXVsJykuY2hpbGRyZW4oJ2xpJykubGVuZ3RoO1xcXFxuICAgICAgICB2YXIgbGVuMiA9ICQoJy5jai11bCcpLmNoaWxkcmVuKCdsaScpLmxlbmd0aDtcXFxcbiAgICAgICAgJCgnLmxpZWIgYnV0dG9uJykuY2xpY2soZnVuY3Rpb24oZSkge1xcXFxuICAgICAgICAgICAgaWYoJCgnLmxpZWIgYnV0dG9uJykudGV4dCgpLmluY2x1ZGVzKCfilIEnKSl7XFxcXG4gICAgICAgICAgICAgICAgJCgnLmxpZWIgYnV0dG9uJykuY3NzKCdiYWNrZ3JvdW5kJywgJycpO1xcXFxuICAgICAgICAgICAgICAgICQoJy5saWViIGJ1dHRvbicpLnRleHQoJ+KYsCcpO1xcXFxuICAgICAgICAgICAgfWVsc2V7XFxcXG4gICAgICAgICAgICAgICAgJCh0aGlzKS50ZXh0KCfilIEnKTtcXFxcbiAgICAgICAgICAgICAgICAkKHRoaXMpLmNzcygnYmFja2dyb3VuZCcsICdyZWQnKTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICQoJ2xpJykuYXR0cignY2hlY2snLCAnZmFsc2UnKTtcXFxcbiAgICAgICAgICAgIHZhciBpbnB1dGlkID0gXFxcXFxcXCIjXFxcXFxcXCIgKyB0aGlzLmlkLnNwbGl0KFxcXFxcXFwiU2VsZWN0XFxcXFxcXCIpWzBdO1xcXFxuICAgICAgICAgICAgdmFyIGFyciA9ICQoaW5wdXRpZCkudmFsKCkuc3BsaXQoJywnKTtcXFxcbiAgICAgICAgICAgIGFyciA9IGFyclswXSA9PSAnJyA/IFtdIDogYXJyO1xcXFxuICAgICAgICAgICAgJCgnLm15Q2hvaWNlJykudGV4dChhcnIpO1xcXFxuICAgICAgICAgICAgaWYgKGlucHV0aWQgIT09ICcjY2onICYmICQoJy5jai11bCcpLmNzcygnZGlzcGxheScpPT0nbm9uZScpIHtcXFxcbiAgICAgICAgICAgICAgICAkKCcuangtdWwnKS5zbGlkZVRvZ2dsZSgzMDApO1xcXFxuICAgICAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XFxcXG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDE7IGkgPCBsZW47IGkrKykge1xcXFxuICAgICAgICAgICAgICAgICAgICB2YXIganhMaXN0ID0gJCgnLmp4LXVsIGxpOm5vdCgubXlDaG9pY2UpJykuZXEoaSk7XFxcXG4gICAgICAgICAgICAgICAgICAgIGlmIChhcnIuaW5jbHVkZXMoanhMaXN0LnRleHQoKSkpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIGp4TGlzdC5hdHRyKCdjaGVjaycsICd0cnVlJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAganhMaXN0LnVuYmluZCgnY2xpY2snKS5jbGljayhmdW5jdGlvbihlKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQodGhpcykuYXR0cignY2hlY2snKSAhPT0gXFxcXFxcXCJ0cnVlXFxcXFxcXCIpIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmF0dHIoJ2NoZWNrJywgJ3RydWUnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIudW5zaGlmdCgkKHRoaXMpLnRleHQoKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChpbnB1dGlkKS52YWwoYXJyKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKCcubXlDaG9pY2UnKS50ZXh0KGFycik7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQodGhpcykuYXR0cignY2hlY2snLCAnZmFsc2UnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBhID0gMDsgYSA8IGFyci5sZW5ndGg7IGErKykge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoYXJyW2FdID09ICQodGhpcykudGV4dCgpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhcnIuc3BsaWNlKGEsIDEpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJChpbnB1dGlkKS52YWwoYXJyKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoJy5teUNob2ljZScpLnRleHQoYXJyKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICAgICAgfSlcXFxcbiAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICB9IGVsc2UgaWYoJCgnLmp4LXVsJykuY3NzKCdkaXNwbGF5Jyk9PSdub25lJyl7XFxcXG4gICAgICAgICAgICAgICAgJCgnLmNqLXVsJykuc2xpZGVUb2dnbGUoMjAwKTtcXFxcbiAgICAgICAgICAgICAgICBlLnN0b3BQcm9wYWdhdGlvbigpO1xcXFxuICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuMjsgaSsrKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIHZhciBjakxpc3QgPSAkKCcuY2otdWwgbGknKS5lcShpKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYgKCQoaW5wdXRpZCkudmFsKCkgPT0gY2pMaXN0LnRleHQoKSkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgY2pMaXN0LmF0dHIoJ2NoZWNrJywgJ3RydWUnKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgICAgICAgICBjakxpc3QudW5iaW5kKCdjbGljaycpLmNsaWNrKGZ1bmN0aW9uKCkge1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGkgIT09IDApIHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKGlucHV0aWQpLnZhbCgkKHRoaXMpLnRleHQoKSk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5hdHRyKCdjaGVjaycsICd0cnVlJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJCh0aGlzKS5zaWJsaW5ncygpLmF0dHIoJ2NoZWNrJywgJ2ZhbHNlJyk7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIH0pXFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICAgICAgJChkb2N1bWVudCkubm90KCQoJy54bExpc3QnKSkuY2xpY2soZnVuY3Rpb24oZSkge1xcXFxuICAgICAgICAgICAgJCgnLmp4LXVsJykuc2xpZGVVcCgpO1xcXFxuICAgICAgICAgICAgJCgnLmNqLXVsJykuc2xpZGVVcCgpO1xcXFxuICAgICAgICAgICAgJCgnLmxpZWIgYnV0dG9uJykudGV4dCgn4piwJyk7XFxcXG4gICAgICAgICAgICAkKCcubGllYiBidXR0b24nKS5jc3MoJ2JhY2tncm91bmQnLCAnJyk7XFxcXG4gICAgICAgIH0pO1xcXFxuICAgICAgICAkKGZ1bmN0aW9uKCl7XFxcXG4gICAgICAgICAgICAkKCdsYWJlbCcpLm1vdXNldXAoZnVuY3Rpb24oKXtcXFxcbiAgICAgICAgICAgICAgICBsZXQgaW5wdXRpZCA9ICcjJyArICQodGhpcykubmV4dCgpLmF0dHIoJ2lkJyk7XFxcXG4gICAgICAgICAgICAgICAgb25lT3JEYmwoaW5wdXRpZCk7XFxcXG4gICAgICAgICAgICB9KTtcXFxcbiAgICAgICAgICAgIHZhciBjb3VudCA9IDA7XFxcXG4gICAgICAgICAgICB2YXIgdGltZXI7XFxcXG4gICAgICAgICAgICBmdW5jdGlvbiBvbmVPckRibChpbnB1dGlkKXtcXFxcbiAgICAgICAgICAgICAgICBjb3VudCsrO1xcXFxuICAgICAgICAgICAgICAgIHRpbWVyID0gd2luZG93LnNldFRpbWVvdXQoZnVuY3Rpb24oKXtcXFxcbiAgICAgICAgICAgICAgICAgICAgaWYoY291bnQgPT0gMSl7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQgYXJyID0gJChpbnB1dGlkKS52YWwoKS5zcGxpdCgnLCcpO1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJyLnNwbGljZSgwLCAxKTtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICQoaW5wdXRpZCkudmFsKGFycik7XFxcXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xcXFxuICAgICAgICAgICAgICAgICAgICAgICAgJChpbnB1dGlkKS52YWwoJycpO1xcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQodGltZXIpO1xcXFxuICAgICAgICAgICAgICAgICAgICBjb3VudCA9IDA7XFxcXG4gICAgICAgICAgICAgICAgfSwyNjApXFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0pXFxcXG4gICAgfSk7XFxcXG4gICAgXFxcXG4gICAgZnVuY3Rpb24gVG9hc3QobXNnLGR1cmF0aW9uKXsgIFxcXFxuICAgICAgICBkdXJhdGlvbj1pc05hTihkdXJhdGlvbik/MjAwMDpkdXJhdGlvbjsgIFxcXFxuICAgICAgICB2YXIgbSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOyAgXFxcXG4gICAgICAgIG0uaW5uZXJIVE1MID0gbXNnOyAgXFxcXG4gICAgICAgIG0uc3R5bGUuY3NzVGV4dD1cXFxcXFxcIndpZHRoOjQ1JTsgbWluLXdpZHRoOjE1MHB4OyBiYWNrZ3JvdW5kOiMzMTE7IG9wYWNpdHk6MC42OyBoZWlnaHQ6YXV0bzttaW4taGVpZ2h0OiA0NXB4OyBjb2xvcjojZmZmOyBsaW5lLWhlaWdodDo0NXB4OyB0ZXh0LWFsaWduOmNlbnRlcjsgYm9yZGVyLXJhZGl1czoxMHB4OyBwb3NpdGlvbjpmaXhlZDsgdG9wOjYwJTsgbGVmdDoyNiU7IHotaW5kZXg6OTk5OTk5O1xcXFxcXFwiOyAgXFxcXG4gICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQobSk7ICBcXFxcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHsgIFxcXFxuICAgICAgICAgICAgdmFyIGQgPSAwLjU7ICBcXFxcbiAgICAgICAgICAgIG0uc3R5bGUud2Via2l0VHJhbnNpdGlvbiA9ICctd2Via2l0LXRyYW5zZm9ybSAnICsgZCArICdzIGVhc2UtaW4sIG9wYWNpdHkgJyArIGQgKyAncyBlYXNlLWluJzsgIFxcXFxuICAgICAgICAgICAgbS5zdHlsZS5vcGFjaXR5ID0gJzAnOyAgXFxcXG4gICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeyBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKG0pIH0sIGQgKiAxMDAwKTsgIFxcXFxuICAgICAgICB9LCBkdXJhdGlvbik7ICBcXFxcbiAgICB9ICBcXFxcblxcXFxuICAgIGZ1bmN0aW9uIG9wZW5EblBhZ2UoKXtcXFxcbiAgICAgICAgZmJhLm9wZW4oSlNPTi5zdHJpbmdpZnkoe1xcXFxuICAgICAgICAgICAgcnVsZTogXFxcXFxcXCI9Xl9ePVxcXFxcXFwiLFxcXFxuICAgICAgICAgICAgdGl0bGU6IFxcXFxcXFwi566h55CG6Kej5p6QXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICB1cmw6IFxcXFxcXFwiaGlrZXI6Ly9lbXB0eSNub0hpc3RvcnkjXFxcXFxcXCIsXFxcXG4gICAgICAgICAgICBmaW5kUnVsZTogXFxcXFxcXCJqczp0aGlzLmQ9W107ZXZhbChmZXRjaCgnaGlrZXI6Ly9maWxlcy9jYWNoZS9maWxlTGlua3PhtLDigb8udHh0JykpO3JlcXVpcmUoZkxpbmtzLmp4SXRVcmwpO2p4SXRlbS5qeExpc3QoKTtzZXRSZXN1bHQoZClcXFxcXFxcIlxcXFxuICAgICAgICB9KSk7XFxcXG4gICAgfVxcXFxuICAgIGZ1bmN0aW9uIGNhbmNlbCgpe1xcXFxuICAgICAgICBpZihteVNldD09Jycpe1xcXFxuICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC53cml0ZUZpbGUob2xkUm91dGUsIEpTT04uc3RyaW5naWZ5KHNldHRpbmdzLCBudWxsLCA0KSk7XFxcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLnJlZnJlc2hQYWdlKHRydWUpO1xcXFxuICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAuYmFjayhmYWxzZSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG4gICAgZnVuY3Rpb24gY2xpY2ttZShtc2csZHVyYXRpb24sdGl0bGUpe1xcXFxuICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgYm94RGF0YS5sZW5ndGg7IGkrKyl7XFxcXG4gICAgICAgICAgICBsZXQgaWQgPSBib3hEYXRhW2ldLmlkO1xcXFxuICAgICAgICAgICAgc2V0dGluZ3NbaWRdID0gRGlkKGlkKS52YWx1ZTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZihzZXR0aW5ncy5xanUgPT0gJycpe1xcXFxuICAgICAgICAgICAgc2V0dGluZ3MucWp1ID0gJ+m7mOiupCc7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgdHJ5e1xcXFxuICAgICAgICAgICAgZXZhbCgndmFyIGJjQ29uZmlnPScgKyBmeV9icmlkZ2VfYXBwLmZldGNoKG5ld1JvdXRlKSk7XFxcXG4gICAgICAgICAgICBPYmplY3QuYXNzaWduKGJjQ29uZmlnLnNldHRpbmdzLCBzZXR0aW5ncyk7XFxcXG4gICAgICAgICAgICBmeV9icmlkZ2VfYXBwLndyaXRlRmlsZShuZXdSb3V0ZSwgJCQkLnN0cmluZ2lmeShiY0NvbmZpZykpO1xcXFxuICAgICAgICB9Y2F0Y2goZSl7fVxcXFxuICAgICAgICBmeV9icmlkZ2VfYXBwLndyaXRlRmlsZShvbGRSb3V0ZSwgJCQkLnN0cmluZ2lmeShzZXR0aW5ncykpO1xcXFxuICAgICAgICAgICAgXFxcXG4gICAgICAgIFRvYXN0KG1zZyxkdXJhdGlvbik7XFxcXG4gICAgICAgIGlmKHRpdGxlPT1cXFxcXFxcIuWFs1xcXFxcXFwiKXtcXFxcbiAgICAgICAgICAgIGlmKHNmUmVmcmVzaCAhPSBEaWQoXFxcXFxcXCJjalxcXFxcXFwiKS52YWx1ZSl7XFxcXG4gICAgICAgICAgICAgICAgZnlfYnJpZGdlX2FwcC5iYWNrKCk7XFxcXG4gICAgICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgICAgICBmeV9icmlkZ2VfYXBwLmJhY2soZmFsc2UpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9ZWxzZXtcXFxcbiAgICAgICAgICAgIGZ5X2JyaWRnZV9hcHAucmVmcmVzaFBhZ2UodHJ1ZSk7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9XFxcXG5cXFxcbjwvc2NyaXB0PiAgIFxcXFxuPC9odG1sPlxcXCJ9LHtcXFwiY29sX3R5cGVcXFwiOlxcXCJtb3ZpZV8zXFxcIixcXFwibmFtZVxcXCI6XFxcIlBhcnNlX0RuLmpzXFxcIixcXFwicGF0aFxcXCI6XFxcIlBhcnNlX0RuLmpzXFxcIixcXFwicnVsZVxcXCI6XFxcIi8vPT09PT09PT09PT095YWN5ZeF6LCD55SoPT09PT09PT09PT09XFxcXG4vL++8je+8je+8jT1eX149XFxcXG4vL0Dmlq3lv7VcXFxcblxcXFxudmFyIHBhcnNlUm91dGUgPSAnaGlrZXI6Ly9maWxlcy9ydWxlcy9EdWFuTmlhbi9NeVBhcnNlLmpzb24nO1xcXFxudmFyIE15UGFyc2VTID0ge307XFxcXG52YXIgbXlTZXQgPSB7fTtcXFxcbmlmIChmaWxlRXhpc3QocGFyc2VSb3V0ZSkpIHtcXFxcbiAgICBldmFsKCd2YXIgcGFyc2VGaWxlID0nICsgZmV0Y2gocGFyc2VSb3V0ZSkpO1xcXFxuICAgIE15UGFyc2VTID0gcGFyc2VGaWxlLmNvZGVzO1xcXFxuICAgIG15U2V0ID0gcGFyc2VGaWxlLnNldHRpbmdzO1xcXFxufVxcXFxudmFyIHBhcnNlVGl0bGUgPSBbXFxcXG4gICAgXFxcXFxcXCLwn6WaXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJ5dW4xNzE3XFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJQYW5HdVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiRnVYaW5nXFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJodHRwczovL2p4eC5zbXlzOC5jbi9pbmRleC5waHA/dXJsPVxcXFxcXFwiLFxcXFxuICAgIFxcXFxcXFwiaHR0cHM6Ly9va2p4LmNjLz91cmw9XFxcXFxcXCIsXFxcXG4gICAgXFxcXFxcXCJodHRwczovL2p4Lm0zdTgudHYvamlleGkvP3VybD1cXFxcXFxcIixcXFxcbiAgICBcXFxcXFxcImh0dHBzOi8vc2IuNWdzZW8ubmV0Lz91cmw9XFxcXFxcXCJcXFxcbl07XFxcXG5cXFxcbi8v77yN77yN77yNPV5fXj1cXFxcblxcXFxuLy/mjqXlj6Porr7nva4uXFxcXG5cXFxcbnZhciBzZXRVcmwgPSBcXFxcXFxcImhpa2VyOi8vZW1wdHkjbm9SZWNvcmRIaXN0b3J5I0BydWxlPWpzOnRoaXMuZD1bXTtyZXF1aXJlKCdodHRwczovL2dpdGVhLmNvbS9BSTk1Ny9IaWtlci9yYXcvbS92L1JvdXRlLmpzJyk7Um91dGUuc2V0UGFyc2UoKTtzZXRSZXN1bHQoZCk7XFxcXFxcXCI7XFxcXG52YXIgc2V0X3N3aXRjaCA9IHNldFVybDtcXFxcbnZhciBsYXp5ID0gYHJlcXVpcmUoJ2h0dHBzOi8vZ2l0ZWEuY29tL0FJOTU3L0hpa2VyL3Jhdy9tL3YvUm91dGUuanMnKTtheXRtUGFyc2UoaW5wdXQpYDtcXFxcblxcXFxuLy92YXIgcGFyd2l4ID0gYHZhciB5dXJsPSdodHRwczovL2RhaWxpLm1heWl4aW9uZ2RpLmNuLz91cmw9JztSZWZlcmVyJzogJ2h0dHBzOi8vd3d3Lm1heWl4aW9uZ2RpLmNuL3lzP2lkPSc7J2h0dHBzOi8vZGFpbGkubWF5aXhpb25nZGkuY24vYXBpLnBocCcsICdSZWZlcmVyJzonaHR0cHM6Ly9kYWlsaS5tYXlpeGlvbmdkaS5jbic7XFxcXG4vLyDlhajmsJFodHRwczovL3BjdmlkZW9hbGl5dW4udGlhbnNoYW5ncmVuamlhbi5tZ3R2LmNvbS44OHd1bWEuY29tLz91cmw9XFxcXG5cXFxcbi8v77yN77yN77yN5aSHIOeUqO+8je+8je+8jVxcXFxuLypcXFxcbiAqIOW9seinhuW3peWcuu+8miBodHRwczovL3lzZ2MuY2MvXFxcXG4gKiDmsZ/muZY6IDU1NeeUteW9sSBodHRwczovL3d3dy41NTVkeTIuY29tL3Bob25lLmh0bWwg772cIDE355yLIGh0dHA6Ly8xN2thbnl5LmNuLyBodHRwOi8vamhqaWV4aS4zMHZyLmNuLz91cmw9IO+9nCBodHRwOi8vYXBpLm1haXppbWFsbC5jb20vaW5kZXgucGhwP3VybD1cXFxcbiAqIOaxn+a5ljogaHR0cDovL3d3dy50aWFuc2h1eXVuLm5ldC9pbmRleC5waHAvdm9kL3BsYXkvaWQvNDQ4Mzc3L3NpZC8xL25pZC8xLmh0bWxcXFxcbiAqIOaxn+a5ljI6IGh0dHA6Ly85OGh5ay5jbi9pbmRleC5waHAvdm9kL3BsYXkvaWQvNzI4NDEvc2lkLzEvbmlkLzEuaHRtbFxcXFxuICog5Lq65Lq66L+3OiBodHRwczovL3ZpcC5zdXNvdS50di9wbGF5ZXIvP3VybD0g772cIGh0dHBzOi8vd3d3Lm1vbWRtLmNjL1xcXFxuICogXFxcXG4gKiB3dWlnZW46IGh0dHBzOi8vd3d3LjVpZ2VuLmNvbS9kbXBsYXllci9wbGF5ZXIvP3VybD1cXFxcbiAqIOW5sumlrSjkurrkurrov7cpOiBodHRwczovL2p4Lnp1aS5jbS8/dXJsPVxcXFxuICogaHR0cHM6Ly8yLjY2bW92aWUudG9wL3BsYXllci8/dXJsPVxcXFxuICogXFxcXG4gKi9cXFxcblxcXFxuXFxcXG52YXIgdG9vbHMgPSB7XFxcXG4gICAgTUQ1OiBmdW5jdGlvbihkYXRhKSB7XFxcXG4gICAgICAgIGV2YWwoZ2V0Q3J5cHRvSlMoKSk7XFxcXG4gICAgICAgIHJldHVybiBDcnlwdG9KUy5NRDUoZGF0YSkudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleCk7XFxcXG4gICAgfSxcXFxcbiAgICBBRVM6IGZ1bmN0aW9uKHRleHQsIGtleSwgaXYsIGlzRW5jcnlwdCkge1xcXFxuICAgICAgICBldmFsKGdldENyeXB0b0pTKCkpO1xcXFxuICAgICAgICB2YXIga2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2Uoa2V5KTtcXFxcbiAgICAgICAgdmFyIGl2ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2UoaXYpO1xcXFxuICAgICAgICBpZiAoaXNFbmNyeXB0KSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gQ3J5cHRvSlMuQUVTLmVuY3J5cHQodGV4dCwga2V5LCB7XFxcXG4gICAgICAgICAgICAgICAgaXY6IGl2LFxcXFxuICAgICAgICAgICAgICAgIG1vZGU6IENyeXB0b0pTLm1vZGUuQ0JDLFxcXFxuICAgICAgICAgICAgICAgIHBhZGRpbmc6IENyeXB0b0pTLnBhZC5Qa2NzN1xcXFxuICAgICAgICAgICAgfSkudG9TdHJpbmcoKTtcXFxcbiAgICAgICAgfTtcXFxcbiAgICAgICAgcmV0dXJuIENyeXB0b0pTLkFFUy5kZWNyeXB0KHRleHQsIGtleSwge1xcXFxuICAgICAgICAgICAgaXY6IGl2LFxcXFxuICAgICAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XFxcXG4gICAgICAgIH0pLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5VdGY4KTtcXFxcbiAgICB9LFxcXFxuICAgIC8vYXNjaWlcXFxcbiAgICBuZXh0Q2hhcmFjdGVyOiBmdW5jdGlvbihhc2NpaVZhbHVlLCBrKSB7XFxcXG4gICAgICAgIHZhciBzID0gYXNjaWlWYWx1ZTtcXFxcbiAgICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocyArIGspO1xcXFxuICAgIH0sXFxcXG4gICAgLy/lh6/mkpJcXFxcbiAgICBjYWVzYXJDaXBoZXI6IGZ1bmN0aW9uKHN0cmluZ1ZhbHVlLCBrKSB7XFxcXG4gICAgICAgIHZhciBuZXdTdHJpbmcgPSBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHN0cmluZ1ZhbHVlLmxlbmd0aDsgaSsrKSB7XFxcXG4gICAgICAgICAgICBuZXdTdHJpbmcgKz0gdGhpcy5uZXh0Q2hhcmFjdGVyKHN0cmluZ1ZhbHVlW2ldLmNoYXJDb2RlQXQoKSwgayk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIG5ld1N0cmluZztcXFxcbiAgICB9LFxcXFxuICAgIGhhbmRsZVVybDogZnVuY3Rpb24odXJsLCB2aXBVcmwsIG5hbWUpIHtcXFxcbiAgICAgICAgaWYodXJsID09IFxcXFxcXFwiXFxcXFxcXCIgfHwgdXJsID09IHZpcFVybCkge1xcXFxuICAgICAgICAgICAgbG9nKG5hbWUgKyBcXFxcXFxcIuino+aekOWksei0pVxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIHJldHVybiB2aXBVcmw7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaWYgKHVybFswXSA9PSAnLycpIHtcXFxcbiAgICAgICAgICAgIHVybCA9ICdodHRwczonICsgdXJsO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmICh1cmwuaW5kZXhPZignPWh0dHAnKSAhPSAtMSkge1xcXFxuICAgICAgICAgICAgdXJsID0gdXJsLmluZGV4T2YoJyZ1cmw9JykgPiAtMSA/IHVybCA6ICdodHRwJyArIGRlY29kZVVSSUNvbXBvbmVudCh1cmwuc3BsaXQoJz1odHRwJylbMV0pO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmICh2aXBVcmwuaW5kZXhPZignbWd0di5jb20nKSAhPSAtMSAmJiB1cmwuaW5kZXhPZignVXNlci1BZ2VudCcpID09IC0xKSB7XFxcXG4gICAgICAgICAgICB1cmwgPSB1cmwgKyAnO3tVc2VyLUFnZW50QGFwcH0nO1xcXFxuICAgICAgICB9IGVsc2UgaWYgKHVybC5pbmRleE9mKCcuZmx2JykgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgIHVybCA9IHVybCArICc7e1VzZXItQWdlbnRAYXBwJiZSZWZlcmVyQCcgKyB2aXBVcmwgKyAnfSc7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgcmV0dXJuIHVybCArICcjaXNWaWRlbz10cnVlIyc7XFxcXG4gICAgfVxcXFxufTtcXFxcblxcXFxudmFyIFBhcnNlUyA9IHt9O1xcXFxudmFyIG9yaWdpbmFsUGFyc2VTID0ge1xcXFxuICAgIENpdHlJUDogJ2h0dHA6Ly9wdi5zb2h1LmNvbS9jaXR5anNvbicsXFxcXG4gICAgcGNVQTogJ1VzZXItQWdlbnRATW96aWxsYS81LjAgKFdpbmRvd3MgTlQgMTAuMFxcXFxcXFxc77ybXFxcXFxcXFzvvJsgV09XNjQpIEFwcGxlV2ViS2l0LzUzNy4zNiAoS0hUTUwsIGxpa2UgR2Vja28pIENocm9tZS80OS4wLjI2MjMuODcgU2FmYXJpLzUzNy4zNicsXFxcXG4gICAgZGVmYXVsdFBhcnNlOiBmdW5jdGlvbih1cmwpIHtcXFxcbiAgICAgICAgc2hvd0xvYWRpbmcoXFxcXFxcXCLmraPlnKjosIPnlKjnvZHpobXop6PmnpAuLi5cXFxcXFxcIik7XFxcXG4gICAgICAgIHJldHVybiAkKHVybCkud2ViTGF6eSgoKSA9PiB7XFxcXG4gICAgICAgICAgICB2YXIgVXJscyA9IF9nZXRVcmxzKCk7XFxcXG4gICAgICAgICAgICB2YXIgUmVnMSA9IC9cXFxcXFxcXC5tcDR8XFxcXFxcXFwubTN1OFxcXFxcXFxcP3wubTN1OCR8XFxcXFxcXFwuZmx2fFxcXFxcXFxcLmF2aXxcXFxcXFxcXC5ybXZiLztcXFxcbiAgICAgICAgICAgIHZhciBSZWcyID0gL3BsYXltM3U4fC5jc3MkfC5qcyR8LmljbyR8Y256elxcXFxcXFxcLi87XFxcXG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IFVybHMubGVuZ3RoOyBpKyspIHtcXFxcbiAgICAgICAgICAgICAgICBsZXQgaXNVcmwgPSBVcmxzW2ldO1xcXFxuICAgICAgICAgICAgICAgIGlmIChSZWcxLnRlc3QoaXNVcmwpICYmICFSZWcyLnRlc3QoaXNVcmwpKSB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGZiYS5oaWRlTG9hZGluZygpO1xcXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaXNVcmwgKyBcXFxcXFxcIiNpc1ZpZGVvPXRydWUjXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICB9KTtcXFxcbiAgICB9LFxcXFxuICAgIG1hb3NzOiBmdW5jdGlvbihqeHVybCwgcmVmLCBrZXkpIHtcXFxcbiAgICAgICAgdHJ5IHtcXFxcbiAgICAgICAgICAgIHZhciBnZXRWaWRlb0luZm8gPSBmdW5jdGlvbih0ZXh0KSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRvb2xzLkFFUyh0ZXh0LCBrZXksIGl2KTtcXFxcbiAgICAgICAgICAgIH07XFxcXG4gICAgICAgICAgICBrZXkgPSBrZXkgPT0gdW5kZWZpbmVkID8gJ2R2eVlSUWxuUFJDTWRRU2UnIDoga2V5O1xcXFxuICAgICAgICAgICAgaWYgKHJlZikge1xcXFxuICAgICAgICAgICAgICAgIHZhciBodG1sID0gcmVxdWVzdChqeHVybCwge1xcXFxuICAgICAgICAgICAgICAgICAgICBoZWFkZXJzOiB7XFxcXG4gICAgICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IHJlZlxcXFxuICAgICAgICAgICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICAgICAgfSk7XFxcXG4gICAgICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgICAgIHZhciBodG1sID0gcmVxdWVzdChqeHVybCk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgICAgICBpZiAoaHRtbC5pbmRleE9mKCcmYnR3YWY9JykgIT0gLTEpIHtcXFxcbiAgICAgICAgICAgICAgICBodG1sID0gcmVxdWVzdChqeHVybCArICcmYnR3YWYnICsgaHRtbC5tYXRjaCgvJmJ0d2FmKC4qPylcXFxcXFxcIi8pWzFdLCB7XFxcXG4gICAgICAgICAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICAgICAgICAgICdSZWZlcmVyJzogcmVmXFxcXG4gICAgICAgICAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgICAgICB9KVxcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgdmFyIGl2ID0gaHRtbC5zcGxpdCgnX3Rva2VuID0gXFxcXFxcXCInKVsxXS5zcGxpdCgnXFxcXFxcXCInKVswXTtcXFxcbiAgICAgICAgICAgIGV2YWwoaHRtbC5tYXRjaCgvdmFyIGNvbmZpZyA9IHtbXFxcXFxcXFxzXFxcXFxcXFxTXSo/fS8pWzBdICsgJycpO1xcXFxuICAgICAgICAgICAgaWYgKGNvbmZpZy51cmwuc2xpY2UoMCwgNCkgIT0gJ2h0dHAnKSB7XFxcXG4gICAgICAgICAgICAgICAgY29uZmlnLnVybCA9IGRlY29kZVVSSUNvbXBvbmVudCh0b29scy5BRVMoY29uZmlnLnVybCwga2V5LCBpdikpO1xcXFxuICAgICAgICAgICAgfVxcXFxuICAgICAgICAgICAgcmV0dXJuIGNvbmZpZy51cmw7XFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiAnJztcXFxcbiAgICAgICAgfVxcXFxuICAgIH0sXFxcXG4gICAgTExROiBmdW5jdGlvbihqeHVybCkge1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgdmFyIGFwaSA9IGp4dXJsLnNwbGl0KCc/dXJsPScpWzBdICsgXFxcXFxcXCJhcGkucGhwXFxcXFxcXCI7XFxcXG4gICAgICAgICAgICB2YXIgYjY0aWQgPSBiYXNlNjRFbmNvZGUoanh1cmwuc3BsaXQoJ3VybD0nKVsxXSk7XFxcXG4gICAgICAgICAgICB2YXIgcGFyc2VpZCA9IHRvb2xzLmNhZXNhckNpcGhlcihiNjRpZCwgLTEpO1xcXFxuICAgICAgICAgICAgdmFyIGpzb24gPSBKU09OLnBhcnNlKHJlcXVlc3QoYXBpLCB7XFxcXG4gICAgICAgICAgICAgICAgaGVhZGVyczoge1xcXFxuICAgICAgICAgICAgICAgICAgICAnUmVmZXJlcic6IGp4dXJsXFxcXG4gICAgICAgICAgICAgICAgfSxcXFxcbiAgICAgICAgICAgICAgICBtZXRob2Q6ICdQT1NUJyxcXFxcbiAgICAgICAgICAgICAgICBib2R5OiAndXJsPScgKyBwYXJzZWlkXFxcXG4gICAgICAgICAgICB9KSk7XFxcXG4gICAgICAgICAgICB1cmwgPSAoanNvbi5jb2RlID09IDIwMCA/IGJhc2U2NERlY29kZSh0b29scy5jYWVzYXJDaXBoZXIoanNvbi51cmwsIC0xKSkgOiAnJyk7XFxcXG4gICAgICAgICAgICByZXR1cm4gdXJsO1xcXFxuICAgICAgICB9IGNhdGNoIChlKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gJyc7XFxcXG4gICAgICAgIH1cXFxcbiAgICB9LFxcXFxuICAgIFBhbkd1OiBmdW5jdGlvbih2aXBVcmwsIGRhdGEpIHtcXFxcbiAgICAgICAgLyp2YXIgcmVmID0gJ2h0dHBzOi8vd3d3LnBhbmd1amlleGkuY29tLyc7XFxcXG4gICAgICAgIHZhciBwYXJzZSA9ICdodHRwczovL3Bhbmd1YXBpLm50cnlqZC5uZXQvamlleGkvP3VybD0nICsgdmlwVXJsO1xcXFxuICAgICAgICB2YXIgYXBpID0gJ2h0dHBzOi8vcGFuZ3VhcGkubnRyeWpkLm5ldC9qaWV4aS9hcGkucGhwJztcXFxcbiAgICAgICAgKi9cXFxcbiAgICAgICAgLy92YXIgcmVmID0gJ2h0dHBzOi8veG15c3R2LmNvbS8nO1xcXFxuICAgICAgICAvL3ZhciBwYXJzZSA9ICdodHRwczovL3d3dy45OWtwdy5jb20vcGFuZ3UvaW5kZXgucGhwP3VybD0nICsgdGFpbFVybDtcXFxcbiAgICAgICAgLy92YXIgYXBpID0gJ2h0dHBzOi8vd3d3Ljk5a3B3LmNvbS9wYW5ndS9hcGkucGhwJztcXFxcbiAgICAgICAgdmFyIHBhcnNlID0gXFxcXFxcXCJodHRwczovL3d3dy5wYW5ndWppZXhpLmNvbS9wYW5ndS8/dXJsPVxcXFxcXFwiICsgdmlwVXJsO1xcXFxuICAgICAgICB2YXIgYXBpID0gXFxcXFxcXCJodHRwczovL3Bhbmd1YXBpLm50cnlqZC5uZXQvcGFuZ3UyMDIxL2FwaS5waHBcXFxcXFxcIjtcXFxcbiAgICAgICAgaWYgKGRhdGEpIHtcXFxcbiAgICAgICAgICAgIHJlZiA9IGRhdGFbMF07XFxcXG4gICAgICAgICAgICBwYXJzZSA9IGRhdGFbMV07XFxcXG4gICAgICAgICAgICBhcGkgPSBkYXRhWzJdO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHZhciBUaW1lID0gKE1hdGguZmxvb3IobmV3IERhdGUoKS5nZXRUaW1lKCkgLyAxMDAwKSAqIDEpLnRvU3RyaW5nKCk7XFxcXG4gICAgICAgIHZhciBqc29uID0gcmVxdWVzdChhcGksIHtcXFxcbiAgICAgICAgICAgIGhlYWRlcnM6IHtcXFxcbiAgICAgICAgICAgICAgICBcXFxcXFxcIlJlZmVyZXJcXFxcXFxcIjogcGFyc2VcXFxcbiAgICAgICAgICAgIH0sXFxcXG4gICAgICAgICAgICBib2R5OiBcXFxcXFxcInVybD1cXFxcXFxcIiArIHZpcFVybCArIFxcXFxcXFwiJnJlZmVyZXI9XFxcXFxcXCIgKyBiYXNlNjRFbmNvZGUocGFyc2UpICsgXFxcXFxcXCImcmVmPTEmdGltZT1cXFxcXFxcIiArIFRpbWUgKyBcXFxcXFxcIiZ0eXBlPSZvdGhlcj1cXFxcXFxcIiArIGJhc2U2NEVuY29kZSh2aXBVcmwpICsgXFxcXFxcXCImaW9zPTBcXFxcXFxcIixcXFxcbiAgICAgICAgICAgIG1ldGhvZDogXFxcXFxcXCJQT1NUXFxcXFxcXCJcXFxcbiAgICAgICAgfSk7XFxcXG4gICAgICAgIHZhciB1cmwgPSBqc29uWzBdID09IFxcXFxcXFwie1xcXFxcXFwiID8gSlNPTi5wYXJzZShqc29uKS51cmwgOiBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICByZXR1cm4gdXJsO1xcXFxuICAgIH0sXFxcXG4gICAgeXVuMTcxNzogZnVuY3Rpb24odmlwVXJsKSB7XFxcXG4gICAgICAgIHZhciBpc3lrID0gdmlwVXJsLmluZGV4T2YoJ3lvdWt1Jyk7XFxcXG4gICAgICAgIHZhciByZWYgPSBcXFxcXFxcImh0dHBzOi8vd3d3LjE3MTd5dW4uY29tL2p4L3R5LnBocD91cmw9XFxcXFxcXCIgKyB2aXBVcmw7XFxcXG4gICAgICAgIHZhciBwYXJzZSA9IFxcXFxcXFwiaHR0cHM6Ly8xNzE3eXVuLmNvbS56aDE4OC5uZXQvMDgyOC8/dXJsPVxcXFxcXFwiICsgdmlwVXJsO1xcXFxuICAgICAgICB2YXIgYXBpID0gXFxcXFxcXCJodHRwczovLzE3MTd5dW4uY29tLnpoMTg4Lm5ldC8xMDA0Ly4uaW5kZXguLnBocFxcXFxcXFwiO1xcXFxuICAgICAgICByZXR1cm4gaXN5ayA9PSAtMSA/IHRoaXMuUGFuR3UodmlwVXJsLCBbcmVmLCBwYXJzZSwgYXBpXSkgOiB0aGlzLlBhbkd1KHZpcFVybCwgW3JlZiArICcsdmlwOicsIHBhcnNlICsgJyx2aXA6JywgYXBpXSk7XFxcXG4gICAgfSxcXFxcbiAgICBGdVhpbmc6IGZ1bmN0aW9uKHZpcFVybCkge1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgLy9pZih2aXBVcmwuaW5kZXhPZigndi55b3VrdScpIT0tMSl7XFxcXG4gICAgICAgICAgICAvLyAgICB2aXBVcmwgPSAoSlNPTi5wYXJzZShyZXF1ZXN0KHZpcFVybCwge3JlZGlyZWN0OmZhbHNlLCB3aXRoSGVhZGVyczp0cnVlfSkpLmhlYWRlcnMubG9jYXRpb24gKyAnJykucmVwbGFjZSgvXFxcXFxcXFw/LiovLCcnKTtcXFxcbiAgICAgICAgICAgIC8vfVxcXFxuICAgICAgICAgICAgdmFyIHJlZiA9ICdodHRwczovL2p4Lnh1ZXR1aWd1YW5nLmNuL2ppZXhpLz91cmw9JyArIHZpcFVybDtcXFxcbiAgICAgICAgICAgIHZhciBwYXJzZSA9IHJlZjtcXFxcbiAgICAgICAgICAgIHZhciBhcGkgPSAnaHR0cHM6Ly9qeC54dWV0dWlndWFuZy5jbi9qaWV4aS9hcGl1X2Z4LnBocCc7XFxcXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5QYW5HdSh2aXBVcmwsIFtyZWYsIHBhcnNlLCBhcGldKTtcXFxcbiAgICAgICAgfSBjYXRjaCAoZSkge1xcXFxuICAgICAgICAgICAgcmV0dXJuICcnO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSxcXFxcbiAgICBcXFxcXFxcIvCfpZpcXFxcXFxcIjogZnVuY3Rpb24odmlwVXJsKSB7XFxcXG4gICAgICAgIGxldCDkvZzogIVf6KeG55WM55+l5ZCN5aSn5L2sO1xcXFxuICAgICAgICB0cnkge1xcXFxuICAgICAgICAgICAgdmFyIHBsYXkgPSBKU09OLnBhcnNlKGZldGNoKFxcXFxcXFwiaHR0cDovL3d3dy56cnVpcnkuY29tL3l1bi9hcGkucGhwXFxcXFxcXCIsIHtcXFxcbiAgICAgICAgICAgICAgICBib2R5OiBcXFxcXFxcInVybD1cXFxcXFxcIiArIGlucHV0LFxcXFxuICAgICAgICAgICAgICAgIG1ldGhvZDogXFxcXFxcXCJQT1NUXFxcXFxcXCJcXFxcbiAgICAgICAgICAgIH0pKS51cmw7XFxcXG4gICAgICAgICAgICBpZiAocGxheS5zdGFydHNXaXRoKFxcXFxcXFwiL1xcXFxcXFwiKSkge1xcXFxuICAgICAgICAgICAgICAgIHJldHVybiBcXFxcXFxcImh0dHBzOlxcXFxcXFwiICsgcGxheTtcXFxcbiAgICAgICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHBsYXk7XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBcXFxcXFxcIlxcXFxcXFwiO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxufTtcXFxcblxcXFxudmFyIGZyb21zID0gWydkdW9kdW96eScsICdyeCcsICdyZW5yZW5taScsICdsdG5iJywgJ3hmeXVuJ107XFxcXG5mb3IobGV0IGkgaW4gZnJvbXMpIHtcXFxcbiAgICBsZXQgbmFtZSA9IGZyb21zW2ldICsgXFxcXFxcXCIo6YCa55So5Ye95pWwKVxcXFxcXFwiO1xcXFxuICAgIFBhcnNlU1tuYW1lXSA9IGZ1bmN0aW9uKFVybCwgcmVmZXJlcil7XFxcXG4gICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRQYXJzZShyZWZlcmVyKTtcXFxcbiAgICB9O1xcXFxufVxcXFxuT2JqZWN0LmFzc2lnbihQYXJzZVMsIG9yaWdpbmFsUGFyc2VTLCBNeVBhcnNlUyk7XFxcXG4vL+imhueblumhuuW6j++8jOesrOS4ieS4quimhuebluesrOS6jOS4queEtuWQjuimhuebluesrOS4gOS4qlxcXFxuXFxcXG5cXFxcbmZ1bmN0aW9uIGF5dG1QYXJzZSh2aXBVcmwsIHBhcnNlTmFtZSkge1xcXFxuICAgIHRoaXMucmVxdWVzdCA9IGZ1bmN0aW9uKHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIpIHtcXFxcbiAgICAgICAgcGFyYW0xID0gcGFyYW0xID09IHVuZGVmaW5lZCA/IHt9IDogcGFyYW0xO1xcXFxuICAgICAgICBpZihpc05hTihwYXJhbTEudGltZW91dCkpIHtcXFxcbiAgICAgICAgICAgIHBhcmFtMS50aW1lb3V0ID0gMzAwMDtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBwYXJhbTIgPSBNWV9SVUxFO1xcXFxuICAgICAgICB2YXIgcmV0U3RyID0gbWV0aG9kX3JlcXVlc3QuaW52b2tlKGphdmFDb250ZXh0LCBwYXJhbTAsIHBhcmFtMSwgcGFyYW0yKTtcXFxcbiAgICAgICAgcmV0dXJuIHJldFN0ciA9PSBudWxsID8gcmV0U3RyIDogcmV0U3RyICsgXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICB9O1xcXFxuICAgIHRoaXMuZmV0Y2ggPSBmdW5jdGlvbihwYXJhbTAsIHBhcmFtMSwgcGFyYW0yKSB7XFxcXG4gICAgICAgIHBhcmFtMSA9IHBhcmFtMSA9PSB1bmRlZmluZWQgPyB7fSA6IHBhcmFtMTtcXFxcbiAgICAgICAgcGFyYW0xLmhlYWRlcnMgPSBwYXJhbTEuaGVhZGVycyA9PSB1bmRlZmluZWQgPyB7fSA6IHBhcmFtMS5oZWFkZXJzO1xcXFxuICAgICAgICBwYXJhbTEuaGVhZGVyc1snVXNlci1BZ2VudCddID0gUENfVUE7XFxcXG4gICAgICAgIGlmKGlzTmFOKHBhcmFtMS50aW1lb3V0KSkge1xcXFxuICAgICAgICAgICAgcGFyYW0xLnRpbWVvdXQgPSAzMDAwO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIHBhcmFtMiA9IE1ZX1JVTEU7XFxcXG4gICAgICAgIHZhciByZXRTdHIgPSBtZXRob2RfZmV0Y2guaW52b2tlKGphdmFDb250ZXh0LCBwYXJhbTAsIHBhcmFtMSwgcGFyYW0yKTtcXFxcbiAgICAgICAgcmV0dXJuIHJldFN0ciA9PSBudWxsID8gcmV0U3RyIDogcmV0U3RyICsgXFxcXFxcXCJcXFxcXFxcIjtcXFxcbiAgICB9O1xcXFxuICAgIHZhciBob3N0ID0gdmlwVXJsLm1hdGNoKC9cXFxcXFxcXC4oLio/KVxcXFxcXFxcLy8pO1xcXFxuICAgIGhvc3QgPSBob3N0ID09IG51bGwgPyBudWxsIDogaG9zdFsxXTtcXFxcbiAgICB2YXIgbm9VcmwgPSBcXFxcXFxcInRvYXN0Oi8v5o6l5pS25Yiw55qE6ZO+5o6l5Li6OiBcXFxcXFxcIjtcXFxcbiAgICBzd2l0Y2ggKG15U2V0LnFqdSkge1xcXFxuICAgICAgICBjYXNlIFxcXFxcXFwi6buY6K6kXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICBzd2l0Y2ggKGhvc3QpIHtcXFxcbiAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwicXEuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnR4O1xcXFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwiaXFpeWkuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnF5O1xcXFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwieW91a3UuY29tXFxcXFxcXCI6XFxcXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IG15U2V0LnlrO1xcXFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgICAgICBjYXNlIFxcXFxcXFwibWd0di5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQubWc7XFxcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgIGNhc2UgXFxcXFxcXCJiaWxpYmlsaS5jb21cXFxcXFxcIjpcXFxcbiAgICAgICAgICAgICAgICAgICAgc3RyID0gbXlTZXQuYmw7XFxcXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XFxcXG4gICAgICAgICAgICAgICAgICAgIHN0ciA9IGhvc3QgPT0gbnVsbCA/IG5vVXJsIDogbXlTZXQub3RoO1xcXFxuICAgICAgICAgICAgICAgICAgICBicmVhaztcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIGJyZWFrO1xcXFxuICAgICAgICBkZWZhdWx0OlxcXFxuICAgICAgICAgICAgc3RyID0gaG9zdCA9PSBudWxsID8gbm9VcmwgOiBteVNldC5xanU7XFxcXG4gICAgICAgICAgICBicmVhaztcXFxcbiAgICB9XFxcXG4gICAgaWYgKHBhcnNlTmFtZSkge1xcXFxuICAgICAgICBzdHIgPSBwYXJzZU5hbWU7XFxcXG4gICAgfVxcXFxuICAgIGxldCBteUNob2ljZSA9IHN0ci5zcGxpdCgnLCcpO1xcXFxuICAgIGxldCBsZW4gPSBteUNob2ljZS5sZW5ndGg7XFxcXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xcXFxuICAgICAgICBsZXQgbmFtZSA9IG15Q2hvaWNlW2ldO1xcXFxuICAgICAgICBpZiAodHlwZW9mIFBhcnNlU1tuYW1lXSA9PSAnZnVuY3Rpb24nKSB7XFxcXG4gICAgICAgICAgICBsZXQgdXJsID0gUGFyc2VTW25hbWVdKHZpcFVybCk7XFxcXG4gICAgICAgICAgICBsZXQgUmVnID0gbmV3IFJlZ0V4cChcXFxcXFxcIm0zdTh8bXA0fFxcXFxcXFwiICsgdmlwVXJsICsgXFxcXFxcXCJ8aHR0cFxcXFxcXFwiKTtcXFxcbiAgICAgICAgICAgIGlmIChpICE9IGxlbiAtIDEgJiYgIVJlZy50ZXN0KHVybCkpIHtcXFxcbiAgICAgICAgICAgICAgICBsb2cobmFtZSArICfop6PmnpDlpLHotKUnKTtcXFxcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcXFxcbiAgICAgICAgICAgIH1cXFxcbiAgICAgICAgICAgIHJldHVybiB0b29scy5oYW5kbGVVcmwodXJsLCB2aXBVcmwsIG5hbWUpO1xcXFxuICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBQYXJzZVNbbmFtZV0gPT0gJ3N0cmluZycpIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBQYXJzZVMuZGVmYXVsdFBhcnNlKFBhcnNlU1tuYW1lXSArIHZpcFVybCwgdG9vbHMuaGFuZGxlVXJsLCBuYW1lKTtcXFxcbiAgICAgICAgfSBlbHNlIHtcXFxcbiAgICAgICAgICAgIHJldHVybiBuYW1lLnN1YnN0cigwLCA0KSA9PSBcXFxcXFxcImh0dHBcXFxcXFxcIiB8fCBob3N0ID09IG51bGwgPyBuYW1lICsgdmlwVXJsIDogXFxcXFxcXCJ0b2FzdDovL1xcXFxcXFwiICsgbmFtZSArIFxcXFxcXFwiIOS4jeaYr+ebtOmTvuS5n+S4jeaYr+WFjeWXhVxcXFxcXFwiO1xcXFxuICAgICAgICB9XFxcXG4gICAgfVxcXFxufTtcXFxcblxcXFxudmFyIHBsYXlQYXJzZSA9IHtcXFxcbiAgICBwbGF5ZXJTOiBmdW5jdGlvbihqdXJsKSB7XFxcXG4gICAgICAgIHZhciBodG1sID0gcmVxdWVzdChqdXJsKSxcXFxcbiAgICAgICAgICAgIFVybCA9ICcnLFxcXFxuICAgICAgICAgICAgZnJvbSA9ICcnO1xcXFxuICAgICAgICB2YXIgY29kZTEgPSBodG1sLm1hdGNoKC92YXIgcGxheWVyX1tcXFxcXFxcXHNcXFxcXFxcXFNdKj99Lyk7XFxcXG4gICAgICAgIHZhciBkcFVybCA9IHBkZmgoaHRtbCwgXFxcXFxcXCJpZnJhbWUmJmRhdGEtcGxheVxcXFxcXFwiKTtcXFxcbiAgICAgICAgaWYgKGNvZGUxICE9IG51bGwpIHtcXFxcbiAgICAgICAgICAgIGV2YWwoY29kZTFbMF0ucmVwbGFjZSgvcGxheWVyXy4qP3svLCAncGRhdGE9eycpKTtcXFxcbiAgICAgICAgICAgIFVybCA9IHBkYXRhLnVybDtcXFxcbiAgICAgICAgICAgIGZyb20gPSBwZGF0YS5mcm9tO1xcXFxuICAgICAgICB9IGVsc2UgaWYgKGRwVXJsICE9ICcnKSB7XFxcXG4gICAgICAgICAgICBVcmwgPSBkcFVybC5zdGFydHNXaXRoKFxcXFxcXFwiaHR0cFxcXFxcXFwiKSA/IGRkcFVybCA6IGRwVXJsLnNsaWNlKDMpO1xcXFxuICAgICAgICB9IGVsc2Uge1xcXFxuICAgICAgICAgICAgY29kZTIgPSBodG1sLm1hdGNoKC92YXIgbm93W1xcXFxcXFxcc1xcXFxcXFxcU10qP3ZhciBwbltcXFxcXFxcXHNcXFxcXFxcXFNdKj87Lyk7XFxcXG4gICAgICAgICAgICBpZiAoY29kZTIgIT0gbnVsbCkge1xcXFxuICAgICAgICAgICAgICAgIGV2YWwoY29kZTJbMF0pO1xcXFxuICAgICAgICAgICAgICAgIFVybCA9IG5vdztcXFxcbiAgICAgICAgICAgICAgICBmcm9tID0gcG47XFxcXG4gICAgICAgICAgICB9XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaWYgKFVybC5zdWJzdHIoMCwgOCkubWF0Y2goL0pULi5KVC4uLykgfHwgVXJsLnN0YXJ0c1dpdGgoXFxcXFxcXCJhSFIwXFxcXFxcXCIpKSB7XFxcXG4gICAgICAgICAgICBVcmwgPSBiYXNlNjREZWNvZGUoVXJsKTtcXFxcbiAgICAgICAgfVxcXFxuICAgICAgICBpZiAoVXJsLnN1YnN0cigwLCA4KS5tYXRjaCgvJS4uJS4uLykpIHtcXFxcbiAgICAgICAgICAgIFVybCA9IHVuZXNjYXBlKFVybCk7XFxcXG4gICAgICAgIH1cXFxcbiAgICAgICAgaWYgKGZyb21zLmluY2x1ZGVzKGZyb20pKSB7XFxcXG4gICAgICAgICAgICB2YXIgbmFtZSA9IGZyb20gKyAnKOmAmueUqOWHveaVsCknO1xcXFxuICAgICAgICAgICAgcmV0dXJuIFBhcnNlU1tuYW1lXShVcmwsIGp1cmwpO1xcXFxuICAgICAgICB9XFxcXG4gICAgICAgIGlmICgvaHRtbHxiaWxpYmlsaS8udGVzdChVcmwpKSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gYXl0bVBhcnNlKFVybCk7XFxcXG4gICAgICAgIH0gZWxzZSB7XFxcXG4gICAgICAgICAgICByZXR1cm4gVXJsLnN0YXJ0c1dpdGgoJ2h0dHAnKSA/IFVybCArICcjaXNWaWRlbz10cnVlIycgOiBQYXJzZVMuZGVmYXVsdFBhcnNlKGp1cmwpO1xcXFxuICAgICAgICB9XFxcXG4gICAgfSxcXFxcbiAgICBwbGF5ZXJfeHg6IGZ1bmN0aW9uKGp1cmwpIHtcXFxcbiAgICAgICAgcmV0dXJuICQoanVybCkubGF6eVJ1bGUoKCkgPT4ge1xcXFxuICAgICAgICAgICAgZXZhbChmZXRjaChKU09OLnBhcnNlKGZldGNoKCdoaWtlcjovL2ZpbGVzL2NhY2hlL015UGFyc2VTZXQuanNvbicpKS5jaikpO1xcXFxuICAgICAgICAgICAgcmV0dXJuIHBsYXlQYXJzZS5wbGF5ZXJTKGlucHV0KTtcXFxcbiAgICAgICAgfSkgXFxcXG4gICAgfVxcXFxufTtcXFxcblxcXFxuZnVuY3Rpb24gc2V0UGFyc2UoKSB7XFxcXG4gICAgdGhpcy5kID0gW107XFxcXG4gICAgcmVxdWlyZSgnaHR0cHM6Ly9naXRlYS5jb20vQUk5NTcvSGlrZXIvcmF3L20vdi9Sb3V0ZS5qcycpO1xcXFxuICAgIFJvdXRlLnNldFBhcnNlKCk7XFxcXG4gICAgc2V0UmVzdWx0KGQpO1xcXFxufVxcXCJ9XVwifSIsInRpdGxlIjoi566h55CG6Kej5p6QIn0=
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement