Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 海阔视界规则分享,当前分享的是:小程序¥home_rule_v2¥base64://@轻合集.水淼@eyJsYXN0X2NoYXB0ZXJfcnVsZSI6IiIsInRpdGxlIjoi6L275ZCI6ZuGLuawtOa3vCIsImF1dGhvciI6Iui9u+WQiOmbhueUn+aIkOWZqCIsInVybCI6Imhpa2VyOi8vZW1wdHkiLCJ2ZXJzaW9uIjoxMDUsImNvbF90eXBlIjoiaWNvbl9yb3VuZF9zbWFsbF80IiwiY2xhc3NfbmFtZSI6IiIsInR5cGUiOiJhbGwiLCJjbGFzc191cmwiOiIiLCJhcmVhX25hbWUiOiIiLCJhcmVhX3VybCI6IiIsInNvcnRfbmFtZSI6IiIsInllYXJfbmFtZSI6IiIsInNvcnRfdXJsIjoiIiwieWVhcl91cmwiOiIiLCJmaW5kX3J1bGUiOiJqczpcbmNvbnN0IFFJTkdfVElUTEUgPSBnZXRNeVZhcignbXlDb2xsZWN0aW9uJyksXG4gICAgbmV3V2luZG93ID0gcmVhZEZpbGUoJ25ld1dpbmRvdycpLFxuICAgIHR5cGVTaG93ID0gZ2V0TXlWYXIoJ3R5cGVTaG93JywgJ2ZpbmQ6JyksXG4gICAgdHlwZXMgPSB7ICdhbGwnOiAn6IGa5ZCIJywgJ3ZpZGVvJzogJ+inhumikScsICdtdXNpYyc6ICfpn7PpopEnLCAnbGl2ZSc6ICfnm7Tmkq0nLCAnY2FydG9vbic6ICfmvKvnlLsnLCAncmVhZCc6ICfpmIXor7snLCAncGljdHVyZSc6ICflm77pm4YnLCAnbmV3cyc6ICfotYTorq8nLCAndG9vbCc6ICflt6XlhbcnLCAnb3RoZXInOiAn5YW25a6DJyB9XG5sZXQgZWwgPSBbe1xuICAgICAgICB0aXRsZTogJyAnICsgUUlOR19USVRMRS5ib2xkKCkgKyAnICZuYnNwICZuYnNwICcgKyAn4pqZIOi9u+WQiOmbhuiuvue9riDimpknLnNtYWxsKCksXG4gICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9Db25maWc/cnVsZT0nICsgUUlOR19USVRMRSArICcmI25vUmVjb3JkSGlzdG9yeSMnLFxuICAgICAgICBpbWc6IE1ZX1JVTEUuaWNvbiB8fCAnaGlrZXI6Ly9pbWFnZXMvaWNvbjEnLFxuICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcidcbiAgICB9LCB7XG4gICAgICAgIHVybDogJ1wiaGlrZXI6Ly9zZWFyY2g/cz1cIitpbnB1dCcsXG4gICAgICAgIGRlc2M6ICfmkJzkvaDmg7PopoHnmoQuLi4nLFxuICAgICAgICB0aXRsZTogJ+aQnOe0oicsXG4gICAgICAgIGNvbF90eXBlOiAnaW5wdXQnLFxuICAgICAgICBleHRyYToge1xuICAgICAgICAgICAgcnVsZXM6ICQudG9TdHJpbmcoKFFJTkdfVElUTEUsIHR5cGVTaG93KSA9PiB7XG4gICAgICAgICAgICAgICAgbGV0IHJ1bGVzID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZGF0YUxvYWQ/cnVsZT0nICsgUUlOR19USVRMRSkoKVxuICAgICAgICAgICAgICAgIGlmICh0eXBlU2hvdy5zdGFydHNXaXRoKCdmaW5kOicpKSB7XG4gICAgICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJLZXkgPSB0eXBlU2hvdy5zbGljZSg1KVxuICAgICAgICAgICAgICAgICAgICBpZiAoZmlsdGVyS2V5KSBydWxlcyA9IHJ1bGVzLmZpbHRlcigodikgPT4gdi50aXRsZS5pbmNsdWRlcyhmaWx0ZXJLZXkpKVxuICAgICAgICAgICAgICAgIH0gZWxzZSBydWxlcyA9IHJ1bGVzLmZpbHRlcigodikgPT4gdi50eXBlID09IHR5cGVTaG93KVxuICAgICAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShydWxlcylcbiAgICAgICAgICAgIH0sIFFJTkdfVElUTEUsIHR5cGVTaG93KSxcbiAgICAgICAgICAgIGRlZmF1bHRWYWx1ZTogZ2V0TXlWYXIoJ3NlYXJjaEtleScsICcnKSxcbiAgICAgICAgICAgIG9uQ2hhbmdlOiBcInB1dE15VmFyKCdzZWFyY2hLZXknLGlucHV0KVwiXG4gICAgICAgIH1cbiAgICB9XSxcbiAgICBydWxlcyA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2RhdGFMb2FkP3J1bGU9JyArIFFJTkdfVElUTEUpKCksXG4gICAgcnVsZXNUeXBlID0gcnVsZXMucmVkdWNlKChvYmosIHYpID0+IHtcbiAgICAgICAgbGV0IHR5cGUgPSB2LnR5cGVcbiAgICAgICAgaWYgKHR5cGUpIHtcbiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShvYmpbdHlwZV0pKVxuICAgICAgICAgICAgICAgIG9ialt0eXBlXSA9IFtdXG4gICAgICAgICAgICBvYmpbdHlwZV0ucHVzaCh2KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBvYmpcbiAgICB9LCB7fSlcbmlmICh0eXBlU2hvdy5zdGFydHNXaXRoKCdmaW5kOicpKSB7XG4gICAgbGV0IGZpbHRlcktleSA9IHR5cGVTaG93LnNsaWNlKDUpXG4gICAgaWYgKGZpbHRlcktleSkgcnVsZXMgPSBydWxlcy5maWx0ZXIoKHYpID0+IHYudGl0bGUuaW5jbHVkZXMoZmlsdGVyS2V5KSlcbn1cbmVsLnB1c2godHlwZVNob3cuc3RhcnRzV2l0aCgnZmluZDonKSA/IHtcbiAgICB0aXRsZTogJ+KAnOKAnOKAneKAnScgKyAoJ+WFqOmDqCcgKyAodHlwZVNob3dbNV0gPyAnWycgKyB0eXBlU2hvdy5zbGljZSg1KSArICddJyA6ICcnKSkuYm9sZCgpLmZvbnRjb2xvcignIzEyYjY2OCcpICsgJyAnICsgKHJ1bGVzLmxlbmd0aCkudG9TdHJpbmcoKS5zbWFsbCgpLFxuICAgIHVybDogJCh0eXBlU2hvdy5zbGljZSg1KSwgJ+afpeaJvuWwj+eoi+W6j+WFs+mUruivjScpLmlucHV0KCgpID0+IHtcbiAgICAgICAgcHV0TXlWYXIoJ3R5cGVTaG93JywgJ2ZpbmQ6JyArIGlucHV0KVxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xuICAgIH0pLFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcbn0gOiB7XG4gICAgdGl0bGU6ICfigJzigJzigJ3igJ3lhajpg6ggJyArIChydWxlcy5sZW5ndGgpLnRvU3RyaW5nKCkuc21hbGwoKSxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKCkgPT4ge1xuICAgICAgICBwdXRNeVZhcigndHlwZVNob3cnLCAnZmluZDonKVxuICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcbiAgICAgICAgcmV0dXJuICd0b2FzdDovL+WGjeasoeeCueWHu+OAkOWFqOmDqOOAkeWPr+afpeaJvuWwj+eoi+W6jydcbiAgICB9KSxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXG59KVxuZm9yIChsZXQgayBpbiB0eXBlcylcbiAgICBpZiAoayBpbiBydWxlc1R5cGUpXG4gICAgICAgIGVsLnB1c2goe1xuICAgICAgICAgICAgdGl0bGU6ICfigJzigJzigJ3igJ0nICsgKGsgPT0gdHlwZVNob3cgPyB0eXBlc1trXS5ib2xkKCkuZm9udGNvbG9yKCcjMTJiNjY4JykgOiB0eXBlc1trXSkgKyAnICcgKyAocnVsZXNUeXBlW2tdLmxlbmd0aCkudG9TdHJpbmcoKS5zbWFsbCgpLFxuICAgICAgICAgICAgdXJsOiBrID09IHR5cGVTaG93ID8gJ2hpa2VyOi8vZW1wdHknIDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaykgPT4ge1xuICAgICAgICAgICAgICAgIHB1dE15VmFyKCd0eXBlU2hvdycsIGspXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xuICAgICAgICAgICAgfSwgayksXG4gICAgICAgICAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXG4gICAgICAgIH0pXG5cbmlmICghdHlwZVNob3cuc3RhcnRzV2l0aCgnZmluZDonKSkgcnVsZXMgPSBydWxlc1R5cGVbdHlwZVNob3ddXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS91cmxQYXJzZT9ydWxlPScgKyBRSU5HX1RJVExFKSkucnVsZSlcbnJ1bGVzLmZvckVhY2goKHYpID0+IHtcbiAgICBsZXQgdXJsUGFyYW0gPSB2LnVybC5zcGxpdCgnOycpLFxuICAgICAgICBydWxlVG1wID0ge1xuICAgICAgICAgICAgdGl0bGU6IHYudGl0bGUsIHVybDogdXJsUGFyYW0uc2hpZnQoKSxcbiAgICAgICAgICAgIGNsYXNzX25hbWU6IHYuY2xhc3NfbmFtZSwgY2xhc3NfdXJsOiB2LmNsYXNzX3VybCxcbiAgICAgICAgICAgIGFyZWFfbmFtZTogdi5hcmVhX25hbWUsIGFyZWFfdXJsOiB2LmFyZWFfdXJsLFxuICAgICAgICAgICAgeWVhcl9uYW1lOiB2LnllYXJfbmFtZSwgeWVhcl91cmw6IHYueWVhcl91cmwsXG4gICAgICAgICAgICBzb3J0X25hbWU6IHYuc29ydF9uYW1lLCBzb3J0X3VybDogdi5zb3J0X3VybFxuICAgICAgICB9LFxuICAgICAgICBmeXBhZ2UgPSBydWxlVG1wLnVybC5pbmNsdWRlcygnZnlwYWdlJykgPyAnZnlwYWdlJyA6ICcxJyxcbiAgICAgICAgZG9tYWluID0gKC9eKGh0dHBzPzpcXC9cXC8uKz8pKD86I3xcXD98XFwvfCQpL2kuZXhlYyhydWxlVG1wLnVybCkgfHwgWywgJ2hpa2VyOi8vZW1wdHknXSlbMV0sXG4gICAgICAgIGQgPSB7XG4gICAgICAgICAgICB0aXRsZTogdi50aXRsZSxcbiAgICAgICAgICAgIHVybDogJ2hpa2VyOi8vcGFnZS9mcmFtZUxvYWQnLFxuICAgICAgICAgICAgaW1nOiB2Lmljb24gfHwgJ2hpa2VyOi8vaW1hZ2VzL2ljb24xJyxcbiAgICAgICAgICAgIGV4dHJhOiB7XG4gICAgICAgICAgICAgICAgdXJsOiBkb21haW4gKyAnLyNub0hpc3RvcnkjI25vUmVjb3JkSGlzdG9yeSMjIyMnICsgSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgICAgICBSVUxFOiBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkocnVsZVRtcCkpLFxuICAgICAgICAgICAgICAgICAgICBwYWdlTnVtOiBmeXBhZ2UsXG4gICAgICAgICAgICAgICAgICAgIFFJTkdfVElUTEU6IGdldE15VmFyKCdteUNvbGxlY3Rpb24nKVxuICAgICAgICAgICAgICAgIH0pICsgJy5qczpldmFsKEpTT04ucGFyc2UoZmV0Y2goXCJoaWtlcjovL3BhZ2UvdXJsUGFyc2XvvJ/vvJ9ydWxlPScgKyBRSU5HX1RJVExFICsgJ1wiKSkucnVsZSnvvJvvvJtpbmRleFVybChpbnB1dCk7JyArIHBhcmFtSGFuZGxlKHVybFBhcmFtLCB2LnVhKSxcbiAgICAgICAgICAgICAgICBSVUxFOiB7IHRpdGxlOiB2LnRpdGxlIH0sXG4gICAgICAgICAgICAgICAgaXNJbmRleDogdHJ1ZVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgaWYgKG5ld1dpbmRvdykgT2JqZWN0LmFzc2lnbihkLmV4dHJhLCB7XG4gICAgICAgIG5ld1dpbmRvdzogdHJ1ZSxcbiAgICAgICAgd2luZG93SWQ6IFFJTkdfVElUTEUgKyAnXycgKyBkLnRpdGxlXG4gICAgfSlcbiAgICBlbC5wdXNoKGQpXG59KVxuc2V0UmVzdWx0KGVsKVxuIiwic2VhcmNoX3VybCI6Imhpa2VyOi8vZW1wdHk/a2V5d29yZD0qKiIsImdyb3VwIjoi4pGg6L275ZCI6ZuGIiwic2VhcmNoRmluZCI6ImpzOlxuc2V0UmVzdWx0KFt7XG4gICAgdGl0bGU6IFwi54K55oiR5byA5aeL6L275ZCI6ZuG4oCi6KeG55WM6IGa5pCcXCIsXG4gICAgdXJsOiBcImhpa2VyOi8vc2VhcmNoP3M9XCIgKyBnZXRQYXJhbShcImtleXdvcmRcIiksXG4gICAgZXh0cmE6IHtcbiAgICAgICAgcnVsZXM6ICQudG9TdHJpbmcoKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgUUlOR19USVRMRSA9IGdldE15VmFyKCdteUNvbGxlY3Rpb24nKSxcbiAgICAgICAgICAgICAgICB0eXBlU2hvdyA9IGdldE15VmFyKCd0eXBlU2hvdycsICdmaW5kOicpXG4gICAgICAgICAgICBsZXQgcnVsZXMgPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9kYXRhTG9hZD9ydWxlPScgKyBRSU5HX1RJVExFKSgpXG4gICAgICAgICAgICBpZiAodHlwZVNob3cuc3RhcnRzV2l0aCgnZmluZDonKSkge1xuICAgICAgICAgICAgICAgIGxldCBmaWx0ZXJLZXkgPSB0eXBlU2hvdy5zbGljZSg1KVxuICAgICAgICAgICAgICAgIGlmIChmaWx0ZXJLZXkpIHJ1bGVzID0gcnVsZXMuZmlsdGVyKCh2KSA9PiB2LnRpdGxlLmluY2x1ZGVzKGZpbHRlcktleSkpXG4gICAgICAgICAgICB9IGVsc2UgcnVsZXMgPSBydWxlcy5maWx0ZXIoKHYpID0+IHYudHlwZSA9PSB0eXBlU2hvdylcbiAgICAgICAgICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShydWxlcylcbiAgICAgICAgfSlcbiAgICB9XG59XSlcbiIsImRldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJkZXRhaWxfZmluZF9ydWxlIjoiIiwic2RldGFpbF9jb2xfdHlwZSI6Im1vdmllXzEiLCJzZGV0YWlsX2ZpbmRfcnVsZSI6IiIsInVhIjoiYXV0byIsInByZVJ1bGUiOiJwdXRNeVZhcignbXlDb2xsZWN0aW9uJywgTVlfUlVMRS50aXRsZSlcbnB1dE15VmFyKCdyZW1vdGVVcmwnLCAnaHR0cDovL2hpa2VyLm5va2lhLnByZXNzL2hpa2VydWxlL2Rldi9qc29uX2xpc3Q/bmFtZT0zODQ2MjU0NjYnKVxuLy8gXG4vKlxuKi8iLCJwYWdlcyI6Ilt7XCJjb2xfdHlwZVwiOlwidGV4dF8xXCIsXCJuYW1lXCI6XCJDbGFzc1RhYlwiLFwicGF0aFwiOlwiQ2xhc3NUYWJcIixcInJ1bGVcIjpcImNvbnN0IENsYXNzVGFiID0gZnVuY3Rpb24oY2xhc3NBcnJheSwgcGFyYW1zKSB7XFxuICAgIE9iamVjdC5hc3NpZ24odGhpcywgcGFyYW1zKVxcbiAgICB0aGlzLmFyciA9IGNsYXNzQXJyYXkubWFwKHYgPT4gdGhpcy5pbml0KHYpKVxcbiAgICB0aGlzLnNpZ24gPSAnJCcgKyBRSU5HX1RJVExFICsgJ18nICsgKHRoaXMubmFtZSB8fCAnJykgKyAnXydcXG4gICAgdGhpcy5jb2xvciA9IHRoaXMuY29sb3IgfHwgJyMxMmI2NjgnXFxuICAgIHRoaXMuYm91bmRhcnkgPSB0aGlzLmJvdW5kYXJ5IHx8ICdibGFua19ibG9jaydcXG59XFxuQ2xhc3NUYWIucHJvdG90eXBlID0ge1xcbiAgICBjb25zdHJ1Y3RvcjogQ2xhc3NUYWIsXFxuICAgIGxvYWQoZWwpIHtcXG4gICAgICAgIGxldCBmb2xkZWQgPSB0aGlzLmZvbGQgJiYgZ2V0VmFyKCdmb2xkXycgKyB0aGlzLnNpZ24sICcnKVxcbiAgICAgICAgaWYgKHRoaXMuYXJyLmxlbmd0aCA+IDEgJiYgdGhpcy5mb2xkKSBlbC5wdXNoKHtcXG4gICAgICAgICAgICB0aXRsZTogJ+KAnOKAnOKAneKAnScgKyAoZm9sZGVkID8gJ+KWticgOiAn4pa8JykuZm9udGNvbG9yKCcjMDQ5ZWZmJyksXFxuICAgICAgICAgICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKChzaWduLCBmb2xkZWQpID0+IHtcXG4gICAgICAgICAgICAgICAgcHV0VmFyKCdmb2xkXycgKyBzaWduLCB7ICcnOiAnVCcsICdUJzogJycgfSBbZm9sZGVkXSlcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9LCB0aGlzLnNpZ24sIGZvbGRlZCksXFxuICAgICAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICAgICAgfSlcXG4gICAgICAgIGxldCBhcnIgPSBmb2xkZWQgPyBbdGhpcy5hcnJbMF1dIDogdGhpcy5hcnJcXG4gICAgICAgIGFyci5mb3JFYWNoKCh2KSA9PiB7XFxuICAgICAgICAgICAgbGV0IHsgaWQsIGNsYXNzX25hbWUsIGNsYXNzX3VybCB9ID0gdixcXG4gICAgICAgICAgICBzZWxlY3RlZCA9IEpTT04uc3RyaW5naWZ5KHRoaXMuZ2V0Q2xhc3MoaWQpKVxcbiAgICAgICAgICAgIGNsYXNzX25hbWUuZm9yRWFjaCgobmFtZSwgaSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgdXJsID0gY2xhc3NfdXJsW2ldLFxcbiAgICAgICAgICAgICAgICAgICAgbm93ID0gSlNPTi5zdHJpbmdpZnkoeyBuYW1lOiBuYW1lLCB1cmw6IHVybCB9KVxcbiAgICAgICAgICAgICAgICBlbC5wdXNoKHtcXG4gICAgICAgICAgICAgICAgICAgIHRpdGxlOiBzZWxlY3RlZCA9PSBub3cgPyAn4oCc4oCc4oCd4oCdJyArIG5hbWUuZm9udGNvbG9yKHRoaXMuY29sb3IpLmJvbGQoKSA6IG5hbWUsXFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHNlbGVjdGVkID09IG5vdyA/ICdoaWtlcjovL2VtcHR5JyA6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHNpZ24sIGlkLCBub3cpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgICAgICBwdXRWYXIoc2lnbiArIGlkLCBub3cpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICAgICAgfSwgdGhpcy5zaWduLCBpZCwgbm93KSxcXG4gICAgICAgICAgICAgICAgICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG4gICAgICAgICAgICAgICAgfSlcXG4gICAgICAgICAgICB9KVxcbiAgICAgICAgICAgIGVsLnB1c2goeyBjb2xfdHlwZTogdGhpcy5ib3VuZGFyeSB9KVxcbiAgICAgICAgfSlcXG4gICAgfSxcXG4gICAgaW5pdChjbGFzc09iamVjdCkge1xcbiAgICAgICAgaWYgKHR5cGVvZiBjbGFzc09iamVjdC5jbGFzc19uYW1lID09ICdzdHJpbmcnKVxcbiAgICAgICAgICAgIGNsYXNzT2JqZWN0LmNsYXNzX25hbWUgPSBjbGFzc09iamVjdC5jbGFzc19uYW1lLnNwbGl0KCcmJylcXG4gICAgICAgIGlmICh0eXBlb2YgY2xhc3NPYmplY3QuY2xhc3NfdXJsID09ICdzdHJpbmcnKVxcbiAgICAgICAgICAgIGNsYXNzT2JqZWN0LmNsYXNzX3VybCA9IGNsYXNzT2JqZWN0LmNsYXNzX3VybC5zcGxpdCgnJicpLm1hcCgodikgPT4gdi50cmltKCkpXFxuICAgICAgICByZXR1cm4gY2xhc3NPYmplY3RcXG4gICAgfSxcXG4gICAgcHVzaChjbGFzc09iamVjdCkge1xcbiAgICAgICAgdGhpcy5hcnIucHVzaCh0aGlzLmluaXQoY2xhc3NPYmplY3QpKVxcbiAgICB9LFxcbiAgICBnZXRDbGFzcyhpZCkge1xcbiAgICAgICAgbGV0IGRlZmF1bHRDbGFzcyA9IHRoaXMuYXJyLmZpbmQoaXRlbSA9PiBpdGVtLmlkID09IGlkKVxcbiAgICAgICAgZGVmYXVsdENsYXNzID0gSlNPTi5zdHJpbmdpZnkoZGVmYXVsdENsYXNzID8ge1xcbiAgICAgICAgICAgIG5hbWU6IGRlZmF1bHRDbGFzcy5jbGFzc19uYW1lWzBdLFxcbiAgICAgICAgICAgIHVybDogZGVmYXVsdENsYXNzLmNsYXNzX3VybFswXVxcbiAgICAgICAgfSA6IHsgbmFtZTogICdjYW5ub3QgZmluZCBpZDogJyArIGlkICsgJyBpbiBjbGFzc1RhYjogJyArIHRoaXMuc2lnbiwgdXJsOiAnJ30pXFxuICAgICAgICByZXR1cm4gSlNPTi5wYXJzZShnZXRWYXIodGhpcy5zaWduICsgaWQsIGRlZmF1bHRDbGFzcykpXFxuICAgIH0sXFxuICAgIHNldFVybCh1cmwpIHtcXG4gICAgICAgIHJldHVybiB1cmwucmVwbGFjZSgvXFxcXCRcXFxceyhbXn1dKilcXFxcfS9nLCAoXywgaWQpID0+IHRoaXMuZ2V0Q2xhc3MoaWQpLnVybClcXG4gICAgfVxcbn1cXG4vLyDnlJ/miJDlpLTpg6jliIbnsbtcXG5jb25zdCBmeUFsbCA9IFJVTEUudXJsLmluY2x1ZGVzKCdmeUFsbCcpXFxubGV0IHRhYkhlYWRlciA9IFtdXFxuaWYgKFJVTEUuY2xhc3NfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5Y2xhc3MnLFxcbiAgICBjbGFzc19uYW1lOiBSVUxFLmNsYXNzX25hbWUsXFxuICAgIGNsYXNzX3VybDogUlVMRS5jbGFzc191cmxcXG59KVxcbmlmIChSVUxFLmFyZWFfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5YXJlYScsXFxuICAgIGNsYXNzX25hbWU6IFJVTEUuYXJlYV9uYW1lLFxcbiAgICBjbGFzc191cmw6IFJVTEUuYXJlYV91cmxcXG59KVxcbmlmIChSVUxFLnllYXJfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5eWVhcicsXFxuICAgIGNsYXNzX25hbWU6IFJVTEUueWVhcl9uYW1lLFxcbiAgICBjbGFzc191cmw6IFJVTEUueWVhcl91cmxcXG59KVxcbmlmIChSVUxFLnNvcnRfbmFtZSkgdGFiSGVhZGVyLnB1c2goe1xcbiAgICBpZDogZnlBbGwgPyAnZnlBbGwnIDogJ2Z5c29ydCcsXFxuICAgIGNsYXNzX25hbWU6IFJVTEUuc29ydF9uYW1lLFxcbiAgICBjbGFzc191cmw6IFJVTEUuc29ydF91cmxcXG59KVxcbnRhYkhlYWRlciA9IG5ldyBDbGFzc1RhYih0YWJIZWFkZXIsIHsgbmFtZTogUlVMRS50aXRsZSwgZm9sZDogcmVhZEZpbGUoJ3RhYkZvbGQnKSwgfSlcXG5cIn0se1wiY29sX3R5cGVcIjpcImljb25fMl9yb3VuZFwiLFwibmFtZVwiOlwi6K6+572uXCIsXCJwYXRoXCI6XCJDb25maWdcIixcInJ1bGVcIjpcImpzOlxcbmFkZExpc3RlbmVyKCdvbkNsb3NlJywgJ2NsZWFyTXlWYXIoXFxcInNvcnRGbGFnXFxcIik7cmVmcmVzaFBhZ2UoKScpXFxuc2V0UGFnZVRpdGxlKCfimpkg6L275ZCI6ZuG6K6+572uIOKamScpXFxuY29uc3QgUUlOR19USVRMRSA9IGdldE15VmFyKCdteUNvbGxlY3Rpb24nKSxcXG4gICAgdXJsID0gZ2V0TXlWYXIoJ3JlbW90ZVVybCcpXFxubGV0IGRhdGEgPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9kYXRhTG9hZD9ydWxlPScgKyBRSU5HX1RJVExFKSh0cnVlKSxcXG4gICAgZWwgPSBbe1xcbiAgICAgICAgdGl0bGU6ICc8Yj4g5riF6Zmk57yT5a2Y77yM56uL5Y2z5pu05pawIDxzbWFsbD4g77yI5Z+65LqO6L+c56iL5LuT5bqT77yM5LiN6KaB6aKR57mB54K55Ye777yJJyxcXG4gICAgICAgIHVybDogJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgodXJsKSA9PiB7XFxuICAgICAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKCdoaWtlcjovLycpIHx8IHVybC5zdGFydHNXaXRoKCdmaWxlOi8vJykpXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/ku5PlupPkuLrmnKzlnLDmlofku7bvvIzkuI3kvJrov5vooYznvJPlrZjvvIzmnKzlip/og73kuZ/ml6DmlYgnXFxuICAgICAgICAgICAgZGVsZXRlQ2FjaGUodXJsKVxcbiAgICAgICAgICAgIGJhY2soZmFsc2UpXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suabtOaWsCdcXG4gICAgICAgIH0sIHVybCksXFxuICAgICAgICBpbWc6ICdoaWtlcjovL2ltYWdlcy9pY29uNCcsXFxuICAgICAgICBjb2xfdHlwZTogJ2F2YXRhcidcXG4gICAgfV0sXFxuICAgIHVwZGF0ZUludGVydmFsID0gcmVhZEZpbGUoJ3VwZGF0ZUludGVydmFsJykgfHwgJzEnLFxcbiAgICBuZXdXaW5kb3cgPSByZWFkRmlsZSgnbmV3V2luZG93JyksXFxuICAgIHRhYkZvbGQgPSByZWFkRmlsZSgndGFiRm9sZCcpLFxcbiAgICBkaXNhYmxlQ3VzdG9tID0gcmVhZEZpbGUoJ2Rpc2FibGVDdXN0b20nKSxcXG4gICAgZWRpdE1vZGUgPSBkaXNhYmxlQ3VzdG9tID8gJ+WvvOWFpea1t+mYlCcgOiBnZXRNeVZhcignZWRpdE1vZGUnLCAn5ZCv55SoL+emgeeUqCcpXFxuXFxuZWwucHVzaCh7XFxuICAgIHRpdGxlOiAnICDwn5KhIOabtOaWsOmikeeOhzogJyArICh1cGRhdGVJbnRlcnZhbCA9PSAwID8gJ+aJi+WKqCcgOiB1cGRhdGVJbnRlcnZhbCArICflpKknKSArICcgICcsXFxuICAgIHVybDogJCh1cGRhdGVJbnRlcnZhbCwgJ+i+k+WFpeabtOaWsOmXtOmalO+8iOWkqe+8ie+8jOS4ujDliJnmiYvliqjmm7TmlrBcXFxcbuacrOWcsOaWh+S7tumTvuaOpeaXoOaViCcpLmlucHV0KCgpID0+IHtcXG4gICAgICAgIGlucHV0ID0gcGFyc2VJbnQoaW5wdXQpXFxuICAgICAgICBpZihOdW1iZXIuaXNOYU4oaW5wdXQpKSBpbnB1dCA9IDFcXG4gICAgICAgIGVsc2UgaWYoaW5wdXQgPCAxKSBpbnB1dCA9IDBcXG4gICAgICAgIHNhdmVGaWxlKCd1cGRhdGVJbnRlcnZhbCcsIGlucHV0LnRvU3RyaW5nKCkpXFxuICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICByZXR1cm4gJ2hpa2VyOi8vZW1wdHknXFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxufSwge1xcbiAgICB0aXRsZTogJyAg8J+WpSDni6znq4vpppbpobU6ICcgKyAobmV3V2luZG93ID8gJ+aYrycgOiAn5ZCmJykgKyAnICAnLFxcbiAgICB1cmw6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKG5ld1dpbmRvdykgPT4ge1xcbiAgICAgICAgc2F2ZUZpbGUoJ25ld1dpbmRvdycsIG5ld1dpbmRvdyA/ICcnIDogJzEnKVxcbiAgICAgICAgcmVmcmVzaFBhZ2UoKVxcbiAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICB9LCBuZXdXaW5kb3cpLFxcbiAgICBjb2xfdHlwZTogJ3Njcm9sbF9idXR0b24nXFxufSwge1xcbiAgICB0aXRsZTogJyAg8J+SoCDliIbnsbvmipjlj6A6ICcgKyAodGFiRm9sZCA/ICfmmK8nIDogJ+WQpicpICsgJyAgJyxcXG4gICAgdXJsOiAkKCcjbm9Mb2FkaW5nIycpLmxhenlSdWxlKCh0YWJGb2xkKSA9PiB7XFxuICAgICAgICBzYXZlRmlsZSgndGFiRm9sZCcsIHRhYkZvbGQgPyAnJyA6ICcxJylcXG4gICAgICAgIHJlZnJlc2hQYWdlKClcXG4gICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgfSwgdGFiRm9sZCksXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG59LCB7XFxuICAgIHRpdGxlOiAnICDwn5K8IOWkh+S7veaBouWkjSAgJyxcXG4gICAgdXJsOiAkKFsn5aSH5Lu9JywgJ+aBouWkjSddLCAxKS5zZWxlY3QoKFFJTkdfVElUTEUsIHVwZGF0ZUludGVydmFsLCBuZXdXaW5kb3csIHRhYkZvbGQsIGRpc2FibGVDdXN0b20pID0+IHtcXG4gICAgICAgIGxldCB1cmwgPSBnZXRNeVZhcigncmVtb3RlVXJsJylcXG4gICAgICAgIGlmICghdXJsLnN0YXJ0c1dpdGgoJ2hpa2VyOi8vJykgJiYgIXVybC5zdGFydHNXaXRoKCdmaWxlOi8vJykpXFxuICAgICAgICAgICAgdXJsID0gJ2hpa2VyOi8vZmlsZXMvbGlicy8nICsgbWQ1KHVybCkgKyAnLmpzJ1xcbiAgICAgICAgZWxzZSBpZih1cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly9wYWdlLycpKSB1cmwgPSAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgIGlmIChpbnB1dCA9PSAn5aSH5Lu9JykgcmV0dXJuICQoJ2hpa2VyOi8vZmlsZXMvdG1wLycgKyBRSU5HX1RJVExFICsgJ19iYWNrdXAuanNvbicsICfovpPlhaXlpIfku73ot6/lvoQnKVxcbiAgICAgICAgICAgIC5pbnB1dCgodXJsLCB1cGRhdGVJbnRlcnZhbCwgbmV3V2luZG93LCB0YWJGb2xkLCBkaXNhYmxlQ3VzdG9tKSA9PiB7XFxuICAgICAgICAgICAgICAgIGxldCBydWxlcyA9IHJlcXVlc3QodXJsKSxcXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbURhdGEgPSByZWFkRmlsZSgnY3VzdG9tRGF0YScpXFxuICAgICAgICAgICAgICAgIHdyaXRlRmlsZShpbnB1dCwgSlNPTi5zdHJpbmdpZnkoe1xcbiAgICAgICAgICAgICAgICAgICAgdXBkYXRlSW50ZXJ2YWw6IHVwZGF0ZUludGVydmFsLFxcbiAgICAgICAgICAgICAgICAgICAgbmV3V2luZG93OiBuZXdXaW5kb3csXFxuICAgICAgICAgICAgICAgICAgICB0YWJGb2xkOiB0YWJGb2xkLFxcbiAgICAgICAgICAgICAgICAgICAgZGlzYWJsZUN1c3RvbTogZGlzYWJsZUN1c3RvbSxcXG4gICAgICAgICAgICAgICAgICAgIGN1c3RvbURhdGE6IGN1c3RvbURhdGEsXFxuICAgICAgICAgICAgICAgICAgICBydWxlczogcnVsZXNcXG4gICAgICAgICAgICAgICAgfSkpXFxuICAgICAgICAgICAgICAgIHJldHVybiAndG9hc3Q6Ly/lt7LlpIfku73vvIzms6jmhI/oi6Xku5PlupPkuLrlrZDpobXpnaLliJnkuI3lpIfku70nXFxuICAgICAgICAgICAgfSwgdXJsLCB1cGRhdGVJbnRlcnZhbCwgbmV3V2luZG93LCB0YWJGb2xkLCBkaXNhYmxlQ3VzdG9tKVxcbiAgICAgICAgZWxzZSByZXR1cm4gJCgnaGlrZXI6Ly9maWxlcy90bXAvJyArIFFJTkdfVElUTEUgKyAnX2JhY2t1cC5qc29uJywgJ+i+k+WFpeWkh+S7vei3r+W+hCcpLmlucHV0KCh1cmwpID0+IHtcXG4gICAgICAgICAgICBsZXQgeyB1cGRhdGVJbnRlcnZhbCwgbmV3V2luZG93LCB0YWJGb2xkLCBkaXNhYmxlQ3VzdG9tLCBjdXN0b21EYXRhLCBydWxlcyB9ID0gSlNPTi5wYXJzZShyZXF1ZXN0KGlucHV0KSlcXG4gICAgICAgICAgICBzYXZlRmlsZSgndXBkYXRlSW50ZXJ2YWwnLCB1cGRhdGVJbnRlcnZhbClcXG4gICAgICAgICAgICBzYXZlRmlsZSgnbmV3V2luZG93JywgbmV3V2luZG93KVxcbiAgICAgICAgICAgIHNhdmVGaWxlKCd0YWJGb2xkJywgdGFiRm9sZClcXG4gICAgICAgICAgICBzYXZlRmlsZSgnZGlzYWJsZUN1c3RvbScsIGRpc2FibGVDdXN0b20pXFxuICAgICAgICAgICAgc2F2ZUZpbGUoJ2N1c3RvbURhdGEnLCBjdXN0b21EYXRhKVxcbiAgICAgICAgICAgIGlmKHJ1bGVzKSB3cml0ZUZpbGUodXJsLCBydWxlcylcXG4gICAgICAgICAgICByZWZyZXNoUGFnZSgpXFxuICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+W3suaBouWkje+8jOWmguaenOS4jeaDs+WQjOatpei/nOeoi+S7k+W6k++8jOWPr+S7peiuvue9ruabtOaWsOmikeeOh+S4uuaJi+WKqCdcXG4gICAgICAgIH0sIHVybClcXG4gICAgfSwgUUlOR19USVRMRSwgdXBkYXRlSW50ZXJ2YWwsIG5ld1dpbmRvdywgdGFiRm9sZCwgZGlzYWJsZUN1c3RvbSksXFxuICAgIGNvbF90eXBlOiAnc2Nyb2xsX2J1dHRvbidcXG59LCB7XFxuICAgIHRpdGxlOiAn4oCc4oCc4oCd4oCdPGZvbnQgY29sb3I9XFxcIiM2NjY2NjZcXFwiPjxzbWFsbD7nibnliKvpuKPosKLvvIzlsI/nqIvluo/mj5DkvpvogIXvvJpcXFxcbicgK1xcbiAgICAgICAgZGF0YS5yZWR1Y2UoKHNlbGYsIHYpID0+IHYuYXV0aG9yID8gc2VsZi5jb25jYXQodi5hdXRob3Iuc3BsaXQoJyYnKSkgOiBzZWxmLCBbXSlcXG4gICAgICAgIC5maWx0ZXIoKHYsIGksIGFycikgPT4gdiAmJiBhcnIuaW5kZXhPZih2KSA9PSBpKS5qb2luKCfjgIEnKSxcXG4gICAgdXJsOiAnaGlrZXI6Ly9lbXB0eScsXFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMSdcXG59KVxcblxcbmVsLnB1c2goeyBjb2xfdHlwZTogJ2xpbmUnIH0sIHtcXG4gICAgdGl0bGU6ICfigJzigJzigJ3igJ0nICsgJ/Cfk50nLnNtYWxsKCkgKyAnJm5ic3Ag6L275ZCI6ZuG6Ieq5a6a5LmJICZuYnNwJy5ib2xkKCkuZm9udGNvbG9yKCcjNzU3NTc1JykgKyAoZGlzYWJsZUN1c3RvbSA/ICfinYwnIDogJ+KtlScpLnNtYWxsKCksXFxuICAgIHVybDogJChbKGRpc2FibGVDdXN0b20gPyAn5ZCv55SoJyA6ICfnpoHnlKgnKSArICflkIjpm4boh6rlrprkuYknLCAn5riF6Zmk6Ieq5a6a5LmJ5pWw5o2uJ10sIDEpLnNlbGVjdCgoKSA9PiB7XFxuICAgICAgICBpZiAoaW5wdXQgPT0gJ+a4hemZpOiHquWumuS5ieaVsOaNricpIHtcXG4gICAgICAgICAgICBkZWxldGVGaWxlKCdjdXN0b21EYXRhJylcXG4gICAgICAgIH0gZWxzZSBpZiAoaW5wdXQgPT0gJ+WQr+eUqOWQiOmbhuiHquWumuS5iScpIHtcXG4gICAgICAgICAgICBzYXZlRmlsZSgnZGlzYWJsZUN1c3RvbScsICcnKVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBzYXZlRmlsZSgnZGlzYWJsZUN1c3RvbScsICcxJylcXG4gICAgICAgICAgICBpbnB1dCArPSAnXFxcXG7lsI/nqIvluo/lkK/nlKgv56aB55So44CB6YeN5paw5o6S5bqP562J5pON5L2c5Z2H5LiN5Lya5L2T546w5Zyo6aaW6aG15bCP56iL5bqP5YiX6KGo5LitJ1xcbiAgICAgICAgfVxcbiAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICByZXR1cm4gJ3RvYXN0Oi8v5beyJyArIGlucHV0XFxuICAgIH0pLFxcbiAgICBjb2xfdHlwZTogJ3RleHRfY2VudGVyXzEnLFxcbiAgICBleHRyYTogeyBsaW5lVmlzaWJsZTogZmFsc2UgfVxcbn0pO1xcbihkaXNhYmxlQ3VzdG9tID8gWyflr7zlhaXmtbfpmJQnXSA6IFsn5ZCv55SoL+emgeeUqCcsICfph43mlrDmjpLluo8nLCAn5pu05pS55Zu+5qCHJywgJ+WvvOWFpea1t+mYlCddKS5mb3JFYWNoKCh2KSA9PiB7XFxuICAgIGVsLnB1c2goe1xcbiAgICAgICAgdGl0bGU6IHYgPT0gZWRpdE1vZGUgPyAn4oCc4oCc4oCd4oCdJyArIHYuYm9sZCgpLmZvbnRjb2xvcignIzEyYjY2OCcpIDogdixcXG4gICAgICAgIHVybDogdiA9PSBlZGl0TW9kZSA/ICdoaWtlcjovL2VtcHR5JyA6ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKHYpID0+IHtcXG4gICAgICAgICAgICBwdXRNeVZhcignZWRpdE1vZGUnLCB2KVxcbiAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgIH0sIHYpLFxcbiAgICAgICAgY29sX3R5cGU6ICdzY3JvbGxfYnV0dG9uJ1xcbiAgICB9KVxcbn0pO1xcbmlmKGVkaXRNb2RlID09ICflr7zlhaXmtbfpmJQnKSBlbC5wdXNoKHtcXG4gICAgdGl0bGU6ICflhajpg6jlr7zlhaUnLFxcbiAgICB1cmw6ICfmtbfpmJTop4bnlYzvv6Vob21lX3J1bGVfdXJs77+lJyArICh1cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly8nKSB8fCB1cmwuc3RhcnRzV2l0aCgnZmlsZTovLycpID8gdXJsIDogJ2hpa2VyOi8vZmlsZXMvbGlicy8nICsgbWQ1KHVybCkgKyAnLmpzJyksXFxuICAgIGNvbF90eXBlOiAndGV4dF9jZW50ZXJfMScsXFxuICAgIGV4dHJhOiB7IGxpbmVWaXNpYmxlOiBmYWxzZSB9XFxufSk7XFxuKGRpc2FibGVDdXN0b20gPyBkYXRhIDogSlNPTi5wYXJzZShyZWFkRmlsZSgnY3VzdG9tRGF0YScpIHx8ICdbXScpKS5mb3JFYWNoKCh2LCBpKSA9PiB7XFxuICAgIGxldCBkID0geyB0aXRsZTogdi50aXRsZSwgaW1nOiBkYXRhW2ldLmljb24gfVxcbiAgICBzd2l0Y2ggKGVkaXRNb2RlKSB7XFxuICAgICAgICBjYXNlICflkK/nlKgv56aB55SoJzpcXG4gICAgICAgICAgICBkLnRpdGxlID0gKHYudmlzaWJsZSA/ICfwn5+iICAnIDogJ/CflLQgICcpICsgZC50aXRsZVxcbiAgICAgICAgICAgIGQudXJsID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaSkgPT4ge1xcbiAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJylcXG4gICAgICAgICAgICAgICAgcnVsZXNbaV0udmlzaWJsZSA9ICFydWxlc1tpXS52aXNpYmxlXFxuICAgICAgICAgICAgICAgIHNhdmVGaWxlKCdjdXN0b21EYXRhJywgSlNPTi5zdHJpbmdpZnkocnVsZXMpKVxcbiAgICAgICAgICAgICAgICByZWZyZXNoUGFnZShmYWxzZSlcXG4gICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgIH0sIGkpXFxuICAgICAgICAgICAgYnJlYWtcXG4gICAgICAgIGNhc2UgJ+mHjeaWsOaOkuW6jyc6XFxuICAgICAgICAgICAgbGV0IHNvcnRGbGFnID0gcGFyc2VJbnQoZ2V0TXlWYXIoJ3NvcnRGbGFnJywgJy0xJykpXFxuICAgICAgICAgICAgZC50aXRsZSA9IChzb3J0RmxhZyA9PSBpID8gJ/CflIMgICcgOiAnJykgKyBkLnRpdGxlXFxuICAgICAgICAgICAgaWYgKHNvcnRGbGFnID09IC0xKVxcbiAgICAgICAgICAgICAgICBkLnVybCA9ICQoJyNub0xvYWRpbmcjJykubGF6eVJ1bGUoKGkpID0+IHtcXG4gICAgICAgICAgICAgICAgICAgIHB1dE15VmFyKCdzb3J0RmxhZycsIGkudG9TdHJpbmcoKSlcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICd0b2FzdDovL+mAieaLqeimgeenu+WKqOWIsOeahOS9jee9ridcXG4gICAgICAgICAgICAgICAgfSwgaSlcXG4gICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgIGQudXJsID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgob2xkSW5kZXgsIG5ld0luZGV4KSA9PiB7XFxuICAgICAgICAgICAgICAgICAgICBsZXQgcnVsZXMgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJylcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzLnNwbGljZShuZXdJbmRleCwgMCwgcnVsZXMuc3BsaWNlKG9sZEluZGV4LCAxKVswXSlcXG4gICAgICAgICAgICAgICAgICAgIHNhdmVGaWxlKCdjdXN0b21EYXRhJywgSlNPTi5zdHJpbmdpZnkocnVsZXMpKVxcbiAgICAgICAgICAgICAgICAgICAgcHV0TXlWYXIoJ3NvcnRGbGFnJywgJy0xJylcXG4gICAgICAgICAgICAgICAgICAgIHJlZnJlc2hQYWdlKGZhbHNlKVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICdoaWtlcjovL2VtcHR5J1xcbiAgICAgICAgICAgICAgICB9LCBzb3J0RmxhZywgaSlcXG4gICAgICAgICAgICBicmVha1xcbiAgICAgICAgY2FzZSAn5pu05pS55Zu+5qCHJzpcXG4gICAgICAgICAgICBkLnVybCA9ICQodi5pY29uIHx8ICcnLCAn6L6T5YWl5paw5Zu+5qCH5Zyw5Z2A5oiW6aKc6Imy5Luj56CB77yaJykuaW5wdXQoKGkpID0+IHtcXG4gICAgICAgICAgICAgICAgbGV0IHJ1bGVzID0gSlNPTi5wYXJzZShyZWFkRmlsZSgnY3VzdG9tRGF0YScpIHx8ICdbXScpXFxuICAgICAgICAgICAgICAgIGlmIChpbnB1dClcXG4gICAgICAgICAgICAgICAgICAgIHJ1bGVzW2ldLmljb24gPSBpbnB1dFxcbiAgICAgICAgICAgICAgICBlbHNlXFxuICAgICAgICAgICAgICAgICAgICBkZWxldGUgcnVsZXNbaV0uaWNvblxcbiAgICAgICAgICAgICAgICBzYXZlRmlsZSgnY3VzdG9tRGF0YScsIEpTT04uc3RyaW5naWZ5KHJ1bGVzKSlcXG4gICAgICAgICAgICAgICAgcmVmcmVzaFBhZ2UoZmFsc2UpXFxuICAgICAgICAgICAgICAgIHJldHVybiAnaGlrZXI6Ly9lbXB0eSdcXG4gICAgICAgICAgICB9LCBpKVxcbiAgICAgICAgICAgIGJyZWFrXFxuICAgICAgICBjYXNlICflr7zlhaXmtbfpmJQnOlxcbiAgICAgICAgICAgIGQudXJsID0gJCgnI25vTG9hZGluZyMnKS5sYXp5UnVsZSgoaSk9PntcXG4gICAgICAgICAgICAgICAgbGV0IGRhdGEgPSAkLnJlcXVpcmUoJ2hpa2VyOi8vcGFnZS9kYXRhTG9hZD9ydWxlPScgKyBnZXRNeVZhcignbXlDb2xsZWN0aW9uJykpKHRydWUpXFxuICAgICAgICAgICAgICAgIHJldHVybiAncnVsZTovLycgKyBiYXNlNjRFbmNvZGUoSlNPTi5zdHJpbmdpZnkoZGF0YVtpXSkpXFxuICAgICAgICAgICAgfSwgaSlcXG4gICAgICAgICAgICBicmVha1xcbiAgICB9XFxuICAgIGVsLnB1c2goZClcXG59KVxcbnNldFJlc3VsdChlbClcXG5cIn0se1wiY29sX3R5cGVcIjpcIm1vdmllXzNcIixcIm5hbWVcIjpcIumhtemdoui9veWFpVwiLFwicGF0aFwiOlwiZnJhbWVMb2FkXCIsXCJydWxlXCI6XCJqczpcXG5jb25zdCBRSU5HX1RJVExFID0gZ2V0TXlWYXIoJ215Q29sbGVjdGlvbicpXFxubGV0IG15Q29sbGVjdGlvbl9lbCA9IFtdLFxcbiAgICB7IFJVTEUsIGlzSW5kZXgsIHBhZ2VUaXRsZSB9ID0gTVlfUEFSQU1TLFxcbiAgICB0aGlzUlVMRSA9ICQucmVxdWlyZSgnaGlrZXI6Ly9wYWdlL2RhdGFMb2FkP3J1bGU9JyArIFFJTkdfVElUTEUpKCkuZmluZCgodikgPT4gdi50aXRsZSA9PSBSVUxFLnRpdGxlKVxcbmlmIChpc0luZGV4KSB7XFxuICAgIFJVTEUgPSB0aGlzUlVMRVxcbn0gZWxzZSB7XFxuICAgIFJVTEUucGFnZXMgPSB0aGlzUlVMRS5wYWdlc1xcbn1cXG5ldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9wcmVGdW5jP3J1bGU9JyArIFFJTkdfVElUTEUpKS5ydWxlKVxcbmV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL3VybFBhcnNlP3J1bGU9JyArIFFJTkdfVElUTEUpKS5ydWxlKVxcblxcbmlmIChpc0luZGV4KSB7XFxuICAgIC8vIOWKoOi9vUNsYXNzVGFi57uE5Lu2XFxuICAgIGV2YWwoSlNPTi5wYXJzZShmZXRjaCgnaGlrZXI6Ly9wYWdlL0NsYXNzVGFiP3J1bGU9JyArIFFJTkdfVElUTEUpKS5ydWxlKVxcbiAgICBpZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgICAgICB0YWJIZWFkZXIubG9hZChteUNvbGxlY3Rpb25fZWwpXFxuICAgICAgICBpZiAoUlVMRS5zZWFyY2hfdXJsKSBteUNvbGxlY3Rpb25fZWwucHVzaCh7XFxuICAgICAgICAgICAgdGl0bGU6IFxcXCLmkJzntKJcXFwiLFxcbiAgICAgICAgICAgIGRlc2M6IFxcXCLmkJzkvaDmg7PopoHnmoQuLi5cXFwiLFxcbiAgICAgICAgICAgIHVybDogJ1xcXCJoaWtlcjovL3NlYXJjaD9zPVxcXCIraW5wdXQnLFxcbiAgICAgICAgICAgIGV4dHJhOiB7XFxuICAgICAgICAgICAgICAgIHJ1bGVzOiAkLnRvU3RyaW5nKChRSU5HX1RJVExFLCB0aXRsZSkgPT4ge1xcbiAgICAgICAgICAgICAgICAgICAgbGV0IHJ1bGVzID0gJC5yZXF1aXJlKCdoaWtlcjovL3BhZ2UvZGF0YUxvYWQ/cnVsZT0nICsgUUlOR19USVRMRSkoKVxcbiAgICAgICAgICAgICAgICAgICAgcnVsZXMgPSBbcnVsZXMuZmluZCgodikgPT4gdi50aXRsZSA9PSB0aXRsZSldXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocnVsZXMpXFxuICAgICAgICAgICAgICAgIH0sIFFJTkdfVElUTEUsIFJVTEUudGl0bGUpLFxcbiAgICAgICAgICAgICAgICBkZWZhdWx0VmFsdWU6IGdldE15VmFyKCdzZWFyY2hLZXknLCAnJyksXFxuICAgICAgICAgICAgICAgIG9uQ2hhbmdlOiBcXFwicHV0TXlWYXIoJ3NlYXJjaEtleScsaW5wdXQpXFxcIlxcbiAgICAgICAgICAgIH0sXFxuICAgICAgICAgICAgY29sX3R5cGU6IFxcXCJpbnB1dFxcXCIsXFxuICAgICAgICB9KVxcbiAgICB9XFxuICAgIC8vIOWkhOeQhk1ZX1JVTEVcXG4gICAgTVlfUlVMRS5jbGFzc191cmwgPSB0YWJIZWFkZXIuZ2V0Q2xhc3MoZnlBbGwgPyAnZnlBbGwnIDogJ2Z5Y2xhc3MnKS51cmxcXG4gICAgTVlfUlVMRS5hcmVhX3VybCA9IGZ5QWxsID8gTVlfUlVMRS5jbGFzc191cmwgOiB0YWJIZWFkZXIuZ2V0Q2xhc3MoJ2Z5YXJlYScpLnVybFxcbiAgICBNWV9SVUxFLnllYXJfdXJsID0gZnlBbGwgPyBNWV9SVUxFLmNsYXNzX3VybCA6IHRhYkhlYWRlci5nZXRDbGFzcygnZnl5ZWFyJykudXJsXFxuICAgIE1ZX1JVTEUuc29ydF91cmwgPSBmeUFsbCA/IE1ZX1JVTEUuY2xhc3NfdXJsIDogdGFiSGVhZGVyLmdldENsYXNzKCdmeXNvcnQnKS51cmxcXG4gICAgTVlfUlVMRS51cmwgPSBSVUxFLnVybFxcbiAgICBNWV9SVUxFLmNvbF90eXBlID0gUlVMRS5jb2xfdHlwZVxcbiAgICBNWV9SVUxFLmRldGFpbF9jb2xfdHlwZSA9IFJVTEUuZGV0YWlsX2NvbF90eXBlXFxuICAgIE1ZX1JVTEUuZmluZF9ydWxlID0gUlVMRS5maW5kX3J1bGVcXG4gICAgTVlfUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gUlVMRS5kZXRhaWxfZmluZF9ydWxlXFxuICAgIE1ZX1JVTEUucGFyYW1zID0ge31cXG59IGVsc2Uge1xcbiAgICBNWV9SVUxFLnVybCA9IE1ZX1BBUkFNUy51cmxcXG4gICAgTVlfUlVMRS5jb2xfdHlwZSA9IFJVTEUuZGV0YWlsX2NvbF90eXBlXFxuICAgIE1ZX1JVTEUuZmluZF9ydWxlID0gUlVMRS5kZXRhaWxfZmluZF9ydWxlXFxuICAgIE1ZX1JVTEUucGFyYW1zID0gUlVMRS5wYXJhbXNcXG59XFxuTVlfUlVMRS5wYWdlcyA9IFJVTEUucGFnZXNcXG5NWV9SVUxFLnBhZ2VMaXN0ID0gSlNPTi5wYXJzZShNWV9SVUxFLnBhZ2VzIHx8ICdbXScpXFxuTVlfUlVMRS50aXRsZSA9IFJVTEUudGl0bGVcXG5cXG5pZiAoIWlzSW5kZXgpIHtcXG4gICAgaWYgKHBhZ2VUaXRsZSkgc2V0UGFnZVRpdGxlKHBhZ2VUaXRsZSlcXG4gICAgc2V0TGFzdENoYXB0ZXJSdWxlKHRoaXNSVUxFLmxhc3RfY2hhcHRlcl9ydWxlKVxcbiAgICBNWV9QQVJBTVMgPSBNWV9SVUxFLnBhcmFtc1xcbn1cXG4vLyDpooTlpITnkIblubbliJ3lp4vljJZjb25maWdcXG5pZiAoTVlfUEFHRSA9PSAxKSB7XFxuICAgIGxldCBsb2FkZWQgPSBnZXRNeVZhcihNWV9SVUxFLnRpdGxlICsgXFxcIkBwcmVcXFwiKVxcbiAgICBpZiAoIWxvYWRlZCB8fCBpc0luZGV4KSB7XFxuICAgICAgICBldmFsKHRoaXNSVUxFLnByZVJ1bGUpXFxuICAgICAgICBwdXRNeVZhcihNWV9SVUxFLnRpdGxlICsgXFxcIkBwcmVcXFwiLCBcXFwiMVxcXCIpXFxuICAgIH1cXG59XFxubGV0IF9jZmcgPSBnZXRNeVZhcignaW5pdENvbmZpZycsICd7fScpXFxuaWYgKF9jZmcgJiYgX2NmZy5sZW5ndGggPiAwKSB7XFxuICAgIGNvbmZpZyA9IEpTT04ucGFyc2UoX2NmZylcXG59XFxuXFxuLy8g5q2j5paH6Kej5p6Q6YCa55So5Y+Y6YePXFxubGV0IGFzc2lnbkxhenlSdWxlID0gJC50b1N0cmluZygoUUlOR19USVRMRSwgdGl0bGUsIHVybCkgPT4ge1xcbiAgICBsZXQgUlVMRSA9ICQucmVxdWlyZShcXFwiaGlrZXI6Ly9wYWdlL2RhdGFMb2FkP3J1bGU9XFxcIiArIFFJTkdfVElUTEUpKCkuZmluZCgodikgPT4gdi50aXRsZSA9PSB0aXRsZSlcXG4gICAgcmV0dXJuIHsgdGl0bGU6dGl0bGUsIHVybDogdXJsLCBwYWdlczogUlVMRS5wYWdlcywgcGFnZUxpc3Q6IEpTT04ucGFyc2UoUlVMRS5wYWdlcyB8fCAnW10nKSB9XFxufSwgUUlOR19USVRMRSwgTVlfUlVMRS50aXRsZSwgTVlfUlVMRS51cmwpXFxuZnVuY3Rpb24gZ2VuTXlSdWxlKCkge1xcbiAgICBsZXQgcnVsZSA9IE9iamVjdC5hc3NpZ24oe30sIE1ZX1JVTEUpXFxuICAgIGRlbGV0ZSBydWxlLmxhc3RfY2hhcHRlcl9ydWxlXFxuICAgIGRlbGV0ZSBydWxlLnByZVJ1bGVcXG4gICAgZGVsZXRlIHJ1bGUucGFnZUxpc3RcXG4gICAgZGVsZXRlIHJ1bGUucGFnZXNcXG4gICAgcmV0dXJuIHJ1bGVcXG59XFxuZnVuY3Rpb24gcnVuQ29kZShydWxlKSB7XFxuICAgIHRyeSB7XFxuICAgICAgICBsZXQgW2lucHV0LCBjb2RlXSA9IHJ1bGUuc3BsaXQoJy5qczonKVxcbiAgICAgICAgcmV0dXJuIGNvZGUgPyBldmFsKGNvZGUpIDogcnVsZVxcbiAgICB9IGNhdGNoIChlKSB7IHJldHVybiBydWxlIH1cXG59XFxuZnVuY3Rpb24gZ2VuRXhVcmwodXJsKSB7XFxuICAgIHVybCA9IHVybC5zcGxpdCgnOycpXFxuICAgIHJldHVybiB1cmwuc2hpZnQoKSArICc7JyArIHBhcmFtSGFuZGxlKHVybCwgdGhpc1JVTEUudWEsIE1ZX1JVTEUudXJsKVxcbn1cXG4vLyDmraPmlofop6PmnpBcXG5pZiAoTVlfUlVMRS5maW5kX3J1bGUuc3RhcnRzV2l0aCgnanM6JykpIHtcXG4gICAgc2V0UmVzdWx0ID0gZnVuY3Rpb24oZWwsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMpIHtcXG4gICAgICAgIHBhcmFtMSA9IENBTExCQUNLX0tFWVxcbiAgICAgICAgcGFyYW0yID0gTVlfUlVMRVxcbiAgICAgICAgcGFyYW0zID0gTVlfVFlQRVxcbiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoZWwuZGF0YSkpIGVsID0gZWwuZGF0YVxcbiAgICAgICAgQXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkobXlDb2xsZWN0aW9uX2VsLCBlbC5tYXAoKHYpID0+IHtcXG4gICAgICAgICAgICBpZighdi5leHRyYSkgdi5leHRyYSA9IHt9XFxuICAgICAgICAgICAgdi5jb2xfdHlwZSA9IHYuY29sX3R5cGUgfHwgTVlfUlVMRS5jb2xfdHlwZVxcbiAgICAgICAgICAgIGxldCBNWV9fUlVMRSA9IE9iamVjdC5hc3NpZ24oZ2VuTXlSdWxlKCksIHsgcGFyYW1zOiB2LmV4dHJhIH0pXFxuXFxuICAgICAgICAgICAgaWYgKHR5cGVvZiB2LnVybCAhPSAnc3RyaW5nJyB8fCBbJ3J1bGUnLCAncGljcycsICd0b2FzdCcsICdpbnB1dCcsICdjb25maXJtJywgJ2NvcHknLCAnZWRpdEZpbGUnLCAneDUnLCAneDVXZWJWaWV3JywgJ3g1UGxheScsICd3ZWInLCAnc2VsZWN0JywgJ3g1UnVsZScsICd3ZWJSdWxlJywgJ2Rvd25sb2FkJywgJ3NoYXJlJ10uZmluZCgodnYpID0+IHYudXJsLnN0YXJ0c1dpdGgodnYgKyAnOi8vJykpIHx8IFsneDVfd2Vidmlld19zaW5nbGUnLCAnaW5wdXQnXS5maW5kKCh2dikgPT4gdi5jb2xfdHlwZSA9PSB2dikpIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLmluY2x1ZGVzKCdAcnVsZT0nKSkge1xcbiAgICAgICAgICAgICAgICBsZXQgW18sIHVybCwgcnVsZV0gPSB2LnVybC5tYXRjaCgvXihbXFxcXHNcXFxcU10qPylAcnVsZT0oW1xcXFxzXFxcXFNdKikkLylcXG4gICAgICAgICAgICAgICAgdi51cmwgPSB1cmxcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSA9IHJ1bGVcXG4gICAgICAgICAgICAgICAgTVlfX1JVTEUuZGV0YWlsX2NvbF90eXBlID0gTVlfUlVMRS5jb2xfdHlwZVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodi51cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly9wYWdlLycpKSB7XFxuICAgICAgICAgICAgICAgIGlmICh2LnVybC5pbmNsdWRlcygncnVsZT0nKSB8fCB2LmV4dHJhLnJ1bGUpXFxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgICAgICBsZXQgW18sIHBhdGgsIGZsYWcsIHBhcmFtc10gPSB2LnVybC5tYXRjaCgvXmhpa2VyOlxcXFwvXFxcXC9wYWdlXFxcXC8oLis/KSgjLio/KT8oPzpcXFxcPyguKikpPyQvKSxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlBhZ2UgPSBNWV9SVUxFLnBhZ2VMaXN0LmZpbmQoKHYpID0+IHYucGF0aCA9PSBwYXRoKSxcXG4gICAgICAgICAgICAgICAgICAgIHN1YlVybCA9IChwYXJhbXMgfHwgJycpLnNwbGl0KCcmJykuZmluZCgodikgPT4gdi5zdGFydHNXaXRoKCd1cmw9JykpXFxuICAgICAgICAgICAgICAgIHYudXJsID0gKHN1YlVybCA/IHN1YlVybC5zbGljZSg0KS5yZXBsYWNlKC/vvJ/vvJ8vZywgJz8nKS5yZXBsYWNlKC/vvIbvvIYvZywgJyYnKSA6ICh2LmV4dHJhIHx8IHt9KS51cmwpIHx8ICdoaWtlcjovL2VtcHR5JyArIGZsYWcgKyAnPycgKyAocGFyYW1zIHx8ICcnKVxcbiAgICAgICAgICAgICAgICBNWV9fUlVMRS5kZXRhaWxfZmluZF9ydWxlID0gc3ViUGFnZS5ydWxlXFxuICAgICAgICAgICAgICAgIE1ZX19SVUxFLmRldGFpbF9jb2xfdHlwZSA9IHN1YlBhZ2UuY29sX3R5cGVcXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHYudXJsLmluY2x1ZGVzKCdAbGF6eVJ1bGU9JykpIHtcXG4gICAgICAgICAgICAgICAgbGV0IHJlSW5kZXggPSB2LnVybC5pbmRleE9mKCcuanM6JylcXG4gICAgICAgICAgICAgICAgaWYgKHJlSW5kZXggPj0gMCkgdi51cmwgPSB2LnVybC5zbGljZSgwLCByZUluZGV4KSArICcuanM6XFxcXG5pZihNWV9SVUxFKU9iamVjdC5hc3NpZ24oTVlfUlVMRSwgJyArIGFzc2lnbkxhenlSdWxlICsgJyk7JyArIHYudXJsLnNsaWNlKHJlSW5kZXggKyA0KVxcbiAgICAgICAgICAgICAgICByZXR1cm4gdlxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXNJbmRleCkge1xcbiAgICAgICAgICAgICAgICBpZiAoIU1ZX1JVTEUuZGV0YWlsX2ZpbmRfcnVsZSB8fCAvaGlrZXI6XFxcXC9cXFxcLyg/IWVtcHR5LiskKS8udGVzdCh2LnVybCkpIHJldHVybiB2XFxuICAgICAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICB9XFxuICAgICAgICAgICAgdi5leHRyYSA9IE9iamVjdC5hc3NpZ24oe30sIHYuZXh0cmEsIHtcXG4gICAgICAgICAgICAgICAgdXJsOiBnZW5FeFVybCh2LnVybCksXFxuICAgICAgICAgICAgICAgIFJVTEU6IE1ZX19SVUxFLFxcbiAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IGlzSW5kZXggJiYgdi50aXRsZVxcbiAgICAgICAgICAgIH0pXFxuICAgICAgICAgICAgdi51cmwgPSAnaGlrZXI6Ly9wYWdlL2ZyYW1lTG9hZD9ydWxlPScgKyBRSU5HX1RJVExFXFxuICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgIH0pKVxcbiAgICAgICAgbWV0aG9kX3NldFJlc3VsdC5pbnZva2UoamF2YUNvbnRleHQsIG15Q29sbGVjdGlvbl9lbCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMylcXG4gICAgfVxcbiAgICBzZXRIb21lUmVzdWx0ID0gc2V0UmVzdWx0XFxuICAgIHNldFNlYXJjaFJlc3VsdCA9IHNldFJlc3VsdFxcblxcbiAgICBldmFsKE1ZX1JVTEUuZmluZF9ydWxlLnNsaWNlKDMpKVxcbn0gZWxzZSB7XFxuICAgIGxldCBbXywgZmluZFJ1bGUsIGRldGFpbEZpbmRSdWxlXSA9IE1ZX1JVTEUuZmluZF9ydWxlLm1hdGNoKC9eKFtcXFxcc1xcXFxTXSo/KSg/Oj09PihbXFxcXHNcXFxcU10qKSk/JC8pXFxuICAgIGZpbmRSdWxlID0gZmluZFJ1bGUuc3BsaXQoJzsnKVxcbiAgICBwYXJzZURvbUZvckFycmF5KGdldFJlc0NvZGUoKSwgZmluZFJ1bGUuc2hpZnQoKSkuZm9yRWFjaCgoZGF0YSkgPT4ge1xcbiAgICAgICAgbGV0IFt0aXRsZSwgaW1nLCBkZXNjLCB1cmxdID0gZmluZFJ1bGUubWFwKCh2LCBpKSA9PiB7XFxuICAgICAgICAgICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgICAgICAgICBpZiAodiA9PSAnKicpIHJldHVybiAnJ1xcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB2ID0gKGkgPT0gMSB8fCBpID09IDMpID9cXG4gICAgICAgICAgICAgICAgICAgICAgICBwYXJzZURvbShkYXRhLCB2KSA6XFxuICAgICAgICAgICAgICAgICAgICAgICAgcGFyc2VEb21Gb3JIdG1sKGRhdGEsIHYpXFxuICAgICAgICAgICAgICAgICAgICBpZiAoaSAhPSAzKSB2ID0gcnVuQ29kZSh2KVxcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHZcXG4gICAgICAgICAgICAgICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gJycgfVxcbiAgICAgICAgICAgIH0pLFxcbiAgICAgICAgICAgIHJlcyA9IHtcXG4gICAgICAgICAgICAgICAgdGl0bGU6IHRpdGxlLCB1cmw6IHVybCxcXG4gICAgICAgICAgICAgICAgZGVzYzogZGVzYywgaW1nOiBpbWcsXFxuICAgICAgICAgICAgICAgIGNvbF90eXBlOiBNWV9SVUxFLmNvbF90eXBlXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgaWYgKHJlcy51cmwpIHtcXG4gICAgICAgICAgICBpZiAocmVzLnVybC5pbmNsdWRlcygnQGxhenlSdWxlPScpKSB7XFxuICAgICAgICAgICAgICAgIGxldCByZUluZGV4ID0gcmVzLnVybC5pbmRleE9mKCcuanM6JylcXG4gICAgICAgICAgICAgICAgaWYgKHJlSW5kZXggPj0gMCkgcmVzLnVybCA9IHJlcy51cmwuc2xpY2UoMCwgcmVJbmRleCkgKyAnLmpzOlxcXFxuaWYoTVlfUlVMRSlPYmplY3QuYXNzaWduKE1ZX1JVTEUsICcgKyBhc3NpZ25MYXp5UnVsZSArICcpOycgKyByZXMudXJsLnNsaWNlKHJlSW5kZXggKyA0KVxcbiAgICAgICAgICAgIH0gZWxzZSAgaWYgKGRldGFpbEZpbmRSdWxlKSB7XFxuICAgICAgICAgICAgICAgIHJlcy5leHRyYSA9IHtcXG4gICAgICAgICAgICAgICAgICAgIHVybDogZ2VuRXhVcmwodXJsKSxcXG4gICAgICAgICAgICAgICAgICAgIFJVTEU6IE9iamVjdC5hc3NpZ24oZ2VuTXlSdWxlKCksIHsgZGV0YWlsX2ZpbmRfcnVsZTogZGV0YWlsRmluZFJ1bGUgfSksXFxuICAgICAgICAgICAgICAgICAgICBwYWdlVGl0bGU6IGlzSW5kZXggJiYgdGl0bGVcXG4gICAgICAgICAgICAgICAgfVxcbiAgICAgICAgICAgICAgICByZXMudXJsID0gJ2hpa2VyOi8vcGFnZS9mcmFtZUxvYWQ/cnVsZT0nICsgUUlOR19USVRMRVxcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoTVlfUlVMRS5kZXRhaWxfZmluZF9ydWxlKSB7XFxuICAgICAgICAgICAgICAgIHJlcy5leHRyYSA9IHtcXG4gICAgICAgICAgICAgICAgICAgIHVybDogZ2VuRXhVcmwodXJsKSxcXG4gICAgICAgICAgICAgICAgICAgIFJVTEU6IGdlbk15UnVsZSgpLFxcbiAgICAgICAgICAgICAgICAgICAgcGFnZVRpdGxlOiBpc0luZGV4ICYmIHRpdGxlXFxuICAgICAgICAgICAgICAgIH1cXG4gICAgICAgICAgICAgICAgcmVzLnVybCA9ICdoaWtlcjovL3BhZ2UvZnJhbWVMb2FkP3J1bGU9JyArIFFJTkdfVElUTEVcXG4gICAgICAgICAgICB9XFxuICAgICAgICB9XFxuICAgICAgICBteUNvbGxlY3Rpb25fZWwucHVzaChyZXMpXFxuICAgIH0pXFxuICAgIHNldFJlc3VsdChteUNvbGxlY3Rpb25fZWwpXFxufVxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5pWw5o2u6L295YWlXCIsXCJwYXRoXCI6XCJkYXRhTG9hZFwiLFwicnVsZVwiOlwiJC5leHBvcnRzID0gZnVuY3Rpb24oc2hvd0FsbCkge1xcbiAgICBsZXQgdXJsID0gZ2V0TXlWYXIoJ3JlbW90ZVVybCcpLFxcbiAgICAgICAgZGF0YSA9IFtdXFxuICAgIGlmICh1cmwuc3RhcnRzV2l0aCgnaGlrZXI6Ly8nKSB8fCB1cmwuc3RhcnRzV2l0aCgnZmlsZTovLycpKSB7XFxuICAgICAgICAvLyDlpoLmnpzkuLrmnKzlnLDmlofku7bliJnkuI3ov5vooYznvJPlrZhcXG4gICAgICAgIHRyeSB7XFxuICAgICAgICAgICAgbGV0IG9yaURhdGEgPSBmZXRjaCh1cmwpXFxuICAgICAgICAgICAgaWYgKHVybC5zdGFydHNXaXRoKCdoaWtlcjovL3BhZ2UvJykpXFxuICAgICAgICAgICAgICAgIG9yaURhdGEgPSBKU09OLnBhcnNlKG9yaURhdGEpLnJ1bGVcXG4gICAgICAgICAgICBkYXRhID0gSlNPTi5wYXJzZShvcmlEYXRhKVxcbiAgICAgICAgfSBjYXRjaCAoZSkge31cXG4gICAgfSBlbHNlIHtcXG4gICAgICAgIC8vIOiOt+WPlui/nOeoi+aVsOaNru+8jOajgOafpemXtOmalOm7mOiupOS4gOWkqVxcbiAgICAgICAgbGV0IGludGVydmFsID0gcGFyc2VJbnQocmVhZEZpbGUoJ3VwZGF0ZUludGVydmFsJykgfHwgJzEnKSxcXG4gICAgICAgICAgICBvbGREYXRhID0gZmV0Y2goJ2hpa2VyOi8vZmlsZXMvbGlicy8nICsgbWQ1KHVybCkgKyAnLmpzJyksXFxuICAgICAgICAgICAgcmVtb3RlRGF0YSA9IFtdXFxuICAgICAgICBpZihpbnRlcnZhbCA9PSAwKSBpbnRlcnZhbCA9IC0xXFxuICAgICAgICB0cnkgeyByZW1vdGVEYXRhID0gSlNPTi5wYXJzZShmZXRjaENhY2hlKHVybCwgMjQgKiBpbnRlcnZhbCwge3RpbWVvdXQ6NTAwMDB9KSkgfSBjYXRjaChlKSB7fVxcbiAgICAgICAgaWYoIUFycmF5LmlzQXJyYXkocmVtb3RlRGF0YSkpIHJlbW90ZURhdGEgPSBbXVxcbiAgICAgICAgaWYgKHJlbW90ZURhdGEubGVuZ3RoIDwgMykge1xcbiAgICAgICAgICAgIGxvZygn5pyq6I635Y+W5Yiw5pWw5o2uJylcXG4gICAgICAgICAgICBpZiAob2xkRGF0YSkgd3JpdGVGaWxlKCdoaWtlcjovL2ZpbGVzL2xpYnMvJyArIG1kNSh1cmwpICsgJy5qcycsIG9sZERhdGEpXFxuICAgICAgICAgICAgZGF0YSA9IEpTT04ucGFyc2Uob2xkRGF0YSB8fCAnW10nKVxcbiAgICAgICAgfSBlbHNlIHtcXG4gICAgICAgICAgICBsb2coJ+W3suiOt+WPluWIsOaVsOaNricpXFxuICAgICAgICAgICAgZGF0YSA9IHJlbW90ZURhdGFcXG4gICAgICAgIH1cXG4gICAgfVxcbiAgICBkYXRhID0gZGF0YS5maWx0ZXIoKHYpID0+IHsgcmV0dXJuIHYudGl0bGUgIT0gZ2V0TXlWYXIoJ215Q29sbGVjdGlvbicpICYmICEodi5hdXRob3IgfHwgJycpLmluY2x1ZGVzKCfovbvlkIjpm4bnlJ/miJDlmagnKSB9KVxcbiAgICBpZiAocmVhZEZpbGUoJ2Rpc2FibGVDdXN0b20nKSkgcmV0dXJuIGRhdGFcXG4gICAgZWxzZSB7IC8vIOWGmeWFpeiHquWumuS5ieaVsOaNrlxcbiAgICAgICAgbGV0IGN1c3RvbURhdGEgPSBKU09OLnBhcnNlKHJlYWRGaWxlKCdjdXN0b21EYXRhJykgfHwgJ1tdJyksXFxuICAgICAgICAgICAgcmV3cml0ZURhdGEgPSBbXVxcbiAgICAgICAgY3VzdG9tRGF0YSA9IGN1c3RvbURhdGEucmVkdWNlKChzZWxmLCB2KSA9PiB7XFxuICAgICAgICAgICAgbGV0IGluZGV4ID0gZGF0YS5maW5kSW5kZXgoKHZ2KSA9PiB2LnRpdGxlID09IHZ2LnRpdGxlKVxcbiAgICAgICAgICAgIGlmIChpbmRleCA+PSAwKSB7XFxuICAgICAgICAgICAgICAgIHNlbGYucHVzaCh2KVxcbiAgICAgICAgICAgICAgICBsZXQgcnVsZSA9IGRhdGEuc3BsaWNlKGluZGV4LCAxKVswXVxcbiAgICAgICAgICAgICAgICBpZiAoc2hvd0FsbCB8fCB2LnZpc2libGUpXFxuICAgICAgICAgICAgICAgICAgICByZXdyaXRlRGF0YS5wdXNoKE9iamVjdC5hc3NpZ24ocnVsZSwgdikpXFxuICAgICAgICAgICAgfVxcbiAgICAgICAgICAgIHJldHVybiBzZWxmXFxuICAgICAgICB9LCBbXSlcXG4gICAgICAgIGRhdGEuZm9yRWFjaCgodikgPT4gY3VzdG9tRGF0YS5wdXNoKHsgdGl0bGU6IHYudGl0bGUsIHZpc2libGU6IHRydWUgfSkpXFxuICAgICAgICBzYXZlRmlsZSgnY3VzdG9tRGF0YScsIEpTT04uc3RyaW5naWZ5KGN1c3RvbURhdGEpKVxcbiAgICAgICAgcmV0dXJuIHJld3JpdGVEYXRhLmNvbmNhdChkYXRhKVxcbiAgICB9XFxufVxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi5Ye95pWw6YeN5YaZXCIsXCJwYXRoXCI6XCJwcmVGdW5jXCIsXCJydWxlXCI6XCIvLyDpmLLmraJyZXF1aXJl5aSa5qyh6L+Q6KGMXFxubGV0IHJDYWNoZSA9IHt9XFxucmVxdWlyZSA9IGZ1bmN0aW9uKHBhcmFtMCwgcGFyYW0xLCBwYXJhbTIsIHBhcmFtMywgcGFyYW00KSB7XFxuICAgIGlmICghcGFyYW0wIHx8IHJDYWNoZVtwYXJhbTBdICE9IG51bGwpIHtcXG4gICAgICAgIHJldHVyblxcbiAgICB9XFxuICAgIHJDYWNoZVtwYXJhbTBdID0gMVxcbiAgICBwYXJhbTIgPSBwYXJhbTIgfHwgMFxcbiAgICBwYXJhbTMgPSBNWV9USUNLRVRcXG4gICAgcGFyYW00ID0gZXZhbFxcbiAgICByZXR1cm4gbWV0aG9kX3JlcXVpcmUuaW52b2tlKGphdmFDb250ZXh0LCBwYXJhbTAsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNClcXG59XFxucmVxdWlyZUNhY2hlID0gZnVuY3Rpb24ocGFyYW0wLCBwYXJhbTEsIHBhcmFtMiwgcGFyYW0zLCBwYXJhbTQsIHBhcmFtNSkge1xcbiAgICBpZiAoIXBhcmFtMCB8fCByQ2FjaGVbcGFyYW0wXSAhPSBudWxsKSB7XFxuICAgICAgICByZXR1cm5cXG4gICAgfVxcbiAgICByQ2FjaGVbcGFyYW0wXSA9IDFcXG4gICAgcGFyYW0zID0gcGFyYW0zIHx8IDBcXG4gICAgcGFyYW00ID0gTVlfVElDS0VUXFxuICAgIHBhcmFtNSA9IGV2YWxcXG4gICAgcmV0dXJuIG1ldGhvZF9yZXF1aXJlQ2FjaGUuaW52b2tlKGphdmFDb250ZXh0LCBwYXJhbTAsIHBhcmFtMSwgcGFyYW0yLCBwYXJhbTMsIHBhcmFtNCwgcGFyYW01KVxcbn1cXG5yYyA9IHJlcXVpcmVDYWNoZVxcblxcbi8vIOacgOaWsOeroOiKguinhOWImeazqOWFpemihOWkhOeQhuS7o+eggVxcbnNldExhc3RDaGFwdGVyUnVsZSA9IGZ1bmN0aW9uKHBhcmFtMCkge1xcbiAgICBpZiAoIXBhcmFtMCkgcmV0dXJuXFxuICAgIGlmIChwYXJhbTAuc3RhcnRzV2l0aChcXFwianM6XFxcIikgJiYgdGhpc1JVTEUucHJlUnVsZSkge1xcbiAgICAgICAgcGFyYW0wID0gJ2pzOlxcXFxudHJ5e2V2YWwoSlNPTi5wYXJzZShmZXRjaChcXFwiaGlrZXI6Ly9wYWdlL3ByZUZ1bmM/cnVsZT0nICsgUUlOR19USVRMRSArICdcXFwiKSkucnVsZSk7XFxcXFxcbiAgICAgICAgICAgIGV2YWwoYmFzZTY0RGVjb2RlKFxcXCInICsgYmFzZTY0RW5jb2RlKHRoaXNSVUxFLnByZVJ1bGUpICsgJ1xcXCIpKTtcXFxcXFxuICAgICAgICAgICAgbGV0IF9jZmcgPSBnZXRNeVZhcihcXFwiaW5pdENvbmZpZ1xcXCIsIFxcXCJ7fVxcXCIpO1xcXFxcXG4gICAgICAgICAgICBpZiAoX2NmZyAmJiBfY2ZnLmxlbmd0aD4wKSB7Y29uZmlnID0gSlNPTi5wYXJzZShfY2ZnKX19Y2F0Y2goZSl7bG9nKGUubWVzc2FnZSl9XFxcXG47JyArXFxuICAgICAgICAgICAgcGFyYW0wLnNsaWNlKDMpXFxuICAgIH1cXG4gICAgbWV0aG9kX3NldExhc3RDaGFwdGVyUnVsZS5pbnZva2UoamF2YUNvbnRleHQsIHBhcmFtMCk7XFxufVxcblwifSx7XCJjb2xfdHlwZVwiOlwibW92aWVfM1wiLFwibmFtZVwiOlwi6ZO+5o6l5aSE55CGXCIsXCJwYXRoXCI6XCJ1cmxQYXJzZVwiLFwicnVsZVwiOlwiLy8g6aaW6aG16ZO+5o6l5pu/5o2i5YiG57G7XFxuZnVuY3Rpb24gaW5kZXhVcmwocGFyYW0pIHtcXG4gICAgZnVuY3Rpb24gcnVuQ29kZShydWxlKSB7XFxuICAgICAgICB0cnkge1xcbiAgICAgICAgICAgIGxldCBbaW5wdXQsIGNvZGVdID0gcnVsZS5zcGxpdCgnLmpzOicpXFxuICAgICAgICAgICAgcmV0dXJuIGNvZGUgPyBldmFsKGNvZGUpIDogcnVsZVxcbiAgICAgICAgfSBjYXRjaCAoZSkgeyByZXR1cm4gcnVsZSB9XFxuICAgIH1cXG4gICAgbGV0IHsgUlVMRSwgcGFnZU51bSwgUUlOR19USVRMRSB9ID0gSlNPTi5wYXJzZShwYXJhbS5zcGxpdCgnIyMjJylbMV0pXFxuICAgIFJVTEUgPSBKU09OLnBhcnNlKGJhc2U2NERlY29kZShSVUxFKSlcXG4gICAgcGFnZU51bSA9IHBhcnNlSW50KHBhZ2VOdW0pXFxuICAgIGxldCB1cmwgPSBSVUxFLnVybFxcblxcbiAgICBldmFsKEpTT04ucGFyc2UoZmV0Y2goJ2hpa2VyOi8vcGFnZS9DbGFzc1RhYj9ydWxlPScgKyBRSU5HX1RJVExFKSkucnVsZSlcXG4gICAgdXJsID0gdGFiSGVhZGVyLnNldFVybChmeUFsbCA/IHVybC5yZXBsYWNlKC9meUFsbC9nLCAnJCR7ZnlBbGx9JykgOiB1cmwucmVwbGFjZSgvZnkoY2xhc3N8YXJlYXx5ZWFyfHNvcnQpL2csICckJHtmeSQxfScpKVxcbiAgICB1cmwgPSB1cmwucmVwbGFjZSgvZnlwYWdlKD86QCgtP1xcXFxkKylAKT8oPzpcXFxcKihcXFxcZCspQCk/L2csIChfLCBzdGFydCwgc3BhY2UpID0+IHBhcnNlSW50KHN0YXJ0IHx8IDApICsgMSArIChwYWdlTnVtIC0gMSkgKiBwYXJzZUludChzcGFjZSB8fCAxKSlcXG4gICAgdXJsID0gL14oW1xcXFxzXFxcXFNdKj8pKD86XFxcXFtmaXJzdFBhZ2U9KFtcXFxcc1xcXFxTXSo/KVxcXFxdKT8oPzooXFxcXC5qczpbXFxcXHNcXFxcU10qPykpPyQvLmV4ZWModXJsKVxcbiAgICBpZiAocGFnZU51bSA9PSAxICYmIHVybFsyXSkgdXJsWzFdID0gdXJsWzJdXFxuICAgIGlmICh1cmxbM10gJiYgIXVybFsxXS5pbmNsdWRlcygnLmpzOicpKSB1cmxbMV0gKz0gdXJsWzNdXFxuICAgIHJldHVybiBydW5Db2RlKHVybFsxXSlcXG59XFxuZnVuY3Rpb24gcGFyYW1IYW5kbGUodXJsUGFyYW0sIHVhLCB1cmxUbXApIHtcXG4gICAgbGV0IGNoYXJzZXQsIHBhcmFtVG1wXFxuICAgIHRyeSB7IC8vIOmTvuaOpeeahOe8lueggeOAgVVB5ZKMUmVmZXJlcuW6lOivpeaYr+mmluWFiOe7p+aJv+mmlumhtemTvuaOpVxcbiAgICAgICAgWywgLCBjaGFyc2V0LCBwYXJhbVRtcF0gPSB1cmxUbXAuc3BsaXQoJzsnKVxcbiAgICAgICAgcGFyYW1UbXAgPSBwYXJhbVRtcC5tYXRjaCgvXnsoLiopfSQvKVsxXS5zcGxpdCgnJiYnKVxcbiAgICB9IGNhdGNoIChlKSB7IHBhcmFtVG1wID0gW10gfVxcbiAgICBsZXQgVXNlckFnZW50ID0gcGFyYW1UbXAuZmluZCgodikgPT4gdi5zdGFydHNXaXRoKCdVc2VyLUFnZW50QCcpKSxcXG4gICAgICAgIFJlZmVyZXIgPSBwYXJhbVRtcC5maW5kKCh2KSA9PiB2LnN0YXJ0c1dpdGgoJ1JlZmVyZXJAJykpXFxuICAgIHVybFBhcmFtWzBdID0gdXJsUGFyYW1bMF0gfHwgJ0dFVCdcXG4gICAgdXJsUGFyYW1bMV0gPSB1cmxQYXJhbVsxXSB8fCBjaGFyc2V0IHx8ICdVVEYtOCdcXG4gICAgdHJ5IHtcXG4gICAgICAgIHVybFBhcmFtWzJdID0gdXJsUGFyYW1bMl0ubWF0Y2goL157KC4qKX0kLylbMV0uc3BsaXQoJyYmJylcXG4gICAgfSBjYXRjaCAoZSkgeyB1cmxQYXJhbVsyXSA9IFtdIH1cXG4gICAgLy8g5re75Yqg5YWo5bGAVUHlkozkuIrnuqdSZWZlcmVyXFxuICAgIGlmICghdXJsUGFyYW1bMl0uc29tZSgodikgPT4gdi5zdGFydHNXaXRoKCdVc2VyLUFnZW50QCcpKSkge1xcbiAgICAgICAgaWYgKFVzZXJBZ2VudCkgdXJsUGFyYW1bMl0ucHVzaChVc2VyQWdlbnQpXFxuICAgICAgICBlbHNlIGlmICh1YSA9PSAncGMnKVxcbiAgICAgICAgICAgIHVybFBhcmFtWzJdLnB1c2goJ1VzZXItQWdlbnRAJyArIFBDX1VBLnJlcGxhY2UoLzsvZywgJ++8m++8mycpLnJlcGxhY2UoL1xcXFw/LywgJ++8n++8nycpKVxcbiAgICAgICAgZWxzZSBpZiAodWEgPT0gJ21vYmlsZScpXFxuICAgICAgICAgICAgdXJsUGFyYW1bMl0ucHVzaCgnVXNlci1BZ2VudEAnICsgTU9CSUxFX1VBLnJlcGxhY2UoLzsvZywgJ++8m++8mycpLnJlcGxhY2UoL1xcXFw/LywgJ++8n++8nycpKVxcbiAgICB9XFxuICAgIGlmIChSZWZlcmVyICYmICF1cmxQYXJhbVsyXS5zb21lKCh2KSA9PiB2LnN0YXJ0c1dpdGgoJ1JlZmVyZXJAJykpKVxcbiAgICAgICAgdXJsUGFyYW1bMl0ucHVzaChSZWZlcmVyKVxcbiAgICB1cmxQYXJhbVsyXSA9ICd7JyArIHVybFBhcmFtWzJdLmpvaW4oJyYmJykgKyAnfSdcXG4gICAgcmV0dXJuIHVybFBhcmFtLmpvaW4oJzsnKVxcbn1cIn1dIiwiaWNvbiI6Imh0dHA6Ly9xMS5xbG9nby5jbi9nP2I9cXEmbms9MzY4MzU4OTEmcz02NDAiLCJwcm94eSI6IiJ9
Add Comment
Please, Sign In to add comment